@zap-socket/server 0.0.7 → 0.0.8

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/server.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { WebSocketServer, WebSocket } from "ws";
2
- import type { EventMap, ZapServerEvent } from "@zap-socket/types";
2
+ import type { EventMap, ZapEvent, ZapServerEvent } from "@zap-socket/types";
3
3
  interface ZapServerConstructorT {
4
4
  port: number;
5
5
  events?: EventMap;
@@ -21,9 +21,9 @@ export declare class ZapServer<T extends EventMap> {
21
21
  broadcastRaw(data: any): void;
22
22
  broadcast(event: keyof T, data: any): void;
23
23
  selectiveBroascast(event: string, data: any, connections: string[]): void;
24
- get event(): { [K in keyof T as T[K] extends ZapServerEvent<any> ? K : never]: {
25
- send: (clientId: string, data?: (T[K] extends ZapServerEvent<any> ? T[K]["data"] : never)) => void;
26
- broadcast: (data?: (T[K] extends ZapServerEvent<any> ? T[K]["data"] : never)) => void;
24
+ get events(): { [K in keyof T as T[K] extends ZapServerEvent<any> | ZapEvent<any, any> ? K : never]: {
25
+ send: (clientId: string, data?: (T[K] extends ZapServerEvent<any> ? T[K]["data"] : T[K] extends ZapEvent<any, any> ? ReturnType<T[K]["process"]> : never)) => void;
26
+ broadcast: (data?: (T[K] extends ZapServerEvent<any> ? T[K]["data"] : T[K] extends ZapEvent<any, any> ? ReturnType<T[K]["process"]> : never)) => void;
27
27
  }; };
28
28
  get clients(): Set<string>;
29
29
  get socketMap(): Map<string, WebSocket>;
package/dist/server.js CHANGED
@@ -40,7 +40,7 @@ export class ZapServer {
40
40
  const parsedMessage = deserialize(message.toString());
41
41
  if (!parsedMessage)
42
42
  return;
43
- const { event, stream, data, requestId, streamId } = parsedMessage;
43
+ const { event, stream, data, requestId, streamId, batch } = parsedMessage;
44
44
  const key = event || stream;
45
45
  const eventObj = this._events[key];
46
46
  if (!eventObj || !isClientEvent(eventObj))
@@ -68,7 +68,17 @@ export class ZapServer {
68
68
  // All middleware passed
69
69
  const context = { server: this, id: this.wsToId.get(ws), buffer: ctx };
70
70
  if (requestId) { // req-res premitive
71
- const result = process(data, context);
71
+ let result;
72
+ if (batch) {
73
+ if (!data) {
74
+ ws.send("ACK " + requestId);
75
+ return;
76
+ }
77
+ result = data.map((part) => process(part, context));
78
+ }
79
+ else {
80
+ result = process(data, context);
81
+ }
72
82
  if (result === undefined) { // just ACK the request process returns nothing
73
83
  ws.send("ACK " + requestId);
74
84
  return;
@@ -169,30 +179,28 @@ export class ZapServer {
169
179
  ws.send(serializedPacket);
170
180
  });
171
181
  }
172
- get event() {
182
+ get events() {
173
183
  return Object.fromEntries(Object.keys(this._events).map((eventName) => {
174
- // HACK: use a better method to determine the type of event.
175
- if ("data" in this._events[eventName]) {
176
- // event is server event
177
- return [eventName, {
178
- send: (clientId, data) => {
179
- const packet = {
180
- event: eventName,
181
- data
182
- };
183
- this.sendMessageRaw(clientId, packet);
184
- },
185
- broadcast: (data) => {
186
- const packet = {
187
- event: eventName,
188
- data
189
- };
190
- this.broadcastRaw(packet);
191
- }
192
- }];
193
- }
194
- return null;
195
- }).filter(entry => entry !== null));
184
+ return [
185
+ eventName,
186
+ {
187
+ send: (clientId, data) => {
188
+ const packet = {
189
+ event: eventName,
190
+ data
191
+ };
192
+ this.sendMessageRaw(clientId, packet);
193
+ },
194
+ broadcast: (data) => {
195
+ const packet = {
196
+ event: eventName,
197
+ data
198
+ };
199
+ this.broadcastRaw(packet);
200
+ }
201
+ }
202
+ ];
203
+ }));
196
204
  }
197
205
  get clients() {
198
206
  return new Set(this.idToWs.keys());
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zap-socket/server",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "A fully typesafe tRPC-inspired WebSocket library with Zod validation, req-res model, and native subscriptions.",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -23,7 +23,7 @@
23
23
  "vitest": "^3.0.9"
24
24
  },
25
25
  "dependencies": {
26
- "@zap-socket/types": "^0.0.3",
26
+ "@zap-socket/types": "^0.0.4",
27
27
  "zod": "^3.24.2"
28
28
  }
29
29
  }