@react-router/node
Advanced tools
+76
-0
| # `@react-router/node` | ||
| ## 7.9.6 | ||
| ### Patch Changes | ||
| - Updated dependencies: | ||
| - `react-router@7.9.6` | ||
| ## 7.9.5 | ||
| ### Patch Changes | ||
| - Updated dependencies: | ||
| - `react-router@7.9.5` | ||
| ## 7.9.4 | ||
| ### Patch Changes | ||
| - Validate format of incoming session ids in `createFileSessionStorage` ([#14426](https://github.com/remix-run/react-router/pull/14426)) | ||
| - Updated dependencies: | ||
| - `react-router@7.9.4` | ||
| ## 7.9.3 | ||
| ### Patch Changes | ||
| - Updated dependencies: | ||
| - `react-router@7.9.3` | ||
| ## 7.9.2 | ||
| ### Patch Changes | ||
| - Updated dependencies: | ||
| - `react-router@7.9.2` | ||
| ## 7.9.1 | ||
| ### Patch Changes | ||
| - Updated dependencies: | ||
| - `react-router@7.9.1` | ||
| ## 7.9.0 | ||
| ### Minor Changes | ||
| - Stabilize middleware and context APIs. ([#14215](https://github.com/remix-run/react-router/pull/14215)) | ||
| We have removed the `unstable_` prefix from the following APIs and they are now considered stable and ready for production use: | ||
| - [`RouterContextProvider`](https://reactrouter.com/api/utils/RouterContextProvider) | ||
| - [`createContext`](https://reactrouter.com/api/utils/createContext) | ||
| - `createBrowserRouter` [`getContext`](https://reactrouter.com/api/data-routers/createBrowserRouter#optsgetcontext) option | ||
| - `<HydratedRouter>` [`getContext`](https://reactrouter.com/api/framework-routers/HydratedRouter#getcontext) prop | ||
| Please see the [Middleware Docs](https://reactrouter.com/how-to/middleware), the [Middleware RFC](https://github.com/remix-run/remix/discussions/7642), and the [Client-side Context RFC](https://github.com/remix-run/react-router/discussions/9856) for more information. | ||
| ### Patch Changes | ||
| - Updated dependencies: | ||
| - `react-router@7.9.0` | ||
| ## 7.8.2 | ||
| ### Patch Changes | ||
| - Updated dependencies: | ||
| - `react-router@7.8.2` | ||
| ## 7.8.1 | ||
| ### Patch Changes | ||
| - Updated dependencies: | ||
| - `react-router@7.8.1` | ||
| ## 7.8.0 | ||
@@ -4,0 +80,0 @@ |
+3
-3
| import { RequestListener } from 'node:http'; | ||
| import { ServerBuild, UNSAFE_MiddlewareEnabled, unstable_RouterContextProvider, AppLoadContext, SessionData, SessionIdStorageStrategy, SessionStorage } from 'react-router'; | ||
| import { ServerBuild, UNSAFE_MiddlewareEnabled, RouterContextProvider, AppLoadContext, SessionData, SessionIdStorageStrategy, SessionStorage } from 'react-router'; | ||
| import { ClientAddress } from '@mjackson/node-fetch-server'; | ||
@@ -9,3 +9,3 @@ import { Readable, Writable } from 'node:stream'; | ||
| build: ServerBuild | (() => ServerBuild | Promise<ServerBuild>); | ||
| getLoadContext?: (request: Request, client: ClientAddress) => UNSAFE_MiddlewareEnabled extends true ? MaybePromise<unstable_RouterContextProvider> : MaybePromise<AppLoadContext>; | ||
| getLoadContext?: (request: Request, client: ClientAddress) => UNSAFE_MiddlewareEnabled extends true ? MaybePromise<RouterContextProvider> : MaybePromise<AppLoadContext>; | ||
| mode?: string; | ||
@@ -38,3 +38,3 @@ } | ||
| * | ||
| * @see https://remix.run/utils/sessions#createfilesessionstorage-node | ||
| * @see https://api.reactrouter.com/v7/functions/_react_router_node.createFileSessionStorage | ||
| */ | ||
@@ -41,0 +41,0 @@ declare function createFileSessionStorage<Data = SessionData, FlashData = Data>({ cookie, dir, }: FileSessionStorageOptions): SessionStorage<Data, FlashData>; |
+3
-3
| import { RequestListener } from 'node:http'; | ||
| import { ServerBuild, UNSAFE_MiddlewareEnabled, unstable_RouterContextProvider, AppLoadContext, SessionData, SessionIdStorageStrategy, SessionStorage } from 'react-router'; | ||
| import { ServerBuild, UNSAFE_MiddlewareEnabled, RouterContextProvider, AppLoadContext, SessionData, SessionIdStorageStrategy, SessionStorage } from 'react-router'; | ||
| import { ClientAddress } from '@mjackson/node-fetch-server'; | ||
@@ -9,3 +9,3 @@ import { Readable, Writable } from 'node:stream'; | ||
| build: ServerBuild | (() => ServerBuild | Promise<ServerBuild>); | ||
| getLoadContext?: (request: Request, client: ClientAddress) => UNSAFE_MiddlewareEnabled extends true ? MaybePromise<unstable_RouterContextProvider> : MaybePromise<AppLoadContext>; | ||
| getLoadContext?: (request: Request, client: ClientAddress) => UNSAFE_MiddlewareEnabled extends true ? MaybePromise<RouterContextProvider> : MaybePromise<AppLoadContext>; | ||
| mode?: string; | ||
@@ -38,3 +38,3 @@ } | ||
| * | ||
| * @see https://remix.run/utils/sessions#createfilesessionstorage-node | ||
| * @see https://api.reactrouter.com/v7/functions/_react_router_node.createFileSessionStorage | ||
| */ | ||
@@ -41,0 +41,0 @@ declare function createFileSessionStorage<Data = SessionData, FlashData = Data>({ cookie, dir, }: FileSessionStorageOptions): SessionStorage<Data, FlashData>; |
+18
-2
| /** | ||
| * @react-router/node v0.0.0-experimental-2eb7164 | ||
| * @react-router/node v0.0.0-experimental-303421afa | ||
| * | ||
@@ -80,2 +80,5 @@ * Copyright (c) Remix Software Inc. | ||
| let file = getFile(dir, id); | ||
| if (!file) { | ||
| throw new Error("Error generating session"); | ||
| } | ||
| await import_node_fs.promises.mkdir(path.dirname(file), { recursive: true }); | ||
@@ -92,2 +95,5 @@ await import_node_fs.promises.writeFile(file, content, { encoding: "utf-8", flag: "wx" }); | ||
| let file = getFile(dir, id); | ||
| if (!file) { | ||
| return null; | ||
| } | ||
| let content = JSON.parse(await import_node_fs.promises.readFile(file, "utf-8")); | ||
@@ -109,2 +115,5 @@ let data = content.data; | ||
| let file = getFile(dir, id); | ||
| if (!file) { | ||
| return; | ||
| } | ||
| await import_node_fs.promises.mkdir(path.dirname(file), { recursive: true }); | ||
@@ -117,4 +126,8 @@ await import_node_fs.promises.writeFile(file, content, "utf-8"); | ||
| } | ||
| let file = getFile(dir, id); | ||
| if (!file) { | ||
| return; | ||
| } | ||
| try { | ||
| await import_node_fs.promises.unlink(getFile(dir, id)); | ||
| await import_node_fs.promises.unlink(file); | ||
| } catch (error) { | ||
@@ -127,2 +140,5 @@ if (error.code !== "ENOENT") throw error; | ||
| function getFile(dir, id) { | ||
| if (!/^[0-9a-f]{16}$/i.test(id)) { | ||
| return null; | ||
| } | ||
| return path.join(dir, id.slice(0, 4), id.slice(4)); | ||
@@ -129,0 +145,0 @@ } |
+18
-2
| /** | ||
| * @react-router/node v0.0.0-experimental-2eb7164 | ||
| * @react-router/node v0.0.0-experimental-303421afa | ||
| * | ||
@@ -40,2 +40,5 @@ * Copyright (c) Remix Software Inc. | ||
| let file = getFile(dir, id); | ||
| if (!file) { | ||
| throw new Error("Error generating session"); | ||
| } | ||
| await fsp.mkdir(path.dirname(file), { recursive: true }); | ||
@@ -52,2 +55,5 @@ await fsp.writeFile(file, content, { encoding: "utf-8", flag: "wx" }); | ||
| let file = getFile(dir, id); | ||
| if (!file) { | ||
| return null; | ||
| } | ||
| let content = JSON.parse(await fsp.readFile(file, "utf-8")); | ||
@@ -69,2 +75,5 @@ let data = content.data; | ||
| let file = getFile(dir, id); | ||
| if (!file) { | ||
| return; | ||
| } | ||
| await fsp.mkdir(path.dirname(file), { recursive: true }); | ||
@@ -77,4 +86,8 @@ await fsp.writeFile(file, content, "utf-8"); | ||
| } | ||
| let file = getFile(dir, id); | ||
| if (!file) { | ||
| return; | ||
| } | ||
| try { | ||
| await fsp.unlink(getFile(dir, id)); | ||
| await fsp.unlink(file); | ||
| } catch (error) { | ||
@@ -87,2 +100,5 @@ if (error.code !== "ENOENT") throw error; | ||
| function getFile(dir, id) { | ||
| if (!/^[0-9a-f]{16}$/i.test(id)) { | ||
| return null; | ||
| } | ||
| return path.join(dir, id.slice(0, 4), id.slice(4)); | ||
@@ -89,0 +105,0 @@ } |
+3
-3
| { | ||
| "name": "@react-router/node", | ||
| "version": "0.0.0-experimental-2eb7164", | ||
| "version": "0.0.0-experimental-303421afa", | ||
| "description": "Node.js platform abstractions for React Router", | ||
@@ -55,7 +55,7 @@ "bugs": { | ||
| "wireit": "0.14.9", | ||
| "react-router": "0.0.0-experimental-2eb7164" | ||
| "react-router": "0.0.0-experimental-303421afa" | ||
| }, | ||
| "peerDependencies": { | ||
| "typescript": "^5.1.0", | ||
| "react-router": "0.0.0-experimental-2eb7164" | ||
| "react-router": "0.0.0-experimental-303421afa" | ||
| }, | ||
@@ -62,0 +62,0 @@ "peerDependenciesMeta": { |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
46112
5.54%554
6.13%