🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

@react-router/express

Package Overview
Dependencies
Maintainers
1
Versions
430
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@react-router/express - npm Package Compare versions

Comparing version

to
0.0.0-experimental-cb75ef9

dist/index.d.mts

166

CHANGELOG.md

@@ -1,3 +0,167 @@

# `@remix-run/express`
# `@react-router/express`
## 7.6.1
### Patch Changes
- Updated dependencies:
- `react-router@7.6.1`
- `@react-router/node@7.6.1`
## 7.6.0
### Patch Changes
- Updated dependencies:
- `react-router@7.6.0`
- `@react-router/node@7.6.0`
## 7.5.3
### Patch Changes
- Updated dependencies:
- `react-router@7.5.3`
- `@react-router/node@7.5.3`
## 7.5.2
### Patch Changes
- Updated dependencies:
- `react-router@7.5.2`
- `@react-router/node@7.5.2`
## 7.5.1
### Patch Changes
- Updated dependencies:
- `react-router@7.5.1`
- `@react-router/node@7.5.1`
## 7.5.0
### Patch Changes
- Updated dependencies:
- `react-router@7.5.0`
- `@react-router/node@7.5.0`
## 7.4.1
### Patch Changes
- Better validation of `x-forwarded-host` header to preent potential security issues. ([#13309](https://github.com/remix-run/react-router/pull/13309))
- Updated dependencies:
- `react-router@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`
## 7.3.0
### Patch Changes
- Update `express` `peerDependency` to include v5 (<https://github.com/remix-run/react-router/pull/13064>) ([#12961](https://github.com/remix-run/react-router/pull/12961))
- Updated dependencies:
- `react-router@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`
## 7.1.5
### Patch Changes
- Updated dependencies:
- `react-router@7.1.5`
- `@react-router/node@7.1.5`
## 7.1.4
### Patch Changes
- Updated dependencies:
- `react-router@7.1.4`
- `@react-router/node@7.1.4`
## 7.1.3
### Patch Changes
- Updated dependencies:
- `react-router@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`
## 7.1.1
### Patch Changes
- Updated dependencies:
- `react-router@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`
## 7.0.2
### Patch Changes
- Updated dependencies:
- `react-router@7.0.2`
- `@react-router/node@7.0.2`
## 7.0.1
### Patch Changes
- Updated dependencies:
- `react-router@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))
- update minimum node version to 18 ([#11690](https://github.com/remix-run/react-router/pull/11690))
- Add `exports` field to all packages ([#11675](https://github.com/remix-run/react-router/pull/11675))
- node package no longer re-exports from react-router ([#11702](https://github.com/remix-run/react-router/pull/11702))
- Drop support for Node 18, update minimum Node vestion to 20 ([#12171](https://github.com/remix-run/react-router/pull/12171))
- Remove `installGlobals()` as this should no longer be necessary
### Patch Changes
- Updated dependencies:
- `react-router@7.0.0`
- `@react-router/node@7.0.0`
## 2.9.0

@@ -4,0 +168,0 @@

@@ -1,2 +0,26 @@

export type { GetLoadContextFunction, RequestHandler } from "./server";
export { createRequestHandler } from "./server";
import * as express from 'express';
import { UNSAFE_MiddlewareEnabled, unstable_InitialContext, AppLoadContext, ServerBuild } from 'react-router';
/// <reference lib="dom.iterable" />
type MaybePromise<T> = T | Promise<T>;
/**
* A function that returns the value to use as `context` in route `loader` and
* `action` functions.
*
* You can think of this as an escape hatch that allows you to pass
* environment/platform-specific values through to your loader/action, such as
* values that are generated by Express middleware like `req.session`.
*/
type GetLoadContextFunction = (req: express.Request, res: express.Response) => UNSAFE_MiddlewareEnabled extends true ? MaybePromise<unstable_InitialContext> : MaybePromise<AppLoadContext>;
type RequestHandler = (req: express.Request, res: express.Response, next: express.NextFunction) => Promise<void>;
/**
* Returns a request handler for Express that serves the response using Remix.
*/
declare function createRequestHandler({ build, getLoadContext, mode, }: {
build: ServerBuild | (() => Promise<ServerBuild>);
getLoadContext?: GetLoadContextFunction;
mode?: string;
}): RequestHandler;
export { type GetLoadContextFunction, type RequestHandler, createRequestHandler };
/**
* @react-router/express v0.0.0-experimental-cb25a21e1
* @react-router/express v0.0.0-experimental-cb75ef9
*

@@ -11,10 +11,103 @@ * Copyright (c) Remix Software Inc.

*/
'use strict';
"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
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 __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
Object.defineProperty(exports, '__esModule', { value: true });
// index.ts
var react_router_express_exports = {};
__export(react_router_express_exports, {
createRequestHandler: () => createRequestHandler
});
module.exports = __toCommonJS(react_router_express_exports);
var server = require('./server.js');
exports.createRequestHandler = server.createRequestHandler;
// server.ts
var import_react_router = require("react-router");
var import_node = require("@react-router/node");
function createRequestHandler({
build,
getLoadContext,
mode = process.env.NODE_ENV
}) {
let handleRequest = (0, import_react_router.createRequestHandler)(build, mode);
return async (req, res, next) => {
try {
let request = createRemixRequest(req, res);
let loadContext = await getLoadContext?.(req, res);
let response = await handleRequest(request, loadContext);
await sendRemixResponse(res, response);
} catch (error) {
next(error);
}
};
}
function createRemixHeaders(requestHeaders) {
let headers = new Headers();
for (let [key, values] of Object.entries(requestHeaders)) {
if (values) {
if (Array.isArray(values)) {
for (let value of values) {
headers.append(key, value);
}
} else {
headers.set(key, values);
}
}
}
return headers;
}
function createRemixRequest(req, res) {
let [, hostnamePortStr] = req.get("X-Forwarded-Host")?.split(":") ?? [];
let [, hostPortStr] = req.get("host")?.split(":") ?? [];
let hostnamePort = Number.parseInt(hostnamePortStr, 10);
let hostPort = Number.parseInt(hostPortStr, 10);
let port = Number.isSafeInteger(hostnamePort) ? hostnamePort : Number.isSafeInteger(hostPort) ? hostPort : "";
let resolvedHost = `${req.hostname}${port ? `:${port}` : ""}`;
let url = new URL(`${req.protocol}://${resolvedHost}${req.originalUrl}`);
let controller = new AbortController();
let init = {
method: req.method,
headers: createRemixHeaders(req.headers),
signal: controller.signal
};
res.on("finish", () => controller = null);
res.on("close", () => controller?.abort());
if (req.method !== "GET" && req.method !== "HEAD") {
init.body = (0, import_node.createReadableStreamFromReadable)(req);
init.duplex = "half";
}
return new Request(url.href, init);
}
async function sendRemixResponse(res, nodeResponse) {
res.statusMessage = nodeResponse.statusText;
res.status(nodeResponse.status);
for (let [key, value] of nodeResponse.headers.entries()) {
res.append(key, value);
}
if (nodeResponse.headers.get("Content-Type")?.match(/text\/event-stream/i)) {
res.flushHeaders();
}
if (nodeResponse.body) {
await (0, import_node.writeReadableStreamToWritable)(nodeResponse.body, res);
} else {
res.end();
}
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
createRequestHandler
});
{
"name": "@react-router/express",
"version": "0.0.0-experimental-cb25a21e1",
"version": "0.0.0-experimental-cb75ef9",
"description": "Express server request handler for React Router",

@@ -11,3 +11,3 @@ "bugs": {

"url": "https://github.com/remix-run/react-router",
"directory": "packages/remix-express"
"directory": "packages/react-router-express"
},

@@ -17,17 +17,51 @@ "license": "MIT",

"typings": "dist/index.d.ts",
"exports": {
".": {
"node": {
"types": "./dist/index.d.ts",
"module-sync": "./dist/index.mjs",
"default": "./dist/index.js"
},
"import": {
"types": "./dist/index.d.mts",
"default": "./dist/index.mjs"
},
"default": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
}
},
"./package.json": "./package.json"
},
"wireit": {
"build": {
"command": "tsup",
"files": [
"*.ts",
"tsconfig.json",
"package.json"
],
"output": [
"dist/**"
]
}
},
"dependencies": {
"@react-router/node": "0.0.0-experimental-cb25a21e1"
"@react-router/node": "0.0.0-experimental-cb75ef9"
},
"devDependencies": {
"@types/express": "^4.17.9",
"@types/node": "^18.17.1",
"@types/node": "^20.0.0",
"@types/supertest": "^2.0.10",
"express": "^4.17.1",
"express": "^4.19.2",
"node-mocks-http": "^1.10.1",
"supertest": "^6.3.3",
"typescript": "^5.1.6"
"tsup": "^8.3.0",
"typescript": "^5.1.6",
"wireit": "0.14.9"
},
"peerDependencies": {
"express": "^4.17.1",
"typescript": "^5.1.0"
"express": "^4.17.1 || ^5",
"typescript": "^5.1.0",
"react-router": "0.0.0-experimental-cb75ef9"
},

@@ -40,3 +74,3 @@ "peerDependenciesMeta": {

"engines": {
"node": ">=18.0.0"
"node": ">=20.0.0"
},

@@ -50,4 +84,5 @@ "files": [

"scripts": {
"tsc": "tsc"
"build": "wireit",
"typecheck": "tsc"
}
}

12

README.md

@@ -1,13 +0,5 @@

# Welcome to Remix!
[Express](https://expressjs.com) server request handler 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/express
```
Then follow the prompts you see in your terminal.
For more information about Remix, [visit remix.run](https://remix.run)!