Skip to content

Commit 2096416

Browse files
committed
feat(@dobsjs/websocket): websocket client
1 parent ea7c21b commit 2096416

File tree

8 files changed

+140
-1
lines changed

8 files changed

+140
-1
lines changed

packages/dobs-ws/README.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
# @dobsjs/websocket
2+
3+
Simplest WebSocket Plugin for [dobs](https://dobs.vercel.app)
4+
5+
## Usage
6+
7+
```ts
8+
import { websocket } from '@dobsjs/websocket';
9+
import { defineConfig } from 'dobs';
10+
11+
export default defineConfig({
12+
plugins: [
13+
websocket({
14+
open(ws) {
15+
console.log('[ws] connected');
16+
},
17+
message(ws, message) {
18+
console.log('[ws] message ' + message.toString());
19+
},
20+
}),
21+
],
22+
});
23+
```

packages/dobs-ws/package.json

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
{
2+
"name": "@dobsjs/websocket",
3+
"version": "0.1.0-beta.2",
4+
"main": "./dist/index.js",
5+
"module": "./dist/index.mjs",
6+
"types": "./dist/index.d.ts",
7+
"repository": "https://github.com/zely-js/dobs",
8+
"description": "WebSocket for dobs",
9+
"files": [
10+
"dist"
11+
],
12+
"exports": {
13+
".": {
14+
"import": {
15+
"types": "./dist/index.d.mts",
16+
"default": "./dist/index.mjs"
17+
},
18+
"require": {
19+
"types": "./dist/index.d.ts",
20+
"default": "./dist/index.js"
21+
}
22+
}
23+
},
24+
"dependencies": {
25+
"ws": "^8.18.3"
26+
},
27+
"devDependencies": {
28+
"@types/ws": "^8"
29+
}
30+
}

packages/dobs-ws/src/index.ts

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import WebSocket, { WebSocketServer } from 'ws';
2+
import type { Plugin } from 'dobs';
3+
import type { Promisable } from '~/dobs/_types';
4+
5+
export interface WebSocketOptions {
6+
open?(ws: WebSocket): Promisable<void>;
7+
message?(ws: WebSocket, data: WebSocket.RawData): Promisable<void>;
8+
error?(err: Error): Promisable<void>;
9+
}
10+
11+
export function websocket(websocketOptions: WebSocketOptions): Plugin {
12+
return {
13+
name: '@dobsjs/websocket',
14+
15+
server(server) {
16+
const wss = new WebSocketServer({ server: server.server });
17+
18+
wss.on('connection', async (ws) => {
19+
if (websocketOptions?.open) await websocketOptions.open(ws);
20+
21+
ws.on('message', async (data) => {
22+
if (websocketOptions?.message) await websocketOptions.message(ws, data);
23+
});
24+
25+
ws.on('error', async (err) => {
26+
if (websocketOptions?.error) await websocketOptions.error(err);
27+
});
28+
});
29+
},
30+
};
31+
}

packages/dobs-ws/tsdown.config.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { defineConfig } from 'tsdown';
2+
3+
export default defineConfig({
4+
entry: './src/index.ts',
5+
platform: 'node',
6+
format: ['cjs', 'esm'],
7+
});

packages/dobs/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ export * from './config';
33
export * from './types';
44
export * from './builder';
55
export * from './defineRoutes';
6+
export type { Plugin, ErrorContext } from './plugin';

playgrounds/default/dobs.config.ts

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,18 @@
1+
import { websocket } from '@dobsjs/websocket';
2+
13
import { cachePlugin } from 'dobs/experimental';
24

35
export default {
46
port: 3000,
5-
plugins: [cachePlugin({ ttl: 1000 })],
7+
plugins: [
8+
cachePlugin({ ttl: 1000 }),
9+
websocket({
10+
open(ws) {
11+
console.log('[ws] connected');
12+
},
13+
message(ws, message) {
14+
console.log('[ws] message ' + message.toString());
15+
},
16+
}),
17+
],
618
} satisfies import('dobs').ServerConfig;

playgrounds/default/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"version": "0.0.1-alpha.2",
44
"private": true,
55
"dependencies": {
6+
"@dobsjs/websocket": "workspace:*",
67
"dobs": "workspace:*"
78
},
89
"scripts": {

yarn.lock

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,15 @@ __metadata:
113113
languageName: unknown
114114
linkType: soft
115115

116+
"@dobsjs/websocket@workspace:*, @dobsjs/websocket@workspace:packages/dobs-ws":
117+
version: 0.0.0-use.local
118+
resolution: "@dobsjs/websocket@workspace:packages/dobs-ws"
119+
dependencies:
120+
"@types/ws": "npm:^8"
121+
ws: "npm:^8.18.3"
122+
languageName: unknown
123+
linkType: soft
124+
116125
"@emnapi/core@npm:^1.4.3, @emnapi/core@npm:^1.5.0":
117126
version: 1.7.0
118127
resolution: "@emnapi/core@npm:1.7.0"
@@ -1535,6 +1544,7 @@ __metadata:
15351544
version: 0.0.0-use.local
15361545
resolution: "@playgrounds/default@workspace:playgrounds/default"
15371546
dependencies:
1547+
"@dobsjs/websocket": "workspace:*"
15381548
dobs: "workspace:*"
15391549
languageName: unknown
15401550
linkType: soft
@@ -2328,6 +2338,15 @@ __metadata:
23282338
languageName: node
23292339
linkType: hard
23302340

2341+
"@types/ws@npm:^8":
2342+
version: 8.18.1
2343+
resolution: "@types/ws@npm:8.18.1"
2344+
dependencies:
2345+
"@types/node": "npm:*"
2346+
checksum: 10c0/61aff1129143fcc4312f083bc9e9e168aa3026b7dd6e70796276dcfb2c8211c4292603f9c4864fae702f2ed86e4abd4d38aa421831c2fd7f856c931a481afbab
2347+
languageName: node
2348+
linkType: hard
2349+
23312350
"@typescript-eslint/eslint-plugin@npm:8.46.3":
23322351
version: 8.46.3
23332352
resolution: "@typescript-eslint/eslint-plugin@npm:8.46.3"
@@ -8059,6 +8078,21 @@ __metadata:
80598078
languageName: node
80608079
linkType: hard
80618080

8081+
"ws@npm:^8.18.3":
8082+
version: 8.18.3
8083+
resolution: "ws@npm:8.18.3"
8084+
peerDependencies:
8085+
bufferutil: ^4.0.1
8086+
utf-8-validate: ">=5.0.2"
8087+
peerDependenciesMeta:
8088+
bufferutil:
8089+
optional: true
8090+
utf-8-validate:
8091+
optional: true
8092+
checksum: 10c0/eac918213de265ef7cb3d4ca348b891a51a520d839aa51cdb8ca93d4fa7ff9f6ccb339ccee89e4075324097f0a55157c89fa3f7147bde9d8d7e90335dc087b53
8093+
languageName: node
8094+
linkType: hard
8095+
80628096
"y18n@npm:^5.0.5":
80638097
version: 5.0.8
80648098
resolution: "y18n@npm:5.0.8"

0 commit comments

Comments
 (0)