@derivesome/sockets 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.package.json.~undo-tree~ +40 -0
- package/.tsconfig.cjs.json.~undo-tree~ +5 -0
- package/.tsconfig.json.~undo-tree~ +6 -0
- package/dist/cjs/env.d.ts +2 -0
- package/dist/cjs/env.d.ts.map +1 -0
- package/dist/cjs/env.js +11 -0
- package/dist/cjs/env.js.map +1 -0
- package/dist/cjs/index.d.ts +4 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/server/app.d.ts +20 -0
- package/dist/cjs/server/app.d.ts.map +1 -0
- package/dist/cjs/server/app.js +153 -0
- package/dist/cjs/server/app.js.map +1 -0
- package/dist/cjs/server/events.d.ts +41 -0
- package/dist/cjs/server/events.d.ts.map +1 -0
- package/dist/cjs/server/events.js +3 -0
- package/dist/cjs/server/events.js.map +1 -0
- package/dist/cjs/server/index.d.ts +5 -0
- package/dist/cjs/server/index.d.ts.map +1 -0
- package/dist/cjs/server/index.js +21 -0
- package/dist/cjs/server/index.js.map +1 -0
- package/dist/cjs/server/plugin.d.ts +8 -0
- package/dist/cjs/server/plugin.d.ts.map +1 -0
- package/dist/cjs/server/plugin.js +3 -0
- package/dist/cjs/server/plugin.js.map +1 -0
- package/dist/cjs/server/server.d.ts +13 -0
- package/dist/cjs/server/server.d.ts.map +1 -0
- package/dist/cjs/server/server.js +54 -0
- package/dist/cjs/server/server.js.map +1 -0
- package/dist/cjs/socket.d.ts +17 -0
- package/dist/cjs/socket.d.ts.map +1 -0
- package/dist/cjs/socket.js +53 -0
- package/dist/cjs/socket.js.map +1 -0
- package/dist/cjs/utils.d.ts +2 -0
- package/dist/cjs/utils.d.ts.map +1 -0
- package/dist/cjs/utils.js +12 -0
- package/dist/cjs/utils.js.map +1 -0
- package/dist/esm/env.d.ts +2 -0
- package/dist/esm/env.d.ts.map +1 -0
- package/dist/esm/env.js +7 -0
- package/dist/esm/env.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +4 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/esm/server/app.d.ts +20 -0
- package/dist/esm/server/app.d.ts.map +1 -0
- package/dist/esm/server/app.js +149 -0
- package/dist/esm/server/app.js.map +1 -0
- package/dist/esm/server/events.d.ts +41 -0
- package/dist/esm/server/events.d.ts.map +1 -0
- package/dist/esm/server/events.js +2 -0
- package/dist/esm/server/events.js.map +1 -0
- package/dist/esm/server/index.d.ts +5 -0
- package/dist/esm/server/index.d.ts.map +1 -0
- package/dist/esm/server/index.js +5 -0
- package/dist/esm/server/index.js.map +1 -0
- package/dist/esm/server/plugin.d.ts +8 -0
- package/dist/esm/server/plugin.d.ts.map +1 -0
- package/dist/esm/server/plugin.js +2 -0
- package/dist/esm/server/plugin.js.map +1 -0
- package/dist/esm/server/server.d.ts +13 -0
- package/dist/esm/server/server.d.ts.map +1 -0
- package/dist/esm/server/server.js +47 -0
- package/dist/esm/server/server.js.map +1 -0
- package/dist/esm/socket.d.ts +17 -0
- package/dist/esm/socket.d.ts.map +1 -0
- package/dist/esm/socket.js +49 -0
- package/dist/esm/socket.js.map +1 -0
- package/dist/esm/utils.d.ts +2 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +8 -0
- package/dist/esm/utils.js.map +1 -0
- package/package.json +63 -0
- package/package.json~ +62 -0
- package/src/#socket-impl.ts# +4 -0
- package/src/.channel.ts.~undo-tree~ +12 -0
- package/src/.env.ts.~undo-tree~ +7 -0
- package/src/.index.ts.~undo-tree~ +12 -0
- package/src/.server.ts.~undo-tree~ +337 -0
- package/src/.socket-impl.ts.~undo-tree~ +9 -0
- package/src/.socket.ts.~undo-tree~ +196 -0
- package/src/.utils.ts.~undo-tree~ +6 -0
- package/src/channel.ts~ +14 -0
- package/src/env.ts +5 -0
- package/src/env.ts~ +5 -0
- package/src/index.ts +3 -0
- package/src/index.ts~ +2 -0
- package/src/server/.app.test.ts.~undo-tree~ +92 -0
- package/src/server/.app.ts.~undo-tree~ +283 -0
- package/src/server/.events.ts.~undo-tree~ +248 -0
- package/src/server/.index.ts.~undo-tree~ +10 -0
- package/src/server/.plugin.ts.~undo-tree~ +16 -0
- package/src/server/.server.ts.~undo-tree~ +183 -0
- package/src/server/app.test.ts +51 -0
- package/src/server/app.test.ts~ +51 -0
- package/src/server/app.ts +171 -0
- package/src/server/app.ts~ +171 -0
- package/src/server/events.ts +41 -0
- package/src/server/events.ts~ +47 -0
- package/src/server/index.ts +4 -0
- package/src/server/index.ts~ +1 -0
- package/src/server/plugin.ts +8 -0
- package/src/server/plugin.ts~ +8 -0
- package/src/server/server.ts +62 -0
- package/src/server/server.ts~ +62 -0
- package/src/server.ts~ +73 -0
- package/src/socket-impl.ts~ +5 -0
- package/src/socket.ts +66 -0
- package/src/socket.ts~ +66 -0
- package/src/utils.ts +7 -0
- package/src/utils.ts~ +7 -0
- package/tsconfig.cjs.json +8 -0
- package/tsconfig.cjs.json~ +0 -0
- package/tsconfig.json +24 -0
- package/tsconfig.json~ +24 -0
package/src/socket.ts
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { bin, BinaryBuffer, serial, type Binary } from "binencode";
|
|
2
|
+
import { type WebSocket as WSWebSocket } from "ws";
|
|
3
|
+
import { type Pat, pattern, type InferPattern, type PatLoose } from 'p-lens';
|
|
4
|
+
import { pubsub, type PubSub } from "@derivesome/core";
|
|
5
|
+
|
|
6
|
+
export type WebSocketImplementation = WebSocket | WSWebSocket;
|
|
7
|
+
|
|
8
|
+
export type SocketConfig = {
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class Socket<
|
|
12
|
+
Impl extends WebSocketImplementation = WebSocketImplementation,
|
|
13
|
+
> {
|
|
14
|
+
connection!: Impl;
|
|
15
|
+
factory: () => Impl;
|
|
16
|
+
ps: PubSub<Binary>
|
|
17
|
+
|
|
18
|
+
constructor(factory: () => Impl, _cfg: SocketConfig = {}) {
|
|
19
|
+
this.factory = factory;
|
|
20
|
+
this.ps = pubsub();
|
|
21
|
+
this.connect();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
private connect() {
|
|
25
|
+
this.connection = this.factory();
|
|
26
|
+
this.connection.binaryType = "arraybuffer";
|
|
27
|
+
const con = this.connection;
|
|
28
|
+
|
|
29
|
+
if (con instanceof WebSocket) {
|
|
30
|
+
con.addEventListener('message', async (ev) => {
|
|
31
|
+
if (ev.data instanceof ArrayBuffer) {
|
|
32
|
+
const buff = new BinaryBuffer();
|
|
33
|
+
buff.data = new Uint8Array(ev.data);
|
|
34
|
+
try {
|
|
35
|
+
const decoded = serial.decode(buff);
|
|
36
|
+
await this.ps.publishAsync(decoded);
|
|
37
|
+
} catch (e) {
|
|
38
|
+
console.error(e);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
sendBinary(data: Binary) {
|
|
46
|
+
const encoded = serial.encode(data);
|
|
47
|
+
this.connection.send(new Uint8Array(encoded.data));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
send<T>(data: T) {
|
|
51
|
+
return this.sendBinary(bin.auto(data));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
watch<P extends PatLoose>(
|
|
56
|
+
pat: P,
|
|
57
|
+
fn: (data: InferPattern<P>) => (void | Promise<void>)
|
|
58
|
+
) {
|
|
59
|
+
return this.ps.subscribe(async (binary) => {
|
|
60
|
+
const data = serial.toJS(binary);
|
|
61
|
+
if (pattern.is.matching(data, pat as any)) {
|
|
62
|
+
await fn(data);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
package/src/socket.ts~
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { bin, BinaryBuffer, serial, type Binary } from "binencode";
|
|
2
|
+
import { type WebSocket as WSWebSocket } from "ws";
|
|
3
|
+
import { type Pat, pattern, type InferPattern, type PatLoose } from 'p-lens';
|
|
4
|
+
import { pubsub, type PubSub } from "@derivesome/core";
|
|
5
|
+
|
|
6
|
+
export type WebSocketImplementation = WebSocket | WSWebSocket;
|
|
7
|
+
|
|
8
|
+
export type SocketConfig = {
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export class Socket<
|
|
12
|
+
Impl extends WebSocketImplementation = WebSocketImplementation,
|
|
13
|
+
> {
|
|
14
|
+
connection!: Impl;
|
|
15
|
+
factory: () => Impl;
|
|
16
|
+
ps: PubSub<Binary>
|
|
17
|
+
|
|
18
|
+
constructor(factory: () => Impl, _cfg: SocketConfig = {}) {
|
|
19
|
+
this.factory = factory;
|
|
20
|
+
this.ps = pubsub();
|
|
21
|
+
this.connect();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
private connect() {
|
|
25
|
+
this.connection = this.factory();
|
|
26
|
+
this.connection.binaryType = "arraybuffer";
|
|
27
|
+
const con = this.connection;
|
|
28
|
+
|
|
29
|
+
if (con instanceof WebSocket) {
|
|
30
|
+
con.addEventListener('message', async (ev) => {
|
|
31
|
+
if (ev.data instanceof ArrayBuffer) {
|
|
32
|
+
const buff = new BinaryBuffer();
|
|
33
|
+
buff.data = new Uint8Array(ev.data);
|
|
34
|
+
try {
|
|
35
|
+
const decoded = serial.decode(buff);
|
|
36
|
+
await this.ps.publishAsync(decoded);
|
|
37
|
+
} catch (e) {
|
|
38
|
+
console.error(e);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
})
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
sendBinary(data: Binary) {
|
|
46
|
+
const encoded = serial.encode(data);
|
|
47
|
+
this.connection.send(new Uint8Array(encoded.data));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
send<T>(data: T) {
|
|
51
|
+
return this.sendBinary(bin.auto(data));
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
watch<P extends Pat>(
|
|
56
|
+
pat: P,
|
|
57
|
+
fn: (data: InferPattern<P>) => (void | Promise<void>)
|
|
58
|
+
) {
|
|
59
|
+
return this.ps.subscribe(async (binary) => {
|
|
60
|
+
const data = serial.toJS(binary);
|
|
61
|
+
if (pattern.is.matching(data, pat)) {
|
|
62
|
+
await fn(data);
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
package/src/utils.ts
ADDED
package/src/utils.ts~
ADDED
|
File without changes
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"rootDir": "./src",
|
|
4
|
+
"outDir": "./dist/esm",
|
|
5
|
+
"module": "esnext",
|
|
6
|
+
"moduleResolution": "bundler",
|
|
7
|
+
"target": "esnext",
|
|
8
|
+
"lib": ["esnext", "dom", "dom.iterable"],
|
|
9
|
+
"types": ["node"],
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"declaration": true,
|
|
12
|
+
"declarationMap": true,
|
|
13
|
+
"noUncheckedIndexedAccess": true,
|
|
14
|
+
"exactOptionalPropertyTypes": true,
|
|
15
|
+
"strict": true,
|
|
16
|
+
"isolatedModules": true,
|
|
17
|
+
"esModuleInterop": true,
|
|
18
|
+
"noUncheckedSideEffectImports": true,
|
|
19
|
+
"moduleDetection": "force",
|
|
20
|
+
"skipLibCheck": true
|
|
21
|
+
},
|
|
22
|
+
"include": ["./src/**/*.ts"],
|
|
23
|
+
"exclude": ["./src/**/*.test.ts"]
|
|
24
|
+
}
|
package/tsconfig.json~
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"rootDir": "./src",
|
|
4
|
+
"outDir": "./dist/esm",
|
|
5
|
+
"module": "esnext",
|
|
6
|
+
"moduleResolution": "bundler",
|
|
7
|
+
"target": "esnext",
|
|
8
|
+
"lib": ["esnext"],
|
|
9
|
+
"types": ["node"],
|
|
10
|
+
"sourceMap": true,
|
|
11
|
+
"declaration": true,
|
|
12
|
+
"declarationMap": true,
|
|
13
|
+
"noUncheckedIndexedAccess": true,
|
|
14
|
+
"exactOptionalPropertyTypes": true,
|
|
15
|
+
"strict": true,
|
|
16
|
+
"isolatedModules": true,
|
|
17
|
+
"esModuleInterop": true,
|
|
18
|
+
"noUncheckedSideEffectImports": true,
|
|
19
|
+
"moduleDetection": "force",
|
|
20
|
+
"skipLibCheck": true
|
|
21
|
+
},
|
|
22
|
+
"include": ["./src/**/*.ts"],
|
|
23
|
+
"exclude": ["./src/**/*.test.ts"]
|
|
24
|
+
}
|