Skip to content

Commit 5c725ae

Browse files
committed
[major] Add an ES module wrapper
Fixes #1886
1 parent b5f968c commit 5c725ae

File tree

5 files changed

+57
-43
lines changed

5 files changed

+57
-43
lines changed

.eslintrc.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ extends:
77
- eslint:recommended
88
- plugin:prettier/recommended
99
parserOptions:
10-
ecmaVersion: 9
10+
ecmaVersion: latest
11+
sourceType: module
1112
rules:
1213
no-console: off
1314
no-var: error

README.md

Lines changed: 37 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,9 @@ into the creation of [raw deflate/inflate streams][node-zlib-deflaterawdocs].
9898
See [the docs][ws-server-options] for more options.
9999

100100
```js
101-
const WebSocket = require('ws');
101+
import WebSocket, { WebSocketServer } from 'ws';
102102

103-
const wss = new WebSocket.Server({
103+
const wss = new WebSocketServer({
104104
port: 8080,
105105
perMessageDeflate: {
106106
zlibDeflateOptions: {
@@ -129,7 +129,7 @@ server. To always disable the extension on the client set the
129129
`perMessageDeflate` option to `false`.
130130

131131
```js
132-
const WebSocket = require('ws');
132+
import WebSocket from 'ws';
133133

134134
const ws = new WebSocket('ws://www.host.com/path', {
135135
perMessageDeflate: false
@@ -141,7 +141,7 @@ const ws = new WebSocket('ws://www.host.com/path', {
141141
### Sending and receiving text data
142142

143143
```js
144-
const WebSocket = require('ws');
144+
import WebSocket from 'ws';
145145

146146
const ws = new WebSocket('ws://www.host.com/path');
147147

@@ -157,7 +157,7 @@ ws.on('message', function incoming(message) {
157157
### Sending binary data
158158

159159
```js
160-
const WebSocket = require('ws');
160+
import WebSocket from 'ws';
161161

162162
const ws = new WebSocket('ws://www.host.com/path');
163163

@@ -175,9 +175,9 @@ ws.on('open', function open() {
175175
### Simple server
176176

177177
```js
178-
const WebSocket = require('ws');
178+
import { WebSocketServer } from 'ws';
179179

180-
const wss = new WebSocket.Server({ port: 8080 });
180+
const wss = new WebSocketServer({ port: 8080 });
181181

182182
wss.on('connection', function connection(ws) {
183183
ws.on('message', function incoming(message) {
@@ -191,15 +191,15 @@ wss.on('connection', function connection(ws) {
191191
### External HTTP/S server
192192

193193
```js
194-
const fs = require('fs');
195-
const https = require('https');
196-
const WebSocket = require('ws');
194+
import { createServer } from 'https';
195+
import { readFileSync } from 'fs';
196+
import { WebSocketServer } from 'ws';
197197

198-
const server = https.createServer({
199-
cert: fs.readFileSync('/path/to/cert.pem'),
200-
key: fs.readFileSync('/path/to/key.pem')
198+
const server = createServer({
199+
cert: readFileSync('/path/to/cert.pem'),
200+
key: readFileSync('/path/to/key.pem')
201201
});
202-
const wss = new WebSocket.Server({ server });
202+
const wss = new WebSocketServer({ server });
203203

204204
wss.on('connection', function connection(ws) {
205205
ws.on('message', function incoming(message) {
@@ -215,13 +215,13 @@ server.listen(8080);
215215
### Multiple servers sharing a single HTTP/S server
216216

217217
```js
218-
const http = require('http');
219-
const WebSocket = require('ws');
220-
const url = require('url');
218+
import { createServer } from 'http';
219+
import { parse } from 'url';
220+
import { WebSocketServer } from 'ws';
221221

222-
const server = http.createServer();
223-
const wss1 = new WebSocket.Server({ noServer: true });
224-
const wss2 = new WebSocket.Server({ noServer: true });
222+
const server = createServer();
223+
const wss1 = new WebSocketServer({ noServer: true });
224+
const wss2 = new WebSocketServer({ noServer: true });
225225

226226
wss1.on('connection', function connection(ws) {
227227
// ...
@@ -232,7 +232,7 @@ wss2.on('connection', function connection(ws) {
232232
});
233233

234234
server.on('upgrade', function upgrade(request, socket, head) {
235-
const pathname = url.parse(request.url).pathname;
235+
const { pathname } = parse(request.url);
236236

237237
if (pathname === '/foo') {
238238
wss1.handleUpgrade(request, socket, head, function done(ws) {
@@ -253,11 +253,11 @@ server.listen(8080);
253253
### Client authentication
254254

255255
```js
256-
const http = require('http');
257-
const WebSocket = require('ws');
256+
import WebSocket from 'ws';
257+
import { createServer } from 'http';
258258

259-
const server = http.createServer();
260-
const wss = new WebSocket.Server({ noServer: true });
259+
const server = createServer();
260+
const wss = new WebSocketServer({ noServer: true });
261261

262262
wss.on('connection', function connection(ws, request, client) {
263263
ws.on('message', function message(msg) {
@@ -291,9 +291,9 @@ A client WebSocket broadcasting to all connected WebSocket clients, including
291291
itself.
292292

293293
```js
294-
const WebSocket = require('ws');
294+
import WebSocket, { WebSocketServer } from 'ws';
295295

296-
const wss = new WebSocket.Server({ port: 8080 });
296+
const wss = new WebSocketServer({ port: 8080 });
297297

298298
wss.on('connection', function connection(ws) {
299299
ws.on('message', function incoming(data, isBinary) {
@@ -310,9 +310,9 @@ A client WebSocket broadcasting to every other connected WebSocket clients,
310310
excluding itself.
311311

312312
```js
313-
const WebSocket = require('ws');
313+
import WebSocket, { WebSocketServer } from 'ws';
314314

315-
const wss = new WebSocket.Server({ port: 8080 });
315+
const wss = new WebSocketServer({ port: 8080 });
316316

317317
wss.on('connection', function connection(ws) {
318318
ws.on('message', function incoming(data, isBinary) {
@@ -328,7 +328,7 @@ wss.on('connection', function connection(ws) {
328328
### echo.websocket.org demo
329329

330330
```js
331-
const WebSocket = require('ws');
331+
import WebSocket from 'ws';
332332

333333
const ws = new WebSocket('wss://echo.websocket.org/', {
334334
origin: 'https://websocket.org'
@@ -355,13 +355,13 @@ ws.on('message', function incoming(data) {
355355
### Use the Node.js streams API
356356

357357
```js
358-
const WebSocket = require('ws');
358+
import WebSocket, { createWebSocketStream } from 'ws';
359359

360360
const ws = new WebSocket('wss://echo.websocket.org/', {
361361
origin: 'https://websocket.org'
362362
});
363363

364-
const duplex = WebSocket.createWebSocketStream(ws, { encoding: 'utf8' });
364+
const duplex = createWebSocketStream(ws, { encoding: 'utf8' });
365365

366366
duplex.pipe(process.stdout);
367367
process.stdin.pipe(duplex);
@@ -381,9 +381,9 @@ Otherwise, see the test cases.
381381
The remote IP address can be obtained from the raw socket.
382382

383383
```js
384-
const WebSocket = require('ws');
384+
import { WebSocketServer } from 'ws';
385385

386-
const wss = new WebSocket.Server({ port: 8080 });
386+
const wss = new WebSocketServer({ port: 8080 });
387387

388388
wss.on('connection', function connection(ws, req) {
389389
const ip = req.socket.remoteAddress;
@@ -409,15 +409,15 @@ In these cases ping messages can be used as a means to verify that the remote
409409
endpoint is still responsive.
410410

411411
```js
412-
const WebSocket = require('ws');
412+
import { WebSocketServer } from 'ws';
413413

414414
function noop() {}
415415

416416
function heartbeat() {
417417
this.isAlive = true;
418418
}
419419

420-
const wss = new WebSocket.Server({ port: 8080 });
420+
const wss = new WebSocketServer({ port: 8080 });
421421

422422
wss.on('connection', function connection(ws) {
423423
ws.isAlive = true;
@@ -446,7 +446,7 @@ without knowing it. You might want to add a ping listener on your clients to
446446
prevent that. A simple implementation would be:
447447

448448
```js
449-
const WebSocket = require('ws');
449+
import WebSocket from 'ws';
450450

451451
function heartbeat() {
452452
clearTimeout(this.pingTimeout);

doc/ws.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
## Table of Contents
44

5-
- [Class: WebSocket.Server](#class-websocketserver)
6-
- [new WebSocket.Server(options[, callback])](#new-websocketserveroptions-callback)
5+
- [Class: WebSocketServer](#class-websocketserver)
6+
- [new WebSocketServer(options[, callback])](#new-websocketserveroptions-callback)
77
- [Event: 'close'](#event-close)
88
- [Event: 'connection'](#event-connection)
99
- [Event: 'error'](#event-error)
@@ -57,11 +57,11 @@
5757
- [WS_ERR_UNSUPPORTED_DATA_PAYLOAD_LENGTH](#ws_err_unsupported_data_payload_length)
5858
- [WS_ERR_UNSUPPORTED_MESSAGE_LENGTH](#ws_err_unsupported_message_length)
5959

60-
## Class: WebSocket.Server
60+
## Class: WebSocketServer
6161

6262
This class represents a WebSocket server. It extends the `EventEmitter`.
6363

64-
### new WebSocket.Server(options[, callback])
64+
### new WebSocketServer(options[, callback])
6565

6666
- `options` {Object}
6767
- `host` {String} The hostname where to bind the server.

package.json

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,19 @@
1616
"author": "Einar Otto Stangvik <einaros@gmail.com> (http://2x.io)",
1717
"license": "MIT",
1818
"main": "index.js",
19+
"exports": {
20+
"import": "./wrapper.mjs",
21+
"require": "./index.js"
22+
},
1923
"browser": "browser.js",
2024
"engines": {
2125
"node": ">=10.0.0"
2226
},
2327
"files": [
2428
"browser.js",
2529
"index.js",
26-
"lib/*.js"
30+
"lib/*.js",
31+
"wrapper.mjs"
2732
],
2833
"scripts": {
2934
"test": "nyc --reporter=lcov --reporter=text mocha --throw-deprecation test/*.test.js",

wrapper.mjs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import createWebSocketStream from './lib/stream.js';
2+
import Receiver from './lib/receiver.js';
3+
import Sender from './lib/sender.js';
4+
import WebSocket from './lib/websocket.js';
5+
import WebSocketServer from './lib/websocket-server.js';
6+
7+
export { createWebSocketStream, Receiver, Sender, WebSocket, WebSocketServer };
8+
export default WebSocket;

0 commit comments

Comments
 (0)