From 1a5084b4074bcdc5d9b042c5689e7849945500eb Mon Sep 17 00:00:00 2001 From: Mark Dalgleish Date: Wed, 19 Jun 2024 17:12:15 +1000 Subject: [PATCH 1/3] Remove re-exports from `node` package --- docs/upgrading/remix.md | 4 +- integration/abort-signal-test.ts | 2 +- integration/action-test.ts | 2 +- integration/bug-report-test.ts | 2 +- integration/catch-boundary-data-test.ts | 2 +- integration/catch-boundary-test.ts | 2 +- integration/client-data-test.ts | 16 ++--- integration/defer-loader-test.ts | 4 +- integration/defer-test.ts | 32 +++++----- integration/error-boundary-test.ts | 2 +- integration/fetch-globals-test.ts | 2 +- integration/fetcher-layout-test.ts | 12 ++-- integration/fetcher-test.ts | 4 +- integration/file-uploads-test.ts | 6 +- integration/form-data-test.ts | 2 +- integration/form-test.ts | 4 +- integration/headers-test.ts | 10 ++-- .../node-template/app/routes/_index.tsx | 2 +- .../vite-template/app/routes/_index.tsx | 2 +- integration/hook-useSubmit-test.ts | 2 +- integration/link-test.ts | 6 +- integration/loader-test.ts | 8 +-- integration/matches-test.ts | 6 +- integration/multiple-cookies-test.ts | 2 +- integration/navigation-state-test.ts | 8 +-- integration/redirects-test.ts | 6 +- integration/remix-serve-test.ts | 2 +- integration/request-test.ts | 2 +- integration/resource-routes-test.ts | 14 ++--- integration/revalidate-test.ts | 4 +- integration/scroll-test.ts | 2 +- integration/set-cookie-revalidation-test.ts | 4 +- integration/single-fetch-test.ts | 28 ++++----- integration/transition-test.ts | 8 +-- integration/upload-test.ts | 8 ++- integration/vite-build-test.ts | 8 +-- integration/vite-dev-custom-entry-test.ts | 2 +- integration/vite-dev-test.ts | 12 ++-- integration/vite-dot-server-test.ts | 2 +- integration/vite-dotenv-test.ts | 2 +- integration/vite-hmr-hdr-test.ts | 2 +- integration/vite-loader-context-test.ts | 2 +- integration/vite-spa-mode-test.ts | 2 +- packages/react-router/server/index.ts | 7 ++- .../fixtures/node/app/routes/_index.tsx | 2 +- .../config/defaults/entry.server.node.tsx | 2 +- .../config/defaults/entry.server.spa.tsx | 2 +- packages/remix-dev/vite/plugin.ts | 2 +- .../remix-express/__tests__/server-test.ts | 11 ++-- packages/remix-express/package.json | 2 + packages/remix-express/server.ts | 5 +- packages/remix-node/index.ts | 60 ------------------- packages/remix-node/package.json | 12 +++- packages/remix-node/rollup.config.js | 20 +++++++ packages/remix-serve/cli.ts | 2 +- packages/remix-serve/package.json | 3 +- .../compiler-express/app/entry.server.tsx | 2 +- .../compiler-express/app/routes/_index.tsx | 2 +- playground/compiler-spa/app/entry.server.tsx | 2 +- playground/compiler-spa/app/routes/_index.tsx | 2 +- playground/compiler/app/entry.server.tsx | 2 +- playground/compiler/app/routes/_index.tsx | 2 +- pnpm-lock.yaml | 12 +++- 63 files changed, 197 insertions(+), 211 deletions(-) diff --git a/docs/upgrading/remix.md b/docs/upgrading/remix.md index a64dbe2f74..80f3d171e9 100644 --- a/docs/upgrading/remix.md +++ b/docs/upgrading/remix.md @@ -44,9 +44,9 @@ If you prefer to do it manually, here's a list of the equivalent packages: | `@remix-run/cloudflare` | ➡️ | `@react-router/cloudflare` | | TODO: get the whole list | -Also note that nearly all modules your app needs can come from `react-router-dom` instead of `@remix-run/node` and `@remix-run/cloudflare`, so try to import from there first. +Also note that nearly all server-only imports your app needs can come from `react-router/server` instead of `@remix-run/node`, `@remix-run/cloudflare` etc., so try to import from there first. ```diff -import { redirect } from "@react-router/node"; -+import { redirect } from "react-router"; ++import { redirect } from "react-router/server"; ``` diff --git a/integration/abort-signal-test.ts b/integration/abort-signal-test.ts index cce9e42bb5..24eb677860 100644 --- a/integration/abort-signal-test.ts +++ b/integration/abort-signal-test.ts @@ -15,7 +15,7 @@ test.beforeAll(async () => { fixture = await createFixture({ files: { "app/routes/_index.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useActionData, useLoaderData, Form } from "react-router-dom"; export async function action ({ request }) { diff --git a/integration/action-test.ts b/integration/action-test.ts index c88b295539..a407e65f0b 100644 --- a/integration/action-test.ts +++ b/integration/action-test.ts @@ -74,7 +74,7 @@ test.describe("actions", () => { `, [`app/routes/${THROWS_REDIRECT}.jsx`]: js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; import { Form } from "react-router-dom"; export function action() { diff --git a/integration/bug-report-test.ts b/integration/bug-report-test.ts index d3c2dc68f6..2205fb82c8 100644 --- a/integration/bug-report-test.ts +++ b/integration/bug-report-test.ts @@ -59,7 +59,7 @@ test.beforeAll(async () => { //////////////////////////////////////////////////////////////////////////// files: { "app/routes/_index.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useLoaderData, Link } from "react-router-dom"; export function loader() { diff --git a/integration/catch-boundary-data-test.ts b/integration/catch-boundary-data-test.ts index 06a902d900..bd4c20135f 100644 --- a/integration/catch-boundary-data-test.ts +++ b/integration/catch-boundary-data-test.ts @@ -40,7 +40,7 @@ test.describe("ErrorBoundary (thrown responses)", () => { fixture = await createFixture({ files: { "app/root.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Links, Meta, diff --git a/integration/catch-boundary-test.ts b/integration/catch-boundary-test.ts index 2e9c63264c..c0de437227 100644 --- a/integration/catch-boundary-test.ts +++ b/integration/catch-boundary-test.ts @@ -30,7 +30,7 @@ test.describe("ErrorBoundary (thrown responses)", () => { fixture = await createFixture({ files: { "app/root.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Links, Meta, Outlet, Scripts, useMatches } from "react-router-dom"; export function loader() { diff --git a/integration/client-data-test.ts b/integration/client-data-test.ts index 682c994fd4..495332eeae 100644 --- a/integration/client-data-test.ts +++ b/integration/client-data-test.ts @@ -49,7 +49,7 @@ function getFiles({ } `, "app/routes/parent.tsx": js` - import { json } from '@react-router/node' + import { json } from 'react-router/server' import { Outlet, useLoaderData } from "react-router-dom" export function loader() { return json({ message: 'Parent Server Loader'}); @@ -89,7 +89,7 @@ function getFiles({ } `, "app/routes/parent.child.tsx": js` - import { json } from '@react-router/node' + import { json } from 'react-router/server' import { Form, Outlet, useActionData, useLoaderData } from "react-router-dom" export function loader() { return json({ message: 'Child Server Loader'}); @@ -318,7 +318,7 @@ test.describe("Client Data", () => { }), "app/routes/parent.child.tsx": js` import * as React from 'react'; - import { defer, json } from '@react-router/node' + import { defer, json } from 'react-router/server' import { Await, useLoaderData } from "react-router-dom" export function loader() { return defer({ @@ -417,7 +417,7 @@ test.describe("Client Data", () => { }), "app/routes/parent.child.tsx": js` import * as React from 'react'; - import { json } from '@react-router/node'; + import { json } from 'react-router/server'; import { useLoaderData } from "react-router-dom"; export function loader() { return json({ @@ -600,7 +600,7 @@ test.describe("Client Data", () => { }), "app/routes/parent.child.tsx": js` import * as React from 'react'; - import { json } from '@react-router/node'; + import { json } from 'react-router/server'; import { useLoaderData, useRevalidator } from "react-router-dom"; let isFirstCall = true; export async function loader({ serverLoader }) { @@ -665,7 +665,7 @@ test.describe("Client Data", () => { }), "app/routes/parent.child.tsx": js` import * as React from 'react'; - import { json } from '@react-router/node'; + import { json } from 'react-router/server'; import { useLoaderData, useRevalidator } from "react-router-dom"; let isFirstCall = true; export async function loader({ serverLoader }) { @@ -1094,7 +1094,7 @@ test.describe("Client Data", () => { }), "app/routes/parent.child.tsx": js` import * as React from 'react'; - import { json } from '@react-router/node'; + import { json } from 'react-router/server'; import { Form, useRouteError } from "react-router-dom"; export async function clientAction({ serverAction }) { return await serverAction(); @@ -1311,7 +1311,7 @@ test.describe("Client Data", () => { }), "app/routes/parent.child.tsx": js` import * as React from 'react'; - import { json } from '@react-router/node'; + import { json } from 'react-router/server'; import { Form, useRouteError } from "react-router-dom"; export async function clientAction({ serverAction }) { return await serverAction(); diff --git a/integration/defer-loader-test.ts b/integration/defer-loader-test.ts index febc485b80..89ce6b4b32 100644 --- a/integration/defer-loader-test.ts +++ b/integration/defer-loader-test.ts @@ -28,7 +28,7 @@ test.describe("deferred loaders", () => { `, "app/routes/redirect.tsx": js` - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; export function loader() { return defer({food: "pizza"}, { status: 301, headers: { Location: "/?redirected" } }); } @@ -37,7 +37,7 @@ test.describe("deferred loaders", () => { "app/routes/direct-promise-access.tsx": js` import * as React from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { useLoaderData, Link, Await } from "react-router-dom"; export function loader() { return defer({ diff --git a/integration/defer-test.ts b/integration/defer-test.ts index 170b222814..1c7698e44f 100644 --- a/integration/defer-test.ts +++ b/integration/defer-test.ts @@ -75,7 +75,7 @@ test.describe("non-aborted", () => { } `, "app/root.tsx": js` - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Links, Meta, Outlet, Scripts, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; import Interactive from "~/components/interactive"; @@ -116,7 +116,7 @@ test.describe("non-aborted", () => { `, "app/routes/_index.tsx": js` - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Link, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; @@ -148,7 +148,7 @@ test.describe("non-aborted", () => { "app/routes/deferred-noscript-resolved.tsx": js` import { Suspense } from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Await, Link, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; @@ -183,7 +183,7 @@ test.describe("non-aborted", () => { "app/routes/deferred-noscript-unresolved.tsx": js` import { Suspense } from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Await, Link, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; @@ -222,7 +222,7 @@ test.describe("non-aborted", () => { "app/routes/deferred-script-resolved.tsx": js` import { Suspense } from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Await, Link, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; @@ -258,7 +258,7 @@ test.describe("non-aborted", () => { "app/routes/deferred-script-unresolved.tsx": js` import { Suspense } from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Await, Link, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; @@ -302,7 +302,7 @@ test.describe("non-aborted", () => { "app/routes/deferred-script-rejected.tsx": js` import { Suspense } from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Await, Link, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; @@ -343,7 +343,7 @@ test.describe("non-aborted", () => { "app/routes/deferred-script-unrejected.tsx": js` import { Suspense } from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Await, Link, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; @@ -409,7 +409,7 @@ test.describe("non-aborted", () => { "app/routes/deferred-script-rejected-no-error-element.tsx": js` import { Suspense } from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Await, Link, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; @@ -453,7 +453,7 @@ test.describe("non-aborted", () => { "app/routes/deferred-script-unrejected-no-error-element.tsx": js` import { Suspense } from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Await, Link, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; @@ -501,7 +501,7 @@ test.describe("non-aborted", () => { "app/routes/deferred-manual-resolve.tsx": js` import { Suspense } from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Await, Link, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; @@ -568,7 +568,7 @@ test.describe("non-aborted", () => { `, "app/routes/headers.tsx": js` - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; export function loader() { return defer({}, { headers: { "x-custom-header": "value from loader" } }); } @@ -996,7 +996,7 @@ test.describe("aborted", () => { files: { "app/entry.server.tsx": js` import { PassThrough } from "node:stream"; - import type { AppLoadContext, EntryContext } from "@react-router/node"; + import type { AppLoadContext, EntryContext } from "react-router/server"; import { createReadableStreamFromReadable } from "@react-router/node"; import { RemixServer } from "react-router-dom"; import { isbot } from "isbot"; @@ -1142,7 +1142,7 @@ test.describe("aborted", () => { } `, "app/root.tsx": js` - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Links, Meta, Outlet, Scripts, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; import Interactive from "~/components/interactive"; @@ -1184,7 +1184,7 @@ test.describe("aborted", () => { "app/routes/deferred-server-aborted.tsx": js` import { Suspense } from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Await, Link, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; @@ -1229,7 +1229,7 @@ test.describe("aborted", () => { "app/routes/deferred-server-aborted-no-error-element.tsx": js` import { Suspense } from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Await, Link, useLoaderData } from "react-router-dom"; import Counter from "~/components/counter"; diff --git a/integration/error-boundary-test.ts b/integration/error-boundary-test.ts index e4c2b63d76..82d0cad7b5 100644 --- a/integration/error-boundary-test.ts +++ b/integration/error-boundary-test.ts @@ -1291,7 +1291,7 @@ test("Allows back-button out of an error boundary after a hard reload", async ({ `, "app/routes/boom.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export function loader() { return boom(); } export default function() { return my page; } `, diff --git a/integration/fetch-globals-test.ts b/integration/fetch-globals-test.ts index 82240b0d71..a81fb87fde 100644 --- a/integration/fetch-globals-test.ts +++ b/integration/fetch-globals-test.ts @@ -14,7 +14,7 @@ test.beforeAll(async () => { fixture = await createFixture({ files: { "app/routes/_index.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useLoaderData } from "react-router-dom"; export async function loader() { const resp = await fetch('https://reqres.in/api/users?page=2'); diff --git a/integration/fetcher-layout-test.ts b/integration/fetcher-layout-test.ts index 6790210f2f..993a1c9fc9 100644 --- a/integration/fetcher-layout-test.ts +++ b/integration/fetcher-layout-test.ts @@ -15,7 +15,7 @@ test.beforeAll(async () => { fixture = await createFixture({ files: { "app/routes/layout-action.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Outlet, useFetcher, useFormAction } from "react-router-dom"; export let action = ({ params }) => json("layout action data"); @@ -40,7 +40,7 @@ test.beforeAll(async () => { `, "app/routes/layout-action._index.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useFetcher, useFormAction, @@ -71,7 +71,7 @@ test.beforeAll(async () => { `, "app/routes/layout-action.$param.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useFetcher, useFormAction, @@ -102,7 +102,7 @@ test.beforeAll(async () => { `, "app/routes/layout-loader.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Outlet, useFetcher, useFormAction } from "react-router-dom"; export let loader = () => json("layout loader data"); @@ -127,7 +127,7 @@ test.beforeAll(async () => { `, "app/routes/layout-loader._index.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useFetcher, useFormAction, @@ -154,7 +154,7 @@ test.beforeAll(async () => { `, "app/routes/layout-loader.$param.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useFetcher, useFormAction, diff --git a/integration/fetcher-test.ts b/integration/fetcher-test.ts index 9a766df7f9..d8c2ea3bb6 100644 --- a/integration/fetcher-test.ts +++ b/integration/fetcher-test.ts @@ -23,7 +23,7 @@ test.describe("useFetcher", () => { fixture = await createFixture({ files: { "app/routes/resource-route-action-only.ts": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export function action() { return new Response("${CHEESESTEAK}"); } @@ -149,7 +149,7 @@ test.describe("useFetcher", () => { `, "app/routes/fetcher-echo.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useFetcher } from "react-router-dom"; export async function action({ request }) { diff --git a/integration/file-uploads-test.ts b/integration/file-uploads-test.ts index c49f763f6d..dca668c665 100644 --- a/integration/file-uploads-test.ts +++ b/integration/file-uploads-test.ts @@ -23,8 +23,10 @@ test.describe("file-uploads", () => { import * as url from "node:url"; import { unstable_composeUploadHandlers as composeUploadHandlers, - unstable_createFileUploadHandler as createFileUploadHandler, unstable_createMemoryUploadHandler as createMemoryUploadHandler, + } from "react-router/server"; + import { + unstable_createFileUploadHandler as createFileUploadHandler, } from "@react-router/node"; const __dirname = url.fileURLToPath(new URL(".", import.meta.url)); @@ -44,7 +46,7 @@ test.describe("file-uploads", () => { "app/routes/file-upload.tsx": js` import { unstable_parseMultipartFormData as parseMultipartFormData, - } from "@react-router/node"; + } from "react-router/server"; import { Form, useActionData } from "react-router-dom"; import { uploadHandler } from "~/fileUploadHandler"; diff --git a/integration/form-data-test.ts b/integration/form-data-test.ts index a7173a892e..bea3ea3c6f 100644 --- a/integration/form-data-test.ts +++ b/integration/form-data-test.ts @@ -9,7 +9,7 @@ test.beforeAll(async () => { fixture = await createFixture({ files: { "app/routes/_index.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export async function action({ request }) { try { diff --git a/integration/form-test.ts b/integration/form-test.ts index b2b99b4a1e..794f4188bf 100644 --- a/integration/form-test.ts +++ b/integration/form-test.ts @@ -298,7 +298,7 @@ test.describe("Forms", () => { `, "app/routes/stop-propagation.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Form, useActionData } from "react-router-dom"; export async function action({ request }) { @@ -321,7 +321,7 @@ test.describe("Forms", () => { "app/routes/form-method.tsx": js` import { Form, useActionData, useLoaderData, useSearchParams } from "react-router-dom"; - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export function action({ request }) { return json(request.method) diff --git a/integration/headers-test.ts b/integration/headers-test.ts index 831287edbe..8af40b41c7 100644 --- a/integration/headers-test.ts +++ b/integration/headers-test.ts @@ -17,7 +17,7 @@ test.describe.skip("headers export", () => { { files: { "app/root.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Links, Meta, Outlet, Scripts } from "react-router-dom"; export const loader = () => json({}); @@ -39,7 +39,7 @@ test.describe.skip("headers export", () => { `, "app/routes/_index.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export function loader() { return json(null, { @@ -61,7 +61,7 @@ test.describe.skip("headers export", () => { `, "app/routes/action.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export function action() { return json(null, { @@ -179,7 +179,7 @@ test.describe.skip("headers export", () => { `, "app/routes/cookie.child.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export function loader({ request }) { if (new URL(request.url).searchParams.has("throw")) { @@ -240,7 +240,7 @@ test.describe.skip("headers export", () => { `, "app/routes/_index.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export function loader() { return json(null, { diff --git a/integration/helpers/node-template/app/routes/_index.tsx b/integration/helpers/node-template/app/routes/_index.tsx index 62de75f08a..c23e1d5f37 100644 --- a/integration/helpers/node-template/app/routes/_index.tsx +++ b/integration/helpers/node-template/app/routes/_index.tsx @@ -1,4 +1,4 @@ -import type { MetaFunction } from "@react-router/node"; +import type { MetaFunction } from "react-router/server"; export const meta: MetaFunction = () => { return [ diff --git a/integration/helpers/vite-template/app/routes/_index.tsx b/integration/helpers/vite-template/app/routes/_index.tsx index 62de75f08a..c23e1d5f37 100644 --- a/integration/helpers/vite-template/app/routes/_index.tsx +++ b/integration/helpers/vite-template/app/routes/_index.tsx @@ -1,4 +1,4 @@ -import type { MetaFunction } from "@react-router/node"; +import type { MetaFunction } from "react-router/server"; export const meta: MetaFunction = () => { return [ diff --git a/integration/hook-useSubmit-test.ts b/integration/hook-useSubmit-test.ts index d005e851b0..d824e87b51 100644 --- a/integration/hook-useSubmit-test.ts +++ b/integration/hook-useSubmit-test.ts @@ -45,7 +45,7 @@ test.describe("`useSubmit()` returned function", () => { } `, "app/routes/action.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useActionData, useSubmit } from "react-router-dom"; export async function action({ request }) { diff --git a/integration/link-test.ts b/integration/link-test.ts index 934abb0dd2..809ccd84bf 100644 --- a/integration/link-test.ts +++ b/integration/link-test.ts @@ -308,7 +308,7 @@ test.describe("route module link export", () => { `, "app/routes/gists.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Link, Outlet, useLoaderData, useNavigation } from "react-router-dom"; import stylesHref from "~/gists.css?url"; export function links() { @@ -359,7 +359,7 @@ test.describe("route module link export", () => { `, "app/routes/gists.$username.tsx": js` - import { json, redirect } from "@react-router/node"; + import { json, redirect } from "react-router/server"; import { Link, useLoaderData, useParams } from "react-router-dom"; export async function loader({ params }) { let { username } = params; @@ -458,7 +458,7 @@ test.describe("route module link export", () => { `, "app/routes/resources.theme-css.tsx": js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; export async function loader({ request }) { return new Response(":root { --nc-tx-1: #ffffff; --nc-tx-2: #eeeeee; }", { diff --git a/integration/loader-test.ts b/integration/loader-test.ts index 6da2c8c6e6..7f8ebdb9e8 100644 --- a/integration/loader-test.ts +++ b/integration/loader-test.ts @@ -18,7 +18,7 @@ test.describe("loader", () => { fixture = await createFixture({ files: { "app/root.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Links, Meta, Outlet, Scripts } from "react-router-dom"; export const loader = () => json("${ROOT_DATA}"); @@ -40,7 +40,7 @@ test.describe("loader", () => { `, "app/routes/_index.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export function loader() { return "${INDEX_DATA}" @@ -89,7 +89,7 @@ test.describe("loader in an app", () => { } `, "app/routes/redirect.tsx": js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; export const loader = () => redirect("/redirect-target"); export default () =>
Yo
`, @@ -103,7 +103,7 @@ test.describe("loader in an app", () => { `, "app/routes/fetch-target.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export function loader() { return json({ message: "${FETCH_TARGET_TEXT}" }) diff --git a/integration/matches-test.ts b/integration/matches-test.ts index e776a53667..9d42f38bcb 100644 --- a/integration/matches-test.ts +++ b/integration/matches-test.ts @@ -17,7 +17,7 @@ test.describe("useMatches", () => { files: { "app/root.tsx": js` import * as React from 'react'; - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Link, Links, Meta, Outlet, Scripts, useMatches } from "react-router-dom"; export const handle = { stuff: "root handle"}; export const loader = () => json("ROOT"); @@ -47,7 +47,7 @@ test.describe("useMatches", () => { `, "app/routes/_index.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export const handle = { stuff: "index handle"}; export const loader = () => json("INDEX"); export default function Index() { @@ -56,7 +56,7 @@ test.describe("useMatches", () => { `, "app/routes/about.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export const handle = { stuff: "about handle"}; export const loader = async () => { await new Promise(r => setTimeout(r, 100)); diff --git a/integration/multiple-cookies-test.ts b/integration/multiple-cookies-test.ts index bf22fa50e6..6f3357296b 100644 --- a/integration/multiple-cookies-test.ts +++ b/integration/multiple-cookies-test.ts @@ -16,7 +16,7 @@ test.describe("pathless layout routes", () => { await createFixture({ files: { "app/routes/_index.tsx": js` - import { redirect, json } from "@react-router/node"; + import { redirect, json } from "react-router/server"; import { Form, useActionData } from "react-router-dom"; export let loader = async () => { diff --git a/integration/navigation-state-test.ts b/integration/navigation-state-test.ts index c2c30c2d87..ddf3524876 100644 --- a/integration/navigation-state-test.ts +++ b/integration/navigation-state-test.ts @@ -133,7 +133,7 @@ test.describe("navigation states", () => { } `, [`app/routes/${STATES.LOADING_REDIRECT}.jsx`]: js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; export function loader() { return redirect("/?redirected"); } @@ -155,7 +155,7 @@ test.describe("navigation states", () => { } `, [`app/routes/${STATES.SUBMITTING_LOADER_REDIRECT}.jsx`]: js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; export function loader() { return redirect("/?redirected"); } @@ -179,7 +179,7 @@ test.describe("navigation states", () => { } `, [`app/routes/${STATES.SUBMITTING_ACTION_REDIRECT}.jsx`]: js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; export function action() { return redirect("/?redirected"); } @@ -192,7 +192,7 @@ test.describe("navigation states", () => { } `, [`app/routes/${STATES.FETCHER_REDIRECT}.jsx`]: js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; export function action() { return redirect("/?redirected"); } diff --git a/integration/redirects-test.ts b/integration/redirects-test.ts index 10dec86ca6..8ce59b2172 100644 --- a/integration/redirects-test.ts +++ b/integration/redirects-test.ts @@ -35,7 +35,7 @@ test.describe("redirects", () => { `, "app/routes/absolute._index.tsx": js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; import { Form } from "react-router-dom"; export async function action({ request }) { @@ -58,7 +58,7 @@ test.describe("redirects", () => { `, "app/routes/loader.external.ts": js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; export const loader = () => { return redirect("https://remix.run/"); } @@ -89,7 +89,7 @@ test.describe("redirects", () => { `, "app/routes/redirect-document.a.tsx": js` - import { redirectDocument } from "@react-router/node"; + import { redirectDocument } from "react-router/server"; export const loader = () => redirectDocument("/redirect-document/b"); `, diff --git a/integration/remix-serve-test.ts b/integration/remix-serve-test.ts index af5394dfc5..07c539c24f 100644 --- a/integration/remix-serve-test.ts +++ b/integration/remix-serve-test.ts @@ -23,7 +23,7 @@ test.beforeAll(async () => { useReactRouterServe: true, files: { "app/routes/_index.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useLoaderData, Link } from "react-router-dom"; export function loader() { diff --git a/integration/request-test.ts b/integration/request-test.ts index 628b41bfe0..4e6c39a84f 100644 --- a/integration/request-test.ts +++ b/integration/request-test.ts @@ -15,7 +15,7 @@ test.beforeAll(async () => { fixture = await createFixture({ files: { "app/routes/_index.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Form, useLoaderData, useActionData } from "react-router-dom"; async function requestToJson(request) { diff --git a/integration/resource-routes-test.ts b/integration/resource-routes-test.ts index 4f73f86bae..4980dff269 100644 --- a/integration/resource-routes-test.ts +++ b/integration/resource-routes-test.ts @@ -42,12 +42,12 @@ test.describe("loader in an app", async () => { export default () =>
You were redirected
; `, "app/routes/redirect.tsx": js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; export let loader = () => redirect("/redirected"); `, "app/routes/redirect-to.tsx": js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; export let action = async ({ request }) => { let formData = await request.formData(); @@ -58,17 +58,17 @@ test.describe("loader in an app", async () => { export default () =>
You made it!
`, "app/routes/defer.tsx": js` - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; export let loader = () => defer({ data: 'whatever' }); `, "app/routes/data[.]json.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export let loader = () => json({hello: "world"}); `, "app/assets/icon.svg": SVG_CONTENTS, "app/routes/[manifest.webmanifest].tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import iconUrl from "~/assets/icon.svg"; export function loader() { return json( @@ -110,13 +110,13 @@ test.describe("loader in an app", async () => { } `, "app/routes/no-action.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; export let loader = () => { return json({ ok: true }); } `, "app/routes/$.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useRouteError } from "react-router-dom"; export function loader({ request }) { throw json({ message: new URL(request.url).pathname + ' not found' }, { diff --git a/integration/revalidate-test.ts b/integration/revalidate-test.ts index 475ca8ea3a..9d8e6f4c6d 100644 --- a/integration/revalidate-test.ts +++ b/integration/revalidate-test.ts @@ -46,7 +46,7 @@ test.describe("Revalidation", () => { `, "app/routes/parent.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Outlet, useLoaderData } from "react-router-dom"; export async function loader({ request }) { @@ -86,7 +86,7 @@ test.describe("Revalidation", () => { `, "app/routes/parent.child.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Form, useLoaderData, useRevalidator } from "react-router-dom"; export async function action() { diff --git a/integration/scroll-test.ts b/integration/scroll-test.ts index 1a8f530290..b663f56ea6 100644 --- a/integration/scroll-test.ts +++ b/integration/scroll-test.ts @@ -15,7 +15,7 @@ test.beforeAll(async () => { fixture = await createFixture({ files: { "app/routes/_index.tsx": js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; import { Form } from "react-router-dom"; export function action() { diff --git a/integration/set-cookie-revalidation-test.ts b/integration/set-cookie-revalidation-test.ts index 5cd04017c1..cc626d9178 100644 --- a/integration/set-cookie-revalidation-test.ts +++ b/integration/set-cookie-revalidation-test.ts @@ -33,7 +33,7 @@ test.describe("set-cookie revalidation", () => { `, "app/root.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { Links, Meta, @@ -93,7 +93,7 @@ test.describe("set-cookie revalidation", () => { `, "app/routes/protected.tsx": js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; import { sessionStorage, MESSAGE_KEY } from "~/session.server"; diff --git a/integration/single-fetch-test.ts b/integration/single-fetch-test.ts index 74f229c5a5..d770a9bf5e 100644 --- a/integration/single-fetch-test.ts +++ b/integration/single-fetch-test.ts @@ -907,7 +907,7 @@ test.describe("single-fetch", () => { files: { ...files, "app/routes/data.tsx": js` - import { redirect } from '@react-router/node'; + import { redirect } from 'react-router/server'; export function loader({ request, response }) { response.status = 302; response.headers.set('Location', '/target'); @@ -947,7 +947,7 @@ test.describe("single-fetch", () => { files: { ...files, "app/routes/data.tsx": js` - import { redirect } from '@react-router/node'; + import { redirect } from 'react-router/server'; export function loader({ request, response }) { response.status = 302; response.headers.set('Location', '/target'); @@ -983,7 +983,7 @@ test.describe("single-fetch", () => { files: { ...files, "app/routes/data.tsx": js` - import { redirect } from '@react-router/node'; + import { redirect } from 'react-router/server'; export function loader() { throw redirect('/target'); } @@ -1019,7 +1019,7 @@ test.describe("single-fetch", () => { files: { ...files, "app/routes/data.tsx": js` - import { redirect } from '@react-router/node'; + import { redirect } from 'react-router/server'; export function loader() { return redirect('/target'); } @@ -1055,7 +1055,7 @@ test.describe("single-fetch", () => { files: { ...files, "app/routes/data.tsx": js` - import { redirect } from '@react-router/node'; + import { redirect } from 'react-router/server'; export function action({ response }) { response.status = 302; response.headers.set('Location', '/target'); @@ -1101,7 +1101,7 @@ test.describe("single-fetch", () => { files: { ...files, "app/routes/data.tsx": js` - import { redirect } from '@react-router/node'; + import { redirect } from 'react-router/server'; export function action({ response }) { response.status = 302; response.headers.set('Location', '/target'); @@ -1143,7 +1143,7 @@ test.describe("single-fetch", () => { files: { ...files, "app/routes/data.tsx": js` - import { redirect } from '@react-router/node'; + import { redirect } from 'react-router/server'; export function action() { throw redirect('/target'); } @@ -1185,7 +1185,7 @@ test.describe("single-fetch", () => { files: { ...files, "app/routes/data.tsx": js` - import { redirect } from '@react-router/node'; + import { redirect } from 'react-router/server'; export function action() { return redirect('/target'); } @@ -1228,7 +1228,7 @@ test.describe("single-fetch", () => { "app/entry.server.tsx": js` import { PassThrough } from "node:stream"; - import type { EntryContext } from "@react-router/node"; + import type { EntryContext } from "react-router/server"; import { createReadableStreamFromReadable } from "@react-router/node"; import { RemixServer } from "react-router"; import { renderToPipeableStream } from "react-dom/server"; @@ -1279,7 +1279,7 @@ test.describe("single-fetch", () => { } `, "app/routes/data.tsx": js` - import { redirect } from '@react-router/node'; + import { redirect } from 'react-router/server'; export function loader() { return redirect('/target'); } @@ -1311,7 +1311,7 @@ test.describe("single-fetch", () => { "app/entry.server.tsx": js` import { PassThrough } from "node:stream"; - import type { EntryContext } from "@react-router/node"; + import type { EntryContext } from "react-router/server"; import { createReadableStreamFromReadable } from "@react-router/node"; import { RemixServer } from "react-router"; import { renderToPipeableStream } from "react-dom/server"; @@ -1362,7 +1362,7 @@ test.describe("single-fetch", () => { } `, "app/routes/data.tsx": js` - import { redirect } from '@react-router/node'; + import { redirect } from 'react-router/server'; export function action() { return redirect('/target'); } @@ -1440,7 +1440,7 @@ test.describe("single-fetch", () => { files: { ...files, "app/routes/resource.tsx": js` - import { json } from '@react-router/node'; + import { json } from 'react-router/server'; export function loader({ response }) { // This will be ignored in favor of the returned Response status response.status = 200; @@ -1611,7 +1611,7 @@ test.describe("single-fetch", () => { `, "app/entry.server.tsx": js` import { PassThrough } from "node:stream"; - import type { EntryContext } from "@react-router/node"; + import type { EntryContext } from "react-router/server"; import { createReadableStreamFromReadable } from "@react-router/node"; import { RemixServer } from "react-router"; import { renderToPipeableStream } from "react-dom/server"; diff --git a/integration/transition-test.ts b/integration/transition-test.ts index 020a48729f..61297ec811 100644 --- a/integration/transition-test.ts +++ b/integration/transition-test.ts @@ -119,7 +119,7 @@ test.describe("rendering", () => { `, [`app/routes/${REDIRECT}.jsx`]: js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; export function loader() { return redirect("/${REDIRECT_TARGET}") } @@ -129,7 +129,7 @@ test.describe("rendering", () => { `, [`app/routes/${REDIRECT_HASH}.jsx`]: js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; export function loader() { return redirect("/${REDIRECT_TARGET}#my-hash") } @@ -139,7 +139,7 @@ test.describe("rendering", () => { `, "app/routes/gh-1691.tsx": js` - import { json, redirect } from "@react-router/node"; + import { json, redirect } from "react-router/server"; import { useFetcher} from "react-router-dom"; export const action = async ( ) => { @@ -195,7 +195,7 @@ test.describe("rendering", () => { `, "app/routes/parent.child.tsx": js` - import { redirect } from "@react-router/node"; + import { redirect } from "react-router/server"; import { useFetcher} from "react-router-dom"; export const action = async ({ request }) => { diff --git a/integration/upload-test.ts b/integration/upload-test.ts index 02a4434758..adbb9b9116 100644 --- a/integration/upload-test.ts +++ b/integration/upload-test.ts @@ -24,10 +24,12 @@ test.beforeAll(async () => { import { json, unstable_composeUploadHandlers as composeUploadHandlers, - unstable_createFileUploadHandler as createFileUploadHandler, unstable_createMemoryUploadHandler as createMemoryUploadHandler, unstable_parseMultipartFormData as parseMultipartFormData, MaxPartSizeExceededError, + } from "react-router/server"; + import { + unstable_createFileUploadHandler as createFileUploadHandler, } from "@react-router/node"; import { Form, useActionData } from "react-router-dom"; @@ -90,7 +92,7 @@ test.beforeAll(async () => { unstable_createMemoryUploadHandler as createMemoryUploadHandler, unstable_parseMultipartFormData as parseMultipartFormData, MaxPartSizeExceededError, - } from "@react-router/node"; + } from "react-router/server"; import { Form, useActionData } from "react-router-dom"; export let action = async ({ request }) => { @@ -143,7 +145,7 @@ test.beforeAll(async () => { import { json, unstable_parseMultipartFormData as parseMultipartFormData, - } from "@react-router/node"; + } from "react-router/server"; import { Form, useActionData } from "react-router-dom"; export let action = async ({ request }) => { diff --git a/integration/vite-build-test.ts b/integration/vite-build-test.ts index 8515c6e7b9..75f2915fc0 100644 --- a/integration/vite-build-test.ts +++ b/integration/vite-build-test.ts @@ -63,7 +63,7 @@ test.beforeAll(async () => { `, "app/routes/_index.tsx": js` import { useState, useEffect } from "react"; - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { serverOnly1, serverOnly2 } from "../utils.server"; @@ -95,7 +95,7 @@ test.beforeAll(async () => { export const serverOnly2 = "SERVER_ONLY_2" `, "app/routes/resource.ts": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { serverOnly1, serverOnly2 } from "../utils.server"; @@ -110,7 +110,7 @@ test.beforeAll(async () => { `, "app/routes/mdx.mdx": js` import { useEffect, useState } from "react"; - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useLoaderData } from "react-router-dom"; import { serverOnly1, serverOnly2 } from "../utils.server"; @@ -170,7 +170,7 @@ test.beforeAll(async () => { } `, "app/routes/dotenv.tsx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useLoaderData } from "react-router-dom"; export const loader = () => { diff --git a/integration/vite-dev-custom-entry-test.ts b/integration/vite-dev-custom-entry-test.ts index f936b57315..262cbf2289 100644 --- a/integration/vite-dev-custom-entry-test.ts +++ b/integration/vite-dev-custom-entry-test.ts @@ -33,7 +33,7 @@ test.describe("Vite custom entry dev", () => { "app/entry.server.tsx": js` import { PassThrough } from "node:stream"; - import type { EntryContext } from "@react-router/node"; + import type { EntryContext } from "react-router/server"; import { createReadableStreamFromReadable } from "@react-router/node"; import { RemixServer } from "react-router-dom"; import { renderToPipeableStream } from "react-dom/server"; diff --git a/integration/vite-dev-test.ts b/integration/vite-dev-test.ts index ff55bf7203..41a94474d0 100644 --- a/integration/vite-dev-test.ts +++ b/integration/vite-dev-test.ts @@ -57,7 +57,7 @@ test.describe("Vite dev", () => { `, "app/routes/_index.tsx": js` import { Suspense } from "react"; - import { defer } from "@react-router/node"; + import { defer } from "react-router/server"; import { Await, useLoaderData } from "react-router-dom"; export function loader() { @@ -83,7 +83,7 @@ test.describe("Vite dev", () => { } `, "app/routes/set-cookies.tsx": js` - import { LoaderFunction } from "@react-router/node"; + import { LoaderFunction } from "react-router/server"; export const loader: LoaderFunction = () => { const headers = new Headers(); @@ -114,7 +114,7 @@ test.describe("Vite dev", () => { }; `, "app/routes/get-cookies.tsx": js` - import { json, LoaderFunctionArgs } from "@react-router/node"; + import { json, LoaderFunctionArgs } from "react-router/server"; import { useLoaderData } from "react-router-dom" export const loader = ({ request }: LoaderFunctionArgs) => json({cookies: request.headers.get("Cookie")}); @@ -140,7 +140,7 @@ test.describe("Vite dev", () => { } `, "app/routes/mdx.mdx": js` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useLoaderData } from "react-router-dom"; export const loader = () => { @@ -163,7 +163,7 @@ test.describe("Vite dev", () => { `, "app/routes/dotenv.tsx": js` import { useState, useEffect } from "react"; - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useLoaderData } from "react-router-dom"; export const loader = () => { @@ -191,7 +191,7 @@ test.describe("Vite dev", () => { } `, "app/routes/error-stacktrace.tsx": js` - import type { LoaderFunction, MetaFunction } from "@react-router/node"; + import type { LoaderFunction, MetaFunction } from "react-router/server"; import { Link, useLocation } from "react-router-dom"; export const loader: LoaderFunction = ({ request }) => { diff --git a/integration/vite-dot-server-test.ts b/integration/vite-dot-server-test.ts index 848486b656..2b3e1ccfd1 100644 --- a/integration/vite-dot-server-test.ts +++ b/integration/vite-dot-server-test.ts @@ -45,7 +45,7 @@ test("Vite / dead-code elimination for server exports", async () => { "app/.server/utils.ts": serverOnlyModule, "app/routes/remove-server-exports-and-dce.tsx": ` import fs from "node:fs"; - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useLoaderData } from "react-router-dom"; import { serverOnly as serverOnlyFile } from "../utils.server"; diff --git a/integration/vite-dotenv-test.ts b/integration/vite-dotenv-test.ts index 3ac389271c..107c28bace 100644 --- a/integration/vite-dotenv-test.ts +++ b/integration/vite-dotenv-test.ts @@ -14,7 +14,7 @@ let files = { `, "app/routes/dotenv.tsx": String.raw` import { useState, useEffect } from "react"; - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useLoaderData } from "react-router-dom"; export const loader = () => { diff --git a/integration/vite-hmr-hdr-test.ts b/integration/vite-hmr-hdr-test.ts index 0ef59ebe0b..17c83ec026 100644 --- a/integration/vite-hmr-hdr-test.ts +++ b/integration/vite-hmr-hdr-test.ts @@ -162,7 +162,7 @@ async function workflow({ contents .replace( "// imports", - `// imports\nimport { json } from "@react-router/node";\nimport { useLoaderData } from "react-router-dom"` + `// imports\nimport { json } from "react-router/server";\nimport { useLoaderData } from "react-router-dom"` ) .replace( "// loader", diff --git a/integration/vite-loader-context-test.ts b/integration/vite-loader-context-test.ts index 7e48b5773e..bbd3179ace 100644 --- a/integration/vite-loader-context-test.ts +++ b/integration/vite-loader-context-test.ts @@ -18,7 +18,7 @@ test.beforeAll(async () => { "vite.config.js": await viteConfig.basic({ port }), "server.mjs": EXPRESS_SERVER({ port, loadContext: { value: "value" } }), "app/routes/_index.tsx": String.raw` - import { json } from "@react-router/node"; + import { json } from "react-router/server"; import { useLoaderData } from "react-router-dom"; export const loader = ({ context }) => { diff --git a/integration/vite-spa-mode-test.ts b/integration/vite-spa-mode-test.ts index 5e5e75f586..2833f00e46 100644 --- a/integration/vite-spa-mode-test.ts +++ b/integration/vite-spa-mode-test.ts @@ -340,7 +340,7 @@ test.describe("SPA Mode", () => { import * as path from "node:path"; import { PassThrough } from "node:stream"; - import type { AppLoadContext, EntryContext } from "@react-router/node"; + import type { AppLoadContext, EntryContext } from "react-router/server"; import { createReadableStreamFromReadable } from "@react-router/node"; import { RemixServer } from "react-router"; import { renderToPipeableStream } from "react-dom/server"; diff --git a/packages/react-router/server/index.ts b/packages/react-router/server/index.ts index 07f183fe3f..219e047a1b 100644 --- a/packages/react-router/server/index.ts +++ b/packages/react-router/server/index.ts @@ -62,9 +62,10 @@ export type { SerializeFrom, ServerBuild, ServerEntryModule, - ServerRuntimeMetaArgs, - ServerRuntimeMetaDescriptor, - ServerRuntimeMetaFunction, + // Aliases previously provided by runtime packages + ServerRuntimeMetaArgs as MetaArgs, + ServerRuntimeMetaDescriptor as MetaDescriptor, + ServerRuntimeMetaFunction as MetaFunction, Session, SessionData, SessionIdStorageStrategy, diff --git a/packages/remix-dev/__tests__/fixtures/node/app/routes/_index.tsx b/packages/remix-dev/__tests__/fixtures/node/app/routes/_index.tsx index 62de75f08a..c23e1d5f37 100644 --- a/packages/remix-dev/__tests__/fixtures/node/app/routes/_index.tsx +++ b/packages/remix-dev/__tests__/fixtures/node/app/routes/_index.tsx @@ -1,4 +1,4 @@ -import type { MetaFunction } from "@react-router/node"; +import type { MetaFunction } from "react-router/server"; export const meta: MetaFunction = () => { return [ diff --git a/packages/remix-dev/config/defaults/entry.server.node.tsx b/packages/remix-dev/config/defaults/entry.server.node.tsx index ae6636d2a4..19caa5ccc5 100644 --- a/packages/remix-dev/config/defaults/entry.server.node.tsx +++ b/packages/remix-dev/config/defaults/entry.server.node.tsx @@ -1,6 +1,6 @@ import { PassThrough } from "node:stream"; -import type { AppLoadContext, EntryContext } from "@react-router/node"; +import type { AppLoadContext, EntryContext } from "react-router/server"; import { createReadableStreamFromReadable } from "@react-router/node"; import { RemixServer } from "react-router"; import * as isbotModule from "isbot"; diff --git a/packages/remix-dev/config/defaults/entry.server.spa.tsx b/packages/remix-dev/config/defaults/entry.server.spa.tsx index b3c9356549..733dc0e316 100644 --- a/packages/remix-dev/config/defaults/entry.server.spa.tsx +++ b/packages/remix-dev/config/defaults/entry.server.spa.tsx @@ -1,6 +1,6 @@ import { PassThrough } from "node:stream"; -import type { AppLoadContext, EntryContext } from "@react-router/node"; +import type { AppLoadContext, EntryContext } from "react-router/server"; import { createReadableStreamFromReadable } from "@react-router/node"; import { RemixServer } from "react-router"; import { renderToPipeableStream } from "react-dom/server"; diff --git a/packages/remix-dev/vite/plugin.ts b/packages/remix-dev/vite/plugin.ts index bb731905cf..be928380c0 100644 --- a/packages/remix-dev/vite/plugin.ts +++ b/packages/remix-dev/vite/plugin.ts @@ -1661,7 +1661,7 @@ async function getPrerenderBuildAndHandler( ); let build = await import(url.pathToFileURL(serverBuildPath).toString()); let { createRequestHandler: createHandler } = await import( - "@react-router/node" + "react-router/server" ); return { build, diff --git a/packages/remix-express/__tests__/server-test.ts b/packages/remix-express/__tests__/server-test.ts index 7171b20e19..3c4b01ae27 100644 --- a/packages/remix-express/__tests__/server-test.ts +++ b/packages/remix-express/__tests__/server-test.ts @@ -1,8 +1,7 @@ import { Readable } from "node:stream"; -import { - createReadableStreamFromReadable, - createRequestHandler as createRemixRequestHandler, -} from "@react-router/node"; + +import { createRequestHandler as createRemixRequestHandler } from "react-router/server"; +import { createReadableStreamFromReadable } from "@react-router/node"; import express from "express"; import { createRequest, createResponse } from "node-mocks-http"; import supertest from "supertest"; @@ -15,8 +14,8 @@ import { // We don't want to test that the remix server works here (that's what the // playwright tests do), we just want to test the express adapter -jest.mock("@react-router/node", () => { - let original = jest.requireActual("@react-router/node"); +jest.mock("react-router/server", () => { + let original = jest.requireActual("react-router/server"); return { ...original, createRequestHandler: jest.fn(), diff --git a/packages/remix-express/package.json b/packages/remix-express/package.json index 3164e38549..ac08c1a664 100644 --- a/packages/remix-express/package.json +++ b/packages/remix-express/package.json @@ -25,11 +25,13 @@ "@types/supertest": "^2.0.10", "express": "^4.17.1", "node-mocks-http": "^1.10.1", + "react-router": "workspace:*", "supertest": "^6.3.3", "typescript": "^5.1.6" }, "peerDependencies": { "express": "^4.17.1", + "react-router": "workspace:*", "typescript": "^5.1.0" }, "peerDependenciesMeta": { diff --git a/packages/remix-express/server.ts b/packages/remix-express/server.ts index 5bce090d3d..bf44f0c982 100644 --- a/packages/remix-express/server.ts +++ b/packages/remix-express/server.ts @@ -3,9 +3,12 @@ /// import type * as express from "express"; -import type { AppLoadContext, ServerBuild } from "@react-router/node"; import { + type AppLoadContext, + type ServerBuild, createRequestHandler as createRemixRequestHandler, +} from "react-router/server"; +import { createReadableStreamFromReadable, writeReadableStreamToWritable, } from "@react-router/node"; diff --git a/packages/remix-node/index.ts b/packages/remix-node/index.ts index fdffe89c3c..f0b9527593 100644 --- a/packages/remix-node/index.ts +++ b/packages/remix-node/index.ts @@ -20,63 +20,3 @@ export { writeAsyncIterableToWritable, writeReadableStreamToWritable, } from "./stream"; - -export { - createRequestHandler, - createSession, - defer, - isCookie, - isSession, - json, - MaxPartSizeExceededError, - redirect, - redirectDocument, - unstable_composeUploadHandlers, - unstable_createMemoryUploadHandler, - unstable_parseMultipartFormData, -} from "react-router/server"; - -export type { - ActionFunction, - ActionFunctionArgs, - AppLoadContext, - Cookie, - CookieOptions, - CookieParseOptions, - CookieSerializeOptions, - CookieSignatureOptions, - DataFunctionArgs, - EntryContext, - ErrorResponse, - HandleDataRequestFunction, - HandleDocumentRequestFunction, - HeadersArgs, - HeadersFunction, - HtmlLinkDescriptor, - JsonFunction, - LinkDescriptor, - LinksFunction, - LoaderFunction, - LoaderFunctionArgs, - MemoryUploadHandlerFilterArgs, - MemoryUploadHandlerOptions, - HandleErrorFunction, - PageLinkDescriptor, - RequestHandler, - SerializeFrom, - ServerBuild, - ServerEntryModule, - ServerRuntimeMetaArgs as MetaArgs, - ServerRuntimeMetaDescriptor as MetaDescriptor, - ServerRuntimeMetaFunction as MetaFunction, - Session, - SessionData, - SessionIdStorageStrategy, - SessionStorage, - SignFunction, - TypedDeferredData, - TypedResponse, - UnsignFunction, - UploadHandler, - UploadHandlerPart, -} from "react-router/server"; diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json index faa350629d..ce58352020 100644 --- a/packages/remix-node/package.json +++ b/packages/remix-node/package.json @@ -12,7 +12,16 @@ }, "license": "MIT", "main": "dist/index.js", + "module": "dist/esm/index.mjs", "typings": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/esm/index.mjs", + "require": "./dist/index.js" + }, + "./package.json": "./package.json" + }, "sideEffects": [ "./install.js" ], @@ -22,7 +31,6 @@ "dependencies": { "@web3-storage/multipart-parser": "^1.0.0", "cookie-signature": "^1.1.0", - "react-router": "workspace:*", "source-map-support": "^0.5.21", "stream-slice": "^0.1.2", "undici": "^6.10.1" @@ -30,9 +38,11 @@ "devDependencies": { "@types/cookie-signature": "^1.0.3", "@types/source-map-support": "^0.5.4", + "react-router": "workspace:*", "typescript": "^5.1.6" }, "peerDependencies": { + "react-router": "workspace:*", "typescript": "^5.1.0" }, "peerDependenciesMeta": { diff --git a/packages/remix-node/rollup.config.js b/packages/remix-node/rollup.config.js index 293188a37b..ccf2451097 100644 --- a/packages/remix-node/rollup.config.js +++ b/packages/remix-node/rollup.config.js @@ -50,5 +50,25 @@ module.exports = function rollup() { }), ], }, + { + external: (id) => isBareModuleId(id), + input: `${SOURCE_DIR}/index.ts`, + output: { + banner: createBanner(name, version), + dir: `${OUTPUT_DIR}/esm`, + format: "esm", + preserveModules: true, + entryFileNames: "[name].mjs", + }, + plugins: [ + babel({ + babelHelpers: "bundled", + exclude: /node_modules/, + extensions: [".ts", ".tsx"], + ...remixBabelConfig, + }), + nodeResolve({ extensions: [".ts", ".tsx"] }), + ], + }, ]; }; diff --git a/packages/remix-serve/cli.ts b/packages/remix-serve/cli.ts index 8a1456f55d..40fbc04a35 100644 --- a/packages/remix-serve/cli.ts +++ b/packages/remix-serve/cli.ts @@ -3,7 +3,7 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import url from "node:url"; -import type { ServerBuild } from "@react-router/node"; +import type { ServerBuild } from "react-router/server"; import { installGlobals } from "@react-router/node"; import { createRequestHandler } from "@react-router/express"; import compression from "compression"; diff --git a/packages/remix-serve/package.json b/packages/remix-serve/package.json index 577e9c4ef0..f41d6b9f70 100644 --- a/packages/remix-serve/package.json +++ b/packages/remix-serve/package.json @@ -30,7 +30,8 @@ "@types/compression": "^1.7.0", "@types/express": "^4.17.9", "@types/morgan": "^1.9.2", - "@types/source-map-support": "^0.5.6" + "@types/source-map-support": "^0.5.6", + "react-router": "workspace:*" }, "engines": { "node": ">=18.0.0" diff --git a/playground/compiler-express/app/entry.server.tsx b/playground/compiler-express/app/entry.server.tsx index d6b44e9645..eb73219ab7 100644 --- a/playground/compiler-express/app/entry.server.tsx +++ b/playground/compiler-express/app/entry.server.tsx @@ -1,6 +1,6 @@ import { PassThrough } from "node:stream"; -import type { AppLoadContext, EntryContext } from "@react-router/node"; +import type { AppLoadContext, EntryContext } from "react-router/server"; import { createReadableStreamFromReadable } from "@react-router/node"; import { RemixServer } from "react-router"; import { isbot } from "isbot"; diff --git a/playground/compiler-express/app/routes/_index.tsx b/playground/compiler-express/app/routes/_index.tsx index 85c4b7911e..c997679abc 100644 --- a/playground/compiler-express/app/routes/_index.tsx +++ b/playground/compiler-express/app/routes/_index.tsx @@ -1,4 +1,4 @@ -import type { MetaFunction } from "@react-router/node"; +import type { MetaFunction } from "react-router/server"; export const meta: MetaFunction = () => { return [ diff --git a/playground/compiler-spa/app/entry.server.tsx b/playground/compiler-spa/app/entry.server.tsx index 310741a8c5..0365ff1345 100644 --- a/playground/compiler-spa/app/entry.server.tsx +++ b/playground/compiler-spa/app/entry.server.tsx @@ -1,4 +1,4 @@ -import type { EntryContext } from "@react-router/node"; +import type { EntryContext } from "react-router/server"; import { RemixServer } from "react-router"; import { renderToString } from "react-dom/server"; diff --git a/playground/compiler-spa/app/routes/_index.tsx b/playground/compiler-spa/app/routes/_index.tsx index 85c4b7911e..c997679abc 100644 --- a/playground/compiler-spa/app/routes/_index.tsx +++ b/playground/compiler-spa/app/routes/_index.tsx @@ -1,4 +1,4 @@ -import type { MetaFunction } from "@react-router/node"; +import type { MetaFunction } from "react-router/server"; export const meta: MetaFunction = () => { return [ diff --git a/playground/compiler/app/entry.server.tsx b/playground/compiler/app/entry.server.tsx index d6b44e9645..eb73219ab7 100644 --- a/playground/compiler/app/entry.server.tsx +++ b/playground/compiler/app/entry.server.tsx @@ -1,6 +1,6 @@ import { PassThrough } from "node:stream"; -import type { AppLoadContext, EntryContext } from "@react-router/node"; +import type { AppLoadContext, EntryContext } from "react-router/server"; import { createReadableStreamFromReadable } from "@react-router/node"; import { RemixServer } from "react-router"; import { isbot } from "isbot"; diff --git a/playground/compiler/app/routes/_index.tsx b/playground/compiler/app/routes/_index.tsx index 85c4b7911e..c997679abc 100644 --- a/playground/compiler/app/routes/_index.tsx +++ b/playground/compiler/app/routes/_index.tsx @@ -1,4 +1,4 @@ -import type { MetaFunction } from "@react-router/node"; +import type { MetaFunction } from "react-router/server"; export const meta: MetaFunction = () => { return [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d0d69fa086..4be57e49b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -705,6 +705,9 @@ importers: node-mocks-http: specifier: ^1.10.1 version: 1.14.1 + react-router: + specifier: workspace:* + version: link:../react-router supertest: specifier: ^6.3.3 version: 6.3.4 @@ -720,9 +723,6 @@ importers: cookie-signature: specifier: ^1.1.0 version: 1.2.1 - react-router: - specifier: workspace:* - version: link:../react-router source-map-support: specifier: ^0.5.21 version: 0.5.21 @@ -739,6 +739,9 @@ importers: '@types/source-map-support': specifier: ^0.5.4 version: 0.5.10 + react-router: + specifier: workspace:* + version: link:../react-router typescript: specifier: ^5.1.6 version: 5.1.6 @@ -779,6 +782,9 @@ importers: '@types/source-map-support': specifier: ^0.5.6 version: 0.5.10 + react-router: + specifier: workspace:* + version: link:../react-router playground/compiler: dependencies: From c05480274d08daf221a2d02e7907177251e2be9f Mon Sep 17 00:00:00 2001 From: Mark Dalgleish Date: Wed, 19 Jun 2024 17:33:57 +1000 Subject: [PATCH 2/3] Add `./install` to `node` package exports --- packages/remix-node/package.json | 6 +++++- packages/remix-node/rollup.config.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/packages/remix-node/package.json b/packages/remix-node/package.json index ce58352020..8a10dc50d5 100644 --- a/packages/remix-node/package.json +++ b/packages/remix-node/package.json @@ -20,10 +20,14 @@ "import": "./dist/esm/index.mjs", "require": "./dist/index.js" }, + "./install": { + "types": "./dist/install.d.ts", + "default": "./dist/install.js" + }, "./package.json": "./package.json" }, "sideEffects": [ - "./install.js" + "./dist/install.js" ], "scripts": { "tsc": "tsc" diff --git a/packages/remix-node/rollup.config.js b/packages/remix-node/rollup.config.js index ccf2451097..da921255be 100644 --- a/packages/remix-node/rollup.config.js +++ b/packages/remix-node/rollup.config.js @@ -24,7 +24,7 @@ module.exports = function rollup() { return [ { external: (id) => isBareModuleId(id), - input: `${SOURCE_DIR}/index.ts`, + input: [`${SOURCE_DIR}/index.ts`, `${SOURCE_DIR}/install.ts`], output: { banner: createBanner(name, version), dir: OUTPUT_DIR, From bc3a2a3339bb4655d6ed700cb9c284200bc37677 Mon Sep 17 00:00:00 2001 From: Mark Dalgleish Date: Wed, 19 Jun 2024 17:39:24 +1000 Subject: [PATCH 3/3] Add missing `install.ts` to `node` package --- packages/remix-node/install.d.ts | 1 - packages/remix-node/install.js | 8 -------- packages/remix-node/install.ts | 3 +++ 3 files changed, 3 insertions(+), 9 deletions(-) delete mode 100644 packages/remix-node/install.d.ts delete mode 100644 packages/remix-node/install.js create mode 100644 packages/remix-node/install.ts diff --git a/packages/remix-node/install.d.ts b/packages/remix-node/install.d.ts deleted file mode 100644 index cb0ff5c3b5..0000000000 --- a/packages/remix-node/install.d.ts +++ /dev/null @@ -1 +0,0 @@ -export {}; diff --git a/packages/remix-node/install.js b/packages/remix-node/install.js deleted file mode 100644 index 10966624c9..0000000000 --- a/packages/remix-node/install.js +++ /dev/null @@ -1,8 +0,0 @@ -/* eslint-disable */ -"use strict"; - -var globals = require("./dist/globals.js"); - -Object.defineProperty(exports, "__esModule", { value: true }); - -globals.installGlobals(); diff --git a/packages/remix-node/install.ts b/packages/remix-node/install.ts new file mode 100644 index 0000000000..e5bc566ae4 --- /dev/null +++ b/packages/remix-node/install.ts @@ -0,0 +1,3 @@ +import { installGlobals } from "./globals"; + +installGlobals();