next-ws 0.0.0-beta-20250824084203 → 0.0.0-beta-20250827053941

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/cli.cjs CHANGED
@@ -27,7 +27,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
27
27
  var import_minimist = __toESM(require("minimist"));
28
28
 
29
29
  // package.json
30
- var version = "0.0.0-beta-20250824084203";
30
+ var version = "0.0.0-beta-20250827053941";
31
31
 
32
32
  // src/commands/helpers/define.ts
33
33
  function defineCommandGroup(definition) {
@@ -810,10 +810,12 @@ var patch_1_default = definePatch({
810
810
  // src/patches/patch-2.ts
811
811
  var patchHeaders2 = definePatchStep({
812
812
  ...patchHeaders,
813
+ // CHANGE(next@15): headers function was moved
813
814
  path: "next:dist/server/request/headers.js"
814
815
  });
815
816
  var patchCookies2 = definePatchStep({
816
817
  ...patchCookies,
818
+ // CHANGE(next@15): cookies function was moved
817
819
  path: "next:dist/server/request/cookies.js"
818
820
  });
819
821
  var patch_2_default = definePatch({
@@ -62,8 +62,12 @@ var [getHttpServer, setHttpServer, useHttpServer] = (
62
62
  //
63
63
  )
64
64
  );
65
- var [getWebSocketServer, setWebSocketServer, useWebSocketServer] = useGlobal(
66
- Symbol.for("next-ws.websocket-server")
65
+ var [getWebSocketServer, setWebSocketServer, useWebSocketServer] = (
66
+ //
67
+ useGlobal(
68
+ Symbol.for("next-ws.websocket-server")
69
+ //
70
+ )
67
71
  );
68
72
  var [getRequestStorage, setRequestStorage, useRequestStorage] = (
69
73
  //
@@ -74,7 +78,7 @@ var [getRequestStorage, setRequestStorage, useRequestStorage] = (
74
78
  );
75
79
 
76
80
  // src/server/setup.ts
77
- var import_node_async_hooks2 = require("async_hooks");
81
+ var import_node_async_hooks = require("async_hooks");
78
82
  var logger2 = __toESM(require("next/dist/build/output/log.js"));
79
83
  var import_ws = require("ws");
80
84
 
@@ -120,15 +124,15 @@ function findMatchingRoute(nextServer, requestPathname) {
120
124
 
121
125
  // src/server/helpers/module.ts
122
126
  var logger = __toESM(require("next/dist/build/output/log.js"));
123
- async function importRouteModule(nextServer, filePath) {
127
+ async function importRouteModule(nextServer, filePathname) {
124
128
  try {
125
129
  if ("hotReloader" in nextServer) {
126
130
  await nextServer.hotReloader?.ensurePage({
127
- page: filePath,
131
+ page: filePathname,
128
132
  clientOnly: false
129
133
  });
130
134
  } else if ("ensurePage" in nextServer) {
131
- await nextServer.ensurePage({ page: filePath, clientOnly: false });
135
+ await nextServer.ensurePage({ page: filePathname, clientOnly: false });
132
136
  } else {
133
137
  logger.warnOnce(
134
138
  "[next-ws] unable to ensure page, you may need to open the route in your browser first so Next.js compiles it"
@@ -137,8 +141,8 @@ async function importRouteModule(nextServer, filePath) {
137
141
  } catch {
138
142
  }
139
143
  try {
140
- const buildPagePath = nextServer.getPagePath(filePath);
141
- return require(buildPagePath).routeModule;
144
+ const buildPagePath = nextServer.getPagePath(filePathname);
145
+ return (await require(buildPagePath)).routeModule;
142
146
  } catch (cause) {
143
147
  console.error(cause);
144
148
  return void 0;
@@ -163,7 +167,6 @@ function toNextRequest(message) {
163
167
  }
164
168
 
165
169
  // src/server/helpers/store.ts
166
- var import_node_async_hooks = require("async_hooks");
167
170
  var import_cookies = require("next/dist/compiled/@edge-runtime/cookies");
168
171
  var ReadonlyHeaders = class extends Headers {
169
172
  append() {
@@ -190,7 +193,6 @@ function createRequestStore(request) {
190
193
  cookies: new ReadonlyRequestsCookies(request.headers)
191
194
  };
192
195
  }
193
- var requestStorage = new import_node_async_hooks.AsyncLocalStorage();
194
196
 
195
197
  // src/server/setup.ts
196
198
  function setupWebSocketServer(nextServer) {
@@ -205,14 +207,14 @@ function setupWebSocketServer(nextServer) {
205
207
  //
206
208
  useWebSocketServer(() => new import_ws.WebSocketServer({ noServer: true }))
207
209
  );
208
- const requestStorage2 = (
210
+ const requestStorage = (
209
211
  //
210
- useRequestStorage(() => new import_node_async_hooks2.AsyncLocalStorage())
212
+ useRequestStorage(() => new import_node_async_hooks.AsyncLocalStorage())
211
213
  );
212
214
  logger2.ready("[next-ws] has started the WebSocket server");
213
- const kInstalled = Symbol.for("next-ws.http-server.attached");
214
- if (Reflect.has(httpServer, kInstalled)) return;
215
- Reflect.set(httpServer, kInstalled, true);
215
+ const kAttached = Symbol.for("next-ws.http-server.attached");
216
+ if (Reflect.has(httpServer, kAttached)) return;
217
+ Reflect.set(httpServer, kAttached, true);
216
218
  httpServer.on("upgrade", async (message, socket, head) => {
217
219
  const request = toNextRequest(message);
218
220
  const pathname = request.nextUrl.pathname;
@@ -242,7 +244,7 @@ function setupWebSocketServer(nextServer) {
242
244
  try {
243
245
  const context = { params: route.params };
244
246
  if (handleUpgrade) {
245
- await requestStorage2.run(
247
+ await requestStorage.run(
246
248
  createRequestStore(request),
247
249
  //
248
250
  () => handleUpgrade(client, wsServer, request, context)
@@ -3,19 +3,39 @@ import * as http from 'http';
3
3
  import * as ws from 'ws';
4
4
  import NextNodeServer from 'next/dist/server/next-server.js';
5
5
 
6
- /** @deprecated Prefer UPGRADE and {@link UpgradeHandler} */
6
+ /**
7
+ * WebSocket socket handler.
8
+ * @param client WebSocket client instance
9
+ * @param request Node.js HTTP incoming message instance
10
+ * @param server WebSocket server instance
11
+ * @param context Route context
12
+ * @deprecated Prefer UPGRADE and {@link UpgradeHandler}
13
+ */
7
14
  type SocketHandler = (client: ws.WebSocket, request: http.IncomingMessage, server: ws.WebSocketServer, context: {
8
15
  params: Record<string, string | string[]>;
9
16
  }) => unknown;
17
+ /**
18
+ * WebSocket upgrade handler.
19
+ * @param client WebSocket client instance
20
+ * @param server WebSocket server instance
21
+ * @param request Next.js request instance
22
+ * @param context Route context
23
+ */
10
24
  type UpgradeHandler = (client: ws.WebSocket, server: ws.WebSocketServer, request: next_server.NextRequest, context: RouteContext<string>) => unknown;
11
25
 
12
- type RouteParams<Path extends string> = Path extends `${infer Before}[[...${infer Param}]]${infer After}` ? RouteParams<Before> & {
26
+ /**
27
+ * Extract the parameters from a route pattern.
28
+ */
29
+ type RouteParams<Pattern extends string> = Pattern extends `${infer Before}[[...${infer Param}]]${infer After}` ? RouteParams<Before> & {
13
30
  [K in Param]?: string[];
14
- } & RouteParams<After> : Path extends `${infer Before}[...${infer Param}]${infer After}` ? RouteParams<Before> & {
31
+ } & RouteParams<After> : Pattern extends `${infer Before}[...${infer Param}]${infer After}` ? RouteParams<Before> & {
15
32
  [K in Param]: string[];
16
- } & RouteParams<After> : Path extends `${infer Before}[${infer Param}]${infer After}` ? RouteParams<Before> & {
33
+ } & RouteParams<After> : Pattern extends `${infer Before}[${infer Param}]${infer After}` ? RouteParams<Before> & {
17
34
  [K in Param]: string;
18
35
  } & RouteParams<After> : {};
36
+ /**
37
+ * Route context object containing the parameters.
38
+ */
19
39
  type RouteContext<Path extends string> = {
20
40
  params: Record<string, string | string[] | undefined> & RouteParams<Path> & RouteParams<Path>;
21
41
  };
@@ -25,6 +45,10 @@ declare const setHttpServer: (value: http.Server<typeof http.IncomingMessage, ty
25
45
  declare const getWebSocketServer: () => ws.WebSocketServer | undefined;
26
46
  declare const setWebSocketServer: (value: ws.WebSocketServer) => boolean;
27
47
 
48
+ /**
49
+ * Attach the WebSocket server to the HTTP server.
50
+ * @param nextServer Next.js Node server instance
51
+ */
28
52
  declare function setupWebSocketServer(nextServer: NextNodeServer): void;
29
53
 
30
54
  export { type RouteContext, type SocketHandler, type UpgradeHandler, getHttpServer, getWebSocketServer, setHttpServer, setWebSocketServer, setupWebSocketServer };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "next-ws",
3
- "version": "0.0.0-beta-20250824084203",
3
+ "version": "0.0.0-beta-20250827053941",
4
4
  "description": "Add support for WebSockets in the Next.js app directory",
5
5
  "license": "MIT",
6
6
  "keywords": [
@@ -49,6 +49,7 @@
49
49
  "@biomejs/biome": "^2.2.0",
50
50
  "@changesets/changelog-git": "^0.2.1",
51
51
  "@changesets/cli": "^2.27.12",
52
+ "@favware/npm-deprecate": "^2.0.0",
52
53
  "@playwright/test": "^1.55.0",
53
54
  "@types/jscodeshift": "^17.3.0",
54
55
  "@types/minimist": "^1.2.5",