@react-router/serve 8.0.0 → 8.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/CHANGELOG.md CHANGED
@@ -1,5 +1,24 @@
1
1
  # `@react-router/serve`
2
2
 
3
+ ## v8.1.0
4
+
5
+ ### Patch Changes
6
+
7
+ - Use Node's built-in networking APIs to find an available port and remove the `get-port` dependency ([#15239](https://github.com/remix-run/react-router/pull/15239))
8
+ - Updated dependencies:
9
+ - [`react-router@8.1.0`](https://github.com/remix-run/react-router/releases/tag/react-router@8.1.0)
10
+ - [`@react-router/express@8.1.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/express@8.1.0)
11
+ - [`@react-router/node@8.1.0`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@8.1.0)
12
+
13
+ ## v8.0.1
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies:
18
+ - [`react-router@8.0.1`](https://github.com/remix-run/react-router/releases/tag/react-router@8.0.1)
19
+ - [`@react-router/express@8.0.1`](https://github.com/remix-run/react-router/releases/tag/@react-router/express@8.0.1)
20
+ - [`@react-router/node@8.0.1`](https://github.com/remix-run/react-router/releases/tag/@react-router/node@8.0.1)
21
+
3
22
  ## v8.0.0
4
23
 
5
24
  ### Major Changes
@@ -7,6 +26,10 @@
7
26
  - Switch from `@mjackson/node-fetch-server` to `@remix-run/node-fetch-server` now that we can directly use ESM-only packages ([#14930](https://github.com/remix-run/react-router/pull/14930))
8
27
  - Update minimum Node version to 22.22.0 ([#14928](https://github.com/remix-run/react-router/pull/14928))
9
28
 
29
+ ### Minor Changes
30
+
31
+ - Bump `express` from `4.21.2` to `5.2.1`
32
+
10
33
  ### Patch Changes
11
34
 
12
35
  - Bump dependencies ([#15091](https://github.com/remix-run/react-router/pull/15091))
package/dist/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
  /**
3
- * @react-router/serve v8.0.0
3
+ * @react-router/serve v8.1.0
4
4
  *
5
5
  * Copyright (c) Remix Software Inc.
6
6
  *
@@ -10,6 +10,7 @@
10
10
  * @license MIT
11
11
  */
12
12
  import fs from "node:fs";
13
+ import net from "node:net";
13
14
  import os from "node:os";
14
15
  import path from "node:path";
15
16
  import url from "node:url";
@@ -19,7 +20,6 @@ import compression from "compression";
19
20
  import express from "express";
20
21
  import morgan from "morgan";
21
22
  import sourceMapSupport from "source-map-support";
22
- import getPort from "get-port";
23
23
  //#region cli.ts
24
24
  process.env.NODE_ENV = process.env.NODE_ENV ?? "production";
25
25
  sourceMapSupport.install({ retrieveSourceMap: function(source) {
@@ -42,6 +42,33 @@ function parseNumber(raw) {
42
42
  if (Number.isNaN(maybe)) return void 0;
43
43
  return maybe;
44
44
  }
45
+ async function getAvailablePort(preferredPort, host) {
46
+ let availablePort = await checkPort(preferredPort, host) ?? await checkPort(0, host);
47
+ if (availablePort === void 0) throw new Error("No available port found");
48
+ return availablePort;
49
+ }
50
+ function checkPort(port, host) {
51
+ return new Promise((resolve, reject) => {
52
+ let server = net.createServer();
53
+ let listenOptions = host ? {
54
+ port,
55
+ host
56
+ } : { port };
57
+ server.unref();
58
+ server.once("error", (error) => {
59
+ if (error.code === "EADDRINUSE" || error.code === "EACCES") resolve(void 0);
60
+ else reject(error);
61
+ });
62
+ server.listen(listenOptions, () => {
63
+ let address = server.address();
64
+ let availablePort = typeof address === "object" && address ? address.port : port;
65
+ server.close((error) => {
66
+ if (error) reject(error);
67
+ else resolve(availablePort);
68
+ });
69
+ });
70
+ });
71
+ }
45
72
  function getExpressPath(publicPath) {
46
73
  let pathname;
47
74
  try {
@@ -52,7 +79,7 @@ function getExpressPath(publicPath) {
52
79
  return pathname.startsWith("/") ? pathname : `/${pathname}`;
53
80
  }
54
81
  async function run() {
55
- let port = parseNumber(process.env.PORT) ?? await getPort({ port: 3e3 });
82
+ let port = parseNumber(process.env.PORT) ?? await getAvailablePort(3e3, process.env.HOST);
56
83
  let buildPathArg = process.argv[2];
57
84
  if (!buildPathArg) {
58
85
  console.error(`
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@react-router/serve",
3
3
  "type": "module",
4
- "version": "8.0.0",
4
+ "version": "8.1.0",
5
5
  "description": "Production application server for React Router",
6
6
  "bugs": {
7
7
  "url": "https://github.com/remix-run/react-router/issues"
@@ -37,14 +37,13 @@
37
37
  "@remix-run/node-fetch-server": "^0.13.3",
38
38
  "compression": "^1.8.1",
39
39
  "express": "^5.2.1",
40
- "get-port": "7.2.0",
41
40
  "morgan": "^1.10.1",
42
41
  "source-map-support": "^0.5.21",
43
- "@react-router/node": "8.0.0",
44
- "@react-router/express": "8.0.0"
42
+ "@react-router/express": "8.1.0",
43
+ "@react-router/node": "8.1.0"
45
44
  },
46
45
  "peerDependencies": {
47
- "react-router": "8.0.0"
46
+ "react-router": "8.1.0"
48
47
  },
49
48
  "devDependencies": {
50
49
  "@types/compression": "^1.8.1",