chore(agnostification): common/helper.ts (#6515)

* chore(agnostification): common/helper.ts

The `readProtocolStream` method uses `fs` only if you want to write to a
file. So we gate at the start of the function and ensure that if we got
given a path we are not in a Node environment.
This commit is contained in:
Jack Franklin 2020-10-19 09:57:15 +01:00 committed by GitHub
parent 637a1f7409
commit c2c2bb7e55
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 16 additions and 5 deletions

View File

@ -59,6 +59,8 @@ jobs:
- node_js: "12.16.3" - node_js: "12.16.3"
name: 'Browser tests: Linux/Chromium' name: 'Browser tests: Linux/Chromium'
addons:
chrome: stable
env: env:
- CHROMIUM=true - CHROMIUM=true
script: script:

View File

@ -74,7 +74,7 @@
"@types/ws": "^7.2.4", "@types/ws": "^7.2.4",
"@typescript-eslint/eslint-plugin": "^4.4.0", "@typescript-eslint/eslint-plugin": "^4.4.0",
"@typescript-eslint/parser": "^4.4.0", "@typescript-eslint/parser": "^4.4.0",
"@web/test-runner": "^0.8.4", "@web/test-runner": "^0.9.2",
"commonmark": "^0.28.1", "commonmark": "^0.28.1",
"cross-env": "^7.0.2", "cross-env": "^7.0.2",
"dependency-cruiser": "^9.7.0", "dependency-cruiser": "^9.7.0",

View File

@ -15,11 +15,11 @@
*/ */
import { TimeoutError } from './Errors.js'; import { TimeoutError } from './Errors.js';
import { debug } from './Debug.js'; import { debug } from './Debug.js';
import * as fs from 'fs';
import { CDPSession } from './Connection.js'; import { CDPSession } from './Connection.js';
import { Protocol } from 'devtools-protocol'; import { Protocol } from 'devtools-protocol';
import { CommonEventEmitter } from './EventEmitter.js'; import { CommonEventEmitter } from './EventEmitter.js';
import { assert } from './assert.js'; import { assert } from './assert.js';
import { isNode } from '../environment.js';
export const debugError = debug('puppeteer:error'); export const debugError = debug('puppeteer:error');
@ -309,9 +309,16 @@ async function readProtocolStream(
handle: string, handle: string,
path?: string path?: string
): Promise<Buffer> { ): Promise<Buffer> {
if (!isNode && path) {
throw new Error('Cannot write to a path outside of Node.js environment.');
}
const fs = isNode ? await import('fs') : null;
let eof = false; let eof = false;
let fileHandle: fs.promises.FileHandle; let fileHandle: import('fs').promises.FileHandle;
if (path) {
if (path && fs) {
fileHandle = await fs.promises.open(path, 'w'); fileHandle = await fs.promises.open(path, 'w');
} }
const bufs = []; const bufs = [];
@ -323,7 +330,9 @@ async function readProtocolStream(
response.base64Encoded ? 'base64' : undefined response.base64Encoded ? 'base64' : undefined
); );
bufs.push(buf); bufs.push(buf);
if (path) await fs.promises.writeFile(fileHandle, buf); if (path && fs) {
await fs.promises.writeFile(fileHandle, buf);
}
} }
if (path) await fileHandle.close(); if (path) await fileHandle.close();
await client.send('IO.close', { handle }); await client.send('IO.close', { handle });