next-ws 0.0.0-beta-20250826080310 → 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 +3 -1
- package/dist/server/index.cjs +17 -15
- package/dist/server/index.d.ts +28 -4
- package/package.json +2 -1
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-
|
|
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({
|
package/dist/server/index.cjs
CHANGED
|
@@ -62,8 +62,12 @@ var [getHttpServer, setHttpServer, useHttpServer] = (
|
|
|
62
62
|
//
|
|
63
63
|
)
|
|
64
64
|
);
|
|
65
|
-
var [getWebSocketServer, setWebSocketServer, useWebSocketServer] =
|
|
66
|
-
|
|
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
|
|
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,
|
|
127
|
+
async function importRouteModule(nextServer, filePathname) {
|
|
124
128
|
try {
|
|
125
129
|
if ("hotReloader" in nextServer) {
|
|
126
130
|
await nextServer.hotReloader?.ensurePage({
|
|
127
|
-
page:
|
|
131
|
+
page: filePathname,
|
|
128
132
|
clientOnly: false
|
|
129
133
|
});
|
|
130
134
|
} else if ("ensurePage" in nextServer) {
|
|
131
|
-
await nextServer.ensurePage({ page:
|
|
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,7 +141,7 @@ async function importRouteModule(nextServer, filePath) {
|
|
|
137
141
|
} catch {
|
|
138
142
|
}
|
|
139
143
|
try {
|
|
140
|
-
const buildPagePath = nextServer.getPagePath(
|
|
144
|
+
const buildPagePath = nextServer.getPagePath(filePathname);
|
|
141
145
|
return (await require(buildPagePath)).routeModule;
|
|
142
146
|
} catch (cause) {
|
|
143
147
|
console.error(cause);
|
|
@@ -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
|
|
210
|
+
const requestStorage = (
|
|
209
211
|
//
|
|
210
|
-
useRequestStorage(() => new
|
|
212
|
+
useRequestStorage(() => new import_node_async_hooks.AsyncLocalStorage())
|
|
211
213
|
);
|
|
212
214
|
logger2.ready("[next-ws] has started the WebSocket server");
|
|
213
|
-
const
|
|
214
|
-
if (Reflect.has(httpServer,
|
|
215
|
-
Reflect.set(httpServer,
|
|
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
|
|
247
|
+
await requestStorage.run(
|
|
246
248
|
createRequestStore(request),
|
|
247
249
|
//
|
|
248
250
|
() => handleUpgrade(client, wsServer, request, context)
|
package/dist/server/index.d.ts
CHANGED
|
@@ -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
|
-
/**
|
|
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
|
-
|
|
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> :
|
|
31
|
+
} & RouteParams<After> : Pattern extends `${infer Before}[...${infer Param}]${infer After}` ? RouteParams<Before> & {
|
|
15
32
|
[K in Param]: string[];
|
|
16
|
-
} & RouteParams<After> :
|
|
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-
|
|
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",
|