@react-router/serve
Advanced tools
Comparing version
#!/usr/bin/env node | ||
// If not already set, default `NODE_ENV=production` so React loads the proper | ||
// version in it's CJS entry script | ||
process.env.NODE_ENV = process.env.NODE_ENV ?? "production"; | ||
require("./dist/cli"); |
138
CHANGELOG.md
@@ -1,8 +0,134 @@ | ||
# `@remix-run/serve` | ||
# `@react-router/serve` | ||
## 7.0.0-pre.0 | ||
## 7.5.1 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.5.1` | ||
- `@react-router/node@7.5.1` | ||
- `@react-router/express@7.5.1` | ||
## 7.5.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.5.0` | ||
- `@react-router/node@7.5.0` | ||
- `@react-router/express@7.5.0` | ||
## 7.4.1 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.4.1` | ||
- `@react-router/express@7.4.1` | ||
- `@react-router/node@7.4.1` | ||
## 7.4.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.4.0` | ||
- `@react-router/node@7.4.0` | ||
- `@react-router/express@7.4.0` | ||
## 7.3.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.3.0` | ||
- `@react-router/express@7.3.0` | ||
- `@react-router/node@7.3.0` | ||
## 7.2.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.2.0` | ||
- `@react-router/node@7.2.0` | ||
- `@react-router/express@7.2.0` | ||
## 7.1.5 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.1.5` | ||
- `@react-router/node@7.1.5` | ||
- `@react-router/express@7.1.5` | ||
## 7.1.4 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.1.4` | ||
- `@react-router/node@7.1.4` | ||
- `@react-router/express@7.1.4` | ||
## 7.1.3 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.1.3` | ||
- `@react-router/express@7.1.3` | ||
- `@react-router/node@7.1.3` | ||
## 7.1.2 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.1.2` | ||
- `@react-router/node@7.1.2` | ||
- `@react-router/express@7.1.2` | ||
## 7.1.1 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.1.1` | ||
- `@react-router/express@7.1.1` | ||
- `@react-router/node@7.1.1` | ||
## 7.1.0 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.1.0` | ||
- `@react-router/node@7.1.0` | ||
- `@react-router/express@7.1.0` | ||
## 7.0.2 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.0.2` | ||
- `@react-router/node@7.0.2` | ||
- `@react-router/express@7.0.2` | ||
## 7.0.1 | ||
### Patch Changes | ||
- Updated dependencies: | ||
- `react-router@7.0.1` | ||
- `@react-router/express@7.0.1` | ||
- `@react-router/node@7.0.1` | ||
## 7.0.0 | ||
### Major Changes | ||
- Remove single_fetch future flag. ([#11522](https://github.com/remix-run/react-router/pull/11522)) | ||
- Remove single fetch future flag. ([#11522](https://github.com/remix-run/react-router/pull/11522)) | ||
- update minimum node version to 18 ([#11690](https://github.com/remix-run/react-router/pull/11690)) | ||
@@ -22,5 +148,5 @@ - Add `exports` field to all packages ([#11675](https://github.com/remix-run/react-router/pull/11675)) | ||
- Updated dependencies: | ||
- `react-router@7.0.0-pre.0` | ||
- `@react-router/express@7.0.0-pre.0` | ||
- `@react-router/node@7.0.0-pre.0` | ||
- `react-router@7.0.0` | ||
- `@react-router/express@7.0.0` | ||
- `@react-router/node@7.0.0` | ||
@@ -27,0 +153,0 @@ ## 2.9.0 |
@@ -1,1 +0,1 @@ | ||
import "@react-router/node/install"; | ||
#!/usr/bin/env node |
139
dist/cli.js
@@ -0,3 +1,4 @@ | ||
#!/usr/bin/env node | ||
/** | ||
* @react-router/serve v0.0.0-experimental-4b431ca46 | ||
* @react-router/serve v0.0.0-experimental-4cf800728 | ||
* | ||
@@ -11,40 +12,48 @@ * Copyright (c) Remix Software Inc. | ||
*/ | ||
'use strict'; | ||
"use strict"; | ||
var __create = Object.create; | ||
var __defProp = Object.defineProperty; | ||
var __getOwnPropDesc = Object.getOwnPropertyDescriptor; | ||
var __getOwnPropNames = Object.getOwnPropertyNames; | ||
var __getProtoOf = Object.getPrototypeOf; | ||
var __hasOwnProp = Object.prototype.hasOwnProperty; | ||
var __copyProps = (to, from, except, desc) => { | ||
if (from && typeof from === "object" || typeof from === "function") { | ||
for (let key of __getOwnPropNames(from)) | ||
if (!__hasOwnProp.call(to, key) && key !== except) | ||
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); | ||
} | ||
return to; | ||
}; | ||
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( | ||
// If the importer is in node compatibility mode or this is not an ESM | ||
// file that has been converted to a CommonJS file using a Babel- | ||
// compatible transform (i.e. "__esModule" has not been set), then set | ||
// "default" to the CommonJS "module.exports" for node compatibility. | ||
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target, | ||
mod | ||
)); | ||
require('@react-router/node/install'); | ||
var fs = require('node:fs'); | ||
var os = require('node:os'); | ||
var path = require('node:path'); | ||
var url = require('node:url'); | ||
var node = require('@react-router/node'); | ||
var express$1 = require('@react-router/express'); | ||
var compression = require('compression'); | ||
var express = require('express'); | ||
var morgan = require('morgan'); | ||
var sourceMapSupport = require('source-map-support'); | ||
var getPort = require('get-port'); | ||
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } | ||
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs); | ||
var os__default = /*#__PURE__*/_interopDefaultLegacy(os); | ||
var path__default = /*#__PURE__*/_interopDefaultLegacy(path); | ||
var url__default = /*#__PURE__*/_interopDefaultLegacy(url); | ||
var compression__default = /*#__PURE__*/_interopDefaultLegacy(compression); | ||
var express__default = /*#__PURE__*/_interopDefaultLegacy(express); | ||
var morgan__default = /*#__PURE__*/_interopDefaultLegacy(morgan); | ||
var sourceMapSupport__default = /*#__PURE__*/_interopDefaultLegacy(sourceMapSupport); | ||
var getPort__default = /*#__PURE__*/_interopDefaultLegacy(getPort); | ||
// cli.ts | ||
var import_node_fs = __toESM(require("fs")); | ||
var import_node_os = __toESM(require("os")); | ||
var import_node_path = __toESM(require("path")); | ||
var import_node_url = __toESM(require("url")); | ||
var import_express = require("@react-router/express"); | ||
var import_compression = __toESM(require("compression")); | ||
var import_express2 = __toESM(require("express")); | ||
var import_morgan = __toESM(require("morgan")); | ||
var import_source_map_support = __toESM(require("source-map-support")); | ||
var import_get_port = __toESM(require("get-port")); | ||
process.env.NODE_ENV = process.env.NODE_ENV ?? "production"; | ||
sourceMapSupport__default["default"].install({ | ||
retrieveSourceMap: function (source) { | ||
import_source_map_support.default.install({ | ||
retrieveSourceMap: function(source) { | ||
let match = source.startsWith("file://"); | ||
if (match) { | ||
let filePath = url__default["default"].fileURLToPath(source); | ||
let filePath = import_node_url.default.fileURLToPath(source); | ||
let sourceMapPath = `${filePath}.map`; | ||
if (fs__default["default"].existsSync(sourceMapPath)) { | ||
if (import_node_fs.default.existsSync(sourceMapPath)) { | ||
return { | ||
url: source, | ||
map: fs__default["default"].readFileSync(sourceMapPath, "utf8") | ||
map: import_node_fs.default.readFileSync(sourceMapPath, "utf8") | ||
}; | ||
@@ -56,14 +65,11 @@ } | ||
}); | ||
node.installGlobals(); | ||
run(); | ||
function parseNumber(raw) { | ||
if (raw === undefined) return undefined; | ||
if (raw === void 0) return void 0; | ||
let maybe = Number(raw); | ||
if (Number.isNaN(maybe)) return undefined; | ||
if (Number.isNaN(maybe)) return void 0; | ||
return maybe; | ||
} | ||
async function run() { | ||
let port = parseNumber(process.env.PORT) ?? (await getPort__default["default"]({ | ||
port: 3000 | ||
})); | ||
let port = parseNumber(process.env.PORT) ?? await (0, import_get_port.default)({ port: 3e3 }); | ||
let buildPathArg = process.argv[2]; | ||
@@ -75,41 +81,38 @@ if (!buildPathArg) { | ||
} | ||
let buildPath = path__default["default"].resolve(buildPathArg); | ||
let build = await import(url__default["default"].pathToFileURL(buildPath).href); | ||
let buildPath = import_node_path.default.resolve(buildPathArg); | ||
let build = await import(import_node_url.default.pathToFileURL(buildPath).href); | ||
let onListen = () => { | ||
var _Object$values$flat$f; | ||
let address = process.env.HOST || ((_Object$values$flat$f = Object.values(os__default["default"].networkInterfaces()).flat().find(ip => String(ip === null || ip === void 0 ? void 0 : ip.family).includes("4") && !(ip !== null && ip !== void 0 && ip.internal))) === null || _Object$values$flat$f === void 0 ? void 0 : _Object$values$flat$f.address); | ||
let address = process.env.HOST || Object.values(import_node_os.default.networkInterfaces()).flat().find((ip) => String(ip?.family).includes("4") && !ip?.internal)?.address; | ||
if (!address) { | ||
console.log(`[react-router-serve] http://localhost:${port}`); | ||
} else { | ||
console.log(`[react-router-serve] http://localhost:${port} (http://${address}:${port})`); | ||
console.log( | ||
`[react-router-serve] http://localhost:${port} (http://${address}:${port})` | ||
); | ||
} | ||
}; | ||
let app = express__default["default"](); | ||
let app = (0, import_express2.default)(); | ||
app.disable("x-powered-by"); | ||
app.use(compression__default["default"]()); | ||
app.use(path__default["default"].posix.join(build.publicPath, "assets"), express__default["default"].static(path__default["default"].join(build.assetsBuildDirectory, "assets"), { | ||
immutable: true, | ||
maxAge: "1y" | ||
})); | ||
app.use(build.publicPath, express__default["default"].static(build.assetsBuildDirectory, { | ||
// Don't redirect directory index.html request to include a trailing slash | ||
redirect: false, | ||
setHeaders: function (res, path) { | ||
if (path.endsWith(".data")) { | ||
res.set("Content-Type", "text/x-turbo"); | ||
} | ||
} | ||
})); | ||
app.use(express__default["default"].static("public", { | ||
maxAge: "1h" | ||
})); | ||
app.use(morgan__default["default"]("tiny")); | ||
app.all("*", express$1.createRequestHandler({ | ||
build, | ||
mode: process.env.NODE_ENV | ||
})); | ||
app.use((0, import_compression.default)()); | ||
app.use( | ||
import_node_path.default.posix.join(build.publicPath, "assets"), | ||
import_express2.default.static(import_node_path.default.join(build.assetsBuildDirectory, "assets"), { | ||
immutable: true, | ||
maxAge: "1y" | ||
}) | ||
); | ||
app.use(build.publicPath, import_express2.default.static(build.assetsBuildDirectory)); | ||
app.use(import_express2.default.static("public", { maxAge: "1h" })); | ||
app.use((0, import_morgan.default)("tiny")); | ||
app.all( | ||
"*", | ||
(0, import_express.createRequestHandler)({ | ||
build, | ||
mode: process.env.NODE_ENV | ||
}) | ||
); | ||
let server = process.env.HOST ? app.listen(port, process.env.HOST, onListen) : app.listen(port, onListen); | ||
["SIGTERM", "SIGINT"].forEach(signal => { | ||
process.once(signal, () => server === null || server === void 0 ? void 0 : server.close(console.error)); | ||
["SIGTERM", "SIGINT"].forEach((signal) => { | ||
process.once(signal, () => server?.close(console.error)); | ||
}); | ||
} |
{ | ||
"name": "@react-router/serve", | ||
"version": "0.0.0-experimental-4b431ca46", | ||
"version": "0.0.0-experimental-4cf800728", | ||
"description": "Production application server for React Router", | ||
@@ -20,2 +20,16 @@ "bugs": { | ||
}, | ||
"wireit": { | ||
"build": { | ||
"command": "tsup", | ||
"files": [ | ||
"*.ts", | ||
"bin.js", | ||
"tsconfig.json", | ||
"package.json" | ||
], | ||
"output": [ | ||
"dist/**" | ||
] | ||
} | ||
}, | ||
"dependencies": { | ||
@@ -27,7 +41,7 @@ "compression": "^1.7.4", | ||
"source-map-support": "^0.5.21", | ||
"@react-router/express": "0.0.0-experimental-4b431ca46", | ||
"@react-router/node": "0.0.0-experimental-4b431ca46" | ||
"@react-router/express": "0.0.0-experimental-4cf800728", | ||
"@react-router/node": "0.0.0-experimental-4cf800728" | ||
}, | ||
"peerDependencies": { | ||
"react-router": "0.0.0-experimental-4b431ca46" | ||
"react-router": "0.0.0-experimental-4cf800728" | ||
}, | ||
@@ -38,6 +52,9 @@ "devDependencies": { | ||
"@types/morgan": "^1.9.2", | ||
"@types/source-map-support": "^0.5.6" | ||
"@types/source-map-support": "^0.5.6", | ||
"tsup": "^8.3.0", | ||
"typescript": "^5.1.6", | ||
"wireit": "0.14.9" | ||
}, | ||
"engines": { | ||
"node": ">=18.0.0" | ||
"node": ">=20.0.0" | ||
}, | ||
@@ -52,4 +69,5 @@ "files": [ | ||
"scripts": { | ||
"tsc": "tsc" | ||
"build": "wireit", | ||
"typecheck": "tsc" | ||
} | ||
} |
@@ -1,13 +0,5 @@ | ||
# Welcome to Remix! | ||
Node.js application server for React Router | ||
[Remix](https://remix.run) is a web framework that helps you build better websites with React. | ||
To get started, open a new shell and run: | ||
```sh | ||
npx create-remix@latest | ||
npm install @react-router/serve | ||
``` | ||
Then follow the prompts you see in your terminal. | ||
For more information about Remix, [visit remix.run](https://remix.run)! |
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
22569
11.31%120
7.14%7
75%6
-57.14%10
42.86%+ Added
+ Added
+ Added
+ Added
+ Added
- Removed
- Removed
- Removed
- Removed
- Removed
- Removed