@depup/puppeteer 24.40.0-depup.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.
Files changed (44) hide show
  1. package/README.md +33 -0
  2. package/changes.json +18 -0
  3. package/install.mjs +43 -0
  4. package/lib/cjs/puppeteer/getConfiguration.d.ts +11 -0
  5. package/lib/cjs/puppeteer/getConfiguration.d.ts.map +1 -0
  6. package/lib/cjs/puppeteer/getConfiguration.js +126 -0
  7. package/lib/cjs/puppeteer/getConfiguration.js.map +1 -0
  8. package/lib/cjs/puppeteer/node/cli.d.ts +8 -0
  9. package/lib/cjs/puppeteer/node/cli.d.ts.map +1 -0
  10. package/lib/cjs/puppeteer/node/cli.js +51 -0
  11. package/lib/cjs/puppeteer/node/cli.js.map +1 -0
  12. package/lib/cjs/puppeteer/node/install.d.ts +10 -0
  13. package/lib/cjs/puppeteer/node/install.d.ts.map +1 -0
  14. package/lib/cjs/puppeteer/node/install.js +122 -0
  15. package/lib/cjs/puppeteer/node/install.js.map +1 -0
  16. package/lib/cjs/puppeteer/puppeteer.d.ts +38 -0
  17. package/lib/cjs/puppeteer/puppeteer.d.ts.map +1 -0
  18. package/lib/cjs/puppeteer/puppeteer.js +56 -0
  19. package/lib/cjs/puppeteer/puppeteer.js.map +1 -0
  20. package/lib/esm/package.json +1 -0
  21. package/lib/esm/puppeteer/getConfiguration.d.ts +11 -0
  22. package/lib/esm/puppeteer/getConfiguration.d.ts.map +1 -0
  23. package/lib/esm/puppeteer/getConfiguration.js +122 -0
  24. package/lib/esm/puppeteer/getConfiguration.js.map +1 -0
  25. package/lib/esm/puppeteer/node/cli.d.ts +8 -0
  26. package/lib/esm/puppeteer/node/cli.d.ts.map +1 -0
  27. package/lib/esm/puppeteer/node/cli.js +46 -0
  28. package/lib/esm/puppeteer/node/cli.js.map +1 -0
  29. package/lib/esm/puppeteer/node/install.d.ts +10 -0
  30. package/lib/esm/puppeteer/node/install.d.ts.map +1 -0
  31. package/lib/esm/puppeteer/node/install.js +119 -0
  32. package/lib/esm/puppeteer/node/install.js.map +1 -0
  33. package/lib/esm/puppeteer/puppeteer.d.ts +38 -0
  34. package/lib/esm/puppeteer/puppeteer.d.ts.map +1 -0
  35. package/lib/esm/puppeteer/puppeteer.js +40 -0
  36. package/lib/esm/puppeteer/puppeteer.js.map +1 -0
  37. package/lib/types.d.ts +80 -0
  38. package/package.json +171 -0
  39. package/src/getConfiguration.ts +166 -0
  40. package/src/node/cli.ts +61 -0
  41. package/src/node/install.ts +167 -0
  42. package/src/puppeteer.ts +47 -0
  43. package/src/tsconfig.cjs.json +8 -0
  44. package/src/tsconfig.esm.json +6 -0
@@ -0,0 +1,166 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2023 Google Inc.
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import {homedir} from 'node:os';
8
+ import {join} from 'node:path';
9
+
10
+ import {cosmiconfigSync} from 'cosmiconfig';
11
+ import type {
12
+ ChromeHeadlessShellSettings,
13
+ ChromeSettings,
14
+ Configuration,
15
+ FirefoxSettings,
16
+ SupportedBrowser,
17
+ } from 'puppeteer-core';
18
+
19
+ function getBooleanEnvVar(name: string): boolean | undefined {
20
+ const env = process.env[name];
21
+ if (env === undefined) {
22
+ return;
23
+ }
24
+ switch (env.toLowerCase()) {
25
+ case '':
26
+ case '0':
27
+ case 'false':
28
+ case 'off':
29
+ return false;
30
+ default:
31
+ return true;
32
+ }
33
+ }
34
+
35
+ /**
36
+ * @internal
37
+ */
38
+ function isSupportedBrowser(product: unknown): product is SupportedBrowser {
39
+ switch (product) {
40
+ case 'chrome':
41
+ case 'firefox':
42
+ return true;
43
+ default:
44
+ return false;
45
+ }
46
+ }
47
+
48
+ /**
49
+ * @internal
50
+ */
51
+ function getDefaultBrowser(browser: unknown): SupportedBrowser {
52
+ // Validate configuration.
53
+ if (browser && !isSupportedBrowser(browser)) {
54
+ throw new Error(`Unsupported browser ${browser}`);
55
+ }
56
+ switch (browser) {
57
+ case 'firefox':
58
+ return 'firefox';
59
+ default:
60
+ return 'chrome';
61
+ }
62
+ }
63
+
64
+ /**
65
+ * @internal
66
+ */
67
+ function getLogLevel(logLevel: unknown): 'silent' | 'error' | 'warn' {
68
+ switch (logLevel) {
69
+ case 'silent':
70
+ return 'silent';
71
+ case 'error':
72
+ return 'error';
73
+ default:
74
+ return 'warn';
75
+ }
76
+ }
77
+
78
+ function getBrowserSetting(
79
+ browser: 'chrome' | 'chrome-headless-shell' | 'firefox',
80
+ configuration: Configuration,
81
+ defaultConfig:
82
+ | ChromeSettings
83
+ | ChromeHeadlessShellSettings
84
+ | FirefoxSettings = {},
85
+ ): ChromeSettings | ChromeHeadlessShellSettings | FirefoxSettings {
86
+ if (configuration.skipDownload) {
87
+ return {
88
+ skipDownload: true,
89
+ };
90
+ }
91
+ const browserSetting:
92
+ | ChromeSettings
93
+ | ChromeHeadlessShellSettings
94
+ | FirefoxSettings = {};
95
+ const browserEnvName = browser.replaceAll('-', '_').toUpperCase();
96
+
97
+ browserSetting.version =
98
+ process.env[`PUPPETEER_${browserEnvName}_VERSION`] ??
99
+ configuration[browser]?.version ??
100
+ defaultConfig.version;
101
+ browserSetting.downloadBaseUrl =
102
+ process.env[`PUPPETEER_${browserEnvName}_DOWNLOAD_BASE_URL`] ??
103
+ configuration[browser]?.downloadBaseUrl ??
104
+ defaultConfig.downloadBaseUrl;
105
+
106
+ browserSetting.skipDownload =
107
+ getBooleanEnvVar(`PUPPETEER_${browserEnvName}_SKIP_DOWNLOAD`) ??
108
+ getBooleanEnvVar(`PUPPETEER_SKIP_${browserEnvName}_DOWNLOAD`) ??
109
+ configuration[browser]?.skipDownload ??
110
+ defaultConfig.skipDownload;
111
+
112
+ return browserSetting;
113
+ }
114
+
115
+ /**
116
+ * @internal
117
+ */
118
+ export const getConfiguration = (): Configuration => {
119
+ const result = cosmiconfigSync('puppeteer', {
120
+ searchStrategy: 'global',
121
+ }).search();
122
+ const configuration: Configuration = result ? {...result.config} : {};
123
+
124
+ configuration.logLevel = getLogLevel(
125
+ process.env['PUPPETEER_LOGLEVEL'] ?? configuration.logLevel,
126
+ );
127
+
128
+ // Merging environment variables.
129
+ configuration.defaultBrowser = getDefaultBrowser(
130
+ process.env['PUPPETEER_BROWSER'] ?? configuration.defaultBrowser,
131
+ );
132
+
133
+ configuration.executablePath =
134
+ process.env['PUPPETEER_EXECUTABLE_PATH'] ?? configuration.executablePath;
135
+
136
+ // Default to skipDownload if executablePath is set
137
+ if (configuration.executablePath) {
138
+ configuration.skipDownload = true;
139
+ }
140
+
141
+ // Set skipDownload explicitly or from default
142
+ configuration.skipDownload =
143
+ getBooleanEnvVar('PUPPETEER_SKIP_DOWNLOAD') ?? configuration.skipDownload;
144
+
145
+ // Prepare variables used in browser downloading
146
+ configuration.chrome = getBrowserSetting('chrome', configuration);
147
+ configuration['chrome-headless-shell'] = getBrowserSetting(
148
+ 'chrome-headless-shell',
149
+ configuration,
150
+ );
151
+ configuration.firefox = getBrowserSetting('firefox', configuration, {
152
+ skipDownload: true,
153
+ });
154
+
155
+ configuration.cacheDirectory =
156
+ process.env['PUPPETEER_CACHE_DIR'] ??
157
+ configuration.cacheDirectory ??
158
+ join(homedir(), '.cache', 'puppeteer');
159
+
160
+ configuration.temporaryDirectory =
161
+ process.env['PUPPETEER_TMP_DIR'] ?? configuration.temporaryDirectory;
162
+
163
+ configuration.experiments ??= {};
164
+
165
+ return configuration;
166
+ };
@@ -0,0 +1,61 @@
1
+ #!/usr/bin/env node
2
+
3
+ /**
4
+ * @license
5
+ * Copyright 2023 Google Inc.
6
+ * SPDX-License-Identifier: Apache-2.0
7
+ */
8
+
9
+ import {CLI, Browser} from '@puppeteer/browsers';
10
+ import type {PuppeteerNode} from 'puppeteer-core/internal/node/PuppeteerNode.js';
11
+ import {PUPPETEER_REVISIONS} from 'puppeteer-core/internal/revisions.js';
12
+ import {packageVersion} from 'puppeteer-core/internal/util/version.js';
13
+
14
+ import puppeteer from '../puppeteer.js';
15
+
16
+ const cacheDir = (puppeteer as unknown as PuppeteerNode).configuration
17
+ .cacheDirectory!;
18
+
19
+ void new CLI({
20
+ cachePath: cacheDir,
21
+ scriptName: 'puppeteer',
22
+ version: packageVersion,
23
+ prefixCommand: {
24
+ cmd: 'browsers',
25
+ description: 'Manage browsers of this Puppeteer installation',
26
+ },
27
+ allowCachePathOverride: false,
28
+ pinnedBrowsers: {
29
+ [Browser.CHROME]: {
30
+ buildId:
31
+ (puppeteer as unknown as PuppeteerNode).configuration.chrome?.version ||
32
+ PUPPETEER_REVISIONS['chrome'] ||
33
+ 'latest',
34
+ skipDownload:
35
+ (puppeteer as unknown as PuppeteerNode).configuration.chrome
36
+ ?.skipDownload ?? false,
37
+ },
38
+ [Browser.FIREFOX]: {
39
+ buildId:
40
+ (puppeteer as unknown as PuppeteerNode).configuration.firefox
41
+ ?.version ||
42
+ PUPPETEER_REVISIONS['firefox'] ||
43
+ 'latest',
44
+ skipDownload:
45
+ (puppeteer as unknown as PuppeteerNode).configuration.firefox
46
+ ?.skipDownload ?? true,
47
+ },
48
+ [Browser.CHROMEHEADLESSSHELL]: {
49
+ buildId:
50
+ (puppeteer as unknown as PuppeteerNode).configuration[
51
+ 'chrome-headless-shell'
52
+ ]?.version ||
53
+ PUPPETEER_REVISIONS['chrome-headless-shell'] ||
54
+ 'latest',
55
+ skipDownload:
56
+ (puppeteer as unknown as PuppeteerNode).configuration[
57
+ 'chrome-headless-shell'
58
+ ]?.skipDownload ?? false,
59
+ },
60
+ },
61
+ }).run(process.argv);
@@ -0,0 +1,167 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2020 Google Inc.
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import type {BrowserPlatform} from '@puppeteer/browsers';
8
+ import {
9
+ install,
10
+ Browser,
11
+ resolveBuildId,
12
+ detectBrowserPlatform,
13
+ } from '@puppeteer/browsers';
14
+ import type {
15
+ ChromeHeadlessShellSettings,
16
+ ChromeSettings,
17
+ FirefoxSettings,
18
+ } from 'puppeteer-core';
19
+ import {PUPPETEER_REVISIONS} from 'puppeteer-core/internal/revisions.js';
20
+
21
+ import {getConfiguration} from '../getConfiguration.js';
22
+
23
+ async function downloadBrowser({
24
+ browser,
25
+ configuration,
26
+ cacheDir,
27
+ platform,
28
+ }: {
29
+ browser: Extract<
30
+ Browser,
31
+ Browser.CHROME | Browser.CHROMEHEADLESSSHELL | Browser.FIREFOX
32
+ >;
33
+ configuration: ChromeSettings | ChromeHeadlessShellSettings | FirefoxSettings;
34
+ platform: BrowserPlatform;
35
+ cacheDir: string;
36
+ }) {
37
+ const unresolvedBuildId =
38
+ configuration?.version || PUPPETEER_REVISIONS[browser] || 'latest';
39
+ const baseUrl = configuration?.downloadBaseUrl;
40
+ const buildId = await resolveBuildId(browser, platform, unresolvedBuildId);
41
+
42
+ try {
43
+ const result = await install({
44
+ browser,
45
+ cacheDir,
46
+ platform,
47
+ buildId,
48
+ downloadProgressCallback: 'default',
49
+ baseUrl,
50
+ buildIdAlias:
51
+ buildId !== unresolvedBuildId ? unresolvedBuildId : undefined,
52
+ });
53
+ logPolitely(`${browser} (${result.buildId}) downloaded to ${result.path}`);
54
+ } catch (error) {
55
+ throw new Error(
56
+ `ERROR: Failed to set up ${browser} v${buildId}! Set "PUPPETEER_SKIP_DOWNLOAD" env variable to skip download.`,
57
+ {
58
+ cause: error,
59
+ },
60
+ );
61
+ }
62
+ }
63
+
64
+ /**
65
+ * @internal
66
+ */
67
+ export async function downloadBrowsers(): Promise<void> {
68
+ overrideProxy();
69
+
70
+ const configuration = getConfiguration();
71
+ if (configuration.skipDownload) {
72
+ logPolitely('**INFO** Skipping downloading browsers as instructed.');
73
+ return;
74
+ }
75
+
76
+ const platform = detectBrowserPlatform();
77
+ if (!platform) {
78
+ throw new Error('The current platform is not supported.');
79
+ }
80
+ const cacheDir = configuration.cacheDirectory!;
81
+
82
+ const installationJobs = [];
83
+ if (configuration.chrome?.skipDownload) {
84
+ logPolitely('**INFO** Skipping Chrome download as instructed.');
85
+ } else {
86
+ const browser = Browser.CHROME;
87
+ installationJobs.push(
88
+ downloadBrowser({
89
+ browser,
90
+ configuration: configuration[browser] ?? {},
91
+ cacheDir,
92
+ platform,
93
+ }),
94
+ );
95
+ }
96
+
97
+ if (configuration['chrome-headless-shell']?.skipDownload) {
98
+ logPolitely('**INFO** Skipping Chrome download as instructed.');
99
+ } else {
100
+ const browser = Browser.CHROMEHEADLESSSHELL;
101
+
102
+ installationJobs.push(
103
+ downloadBrowser({
104
+ browser,
105
+ configuration: configuration[browser] ?? {},
106
+ cacheDir,
107
+ platform,
108
+ }),
109
+ );
110
+ }
111
+
112
+ if (configuration.firefox?.skipDownload) {
113
+ logPolitely('**INFO** Skipping Firefox download as instructed.');
114
+ } else {
115
+ const browser = Browser.FIREFOX;
116
+
117
+ installationJobs.push(
118
+ downloadBrowser({
119
+ browser,
120
+ configuration: configuration[browser] ?? {},
121
+ cacheDir,
122
+ platform,
123
+ }),
124
+ );
125
+ }
126
+
127
+ try {
128
+ await Promise.all(installationJobs);
129
+ } catch (error) {
130
+ console.error(error);
131
+ process.exit(1);
132
+ }
133
+ }
134
+
135
+ /**
136
+ * @internal
137
+ */
138
+ function logPolitely(toBeLogged: unknown): void {
139
+ const logLevel = process.env['npm_config_loglevel'] || '';
140
+ const logLevelDisplay = ['silent', 'error', 'warn'].indexOf(logLevel) > -1;
141
+
142
+ if (!logLevelDisplay) {
143
+ console.log(toBeLogged);
144
+ }
145
+ }
146
+
147
+ /**
148
+ * @internal
149
+ */
150
+ function overrideProxy() {
151
+ // Override current environment proxy settings with npm configuration, if any.
152
+ const NPM_HTTPS_PROXY =
153
+ process.env['npm_config_https_proxy'] || process.env['npm_config_proxy'];
154
+ const NPM_HTTP_PROXY =
155
+ process.env['npm_config_http_proxy'] || process.env['npm_config_proxy'];
156
+ const NPM_NO_PROXY = process.env['npm_config_no_proxy'];
157
+
158
+ if (NPM_HTTPS_PROXY) {
159
+ process.env['HTTPS_PROXY'] = NPM_HTTPS_PROXY;
160
+ }
161
+ if (NPM_HTTP_PROXY) {
162
+ process.env['HTTP_PROXY'] = NPM_HTTP_PROXY;
163
+ }
164
+ if (NPM_NO_PROXY) {
165
+ process.env['NO_PROXY'] = NPM_NO_PROXY;
166
+ }
167
+ }
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2017 Google Inc.
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ export * from 'puppeteer-core';
8
+
9
+ import {PuppeteerNode} from 'puppeteer-core';
10
+
11
+ import {getConfiguration} from './getConfiguration.js';
12
+
13
+ const configuration = getConfiguration();
14
+
15
+ /**
16
+ * @public
17
+ */
18
+ // @ts-expect-error using internal API.
19
+ const puppeteer = new PuppeteerNode({
20
+ isPuppeteerCore: false,
21
+ configuration,
22
+ });
23
+
24
+ export const {
25
+ /**
26
+ * @public
27
+ */
28
+ connect,
29
+ /**
30
+ * @public
31
+ */
32
+ defaultArgs,
33
+ /**
34
+ * @public
35
+ */
36
+ executablePath,
37
+ /**
38
+ * @public
39
+ */
40
+ launch,
41
+ /**
42
+ * @public
43
+ */
44
+ trimCache,
45
+ } = puppeteer;
46
+
47
+ export default puppeteer;
@@ -0,0 +1,8 @@
1
+ {
2
+ "extends": "../../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "module": "NodeNext",
5
+ "moduleResolution": "NodeNext",
6
+ "outDir": "../lib/cjs/puppeteer"
7
+ }
8
+ }
@@ -0,0 +1,6 @@
1
+ {
2
+ "extends": "../../../tsconfig.base.json",
3
+ "compilerOptions": {
4
+ "outDir": "../lib/esm/puppeteer"
5
+ }
6
+ }