send: use nodejs_22 (#515607)

This commit is contained in:
dish
2026-05-04 15:09:46 +00:00
committed by GitHub
2 changed files with 146 additions and 11 deletions
@@ -0,0 +1,130 @@
From 4e1e354d17b558954c8e006bb432bb746922ec81 Mon Sep 17 00:00:00 2001
From: Moraxyc <i@qaq.li>
Date: Sat, 2 May 2026 04:26:09 +0800
Subject: [PATCH] express-ws: convert ESM sources to CommonJS for Node.js 22
---
express-ws/index.js | 4 +---
express-ws/src/add-ws-method.js | 8 +++++---
express-ws/src/index.js | 14 ++++++++------
express-ws/src/trailing-slash.js | 4 +++-
express-ws/src/websocket-url.js | 6 ++++--
express-ws/src/wrap-middleware.js | 4 +++-
6 files changed, 24 insertions(+), 16 deletions(-)
diff --git a/express-ws/index.js b/express-ws/index.js
index b0df682..bada276 100644
--- a/express-ws/index.js
+++ b/express-ws/index.js
@@ -1,4 +1,2 @@
/* eslint-disable-next-line no-underscore-dangle */
-const _require = require('esm')(module);
-
-module.exports = _require('./src/index').default;
+module.exports = require("./src/index");
diff --git a/express-ws/src/add-ws-method.js b/express-ws/src/add-ws-method.js
index 8c3a279..633ff86 100644
--- a/express-ws/src/add-ws-method.js
+++ b/express-ws/src/add-ws-method.js
@@ -1,7 +1,7 @@
-import wrapMiddleware from './wrap-middleware';
-import websocketUrl from './websocket-url';
+const wrapMiddleware = require('./wrap-middleware');
+const websocketUrl = require('./websocket-url');
-export default function addWsMethod(target) {
+function addWsMethod(target) {
/* This prevents conflict with other things setting `.ws`. */
if (target.ws === null || target.ws === undefined) {
target.ws = function addWsRoute(route, ...middlewares) {
@@ -28,3 +28,5 @@ export default function addWsMethod(target) {
};
}
}
+
+module.exports = addWsMethod;
diff --git a/express-ws/src/index.js b/express-ws/src/index.js
index dab6c66..16f3a2b 100644
--- a/express-ws/src/index.js
+++ b/express-ws/src/index.js
@@ -3,14 +3,14 @@
*
* Here be dragons. */
-import http from 'http';
-import express from 'express';
-import ws from 'ws';
+const http = require('http');
+const express = require('express');
+const ws = require('ws');
-import websocketUrl from './websocket-url';
-import addWsMethod from './add-ws-method';
+const websocketUrl = require('./websocket-url');
+const addWsMethod = require('./add-ws-method');
-export default function expressWs(app, httpServer, options = {}) {
+function expressWs(app, httpServer, options = {}) {
let server = httpServer;
if (server === null || server === undefined) {
@@ -84,3 +84,5 @@ export default function expressWs(app, httpServer, options = {}) {
}
};
}
+
+module.exports = expressWs;
diff --git a/express-ws/src/trailing-slash.js b/express-ws/src/trailing-slash.js
index c7cba79..791c43c 100644
--- a/express-ws/src/trailing-slash.js
+++ b/express-ws/src/trailing-slash.js
@@ -1,7 +1,9 @@
-export default function addTrailingSlash(string) {
+function addTrailingSlash(string) {
let suffixed = string;
if (suffixed.charAt(suffixed.length - 1) !== '/') {
suffixed = `${suffixed}/`;
}
return suffixed;
}
+
+module.exports = addTrailingSlash;
diff --git a/express-ws/src/websocket-url.js b/express-ws/src/websocket-url.js
index 64b845f..d2f35eb 100644
--- a/express-ws/src/websocket-url.js
+++ b/express-ws/src/websocket-url.js
@@ -1,7 +1,7 @@
-import trailingSlash from './trailing-slash';
+const trailingSlash = require('./trailing-slash');
/* The following fixes HenningM/express-ws#17, correctly. */
-export default function websocketUrl(url) {
+function websocketUrl(url) {
if (url.indexOf('?') !== -1) {
const [baseUrl, query] = url.split('?');
@@ -9,3 +9,5 @@ export default function websocketUrl(url) {
}
return `${trailingSlash(url)}.websocket`;
}
+
+module.exports = websocketUrl;
diff --git a/express-ws/src/wrap-middleware.js b/express-ws/src/wrap-middleware.js
index 09b0dbf..c8586d7 100644
--- a/express-ws/src/wrap-middleware.js
+++ b/express-ws/src/wrap-middleware.js
@@ -1,4 +1,4 @@
-export default function wrapMiddleware(middleware) {
+function wrapMiddleware(middleware) {
return (req, res, next) => {
if (req.ws !== null && req.ws !== undefined) {
req.wsHandled = true;
@@ -15,3 +15,5 @@ export default function wrapMiddleware(middleware) {
}
};
}
+
+module.exports = wrapMiddleware;
--
2.53.0
+16 -11
View File
@@ -3,24 +3,32 @@
buildNpmPackage,
fetchFromGitHub,
makeBinaryWrapper,
nodejs_20,
nodejs_22,
nix-update-script,
nixosTests,
}:
buildNpmPackage rec {
buildNpmPackage (finalAttrs: {
pname = "send";
version = "3.4.27";
src = fetchFromGitHub {
owner = "timvisee";
repo = "send";
tag = "v${version}";
tag = "v${finalAttrs.version}";
hash = "sha256-tfntox8Sw3xzlCOJgY/LThThm+mptYY5BquYDjzHonQ=";
};
nodejs = nodejs_20;
# @dannycoates/express-ws uses the unmaintained esm loader, which fails on nodejs_22.
postConfigure = ''
patch -p1 \
--directory=node_modules/@dannycoates \
< ${./dannycoates-express-ws-drop-esm-loader.patch}
'';
npmDepsHash = "sha256-ZVegUECrwkn/DlAwqx5VDmcwEIJV/jAAV99Dq29Tm2w=";
nodejs = nodejs_22;
npmDepsFetcherVersion = 2;
npmDepsHash = "sha256-QInXcYpZcAOJMS6QFtIapftyWsqA80ef+OiKJ9XEs98=";
nativeBuildInputs = [
makeBinaryWrapper
@@ -28,19 +36,16 @@ buildNpmPackage rec {
env = {
PUPPETEER_SKIP_CHROMIUM_DOWNLOAD = "true";
NODE_OPTIONS = "--openssl-legacy-provider";
};
makeCacheWritable = true;
npmPackFlags = [ "--ignore-scripts" ];
postInstall = ''
cp -r dist $out/lib/node_modules/send/
ln -s $out/lib/node_modules/send/dist/version.json $out/lib/node_modules/send/version.json
makeWrapper ${lib.getExe nodejs} $out/bin/send \
makeWrapper ${lib.getExe finalAttrs.nodejs} $out/bin/send \
--add-flags $out/lib/node_modules/send/server/bin/prod.js \
--set "NODE_ENV" "production"
'';
@@ -54,7 +59,7 @@ buildNpmPackage rec {
meta = {
description = "File Sharing Experiment";
changelog = "https://github.com/timvisee/send/releases/tag/v${version}";
changelog = "https://github.com/timvisee/send/releases/tag/v${finalAttrs.version}";
homepage = "https://github.com/timvisee/send";
license = lib.licenses.mpl20;
maintainers = with lib.maintainers; [
@@ -63,4 +68,4 @@ buildNpmPackage rec {
];
mainProgram = "send";
};
}
})