-
Notifications
You must be signed in to change notification settings - Fork 9k
/
getConfiguration.ts
108 lines (96 loc) · 3.82 KB
/
getConfiguration.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
import {cosmiconfigSync} from 'cosmiconfig';
import {homedir} from 'os';
import {join} from 'path';
import {Configuration, Product} from 'puppeteer-core';
/**
* @internal
*/
function isSupportedProduct(product: unknown): product is Product {
switch (product) {
case 'chrome':
case 'firefox':
return true;
default:
return false;
}
}
/**
* @internal
*/
export const getConfiguration = (): Configuration => {
const result = cosmiconfigSync('puppeteer').search();
const configuration: Configuration = result ? result.config : {};
// Merging environment variables.
configuration.defaultProduct = (process.env['PUPPETEER_PRODUCT'] ??
process.env['npm_config_puppeteer_product'] ??
process.env['npm_package_config_puppeteer_product'] ??
configuration.defaultProduct ??
'chrome') as Product;
configuration.executablePath =
process.env['PUPPETEER_EXECUTABLE_PATH'] ??
process.env['npm_config_puppeteer_executable_path'] ??
process.env['npm_package_config_puppeteer_executable_path'] ??
configuration.executablePath;
// Default to skipDownload if executablePath is set
if (configuration.executablePath) {
configuration.skipDownload = true;
}
// Set skipDownload explicitly or from default
configuration.skipDownload = Boolean(
process.env['PUPPETEER_SKIP_DOWNLOAD'] ??
process.env['npm_config_puppeteer_skip_download'] ??
process.env['npm_package_config_puppeteer_skip_download'] ??
process.env['PUPPETEER_SKIP_CHROMIUM_DOWNLOAD'] ??
process.env['npm_config_puppeteer_skip_chromium_download'] ??
process.env['npm_package_config_puppeteer_skip_chromium_download'] ??
configuration.skipDownload
);
// Prepare variables used in browser downloading
if (!configuration.skipDownload) {
configuration.browserRevision =
process.env['PUPPETEER_CHROMIUM_REVISION'] ??
process.env['PUPPETEER_BROWSER_REVISION'] ??
process.env['npm_config_puppeteer_browser_revision'] ??
process.env['npm_package_config_puppeteer_browser_revision'] ??
configuration.browserRevision;
configuration.downloadHost =
process.env['PUPPETEER_DOWNLOAD_HOST'] ??
process.env['npm_config_puppeteer_download_host'] ??
process.env['npm_package_config_puppeteer_download_host'] ??
configuration.downloadHost;
configuration.downloadPath =
process.env['PUPPETEER_DOWNLOAD_PATH'] ??
process.env['npm_config_puppeteer_download_path'] ??
process.env['npm_package_config_puppeteer_download_path'] ??
configuration.downloadPath;
}
configuration.cacheDirectory =
process.env['PUPPETEER_CACHE_DIR'] ??
process.env['npm_config_puppeteer_cache_dir'] ??
process.env['npm_package_config_puppeteer_cache_dir'] ??
configuration.cacheDirectory ??
join(homedir(), '.cache', 'puppeteer');
configuration.temporaryDirectory =
process.env['PUPPETEER_TMP_DIR'] ??
process.env['npm_config_puppeteer_tmp_dir'] ??
process.env['npm_package_config_puppeteer_tmp_dir'] ??
configuration.temporaryDirectory;
configuration.experiments ??= {};
configuration.experiments.macArmChromiumEnabled = Boolean(
process.env['PUPPETEER_EXPERIMENTAL_CHROMIUM_MAC_ARM'] ??
process.env['npm_config_puppeteer_experimental_chromium_mac_arm'] ??
process.env[
'npm_package_config_puppeteer_experimental_chromium_mac_arm'
] ??
configuration.experiments.macArmChromiumEnabled
);
configuration.logLevel = (process.env['PUPPETEER_LOGLEVEL'] ??
process.env['npm_config_LOGLEVEL'] ??
process.env['npm_package_config_LOGLEVEL'] ??
configuration.logLevel) as 'silent' | 'error' | 'warn';
// Validate configuration.
if (!isSupportedProduct(configuration.defaultProduct)) {
throw new Error(`Unsupported product ${configuration.defaultProduct}`);
}
return configuration;
};