# `@remix-run/node` ## 2.17.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.17.0` ## 2.16.8 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.16.8` ## 2.16.7 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.16.7` ## 2.16.6 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.16.6` ## 2.16.5 ### Patch Changes - Bump `undici` to version `6.21.2` to address [security advisory](https://github.com/nodejs/undici/security/advisories/GHSA-c76h-2ccp-4975) ([#10562](https://github.com/remix-run/remix/pull/10562)) - Updated dependencies: - `@remix-run/server-runtime@2.16.5` ## 2.16.4 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.16.4` ## 2.16.3 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.16.3` ## 2.16.2 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.16.2` ## 2.16.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.16.1` ## 2.16.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.16.0` ## 2.15.3 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.15.3` ## 2.15.2 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.15.2` ## 2.15.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.15.1` ## 2.15.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.15.0` ## 2.14.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.14.0` ## 2.13.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.13.1` ## 2.13.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.13.0` ## 2.12.1 ### Patch Changes - Single Fetch: Re-export `interface Future` through `@remix-run/node`/`@remix-run/cloudflare`/`@remix-run/deno` packages so that `pnpm` doesn't complain about `@remix-run/server-runtime` not being a dependency ([#9982](https://github.com/remix-run/remix/pull/9982)) - Updated dependencies: - `@remix-run/server-runtime@2.12.1` ## 2.12.0 ### Patch Changes - Single Fetch: Improved typesafety ([#9893](https://github.com/remix-run/remix/pull/9893)) If you were already using previously released unstable single-fetch types: - Remove `"@remix-run/react/future/single-fetch.d.ts"` override from `tsconfig.json` > `compilerOptions` > `types` - Remove `defineLoader`, `defineAction`, `defineClientLoader`, `defineClientAction` helpers from your route modules - Replace `UIMatch_SingleFetch` type helper with `UIMatch` - Replace `MetaArgs_SingleFetch` type helper with `MetaArgs` Then you are ready for the new typesafety setup: ```ts // vite.config.ts declare module "@remix-run/server-runtime" { interface Future { unstable_singleFetch: true; // 👈 enable _types_ for single-fetch } } export default defineConfig({ plugins: [ remix({ future: { unstable_singleFetch: true, // 👈 enable single-fetch }, }), ], }); ``` For more information, see [Guides > Single Fetch](https://remix.run/docs/en/dev/guides/single-fetch) in our docs. - Updated dependencies: - `@remix-run/server-runtime@2.12.0` ## 2.11.2 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.11.2` ## 2.11.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.11.1` ## 2.11.0 ### Minor Changes - Single Fetch: Add a new `unstable_data()` API as a replacement for `json`/`defer` when custom `status`/`headers` are needed ([#9769](https://github.com/remix-run/remix/pull/9769)) - Add a new `replace(url, init?)` alternative to `redirect(url, init?)` that performs a `history.replaceState` instead of a `history.pushState` on client-side navigation redirects ([#9764](https://github.com/remix-run/remix/pull/9764)) ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.11.0` ## 2.10.3 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.10.3` ## 2.10.2 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.10.2` ## 2.10.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.10.1` ## 2.10.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.10.0` ## 2.9.2 ### Patch Changes - Typesafety for single-fetch: `defineLoader`, `defineClientLoader`, `defineAction`, `defineClientAction` ([#9372](https://github.com/remix-run/remix/pull/9372), [#9404](https://github.com/remix-run/remix/pull/9404)) - Updated dependencies: - `@remix-run/server-runtime@2.9.2` ## 2.9.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.9.1` ## 2.9.0 ### Minor Changes - Use undici as our fetch polyfill going forward ([#9106](https://github.com/remix-run/remix/pull/9106), [#9111](https://github.com/remix-run/remix/pull/9111)) - Put `undici` fetch polyfill behind a new `installGlobals({ nativeFetch: true })` parameter ([#9198](https://github.com/remix-run/remix/pull/9198)) - `remix-serve` will default to using `undici` for the fetch polyfill if `future._unstable_singleFetch` is enabled because the single fetch implementation relies on the `undici` polyfill - Any users opting into Single Fetch and managing their own polfill will need to pass the flag to `installGlobals` on their own to avoid runtime errors with Single Fetch ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.9.0` ## 2.8.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.8.1` ## 2.8.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.8.0` ## 2.7.2 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.7.2` ## 2.7.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.7.1` ## 2.7.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.7.0` ## 2.6.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.6.0` ## 2.5.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.5.1` ## 2.5.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.5.0` ## 2.4.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.4.1` ## 2.4.0 ### Minor Changes - Deprecate `DataFunctionArgs` in favor of `LoaderFunctionArgs`/`ActionFunctionArgs`. This is aimed at keeping the types aligned across server/client loaders/actions now that `clientLoader`/`clientActon` functions have `serverLoader`/`serverAction` parameters which differentiate `ClientLoaderFunctionArgs`/`ClientActionFunctionArgs`. ([#8173](https://github.com/remix-run/remix/pull/8173)) ### Patch Changes - Update to `@remix-run/web-fetch@4.4.2` ([#8231](https://github.com/remix-run/remix/pull/8231)) - Updated dependencies: - `@remix-run/server-runtime@2.4.0` ## 2.3.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.3.1` ## 2.3.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.3.0` ## 2.2.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.2.0` ## 2.1.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@2.1.0` ## 2.0.1 ### Patch Changes - Switch from `crypto.randomBytes` to `crypto.webcrypto.getRandomValues` for file session storage ID generation ([#7203](https://github.com/remix-run/remix/pull/7203)) - Use native `Blob` class instead of polyfill ([#7217](https://github.com/remix-run/remix/pull/7217)) - Updated dependencies: - `@remix-run/server-runtime@2.0.1` - [`@remix-run/web-fetch@4.4.1`](https://github.com/remix-run/web-std-io/releases/tag/%40remix-run%2Fweb-fetch%404.4.1) ## 2.0.0 ### Major Changes - Require Node >=18.0.0 ([#6939](https://github.com/remix-run/remix/pull/6939)) - Stop exporting the `fetch` API in favor of using the version in the global scope - which can be polyfilled via `installGlobals` ([#7293](https://github.com/remix-run/remix/pull/7293)) - Removed/adjusted types to prefer `unknown` over `any` and to align with underlying React Router types ([#7319](https://github.com/remix-run/remix/pull/7319), [#7354](https://github.com/remix-run/remix/pull/7354)): - Renamed the `useMatches()` return type from `RouteMatch` to `UIMatch` - Renamed `LoaderArgs`/`ActionArgs` to `LoaderFunctionArgs`/`ActionFunctionArgs` - `AppData` changed from `any` to `unknown` - `Location["state"]` (`useLocation.state`) changed from `any` to `unknown` - `UIMatch["data"]` (`useMatches()[i].data`) changed from `any` to `unknown` - `UIMatch["handle"]` (`useMatches()[i].handle`) changed from `{ [k: string]: any }` to `unknown` - `Fetcher["data"]` (`useFetcher().data`) changed from `any` to `unknown` - `MetaMatch.handle` (used in `meta()`) changed from `any` to `unknown` - `AppData`/`RouteHandle` are no longer exported as they are just aliases for `unknown` - The route `meta` API now defaults to the new "V2 Meta" API ([#6958](https://github.com/remix-run/remix/pull/6958)) - Please refer to the ([docs](https://remix.run/docs/en/2.0.0/route/meta) and [Preparing for V2](https://remix.run/docs/en/2.0.0/start/v2#route-meta) guide for more information. - For preparation of using Node's built in fetch implementation, installing the fetch globals is now a responsibility of the app server ([#7009](https://github.com/remix-run/remix/pull/7009)) - If you are using `remix-serve`, nothing is required - If you are using your own app server, you will need to install the globals yourself ```js filename=server.js import { installGlobals } from "@remix-run/node"; installGlobals(); ``` - `source-map-support` is now a responsibility of the app server ([#7009](https://github.com/remix-run/remix/pull/7009)) - If you are using `remix-serve`, nothing is required - If you are using your own app server, you will need to install [`source-map-support`](https://www.npmjs.com/package/source-map-support) yourself. ```sh npm i source-map-support ``` ```js filename=server.js import sourceMapSupport from "source-map-support"; sourceMapSupport.install(); ``` - Removed support for "magic exports" from the `remix` package. This package can be removed from your `package.json` and you should update all imports to use the source `@remix-run/*` packages: ([#6895](https://github.com/remix-run/remix/pull/6895)) ```diff - import type { ActionArgs } from "remix"; - import { json, useLoaderData } from "remix"; + import type { ActionArgs } from "@remix-run/node"; + import { json } from "@remix-run/node"; + import { useLoaderData } from "@remix-run/react"; ``` ### Minor Changes - Re-export the new `redirectDocument` method from React Router ([#7040](https://github.com/remix-run/remix/pull/7040), [#6842](https://github.com/remix-run/remix/pull/6842)) ([#7040](https://github.com/remix-run/remix/pull/7040)) ### Patch Changes - Remove `atob`/`btoa` polyfills in favor of built-in versions ([#7206](https://github.com/remix-run/remix/pull/7206)) - Export proper `ErrorResponse` type for usage alongside `isRouteErrorResponse` ([#7244](https://github.com/remix-run/remix/pull/7244)) - Add the rest of the Web Streams API to `installGlobals` ([#7321](https://github.com/remix-run/remix/pull/7321)) - Ensures `fetch()` return is `instanceof global Response` by removing extended classes for `NodeRequest` and `NodeResponse` in favor of custom interface type cast ([#7109](https://github.com/remix-run/remix/pull/7109)) - Remove recursion from stream utilities ([#7245](https://github.com/remix-run/remix/pull/7245)) - Updated dependencies: - `@remix-run/server-runtime@2.0.0` - `@remix-run/web-fetch@4.4.0` - `@remix-run/web-file@3.1.0` - `@remix-run/web-stream@1.1.0` ## 1.19.3 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@1.19.3` ## 1.19.2 ### Patch Changes - Update to latest `@remix-run/web-*` packages ([#7026](https://github.com/remix-run/remix/pull/7026)) - Updated dependencies: - `@remix-run/server-runtime@1.19.2` ## 1.19.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@1.19.1` ## 1.19.0 ### Patch Changes - Upgrade to [`@remix-run/web-fetch@4.3.5`](https://github.com/remix-run/web-std-io/releases/tag/%40remix-run%2Fweb-fetch%404.3.5). Submitted empty file inputs are now correctly parsed out as empty `File` instances instead of being surfaced as an empty string via `request.formData()` ([#6816](https://github.com/remix-run/remix/pull/6816)) - Updated dependencies: - `@remix-run/server-runtime@1.19.0` ## 1.18.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@1.18.1` ## 1.18.0 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@1.18.0` ## 1.17.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@1.17.1` ## 1.17.0 ### Patch Changes - Add `HeadersArgs` type to be consistent with loaders/actions/meta and allows for using a `function` declaration in addition to an arrow function expression ([#6247](https://github.com/remix-run/remix/pull/6247)) ```tsx import type { HeadersArgs } from "@remix-run/node"; // or cloudflare/deno export function headers({ loaderHeaders }: HeadersArgs) { return { "x-my-custom-thing": loaderHeaders.get("x-my-custom-thing") || "fallback", }; } ``` - Fix `request.clone() instanceof Request` returning false. ([#6512](https://github.com/remix-run/remix/pull/6512)) - Updated dependencies: - `@remix-run/server-runtime@1.17.0` ## 1.16.1 ### Patch Changes - Updated dependencies: - `@remix-run/server-runtime@1.16.1` ## 1.16.0 ### Patch Changes - add `@remix-run/node/install` side-effect to allow `node --require @remix-run/node/install` ([#6132](https://github.com/remix-run/remix/pull/6132)) - add `logDevReady` as replacement for platforms that can't initialize async I/O outside of the request response lifecycle. ([#6204](https://github.com/remix-run/remix/pull/6204)) - add missing files to published package ([#6179](https://github.com/remix-run/remix/pull/6179)) - Updated dependencies: - `@remix-run/server-runtime@1.16.0` ## 1.15.0 ### Minor Changes - We have made a few changes to the API for route module `meta` functions when using the `future.v2_meta` flag. **These changes are _only_ breaking for users who have opted in.** ([#5746](https://github.com/remix-run/remix/pull/5746)) - `V2_HtmlMetaDescriptor` has been renamed to `V2_MetaDescriptor` - The `meta` function's arguments have been simplified - `parentsData` has been removed, as each route's loader data is available on the `data` property of its respective `match` object ```tsx // before export function meta({ parentsData }) { return [{ title: parentsData["routes/some-route"].title }]; } // after export function meta({ matches }) { return [ { title: matches.find((match) => match.id === "routes/some-route") .data.title, }, ]; } ``` - The `route` property on route matches has been removed, as relevant match data is attached directly to the match object ```tsx // before export function meta({ matches }) { const rootModule = matches.find((match) => match.route.id === "root"); } // after export function meta({ matches }) { const rootModule = matches.find((match) => match.id === "root"); } ``` - Added support for generating `