Skip to content

Commit fd2e65b

Browse files
authored
api: export all browsers from every package (#3128)
This makes it easier to reason about our packages. The only difference is what each package downloads. When the browser is not downloaded, it will fail to launch. Each browser gets a 'download' attribute in the browser.json file.
1 parent c8c92c5 commit fd2e65b

36 files changed

+222
-482
lines changed

browsers.json

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,18 @@
33
"browsers": [
44
{
55
"name": "chromium",
6-
"revision": "791201"
6+
"revision": "791201",
7+
"download": true
78
},
89
{
910
"name": "firefox",
10-
"revision": "1140"
11+
"revision": "1140",
12+
"download": true
1113
},
1214
{
1315
"name": "webkit",
14-
"revision": "1317"
16+
"revision": "1317",
17+
"download": true
1518
}
1619
]
1720
}

packages/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
output

packages/build_package.js

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,6 @@ const PACKAGES = {
6464
},
6565
};
6666

67-
const cleanupPaths = [];
68-
6967
// 1. Parse CLI arguments
7068
const args = process.argv.slice(2);
7169
if (args.some(arg => arg === '--help')) {
@@ -81,10 +79,19 @@ if (args.some(arg => arg === '--help')) {
8179
process.exit(1);
8280
}
8381

82+
const packageName = args[0];
83+
const outputPath = path.resolve(args[1]);
84+
const packagePath = path.join(__dirname, 'output', packageName);
85+
const package = PACKAGES[packageName];
86+
if (!package) {
87+
console.log(`ERROR: unknown package ${packageName}`);
88+
process.exit(1);
89+
}
90+
8491
// 2. Setup cleanup if needed
8592
if (!args.some(arg => arg === '--no-cleanup')) {
8693
process.on('exit', () => {
87-
cleanupPaths.forEach(cleanupPath => rmSync(cleanupPath, {}));
94+
rmSync(packagePath, {});
8895
});
8996
process.on('SIGINT', () => process.exit(2));
9097
process.on('SIGHUP', () => process.exit(3));
@@ -99,19 +106,17 @@ if (!args.some(arg => arg === '--no-cleanup')) {
99106
});
100107
}
101108

102-
const packageName = args[0];
103-
const outputPath = path.resolve(args[1]);
104-
const packagePath = path.join(__dirname, packageName);
105-
const package = PACKAGES[packageName];
106-
if (!package) {
107-
console.log(`ERROR: unknown package ${packageName}`);
108-
process.exit(1);
109-
}
110-
111109
(async () => {
112110
// 3. Copy package files.
111+
rmSync(packagePath, {});
112+
fs.mkdirSync(packagePath, { recursive: true });
113+
await copyToPackage(path.join(__dirname, 'common') + path.sep, packagePath + path.sep);
114+
if (fs.existsSync(path.join(__dirname, packageName))) {
115+
// Copy package-specific files, these can overwrite common ones.
116+
await copyToPackage(path.join(__dirname, packageName) + path.sep, packagePath + path.sep);
117+
}
113118
for (const file of package.files)
114-
await copyToPackage(file);
119+
await copyToPackage(path.join(ROOT_PATH, file), path.join(packagePath, file));
115120

116121
// 4. Generate package.json
117122
const pwInternalJSON = require(path.join(ROOT_PATH, 'package.json'));
@@ -144,7 +149,8 @@ if (!package) {
144149

145150
// 5. Generate browsers.json
146151
const browsersJSON = require(path.join(ROOT_PATH, 'browsers.json'));
147-
browsersJSON.browsers = browsersJSON.browsers.filter(browser => package.browsers.includes(browser.name));
152+
for (const browser of browsersJSON.browsers)
153+
browser.download = package.browsers.includes(browser.name);
148154
await writeToPackage('browsers.json', JSON.stringify(browsersJSON, null, 2));
149155

150156
// 6. Run npm pack
@@ -163,15 +169,11 @@ if (!package) {
163169

164170
async function writeToPackage(fileName, content) {
165171
const toPath = path.join(packagePath, fileName);
166-
cleanupPaths.push(toPath);
167172
console.error(`- generating: //${path.relative(ROOT_PATH, toPath)}`);
168173
await writeFileAsync(toPath, content);
169174
}
170175

171-
async function copyToPackage(fileOrDirectoryName) {
172-
const fromPath = path.join(ROOT_PATH, fileOrDirectoryName);
173-
const toPath = path.join(packagePath, fileOrDirectoryName);
174-
cleanupPaths.push(toPath);
176+
async function copyToPackage(fromPath, toPath) {
175177
console.error(`- copying: //${path.relative(ROOT_PATH, fromPath)} -> //${path.relative(ROOT_PATH, toPath)}`);
176178
await cpAsync(fromPath, toPath);
177179
}

packages/playwright-core/index.d.ts renamed to packages/common/index.d.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@
1717
import * as types from './types/types';
1818

1919
export * from './types/types';
20-
export const webkit: types.BrowserType<types.WebKitBrowser>;
2120
export const chromium: types.BrowserType<types.ChromiumBrowser>;
2221
export const firefox: types.BrowserType<types.FirefoxBrowser>;
22+
export const webkit: types.BrowserType<types.WebKitBrowser>;
File renamed without changes.
File renamed without changes.
File renamed without changes.

packages/installation-tests/esm-playwright-chromium.mjs

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,9 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { chromium, selectors, devices, errors } from 'playwright-chromium';
17+
import { chromium, firefox, webkit, selectors, devices, errors } from 'playwright-chromium';
1818
import playwright from 'playwright-chromium';
1919
import errorsFile from 'playwright-chromium/lib/errors.js';
2020

21-
if (playwright.chromium !== chromium)
22-
process.exit(1);
23-
24-
if (playwright.errors !== errors)
25-
process.exit(1);
26-
if (errors.TimeoutError !== errorsFile.TimeoutError)
27-
process.exit(1);
28-
29-
(async () => {
30-
for (const browserType of [chromium]) {
31-
const browser = await browserType.launch();
32-
const context = await browser.newContext();
33-
const page = await context.newPage();
34-
await page.evaluate(() => navigator.userAgent);
35-
await browser.close();
36-
}
37-
console.log(`esm SUCCESS`);
38-
})().catch(err => {
39-
console.error(err);
40-
process.exit(1);
41-
});
21+
import testESM from './esm.mjs';
22+
testESM({ chromium, firefox, webkit, selectors, devices, errors, playwright, errorsFile }, [chromium]);

packages/installation-tests/esm-playwright-firefox.mjs

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,9 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { firefox, selectors, devices, errors } from 'playwright-firefox';
17+
import { chromium, firefox, webkit, selectors, devices, errors } from 'playwright-firefox';
1818
import playwright from 'playwright-firefox';
1919
import errorsFile from 'playwright-firefox/lib/errors.js';
2020

21-
if (playwright.firefox !== firefox)
22-
process.exit(1);
23-
24-
if (playwright.errors !== errors)
25-
process.exit(1);
26-
if (errors.TimeoutError !== errorsFile.TimeoutError)
27-
process.exit(1);
28-
29-
(async () => {
30-
for (const browserType of [firefox]) {
31-
const browser = await browserType.launch();
32-
const context = await browser.newContext();
33-
const page = await context.newPage();
34-
await page.evaluate(() => navigator.userAgent);
35-
await browser.close();
36-
}
37-
console.log(`esm SUCCESS`);
38-
})().catch(err => {
39-
console.error(err);
40-
process.exit(1);
41-
});
21+
import testESM from './esm.mjs';
22+
testESM({ chromium, firefox, webkit, selectors, devices, errors, playwright, errorsFile }, [firefox]);

packages/installation-tests/esm-playwright-webkit.mjs

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -14,28 +14,9 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { webkit, selectors, devices, errors } from 'playwright-webkit';
17+
import { chromium, firefox, webkit, selectors, devices, errors } from 'playwright-webkit';
1818
import playwright from 'playwright-webkit';
1919
import errorsFile from 'playwright-webkit/lib/errors.js';
2020

21-
if (playwright.webkit !== webkit)
22-
process.exit(1);
23-
24-
if (playwright.errors !== errors)
25-
process.exit(1);
26-
if (errors.TimeoutError !== errorsFile.TimeoutError)
27-
process.exit(1);
28-
29-
(async () => {
30-
for (const browserType of [webkit]) {
31-
const browser = await browserType.launch();
32-
const context = await browser.newContext();
33-
const page = await context.newPage();
34-
await page.evaluate(() => navigator.userAgent);
35-
await browser.close();
36-
}
37-
console.log(`esm SUCCESS`);
38-
})().catch(err => {
39-
console.error(err);
40-
process.exit(1);
41-
});
21+
import testESM from './esm.mjs';
22+
testESM({ chromium, firefox, webkit, selectors, devices, errors, playwright, errorsFile }, [webkit]);

0 commit comments

Comments
 (0)