@desaubv/quik 0.0.81 → 0.1.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/dist/index-CmT_nxIe.d.cts +28 -0
- package/dist/index-CmT_nxIe.d.ts +28 -0
- package/dist/index.cjs +125 -33
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +125 -33
- package/dist/index.js.map +1 -1
- package/dist/socket.io/index.cjs +110 -0
- package/dist/socket.io/index.cjs.map +1 -0
- package/dist/socket.io/index.d.cts +3 -0
- package/dist/socket.io/index.d.ts +3 -0
- package/dist/socket.io/index.js +85 -0
- package/dist/socket.io/index.js.map +1 -0
- package/dist/ws/index.cjs +111 -0
- package/dist/ws/index.cjs.map +1 -0
- package/dist/ws/index.d.cts +26 -0
- package/dist/ws/index.d.ts +26 -0
- package/dist/ws/index.js +86 -0
- package/dist/ws/index.js.map +1 -0
- package/package.json +11 -3
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
// src/socket.io/socket.ts
|
|
2
|
+
import {
|
|
3
|
+
Server as SocketIOServer
|
|
4
|
+
} from "socket.io";
|
|
5
|
+
var QuikSocketIO = class {
|
|
6
|
+
io;
|
|
7
|
+
connectHandler;
|
|
8
|
+
disconnectHandler;
|
|
9
|
+
events = /* @__PURE__ */ new Map();
|
|
10
|
+
started = false;
|
|
11
|
+
constructor() {
|
|
12
|
+
this.io = new SocketIOServer();
|
|
13
|
+
}
|
|
14
|
+
onConnect(handler) {
|
|
15
|
+
this.connectHandler = handler;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
onDisconnect(handler) {
|
|
19
|
+
this.disconnectHandler = handler;
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
addEvent(keyword, handler) {
|
|
23
|
+
this.events.set(keyword, handler);
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
removeEvent(keyword) {
|
|
27
|
+
this.events.delete(keyword);
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
hasEvent(keyword) {
|
|
31
|
+
return this.events.has(keyword);
|
|
32
|
+
}
|
|
33
|
+
emit(keyword, ...args) {
|
|
34
|
+
this.io.emit(keyword, ...args);
|
|
35
|
+
return this;
|
|
36
|
+
}
|
|
37
|
+
emitTo(socket, keyword, ...args) {
|
|
38
|
+
socket.emit(keyword, ...args);
|
|
39
|
+
return this;
|
|
40
|
+
}
|
|
41
|
+
broadcast(socket, keyword, ...args) {
|
|
42
|
+
socket.broadcast.emit(keyword, ...args);
|
|
43
|
+
return this;
|
|
44
|
+
}
|
|
45
|
+
getIO() {
|
|
46
|
+
return this.io;
|
|
47
|
+
}
|
|
48
|
+
start(server) {
|
|
49
|
+
if (this.started) {
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
this.io.attach(server);
|
|
53
|
+
this.io.on("connection", (socket) => {
|
|
54
|
+
this.connectHandler?.(socket);
|
|
55
|
+
for (const [keyword, handler] of this.events) {
|
|
56
|
+
socket.on(keyword, (...args) => {
|
|
57
|
+
handler(socket, ...args);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
socket.on("disconnect", (reason) => {
|
|
61
|
+
this.disconnectHandler?.(
|
|
62
|
+
socket,
|
|
63
|
+
reason
|
|
64
|
+
);
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
this.started = true;
|
|
68
|
+
return this;
|
|
69
|
+
}
|
|
70
|
+
close() {
|
|
71
|
+
if (!this.started) {
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
this.io.close();
|
|
75
|
+
this.started = false;
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
function Socket() {
|
|
80
|
+
return new QuikSocketIO();
|
|
81
|
+
}
|
|
82
|
+
export {
|
|
83
|
+
Socket
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/socket.io/socket.ts"],"sourcesContent":["import {\r\n Server as SocketIOServer,\r\n type Socket as SocketIOClient,\r\n} from \"socket.io\";\r\n\r\nimport type { Server as HTTPServer } from \"node:http\";\r\n\r\ntype SocketConnectHandler = (\r\n socket: SocketIOClient\r\n) => void;\r\n\r\ntype SocketDisconnectHandler = (\r\n socket: SocketIOClient,\r\n reason: string\r\n) => void;\r\n\r\ntype SocketEventHandler = (\r\n socket: SocketIOClient,\r\n ...args: unknown[]\r\n) => void;\r\n\r\nclass QuikSocketIO {\r\n private readonly io: SocketIOServer;\r\n\r\n private connectHandler?: SocketConnectHandler;\r\n private disconnectHandler?: SocketDisconnectHandler;\r\n\r\n private readonly events = new Map<\r\n string,\r\n SocketEventHandler\r\n >();\r\n\r\n private started = false;\r\n\r\n constructor() {\r\n this.io = new SocketIOServer();\r\n }\r\n\r\n onConnect(handler: SocketConnectHandler) {\r\n this.connectHandler = handler;\r\n\r\n return this;\r\n }\r\n\r\n onDisconnect(handler: SocketDisconnectHandler) {\r\n this.disconnectHandler = handler;\r\n\r\n return this;\r\n }\r\n\r\n addEvent(\r\n keyword: string,\r\n handler: SocketEventHandler\r\n ) {\r\n this.events.set(keyword, handler);\r\n\r\n return this;\r\n }\r\n\r\n removeEvent(keyword: string) {\r\n this.events.delete(keyword);\r\n\r\n return this;\r\n }\r\n\r\n hasEvent(keyword: string): boolean {\r\n return this.events.has(keyword);\r\n }\r\n\r\n emit(\r\n keyword: string,\r\n ...args: unknown[]\r\n ) {\r\n this.io.emit(keyword, ...args);\r\n\r\n return this;\r\n }\r\n\r\n emitTo(\r\n socket: SocketIOClient,\r\n keyword: string,\r\n ...args: unknown[]\r\n ) {\r\n socket.emit(keyword, ...args);\r\n\r\n return this;\r\n }\r\n\r\n broadcast(\r\n socket: SocketIOClient,\r\n keyword: string,\r\n ...args: unknown[]\r\n ) {\r\n socket.broadcast.emit(keyword, ...args);\r\n\r\n return this;\r\n }\r\n\r\n getIO(): SocketIOServer {\r\n return this.io;\r\n }\r\n\r\n start(server: HTTPServer) {\r\n if (this.started) {\r\n return this;\r\n }\r\n\r\n this.io.attach(server);\r\n\r\n this.io.on(\"connection\", (socket) => {\r\n this.connectHandler?.(socket);\r\n\r\n for (const [keyword, handler] of this.events) {\r\n socket.on(keyword, (...args) => {\r\n handler(socket, ...args);\r\n });\r\n }\r\n\r\n socket.on(\"disconnect\", (reason) => {\r\n this.disconnectHandler?.(\r\n socket,\r\n reason\r\n );\r\n });\r\n });\r\n\r\n this.started = true;\r\n\r\n return this;\r\n }\r\n\r\n close() {\r\n if (!this.started) {\r\n return this;\r\n }\r\n\r\n this.io.close();\r\n this.started = false;\r\n\r\n return this;\r\n }\r\n}\r\n\r\nfunction Socket() {\r\n return new QuikSocketIO();\r\n}\r\n\r\nexport {\r\n Socket,\r\n QuikSocketIO,\r\n};"],"mappings":";AAAA;AAAA,EACI,UAAU;AAAA,OAEP;AAkBP,IAAM,eAAN,MAAmB;AAAA,EACE;AAAA,EAET;AAAA,EACA;AAAA,EAES,SAAS,oBAAI,IAG5B;AAAA,EAEM,UAAU;AAAA,EAElB,cAAc;AACV,SAAK,KAAK,IAAI,eAAe;AAAA,EACjC;AAAA,EAEA,UAAU,SAA+B;AACrC,SAAK,iBAAiB;AAEtB,WAAO;AAAA,EACX;AAAA,EAEA,aAAa,SAAkC;AAC3C,SAAK,oBAAoB;AAEzB,WAAO;AAAA,EACX;AAAA,EAEA,SACI,SACA,SACF;AACE,SAAK,OAAO,IAAI,SAAS,OAAO;AAEhC,WAAO;AAAA,EACX;AAAA,EAEA,YAAY,SAAiB;AACzB,SAAK,OAAO,OAAO,OAAO;AAE1B,WAAO;AAAA,EACX;AAAA,EAEA,SAAS,SAA0B;AAC/B,WAAO,KAAK,OAAO,IAAI,OAAO;AAAA,EAClC;AAAA,EAEA,KACI,YACG,MACL;AACE,SAAK,GAAG,KAAK,SAAS,GAAG,IAAI;AAE7B,WAAO;AAAA,EACX;AAAA,EAEA,OACI,QACA,YACG,MACL;AACE,WAAO,KAAK,SAAS,GAAG,IAAI;AAE5B,WAAO;AAAA,EACX;AAAA,EAEA,UACI,QACA,YACG,MACL;AACE,WAAO,UAAU,KAAK,SAAS,GAAG,IAAI;AAEtC,WAAO;AAAA,EACX;AAAA,EAEA,QAAwB;AACpB,WAAO,KAAK;AAAA,EAChB;AAAA,EAEA,MAAM,QAAoB;AACtB,QAAI,KAAK,SAAS;AACd,aAAO;AAAA,IACX;AAEA,SAAK,GAAG,OAAO,MAAM;AAErB,SAAK,GAAG,GAAG,cAAc,CAAC,WAAW;AACjC,WAAK,iBAAiB,MAAM;AAE5B,iBAAW,CAAC,SAAS,OAAO,KAAK,KAAK,QAAQ;AAC1C,eAAO,GAAG,SAAS,IAAI,SAAS;AAC5B,kBAAQ,QAAQ,GAAG,IAAI;AAAA,QAC3B,CAAC;AAAA,MACL;AAEA,aAAO,GAAG,cAAc,CAAC,WAAW;AAChC,aAAK;AAAA,UACD;AAAA,UACA;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAED,SAAK,UAAU;AAEf,WAAO;AAAA,EACX;AAAA,EAEA,QAAQ;AACJ,QAAI,CAAC,KAAK,SAAS;AACf,aAAO;AAAA,IACX;AAEA,SAAK,GAAG,MAAM;AACd,SAAK,UAAU;AAEf,WAAO;AAAA,EACX;AACJ;AAEA,SAAS,SAAS;AACd,SAAO,IAAI,aAAa;AAC5B;","names":[]}
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/ws/index.ts
|
|
21
|
+
var ws_exports = {};
|
|
22
|
+
__export(ws_exports, {
|
|
23
|
+
QuikWebSocket: () => QuikWebSocket,
|
|
24
|
+
WebSocket: () => WebSocket
|
|
25
|
+
});
|
|
26
|
+
module.exports = __toCommonJS(ws_exports);
|
|
27
|
+
|
|
28
|
+
// src/ws/websockets.ts
|
|
29
|
+
var import_ws = require("ws");
|
|
30
|
+
var QuikWebSocket = class {
|
|
31
|
+
server;
|
|
32
|
+
connectHandler;
|
|
33
|
+
messageHandler;
|
|
34
|
+
disconnectHandler;
|
|
35
|
+
errorHandler;
|
|
36
|
+
onConnect(handler) {
|
|
37
|
+
this.connectHandler = handler;
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
onMessage(handler) {
|
|
41
|
+
this.messageHandler = handler;
|
|
42
|
+
return this;
|
|
43
|
+
}
|
|
44
|
+
onDisconnect(handler) {
|
|
45
|
+
this.disconnectHandler = handler;
|
|
46
|
+
return this;
|
|
47
|
+
}
|
|
48
|
+
onError(handler) {
|
|
49
|
+
this.errorHandler = handler;
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
send(client, message) {
|
|
53
|
+
if (client.readyState === import_ws.WebSocket.OPEN) {
|
|
54
|
+
client.send(message);
|
|
55
|
+
}
|
|
56
|
+
return this;
|
|
57
|
+
}
|
|
58
|
+
broadcast(message) {
|
|
59
|
+
if (!this.server) {
|
|
60
|
+
throw new Error(
|
|
61
|
+
"WebSocket server has not been started."
|
|
62
|
+
);
|
|
63
|
+
}
|
|
64
|
+
for (const client of this.server.clients) {
|
|
65
|
+
if (client.readyState === import_ws.WebSocket.OPEN) {
|
|
66
|
+
client.send(message);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
return this;
|
|
70
|
+
}
|
|
71
|
+
start(server) {
|
|
72
|
+
if (this.server) {
|
|
73
|
+
return this;
|
|
74
|
+
}
|
|
75
|
+
this.server = new import_ws.WebSocketServer({
|
|
76
|
+
server
|
|
77
|
+
});
|
|
78
|
+
this.server.on("connection", (client) => {
|
|
79
|
+
this.connectHandler?.(client);
|
|
80
|
+
client.on("message", (message) => {
|
|
81
|
+
this.messageHandler?.(
|
|
82
|
+
client,
|
|
83
|
+
message
|
|
84
|
+
);
|
|
85
|
+
});
|
|
86
|
+
client.on("close", () => {
|
|
87
|
+
this.disconnectHandler?.(client);
|
|
88
|
+
});
|
|
89
|
+
client.on("error", (error) => {
|
|
90
|
+
this.errorHandler?.(
|
|
91
|
+
client,
|
|
92
|
+
error
|
|
93
|
+
);
|
|
94
|
+
});
|
|
95
|
+
});
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
close() {
|
|
99
|
+
this.server?.close();
|
|
100
|
+
return this;
|
|
101
|
+
}
|
|
102
|
+
};
|
|
103
|
+
function WebSocket() {
|
|
104
|
+
return new QuikWebSocket();
|
|
105
|
+
}
|
|
106
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
107
|
+
0 && (module.exports = {
|
|
108
|
+
QuikWebSocket,
|
|
109
|
+
WebSocket
|
|
110
|
+
});
|
|
111
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/ws/index.ts","../../src/ws/websockets.ts"],"sourcesContent":["export { WebSocket, QuikWebSocket } from \"./websockets.js\";","import {\r\n WebSocketServer,\r\n WebSocket as WS,\r\n type RawData,\r\n} from \"ws\";\r\n\r\nimport type { Server as HTTPServer } from \"node:http\";\r\n\r\ntype WebSocketClient = WS;\r\n\r\ntype ConnectHandler = (\r\n client: WebSocketClient\r\n) => void;\r\n\r\ntype MessageHandler = (\r\n client: WebSocketClient,\r\n message: RawData\r\n) => void;\r\n\r\ntype DisconnectHandler = (\r\n client: WebSocketClient\r\n) => void;\r\n\r\ntype ErrorHandler = (\r\n client: WebSocketClient,\r\n error: Error\r\n) => void;\r\n\r\nclass QuikWebSocket {\r\n private server?: WebSocketServer;\r\n\r\n private connectHandler?: ConnectHandler;\r\n private messageHandler?: MessageHandler;\r\n private disconnectHandler?: DisconnectHandler;\r\n private errorHandler?: ErrorHandler;\r\n\r\n onConnect(handler: ConnectHandler) {\r\n this.connectHandler = handler;\r\n\r\n return this;\r\n }\r\n\r\n onMessage(handler: MessageHandler) {\r\n this.messageHandler = handler;\r\n\r\n return this;\r\n }\r\n\r\n onDisconnect(handler: DisconnectHandler) {\r\n this.disconnectHandler = handler;\r\n\r\n return this;\r\n }\r\n\r\n onError(handler: ErrorHandler) {\r\n this.errorHandler = handler;\r\n\r\n return this;\r\n }\r\n\r\n send(client: WebSocketClient,\r\n message: string | Buffer\r\n ) {\r\n if (client.readyState === WS.OPEN) {\r\n client.send(message);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n broadcast(message: string | Buffer) {\r\n if (!this.server) {\r\n throw new Error(\r\n \"WebSocket server has not been started.\"\r\n );\r\n }\r\n\r\n for (const client of this.server.clients) {\r\n if (client.readyState === WS.OPEN) {\r\n client.send(message);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n start(server: HTTPServer) {\r\n if (this.server) {\r\n return this;\r\n }\r\n\r\n this.server = new WebSocketServer({\r\n server,\r\n });\r\n\r\n this.server.on(\"connection\", (client) => {\r\n this.connectHandler?.(client);\r\n\r\n client.on(\"message\", (message) => {\r\n this.messageHandler?.(\r\n client,\r\n message\r\n );\r\n });\r\n\r\n client.on(\"close\", () => {\r\n this.disconnectHandler?.(client);\r\n });\r\n\r\n client.on(\"error\", (error) => {\r\n this.errorHandler?.(\r\n client,\r\n error\r\n );\r\n });\r\n });\r\n\r\n return this;\r\n }\r\n\r\n close() {\r\n this.server?.close();\r\n\r\n return this;\r\n }\r\n}\r\n\r\nfunction WebSocket() {\r\n return new QuikWebSocket();\r\n}\r\n\r\nexport {\r\n WebSocket,\r\n QuikWebSocket,\r\n};\r\n\r\nexport type {\r\n WebSocketClient,\r\n ConnectHandler,\r\n MessageHandler,\r\n DisconnectHandler,\r\n ErrorHandler,\r\n};"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,gBAIO;AAwBP,IAAM,gBAAN,MAAoB;AAAA,EACR;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,UAAU,SAAyB;AAC/B,SAAK,iBAAiB;AAEtB,WAAO;AAAA,EACX;AAAA,EAEA,UAAU,SAAyB;AAC/B,SAAK,iBAAiB;AAEtB,WAAO;AAAA,EACX;AAAA,EAEA,aAAa,SAA4B;AACrC,SAAK,oBAAoB;AAEzB,WAAO;AAAA,EACX;AAAA,EAEA,QAAQ,SAAuB;AAC3B,SAAK,eAAe;AAEpB,WAAO;AAAA,EACX;AAAA,EAEA,KAAK,QACD,SACF;AACE,QAAI,OAAO,eAAe,UAAAA,UAAG,MAAM;AAC/B,aAAO,KAAK,OAAO;AAAA,IACvB;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,UAAU,SAA0B;AAChC,QAAI,CAAC,KAAK,QAAQ;AACd,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AAEA,eAAW,UAAU,KAAK,OAAO,SAAS;AACtC,UAAI,OAAO,eAAe,UAAAA,UAAG,MAAM;AAC/B,eAAO,KAAK,OAAO;AAAA,MACvB;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,QAAoB;AACtB,QAAI,KAAK,QAAQ;AACb,aAAO;AAAA,IACX;AAEA,SAAK,SAAS,IAAI,0BAAgB;AAAA,MAC9B;AAAA,IACJ,CAAC;AAED,SAAK,OAAO,GAAG,cAAc,CAAC,WAAW;AACrC,WAAK,iBAAiB,MAAM;AAE5B,aAAO,GAAG,WAAW,CAAC,YAAY;AAC9B,aAAK;AAAA,UACD;AAAA,UACA;AAAA,QACJ;AAAA,MACJ,CAAC;AAED,aAAO,GAAG,SAAS,MAAM;AACrB,aAAK,oBAAoB,MAAM;AAAA,MACnC,CAAC;AAED,aAAO,GAAG,SAAS,CAAC,UAAU;AAC1B,aAAK;AAAA,UACD;AAAA,UACA;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAED,WAAO;AAAA,EACX;AAAA,EAEA,QAAQ;AACJ,SAAK,QAAQ,MAAM;AAEnB,WAAO;AAAA,EACX;AACJ;AAEA,SAAS,YAAY;AACjB,SAAO,IAAI,cAAc;AAC7B;","names":["WS"]}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { WebSocket as WebSocket$1, RawData } from 'ws';
|
|
2
|
+
import { Server } from 'node:http';
|
|
3
|
+
|
|
4
|
+
type WebSocketClient = WebSocket$1;
|
|
5
|
+
type ConnectHandler = (client: WebSocketClient) => void;
|
|
6
|
+
type MessageHandler = (client: WebSocketClient, message: RawData) => void;
|
|
7
|
+
type DisconnectHandler = (client: WebSocketClient) => void;
|
|
8
|
+
type ErrorHandler = (client: WebSocketClient, error: Error) => void;
|
|
9
|
+
declare class QuikWebSocket {
|
|
10
|
+
private server?;
|
|
11
|
+
private connectHandler?;
|
|
12
|
+
private messageHandler?;
|
|
13
|
+
private disconnectHandler?;
|
|
14
|
+
private errorHandler?;
|
|
15
|
+
onConnect(handler: ConnectHandler): this;
|
|
16
|
+
onMessage(handler: MessageHandler): this;
|
|
17
|
+
onDisconnect(handler: DisconnectHandler): this;
|
|
18
|
+
onError(handler: ErrorHandler): this;
|
|
19
|
+
send(client: WebSocketClient, message: string | Buffer): this;
|
|
20
|
+
broadcast(message: string | Buffer): this;
|
|
21
|
+
start(server: Server): this;
|
|
22
|
+
close(): this;
|
|
23
|
+
}
|
|
24
|
+
declare function WebSocket(): QuikWebSocket;
|
|
25
|
+
|
|
26
|
+
export { QuikWebSocket, WebSocket };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { WebSocket as WebSocket$1, RawData } from 'ws';
|
|
2
|
+
import { Server } from 'node:http';
|
|
3
|
+
|
|
4
|
+
type WebSocketClient = WebSocket$1;
|
|
5
|
+
type ConnectHandler = (client: WebSocketClient) => void;
|
|
6
|
+
type MessageHandler = (client: WebSocketClient, message: RawData) => void;
|
|
7
|
+
type DisconnectHandler = (client: WebSocketClient) => void;
|
|
8
|
+
type ErrorHandler = (client: WebSocketClient, error: Error) => void;
|
|
9
|
+
declare class QuikWebSocket {
|
|
10
|
+
private server?;
|
|
11
|
+
private connectHandler?;
|
|
12
|
+
private messageHandler?;
|
|
13
|
+
private disconnectHandler?;
|
|
14
|
+
private errorHandler?;
|
|
15
|
+
onConnect(handler: ConnectHandler): this;
|
|
16
|
+
onMessage(handler: MessageHandler): this;
|
|
17
|
+
onDisconnect(handler: DisconnectHandler): this;
|
|
18
|
+
onError(handler: ErrorHandler): this;
|
|
19
|
+
send(client: WebSocketClient, message: string | Buffer): this;
|
|
20
|
+
broadcast(message: string | Buffer): this;
|
|
21
|
+
start(server: Server): this;
|
|
22
|
+
close(): this;
|
|
23
|
+
}
|
|
24
|
+
declare function WebSocket(): QuikWebSocket;
|
|
25
|
+
|
|
26
|
+
export { QuikWebSocket, WebSocket };
|
package/dist/ws/index.js
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
// src/ws/websockets.ts
|
|
2
|
+
import {
|
|
3
|
+
WebSocketServer,
|
|
4
|
+
WebSocket as WS
|
|
5
|
+
} from "ws";
|
|
6
|
+
var QuikWebSocket = class {
|
|
7
|
+
server;
|
|
8
|
+
connectHandler;
|
|
9
|
+
messageHandler;
|
|
10
|
+
disconnectHandler;
|
|
11
|
+
errorHandler;
|
|
12
|
+
onConnect(handler) {
|
|
13
|
+
this.connectHandler = handler;
|
|
14
|
+
return this;
|
|
15
|
+
}
|
|
16
|
+
onMessage(handler) {
|
|
17
|
+
this.messageHandler = handler;
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
onDisconnect(handler) {
|
|
21
|
+
this.disconnectHandler = handler;
|
|
22
|
+
return this;
|
|
23
|
+
}
|
|
24
|
+
onError(handler) {
|
|
25
|
+
this.errorHandler = handler;
|
|
26
|
+
return this;
|
|
27
|
+
}
|
|
28
|
+
send(client, message) {
|
|
29
|
+
if (client.readyState === WS.OPEN) {
|
|
30
|
+
client.send(message);
|
|
31
|
+
}
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
broadcast(message) {
|
|
35
|
+
if (!this.server) {
|
|
36
|
+
throw new Error(
|
|
37
|
+
"WebSocket server has not been started."
|
|
38
|
+
);
|
|
39
|
+
}
|
|
40
|
+
for (const client of this.server.clients) {
|
|
41
|
+
if (client.readyState === WS.OPEN) {
|
|
42
|
+
client.send(message);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
start(server) {
|
|
48
|
+
if (this.server) {
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
this.server = new WebSocketServer({
|
|
52
|
+
server
|
|
53
|
+
});
|
|
54
|
+
this.server.on("connection", (client) => {
|
|
55
|
+
this.connectHandler?.(client);
|
|
56
|
+
client.on("message", (message) => {
|
|
57
|
+
this.messageHandler?.(
|
|
58
|
+
client,
|
|
59
|
+
message
|
|
60
|
+
);
|
|
61
|
+
});
|
|
62
|
+
client.on("close", () => {
|
|
63
|
+
this.disconnectHandler?.(client);
|
|
64
|
+
});
|
|
65
|
+
client.on("error", (error) => {
|
|
66
|
+
this.errorHandler?.(
|
|
67
|
+
client,
|
|
68
|
+
error
|
|
69
|
+
);
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
return this;
|
|
73
|
+
}
|
|
74
|
+
close() {
|
|
75
|
+
this.server?.close();
|
|
76
|
+
return this;
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
function WebSocket() {
|
|
80
|
+
return new QuikWebSocket();
|
|
81
|
+
}
|
|
82
|
+
export {
|
|
83
|
+
QuikWebSocket,
|
|
84
|
+
WebSocket
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/ws/websockets.ts"],"sourcesContent":["import {\r\n WebSocketServer,\r\n WebSocket as WS,\r\n type RawData,\r\n} from \"ws\";\r\n\r\nimport type { Server as HTTPServer } from \"node:http\";\r\n\r\ntype WebSocketClient = WS;\r\n\r\ntype ConnectHandler = (\r\n client: WebSocketClient\r\n) => void;\r\n\r\ntype MessageHandler = (\r\n client: WebSocketClient,\r\n message: RawData\r\n) => void;\r\n\r\ntype DisconnectHandler = (\r\n client: WebSocketClient\r\n) => void;\r\n\r\ntype ErrorHandler = (\r\n client: WebSocketClient,\r\n error: Error\r\n) => void;\r\n\r\nclass QuikWebSocket {\r\n private server?: WebSocketServer;\r\n\r\n private connectHandler?: ConnectHandler;\r\n private messageHandler?: MessageHandler;\r\n private disconnectHandler?: DisconnectHandler;\r\n private errorHandler?: ErrorHandler;\r\n\r\n onConnect(handler: ConnectHandler) {\r\n this.connectHandler = handler;\r\n\r\n return this;\r\n }\r\n\r\n onMessage(handler: MessageHandler) {\r\n this.messageHandler = handler;\r\n\r\n return this;\r\n }\r\n\r\n onDisconnect(handler: DisconnectHandler) {\r\n this.disconnectHandler = handler;\r\n\r\n return this;\r\n }\r\n\r\n onError(handler: ErrorHandler) {\r\n this.errorHandler = handler;\r\n\r\n return this;\r\n }\r\n\r\n send(client: WebSocketClient,\r\n message: string | Buffer\r\n ) {\r\n if (client.readyState === WS.OPEN) {\r\n client.send(message);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n broadcast(message: string | Buffer) {\r\n if (!this.server) {\r\n throw new Error(\r\n \"WebSocket server has not been started.\"\r\n );\r\n }\r\n\r\n for (const client of this.server.clients) {\r\n if (client.readyState === WS.OPEN) {\r\n client.send(message);\r\n }\r\n }\r\n\r\n return this;\r\n }\r\n\r\n start(server: HTTPServer) {\r\n if (this.server) {\r\n return this;\r\n }\r\n\r\n this.server = new WebSocketServer({\r\n server,\r\n });\r\n\r\n this.server.on(\"connection\", (client) => {\r\n this.connectHandler?.(client);\r\n\r\n client.on(\"message\", (message) => {\r\n this.messageHandler?.(\r\n client,\r\n message\r\n );\r\n });\r\n\r\n client.on(\"close\", () => {\r\n this.disconnectHandler?.(client);\r\n });\r\n\r\n client.on(\"error\", (error) => {\r\n this.errorHandler?.(\r\n client,\r\n error\r\n );\r\n });\r\n });\r\n\r\n return this;\r\n }\r\n\r\n close() {\r\n this.server?.close();\r\n\r\n return this;\r\n }\r\n}\r\n\r\nfunction WebSocket() {\r\n return new QuikWebSocket();\r\n}\r\n\r\nexport {\r\n WebSocket,\r\n QuikWebSocket,\r\n};\r\n\r\nexport type {\r\n WebSocketClient,\r\n ConnectHandler,\r\n MessageHandler,\r\n DisconnectHandler,\r\n ErrorHandler,\r\n};"],"mappings":";AAAA;AAAA,EACI;AAAA,EACA,aAAa;AAAA,OAEV;AAwBP,IAAM,gBAAN,MAAoB;AAAA,EACR;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,UAAU,SAAyB;AAC/B,SAAK,iBAAiB;AAEtB,WAAO;AAAA,EACX;AAAA,EAEA,UAAU,SAAyB;AAC/B,SAAK,iBAAiB;AAEtB,WAAO;AAAA,EACX;AAAA,EAEA,aAAa,SAA4B;AACrC,SAAK,oBAAoB;AAEzB,WAAO;AAAA,EACX;AAAA,EAEA,QAAQ,SAAuB;AAC3B,SAAK,eAAe;AAEpB,WAAO;AAAA,EACX;AAAA,EAEA,KAAK,QACD,SACF;AACE,QAAI,OAAO,eAAe,GAAG,MAAM;AAC/B,aAAO,KAAK,OAAO;AAAA,IACvB;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,UAAU,SAA0B;AAChC,QAAI,CAAC,KAAK,QAAQ;AACd,YAAM,IAAI;AAAA,QACN;AAAA,MACJ;AAAA,IACJ;AAEA,eAAW,UAAU,KAAK,OAAO,SAAS;AACtC,UAAI,OAAO,eAAe,GAAG,MAAM;AAC/B,eAAO,KAAK,OAAO;AAAA,MACvB;AAAA,IACJ;AAEA,WAAO;AAAA,EACX;AAAA,EAEA,MAAM,QAAoB;AACtB,QAAI,KAAK,QAAQ;AACb,aAAO;AAAA,IACX;AAEA,SAAK,SAAS,IAAI,gBAAgB;AAAA,MAC9B;AAAA,IACJ,CAAC;AAED,SAAK,OAAO,GAAG,cAAc,CAAC,WAAW;AACrC,WAAK,iBAAiB,MAAM;AAE5B,aAAO,GAAG,WAAW,CAAC,YAAY;AAC9B,aAAK;AAAA,UACD;AAAA,UACA;AAAA,QACJ;AAAA,MACJ,CAAC;AAED,aAAO,GAAG,SAAS,MAAM;AACrB,aAAK,oBAAoB,MAAM;AAAA,MACnC,CAAC;AAED,aAAO,GAAG,SAAS,CAAC,UAAU;AAC1B,aAAK;AAAA,UACD;AAAA,UACA;AAAA,QACJ;AAAA,MACJ,CAAC;AAAA,IACL,CAAC;AAED,WAAO;AAAA,EACX;AAAA,EAEA,QAAQ;AACJ,SAAK,QAAQ,MAAM;AAEnB,WAAO;AAAA,EACX;AACJ;AAEA,SAAS,YAAY;AACjB,SAAO,IAAI,cAAc;AAC7B;","names":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@desaubv/quik",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "Quik is an Express-based library designed to simplify the creation of modern backends. It allows you to build APIs quickly, reducing repetitive code through clean syntax and intuitive tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.cjs",
|
|
@@ -26,14 +26,21 @@
|
|
|
26
26
|
"types": "./dist/ws/index.d.ts",
|
|
27
27
|
"import": "./dist/ws/index.js",
|
|
28
28
|
"require": "./dist/ws/index.cjs"
|
|
29
|
+
},
|
|
30
|
+
"./socket.io": {
|
|
31
|
+
"types": "./dist/socket.io/index.d.ts",
|
|
32
|
+
"import": "./dist/socket.io/index.js",
|
|
33
|
+
"require": "./dist/socket.io/index.cjs"
|
|
29
34
|
}
|
|
35
|
+
|
|
30
36
|
},
|
|
31
37
|
"files": [
|
|
32
38
|
"dist"
|
|
33
39
|
],
|
|
34
40
|
"scripts": {
|
|
35
41
|
"build": "tsup",
|
|
36
|
-
"dev": "tsup --watch"
|
|
42
|
+
"dev": "tsup --watch",
|
|
43
|
+
"publish": "npm publish --access public --tag latest"
|
|
37
44
|
},
|
|
38
45
|
"keywords": [
|
|
39
46
|
"quik",
|
|
@@ -65,6 +72,7 @@
|
|
|
65
72
|
"dependencies": {
|
|
66
73
|
"express": "^5.2.1",
|
|
67
74
|
"node-cron": "^4.6.0",
|
|
68
|
-
"socket.io": "^4.8.3"
|
|
75
|
+
"socket.io": "^4.8.3",
|
|
76
|
+
"ws": "^8.21.3"
|
|
69
77
|
}
|
|
70
78
|
}
|