Skip to content

Commit

Permalink
chore(agnostification): create web for web only code
Browse files Browse the repository at this point in the history
This change makes a `web` folder to house any code that is just for the
browser and won't work in a Node environment.

We have three folders now to divide code up nicely:

- `node`
- `web`
- `common`.
  • Loading branch information
jackfranklin committed Oct 19, 2020
1 parent f63a123 commit 1c3a977
Show file tree
Hide file tree
Showing 6 changed files with 18 additions and 27 deletions.
5 changes: 2 additions & 3 deletions src/common/BrowserConnector.ts
Expand Up @@ -35,9 +35,8 @@ export interface BrowserOptions {

const getWebSocketTransportClass = async () => {
return isNode
? (await import('../node/NodeWebSocketTransport.js')).NodeWebSocketTransport
: (await import('./BrowserWebSocketTransport.js'))
.BrowserWebSocketTransport;
? (await import('../node/WebSocketTransport.js')).WebSocketTransport
: (await import('../web/WebSocketTransport.js')).WebSocketTransport;
};

/**
Expand Down
4 changes: 2 additions & 2 deletions src/common/ConnectionTransport.ts
Expand Up @@ -15,8 +15,8 @@
*/

export interface ConnectionTransport {
send(string);
close();
send(string): void;
close(): void;
onmessage?: (message: string) => void;
onclose?: () => void;
}
2 changes: 1 addition & 1 deletion src/node/BrowserRunner.ts
Expand Up @@ -22,7 +22,7 @@ import { assert } from '../common/assert.js';
import { helper, debugError } from '../common/helper.js';
import { LaunchOptions } from './LaunchOptions.js';
import { Connection } from '../common/Connection.js';
import { NodeWebSocketTransport as WebSocketTransport } from '../node/NodeWebSocketTransport.js';
import { WebSocketTransport } from './WebSocketTransport.js';
import { PipeTransport } from './PipeTransport.js';
import * as readline from 'readline';
import { TimeoutError } from '../common/Errors.js';
Expand Down
Expand Up @@ -16,24 +16,22 @@
import { ConnectionTransport } from '../common/ConnectionTransport.js';
import NodeWebSocket from 'ws';

export class NodeWebSocketTransport implements ConnectionTransport {
static create(url: string): Promise<NodeWebSocketTransport> {
export class WebSocketTransport implements ConnectionTransport {
static create(url: string): Promise<WebSocketTransport> {
return new Promise((resolve, reject) => {
const ws = new NodeWebSocket(url, [], {
perMessageDeflate: false,
maxPayload: 256 * 1024 * 1024, // 256Mb
});

ws.addEventListener('open', () =>
resolve(new NodeWebSocketTransport(ws))
);
ws.addEventListener('open', () => resolve(new WebSocketTransport(ws)));
ws.addEventListener('error', reject);
});
}

private _ws: NodeWebSocket;
onmessage?: (message: string) => void;
onclose?: () => void;
onmessage?: (message: string) => void = null;
onclose?: () => void = null;

constructor(ws: NodeWebSocket) {
this._ws = ws;
Expand All @@ -45,8 +43,6 @@ export class NodeWebSocketTransport implements ConnectionTransport {
});
// Silently ignore all errors - we don't know what to do with them.
this._ws.addEventListener('error', () => {});
this.onmessage = null;
this.onclose = null;
}

send(message: string): void {
Expand Down
Expand Up @@ -13,23 +13,21 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { ConnectionTransport } from './ConnectionTransport.js';
import { ConnectionTransport } from '../common/ConnectionTransport.js';

export class BrowserWebSocketTransport implements ConnectionTransport {
static create(url: string): Promise<BrowserWebSocketTransport> {
export class WebSocketTransport implements ConnectionTransport {
static create(url: string): Promise<WebSocketTransport> {
return new Promise((resolve, reject) => {
const ws = new WebSocket(url);

ws.addEventListener('open', () =>
resolve(new BrowserWebSocketTransport(ws))
);
ws.addEventListener('open', () => resolve(new WebSocketTransport(ws)));
ws.addEventListener('error', reject);
});
}

private _ws: WebSocket;
onmessage?: (message: string) => void;
onclose?: () => void;
onmessage?: (message: string) => void = null;
onclose?: () => void = null;

constructor(ws: WebSocket) {
this._ws = ws;
Expand All @@ -41,8 +39,6 @@ export class BrowserWebSocketTransport implements ConnectionTransport {
});
// Silently ignore all errors - we don't know what to do with them.
this._ws.addEventListener('error', () => {});
this.onmessage = null;
this.onclose = null;
}

send(message: string): void {
Expand Down
4 changes: 2 additions & 2 deletions test-browser/connection.spec.js
Expand Up @@ -14,15 +14,15 @@
* limitations under the License.
*/
import { Connection } from '../lib/esm/puppeteer/common/Connection.js';
import { BrowserWebSocketTransport } from '../lib/esm/puppeteer/common/BrowserWebSocketTransport.js';
import { WebSocketTransport } from '../lib/esm/puppeteer/web/WebSocketTransport.js';
import puppeteer from '../lib/esm/puppeteer/web.js';
import expect from '../node_modules/expect/build-es5/index.js';
import { getWebSocketEndpoint } from './helper.js';

describe('creating a Connection', () => {
it('can create a real connection to the backend and send messages', async () => {
const wsUrl = getWebSocketEndpoint();
const transport = await BrowserWebSocketTransport.create(wsUrl);
const transport = await WebSocketTransport.create(wsUrl);

const connection = new Connection(wsUrl, transport);
const result = await connection.send('Browser.getVersion');
Expand Down

0 comments on commit 1c3a977

Please sign in to comment.