From fef7924d61842642bace58fa0233ef9db0f4750a Mon Sep 17 00:00:00 2001 From: Mark Dalgleish Date: Thu, 28 Mar 2024 14:36:07 +1100 Subject: [PATCH] Fix lint errors --- .eslintrc | 12 +- integration/defer-test.ts | 1 - integration/helpers/cf-template/.gitignore | 8 -- integration/helpers/cf-template/app/root.tsx | 33 ----- .../helpers/cf-template/app/routes/_index.tsx | 41 ------ integration/helpers/cf-template/package.json | 32 ----- .../helpers/cf-template/public/favicon.ico | Bin 16958 -> 0 bytes .../helpers/cf-template/remix.config.js | 21 --- .../helpers/cf-template/remix.env.d.ts | 8 -- integration/helpers/cf-template/server.ts | 53 -------- integration/helpers/cf-template/tsconfig.json | 22 --- integration/helpers/cf-template/wrangler.toml | 9 -- integration/helpers/deno-template/.gitignore | 6 - .../helpers/deno-template/app/root.tsx | 34 ----- .../deno-template/app/routes/_index.tsx | 42 ------ .../helpers/deno-template/package.json | 28 ---- .../helpers/deno-template/public/favicon.ico | Bin 16958 -> 0 bytes .../helpers/deno-template/remix.config.js | 17 --- integration/helpers/deno-template/server.ts | 13 -- integration/helpers/node-template/.gitignore | 6 - .../helpers/node-template/app/root.tsx | 33 ----- .../node-template/app/routes/_index.tsx | 41 ------ .../helpers/node-template/package.json | 38 ------ .../helpers/node-template/public/favicon.ico | Bin 16958 -> 0 bytes .../helpers/node-template/remix.config.js | 11 -- .../helpers/node-template/remix.env.d.ts | 2 - .../helpers/node-template/tsconfig.json | 22 --- .../vite-cloudflare-template/.gitignore | 5 - .../vite-cloudflare-template/app/root.tsx | 25 ---- .../app/routes/_index.tsx | 41 ------ .../helpers/vite-cloudflare-template/env.d.ts | 2 - .../vite-cloudflare-template/package.json | 36 ----- .../public/favicon.ico | Bin 16958 -> 0 bytes .../vite-cloudflare-template/tsconfig.json | 21 --- .../vite-cloudflare-template/vite.config.ts | 7 - integration/helpers/vite.ts | 3 +- integration/vite-dev-custom-entry-test.ts | 3 +- integration/vite-dev-test.ts | 3 +- integration/vite-server-bundles-test.ts | 3 +- .../__tests__/data-browser-router-test.tsx | 2 - .../__tests__/useNavigate-test.tsx | 1 - .../__tests__/fixtures/cloudflare/.gitignore | 7 - .../fixtures/cloudflare/.node-version | 1 - .../__tests__/fixtures/cloudflare/README.md | 22 --- .../fixtures/cloudflare/app/root.tsx | 33 ----- .../fixtures/cloudflare/app/routes/_index.tsx | 41 ------ .../fixtures/cloudflare/package.json | 32 ----- .../fixtures/cloudflare/public/_headers | 4 - .../fixtures/cloudflare/public/_routes.json | 5 - .../fixtures/cloudflare/public/favicon.ico | Bin 16958 -> 0 bytes .../fixtures/cloudflare/remix.config.js | 14 -- .../fixtures/cloudflare/remix.env.d.ts | 3 - .../__tests__/fixtures/cloudflare/server.ts | 9 -- .../fixtures/cloudflare/tsconfig.json | 22 --- .../__tests__/fixtures/deno/.gitignore | 6 - .../fixtures/deno/.vscode/extensions.json | 3 - .../deno/.vscode/resolve_npm_imports.json | 22 --- .../fixtures/deno/.vscode/settings.json | 4 - .../__tests__/fixtures/deno/README.md | 128 ------------------ .../__tests__/fixtures/deno/app/root.tsx | 34 ----- .../fixtures/deno/app/routes/_index.tsx | 42 ------ .../__tests__/fixtures/deno/deno.json | 6 - .../__tests__/fixtures/deno/package.json | 30 ---- .../fixtures/deno/public/favicon.ico | Bin 16958 -> 0 bytes .../__tests__/fixtures/deno/remix.config.js | 13 -- .../__tests__/fixtures/deno/server.ts | 13 -- .../__tests__/fixtures/examples-main.tar.gz | Bin 81920 -> 0 bytes .../fixtures/failing-remix-init/package.json | 1 - .../failing-remix-init/remix.init/index.js | 3 - .../__tests__/fixtures/nested-dir-repo.tar.gz | Bin 34304 -> 0 bytes .../__tests__/fixtures/node/.gitignore | 6 - .../__tests__/fixtures/node/README.md | 38 ------ .../__tests__/fixtures/node/app/root.tsx | 33 ----- .../fixtures/node/app/routes/_index.tsx | 41 ------ .../__tests__/fixtures/node/package.json | 30 ---- .../fixtures/node/public/favicon.ico | Bin 16958 -> 0 bytes .../__tests__/fixtures/node/remix.config.js | 7 - .../__tests__/fixtures/node/remix.env.d.ts | 2 - .../__tests__/fixtures/node/tsconfig.json | 22 --- .../__tests__/fixtures/remix-repo.tar.gz | Bin 179712 -> 0 bytes .../remix-dev/__tests__/fixtures/stack.tar.gz | Bin 34304 -> 0 bytes .../__tests__/fixtures/stack/.gitignore | 6 - .../__tests__/fixtures/stack/README.md | 38 ------ .../fixtures/stack/app/entry.client.tsx | 4 - .../fixtures/stack/app/entry.server.tsx | 23 ---- .../__tests__/fixtures/stack/app/root.tsx | 25 ---- .../__tests__/fixtures/stack/app/utils.ts | 1 - .../__tests__/fixtures/stack/package.json | 15 -- .../fixtures/stack/public/favicon.ico | Bin 16958 -> 0 bytes .../__tests__/fixtures/stack/remix.config.js | 7 - .../__tests__/fixtures/stack/remix.env.d.ts | 2 - .../fixtures/stack/remix.init/index.js | 1 - .../__tests__/fixtures/stack/tsconfig.json | 22 --- .../successful-remix-init/package.json | 1 - .../successful-remix-init/remix.init/index.js | 9 -- packages/remix-dev/__tests__/fixtures/tar.js | 21 --- .../remix-dev/__tests__/flat-routes-test.ts | 4 +- packages/remix-dev/__tests__/init-test.ts | 2 +- .../remix-dev/__tests__/utils/captureError.ts | 6 +- packages/remix-dev/__tests__/utils/withApp.ts | 6 +- packages/remix-dev/cli/commands.ts | 3 +- packages/remix-dev/compiler/js/compiler.ts | 2 +- packages/remix-dev/compiler/manifest.ts | 4 +- .../remix-dev/compiler/plugins/cssImports.ts | 1 - .../compiler/plugins/cssSideEffectImports.ts | 5 +- .../remix-dev/compiler/server/compiler.ts | 2 +- .../compiler/server/plugins/manifest.ts | 2 +- packages/remix-dev/compiler/utils/postcss.ts | 1 - packages/remix-dev/devServer_unstable/hmr.ts | 2 +- .../remix-dev/devServer_unstable/index.ts | 4 +- .../remix-dev/devServer_unstable/socket.ts | 2 +- packages/remix-dev/vite/build.ts | 12 +- .../remix-dev/vite/cloudflare-proxy-plugin.ts | 9 +- packages/remix-dev/vite/plugin.ts | 31 +++-- packages/remix-dev/vite/remove-exports.ts | 10 +- packages/remix-dev/vite/styles.ts | 6 +- packages/remix-serve/cli.ts | 10 +- packages/remix-server-runtime/.eslintrc.js | 2 +- .../__tests__/responses-test.ts | 1 + .../__tests__/serialize-test.ts | 4 + packages/remix-server-runtime/jsonify.ts | 8 +- packages/remix-server-runtime/responses.ts | 6 +- packages/remix-server-runtime/serialize.ts | 2 +- .../remix-testing/__tests__/stub-test.tsx | 6 +- packages/remix-testing/create-remix-stub.tsx | 14 +- packages/router/__tests__/lazy-test.ts | 1 - .../__tests__/utils/data-router-setup.ts | 3 - packages/router/history.ts | 2 - 128 files changed, 103 insertions(+), 1607 deletions(-) delete mode 100644 integration/helpers/cf-template/.gitignore delete mode 100644 integration/helpers/cf-template/app/root.tsx delete mode 100644 integration/helpers/cf-template/app/routes/_index.tsx delete mode 100644 integration/helpers/cf-template/package.json delete mode 100644 integration/helpers/cf-template/public/favicon.ico delete mode 100644 integration/helpers/cf-template/remix.config.js delete mode 100644 integration/helpers/cf-template/remix.env.d.ts delete mode 100644 integration/helpers/cf-template/server.ts delete mode 100644 integration/helpers/cf-template/tsconfig.json delete mode 100644 integration/helpers/cf-template/wrangler.toml delete mode 100644 integration/helpers/deno-template/.gitignore delete mode 100644 integration/helpers/deno-template/app/root.tsx delete mode 100644 integration/helpers/deno-template/app/routes/_index.tsx delete mode 100644 integration/helpers/deno-template/package.json delete mode 100644 integration/helpers/deno-template/public/favicon.ico delete mode 100644 integration/helpers/deno-template/remix.config.js delete mode 100644 integration/helpers/deno-template/server.ts delete mode 100644 integration/helpers/node-template/.gitignore delete mode 100644 integration/helpers/node-template/app/root.tsx delete mode 100644 integration/helpers/node-template/app/routes/_index.tsx delete mode 100644 integration/helpers/node-template/package.json delete mode 100644 integration/helpers/node-template/public/favicon.ico delete mode 100644 integration/helpers/node-template/remix.config.js delete mode 100644 integration/helpers/node-template/remix.env.d.ts delete mode 100644 integration/helpers/node-template/tsconfig.json delete mode 100644 integration/helpers/vite-cloudflare-template/.gitignore delete mode 100644 integration/helpers/vite-cloudflare-template/app/root.tsx delete mode 100644 integration/helpers/vite-cloudflare-template/app/routes/_index.tsx delete mode 100644 integration/helpers/vite-cloudflare-template/env.d.ts delete mode 100644 integration/helpers/vite-cloudflare-template/package.json delete mode 100644 integration/helpers/vite-cloudflare-template/public/favicon.ico delete mode 100644 integration/helpers/vite-cloudflare-template/tsconfig.json delete mode 100644 integration/helpers/vite-cloudflare-template/vite.config.ts delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/.gitignore delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/.node-version delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/README.md delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/app/root.tsx delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/app/routes/_index.tsx delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/package.json delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/public/_headers delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/public/_routes.json delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/public/favicon.ico delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/remix.config.js delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/remix.env.d.ts delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/server.ts delete mode 100644 packages/remix-dev/__tests__/fixtures/cloudflare/tsconfig.json delete mode 100644 packages/remix-dev/__tests__/fixtures/deno/.gitignore delete mode 100644 packages/remix-dev/__tests__/fixtures/deno/.vscode/extensions.json delete mode 100644 packages/remix-dev/__tests__/fixtures/deno/.vscode/resolve_npm_imports.json delete mode 100644 packages/remix-dev/__tests__/fixtures/deno/.vscode/settings.json delete mode 100644 packages/remix-dev/__tests__/fixtures/deno/README.md delete mode 100644 packages/remix-dev/__tests__/fixtures/deno/app/root.tsx delete mode 100644 packages/remix-dev/__tests__/fixtures/deno/app/routes/_index.tsx delete mode 100644 packages/remix-dev/__tests__/fixtures/deno/deno.json delete mode 100644 packages/remix-dev/__tests__/fixtures/deno/package.json delete mode 100644 packages/remix-dev/__tests__/fixtures/deno/public/favicon.ico delete mode 100644 packages/remix-dev/__tests__/fixtures/deno/remix.config.js delete mode 100644 packages/remix-dev/__tests__/fixtures/deno/server.ts delete mode 100644 packages/remix-dev/__tests__/fixtures/examples-main.tar.gz delete mode 100644 packages/remix-dev/__tests__/fixtures/failing-remix-init/package.json delete mode 100644 packages/remix-dev/__tests__/fixtures/failing-remix-init/remix.init/index.js delete mode 100644 packages/remix-dev/__tests__/fixtures/nested-dir-repo.tar.gz delete mode 100644 packages/remix-dev/__tests__/fixtures/node/.gitignore delete mode 100644 packages/remix-dev/__tests__/fixtures/node/README.md delete mode 100644 packages/remix-dev/__tests__/fixtures/node/app/root.tsx delete mode 100644 packages/remix-dev/__tests__/fixtures/node/app/routes/_index.tsx delete mode 100644 packages/remix-dev/__tests__/fixtures/node/package.json delete mode 100644 packages/remix-dev/__tests__/fixtures/node/public/favicon.ico delete mode 100644 packages/remix-dev/__tests__/fixtures/node/remix.config.js delete mode 100644 packages/remix-dev/__tests__/fixtures/node/remix.env.d.ts delete mode 100644 packages/remix-dev/__tests__/fixtures/node/tsconfig.json delete mode 100644 packages/remix-dev/__tests__/fixtures/remix-repo.tar.gz delete mode 100644 packages/remix-dev/__tests__/fixtures/stack.tar.gz delete mode 100644 packages/remix-dev/__tests__/fixtures/stack/.gitignore delete mode 100644 packages/remix-dev/__tests__/fixtures/stack/README.md delete mode 100644 packages/remix-dev/__tests__/fixtures/stack/app/entry.client.tsx delete mode 100644 packages/remix-dev/__tests__/fixtures/stack/app/entry.server.tsx delete mode 100644 packages/remix-dev/__tests__/fixtures/stack/app/root.tsx delete mode 100644 packages/remix-dev/__tests__/fixtures/stack/app/utils.ts delete mode 100644 packages/remix-dev/__tests__/fixtures/stack/package.json delete mode 100644 packages/remix-dev/__tests__/fixtures/stack/public/favicon.ico delete mode 100644 packages/remix-dev/__tests__/fixtures/stack/remix.config.js delete mode 100644 packages/remix-dev/__tests__/fixtures/stack/remix.env.d.ts delete mode 100644 packages/remix-dev/__tests__/fixtures/stack/remix.init/index.js delete mode 100644 packages/remix-dev/__tests__/fixtures/stack/tsconfig.json delete mode 100644 packages/remix-dev/__tests__/fixtures/successful-remix-init/package.json delete mode 100644 packages/remix-dev/__tests__/fixtures/successful-remix-init/remix.init/index.js delete mode 100644 packages/remix-dev/__tests__/fixtures/tar.js diff --git a/.eslintrc b/.eslintrc index 728a4ef663..61400497f8 100644 --- a/.eslintrc +++ b/.eslintrc @@ -9,6 +9,16 @@ "files": ["**/__tests__/**"], "plugins": ["jest"], "extends": ["plugin:jest/recommended"] + }, + { + "files": ["integration/**/*.*"], + "rules": { + "react-hooks/rules-of-hooks": "off" + }, + "env": { + "jest/globals": false + } } - ] + ], + "reportUnusedDisableDirectives": true } diff --git a/integration/defer-test.ts b/integration/defer-test.ts index 487be7f8b0..c26fbf2f52 100644 --- a/integration/defer-test.ts +++ b/integration/defer-test.ts @@ -23,7 +23,6 @@ const MANUAL_FALLBACK_ID = "MANUAL_FALLBACK_ID"; const MANUAL_ERROR_ID = "MANUAL_ERROR_ID"; declare global { - // eslint-disable-next-line prefer-let/prefer-let var __deferredManualResolveCache: { nextId: number; deferreds: Record< diff --git a/integration/helpers/cf-template/.gitignore b/integration/helpers/cf-template/.gitignore deleted file mode 100644 index f0421bd702..0000000000 --- a/integration/helpers/cf-template/.gitignore +++ /dev/null @@ -1,8 +0,0 @@ -node_modules - -/.cache -/build -/dist -/public/build -/.mf -.env diff --git a/integration/helpers/cf-template/app/root.tsx b/integration/helpers/cf-template/app/root.tsx deleted file mode 100644 index 68397b09d4..0000000000 --- a/integration/helpers/cf-template/app/root.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import type { LinksFunction } from "@remix-run/cloudflare"; -import { cssBundleHref } from "@remix-run/css-bundle"; -import { - Links, - LiveReload, - Meta, - Outlet, - Scripts, - ScrollRestoration, -} from "@remix-run/react"; - -export const links: LinksFunction = () => [ - ...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []), -]; - -export default function App() { - return ( - - - - - - - - - - - - - - - ); -} diff --git a/integration/helpers/cf-template/app/routes/_index.tsx b/integration/helpers/cf-template/app/routes/_index.tsx deleted file mode 100644 index 4aa6089f12..0000000000 --- a/integration/helpers/cf-template/app/routes/_index.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import type { MetaFunction } from "@remix-run/cloudflare"; - -export const meta: MetaFunction = () => { - return [ - { title: "New Remix App" }, - { name: "description", content: "Welcome to Remix!" }, - ]; -}; - -export default function Index() { - return ( - - ); -} diff --git a/integration/helpers/cf-template/package.json b/integration/helpers/cf-template/package.json deleted file mode 100644 index 1c35963883..0000000000 --- a/integration/helpers/cf-template/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "integration-cf-template", - "version": "0.0.0", - "private": true, - "sideEffects": false, - "type": "module", - "scripts": { - "build": "node ./node_modules/@remix-run/dev/dist/cli.js build", - "dev": "node ./node_modules/@remix-run/dev/dist/cli.js dev --manual -c \"npm start\"", - "start": "wrangler dev ./build/index.js" - }, - "dependencies": { - "@cloudflare/kv-asset-handler": "^0.3.0", - "@remix-run/cloudflare": "workspace:*", - "@remix-run/css-bundle": "workspace:*", - "@remix-run/react": "workspace:*", - "isbot": "^4.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@cloudflare/workers-types": "^4.20230518.0", - "@remix-run/dev": "workspace:*", - "@types/react": "^18.2.0", - "@types/react-dom": "^18.2.0", - "typescript": "^5.1.0", - "wrangler": "^3.24.0" - }, - "engines": { - "node": ">=18.0.0" - } -} diff --git a/integration/helpers/cf-template/public/favicon.ico b/integration/helpers/cf-template/public/favicon.ico deleted file mode 100644 index 8830cf6821b354114848e6354889b8ecf6d2bc61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16958 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 EKbET!0{{R3 diff --git a/integration/helpers/cf-template/remix.config.js b/integration/helpers/cf-template/remix.config.js deleted file mode 100644 index 38db27d725..0000000000 --- a/integration/helpers/cf-template/remix.config.js +++ /dev/null @@ -1,21 +0,0 @@ -/** @type {import('@remix-run/dev').AppConfig} */ -export default { - server: "./server.ts", - serverConditions: ["workerd", "worker", "browser"], - serverDependenciesToBundle: [ - // bundle everything except the virtual module for the static content manifest provided by wrangler - /^(?!.*\b__STATIC_CONTENT_MANIFEST\b).*$/, - ], - serverMainFields: ["browser", "module", "main"], - serverMinify: true, - serverModuleFormat: "esm", - serverPlatform: "neutral", - // appDirectory: "app", - // assetsBuildDirectory: "public/build", - // publicPath: "/build/", - // serverBuildPath: "build/index.js", - - // !!! Don't adjust this without changing the code that overwrites this - // in createFixtureProject() - ...global.INJECTED_FIXTURE_REMIX_CONFIG, -}; diff --git a/integration/helpers/cf-template/remix.env.d.ts b/integration/helpers/cf-template/remix.env.d.ts deleted file mode 100644 index b5be9ba3bb..0000000000 --- a/integration/helpers/cf-template/remix.env.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -/// -/// -/// - -declare module "__STATIC_CONTENT_MANIFEST" { - const manifest: string; - export default manifest; -} diff --git a/integration/helpers/cf-template/server.ts b/integration/helpers/cf-template/server.ts deleted file mode 100644 index 7408ed3981..0000000000 --- a/integration/helpers/cf-template/server.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { getAssetFromKV } from "@cloudflare/kv-asset-handler"; -import type { AppLoadContext } from "@remix-run/cloudflare"; -import { createRequestHandler, logDevReady } from "@remix-run/cloudflare"; -import * as build from "@remix-run/dev/server-build"; -import __STATIC_CONTENT_MANIFEST from "__STATIC_CONTENT_MANIFEST"; - -const MANIFEST = JSON.parse(__STATIC_CONTENT_MANIFEST); -const handleRemixRequest = createRequestHandler(build, process.env.NODE_ENV); - -if (process.env.NODE_ENV === "development") { - logDevReady(build); -} - -export default { - async fetch( - request: Request, - env: { - __STATIC_CONTENT: Fetcher; - }, - ctx: ExecutionContext - ): Promise { - try { - const url = new URL(request.url); - const ttl = url.pathname.startsWith("/build/") - ? 60 * 60 * 24 * 365 // 1 year - : 60 * 5; // 5 minutes - return await getAssetFromKV( - { - request, - waitUntil: ctx.waitUntil.bind(ctx), - } as FetchEvent, - { - ASSET_NAMESPACE: env.__STATIC_CONTENT, - ASSET_MANIFEST: MANIFEST, - cacheControl: { - browserTTL: ttl, - edgeTTL: ttl, - }, - } - ); - } catch (error) {} - - try { - const loadContext: AppLoadContext = { - env, - }; - return await handleRemixRequest(request, loadContext); - } catch (error) { - console.log(error); - return new Response("An unexpected error occurred", { status: 500 }); - } - }, -}; diff --git a/integration/helpers/cf-template/tsconfig.json b/integration/helpers/cf-template/tsconfig.json deleted file mode 100644 index 28cce918b8..0000000000 --- a/integration/helpers/cf-template/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "include": ["remix.env.d.ts", "**/*.ts", "**/*.tsx"], - "compilerOptions": { - "lib": ["DOM", "DOM.Iterable", "ES2022"], - "isolatedModules": true, - "esModuleInterop": true, - "jsx": "react-jsx", - "moduleResolution": "Bundler", - "resolveJsonModule": true, - "target": "ES2022", - "strict": true, - "allowJs": true, - "forceConsistentCasingInFileNames": true, - "baseUrl": ".", - "paths": { - "~/*": ["./app/*"] - }, - - // Remix takes care of building everything in `remix build`. - "noEmit": true - } -} diff --git a/integration/helpers/cf-template/wrangler.toml b/integration/helpers/cf-template/wrangler.toml deleted file mode 100644 index b4ddc4387f..0000000000 --- a/integration/helpers/cf-template/wrangler.toml +++ /dev/null @@ -1,9 +0,0 @@ -name = "remix-cloudflare-workers" - -workers_dev = true -main = "./build/index.js" -# https://developers.cloudflare.com/workers/platform/compatibility-dates -compatibility_date = "2023-04-20" - -[site] - bucket = "./public" diff --git a/integration/helpers/deno-template/.gitignore b/integration/helpers/deno-template/.gitignore deleted file mode 100644 index 3f7bf98da3..0000000000 --- a/integration/helpers/deno-template/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules - -/.cache -/build -/public/build -.env diff --git a/integration/helpers/deno-template/app/root.tsx b/integration/helpers/deno-template/app/root.tsx deleted file mode 100644 index 60ddcdf8f8..0000000000 --- a/integration/helpers/deno-template/app/root.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { cssBundleHref } from "@remix-run/css-bundle"; -import type { LinksFunction } from "@remix-run/deno"; -import { - Links, - LiveReload, - Meta, - Outlet, - Scripts, - ScrollRestoration, -} from "@remix-run/react"; -import * as React from "react"; - -export const links: LinksFunction = () => [ - ...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []), -]; - -export default function App() { - return ( - - - - - - - - - - - - - - - ); -} diff --git a/integration/helpers/deno-template/app/routes/_index.tsx b/integration/helpers/deno-template/app/routes/_index.tsx deleted file mode 100644 index 2e62fab622..0000000000 --- a/integration/helpers/deno-template/app/routes/_index.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import * as React from "react"; -import type { MetaFunction } from "@remix-run/deno"; - -export const meta: MetaFunction = () => { - return [ - { title: "New Remix App" }, - { name: "description", content: "Welcome to Remix!" }, - ]; -}; - -export default function Index() { - return ( - - ); -} diff --git a/integration/helpers/deno-template/package.json b/integration/helpers/deno-template/package.json deleted file mode 100644 index 80e32157d3..0000000000 --- a/integration/helpers/deno-template/package.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "name": "integration-deno-template", - "version": "0.0.0", - "private": true, - "sideEffects": false, - "type": "module", - "scripts": { - "build": "node ./node_modules/@remix-run/dev/dist/cli.js build", - "dev": "pnpm run \"/^dev:.*/\"", - "dev:deno": "NODE_ENV=development deno run --unstable --watch --allow-net --allow-read --allow-env ./build/index.js", - "dev:remix": "node ./node_modules/@remix-run/dev/dist/cli.js watch", - "start": "NODE_ENV=production deno run --unstable --allow-net --allow-read --allow-env ./build/index.js" - }, - "dependencies": { - "@remix-run/css-bundle": "workspace:*", - "@remix-run/deno": "workspace:*", - "@remix-run/react": "workspace:*", - "isbot": "^4.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@remix-run/dev": "workspace:*" - }, - "engines": { - "node": ">=18.0.0" - } -} diff --git a/integration/helpers/deno-template/public/favicon.ico b/integration/helpers/deno-template/public/favicon.ico deleted file mode 100644 index 8830cf6821b354114848e6354889b8ecf6d2bc61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16958 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 EKbET!0{{R3 diff --git a/integration/helpers/deno-template/remix.config.js b/integration/helpers/deno-template/remix.config.js deleted file mode 100644 index 659f7a99d2..0000000000 --- a/integration/helpers/deno-template/remix.config.js +++ /dev/null @@ -1,17 +0,0 @@ -/** @type {import('@remix-run/dev').AppConfig} */ -module.exports = { - server: "./server.ts", - serverConditions: ["deno", "worker"], - serverDependenciesToBundle: "all", - serverMainFields: ["module", "main"], - serverModuleFormat: "esm", - serverPlatform: "neutral", - // appDirectory: "app", - // assetsBuildDirectory: "public/build", - // publicPath: "/build/", - // serverBuildPath: "build/index.js", - - // !!! Don't adjust this without changing the code that overwrites this - // in createFixtureProject() - ...global.INJECTED_FIXTURE_REMIX_CONFIG, -}; diff --git a/integration/helpers/deno-template/server.ts b/integration/helpers/deno-template/server.ts deleted file mode 100644 index a7caa47e20..0000000000 --- a/integration/helpers/deno-template/server.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { serve } from "https://deno.land/std@0.128.0/http/server.ts"; -import { createRequestHandlerWithStaticFiles } from "@remix-run/deno"; -// Import path interpreted by the Remix compiler -import * as build from "@remix-run/dev/server-build"; - -const remixHandler = createRequestHandlerWithStaticFiles({ - build, - getLoadContext: () => ({}), -}); - -const port = Number(Deno.env.get("PORT")) || 8000; -console.log(`Listening on http://localhost:${port}`); -serve(remixHandler, { port }); diff --git a/integration/helpers/node-template/.gitignore b/integration/helpers/node-template/.gitignore deleted file mode 100644 index 3f7bf98da3..0000000000 --- a/integration/helpers/node-template/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules - -/.cache -/build -/public/build -.env diff --git a/integration/helpers/node-template/app/root.tsx b/integration/helpers/node-template/app/root.tsx deleted file mode 100644 index b46b8fb15b..0000000000 --- a/integration/helpers/node-template/app/root.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { cssBundleHref } from "@remix-run/css-bundle"; -import type { LinksFunction } from "@remix-run/node"; -import { - Links, - LiveReload, - Meta, - Outlet, - Scripts, - ScrollRestoration, -} from "@remix-run/react"; - -export const links: LinksFunction = () => [ - ...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []), -]; - -export default function App() { - return ( - - - - - - - - - - - - - - - ); -} diff --git a/integration/helpers/node-template/app/routes/_index.tsx b/integration/helpers/node-template/app/routes/_index.tsx deleted file mode 100644 index 5347369230..0000000000 --- a/integration/helpers/node-template/app/routes/_index.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import type { MetaFunction } from "@remix-run/node"; - -export const meta: MetaFunction = () => { - return [ - { title: "New Remix App" }, - { name: "description", content: "Welcome to Remix!" }, - ]; -}; - -export default function Index() { - return ( - - ); -} diff --git a/integration/helpers/node-template/package.json b/integration/helpers/node-template/package.json deleted file mode 100644 index 6365ed8a99..0000000000 --- a/integration/helpers/node-template/package.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "name": "integration-node-template", - "version": "0.0.0", - "private": true, - "sideEffects": false, - "type": "module", - "scripts": { - "build": "node ./node_modules/@remix-run/dev/dist/cli.js build", - "dev": "node ./node_modules/@remix-run/dev/dist/cli.js dev", - "start": "node ./node_modules/@remix-run/serve/dist/cli.js ./build/index.js" - }, - "dependencies": { - "@remix-run/css-bundle": "workspace:*", - "@remix-run/express": "workspace:*", - "@remix-run/node": "workspace:*", - "@remix-run/react": "workspace:*", - "@remix-run/serve": "workspace:*", - "@remix-run/server-runtime": "workspace:*", - "express": "^4.17.1", - "isbot": "^4.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@remix-run/dev": "workspace:*", - "@vanilla-extract/css": "^1.10.0", - "@vanilla-extract/vite-plugin": "^3.9.2", - "@types/react": "^18.2.20", - "@types/react-dom": "^18.2.7", - "getos": "^3.2.1", - "postcss-import": "^15.1.0", - "tailwindcss": "^3.3.0", - "typescript": "^5.1.0" - }, - "engines": { - "node": ">=18.0.0" - } -} diff --git a/integration/helpers/node-template/public/favicon.ico b/integration/helpers/node-template/public/favicon.ico deleted file mode 100644 index 8830cf6821b354114848e6354889b8ecf6d2bc61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16958 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 EKbET!0{{R3 diff --git a/integration/helpers/node-template/remix.config.js b/integration/helpers/node-template/remix.config.js deleted file mode 100644 index 0713bf21a8..0000000000 --- a/integration/helpers/node-template/remix.config.js +++ /dev/null @@ -1,11 +0,0 @@ -/** @type {import('@remix-run/dev').AppConfig} */ -export default { - // appDirectory: "app", - // assetsBuildDirectory: "public/build", - // publicPath: "/build/", - // serverBuildPath: "build/index.js", - - // !!! Don't adjust this without changing the code that overwrites this - // in createFixtureProject() - ...global.INJECTED_FIXTURE_REMIX_CONFIG, -}; diff --git a/integration/helpers/node-template/remix.env.d.ts b/integration/helpers/node-template/remix.env.d.ts deleted file mode 100644 index dcf8c45e1d..0000000000 --- a/integration/helpers/node-template/remix.env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/integration/helpers/node-template/tsconfig.json b/integration/helpers/node-template/tsconfig.json deleted file mode 100644 index 28cce918b8..0000000000 --- a/integration/helpers/node-template/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "include": ["remix.env.d.ts", "**/*.ts", "**/*.tsx"], - "compilerOptions": { - "lib": ["DOM", "DOM.Iterable", "ES2022"], - "isolatedModules": true, - "esModuleInterop": true, - "jsx": "react-jsx", - "moduleResolution": "Bundler", - "resolveJsonModule": true, - "target": "ES2022", - "strict": true, - "allowJs": true, - "forceConsistentCasingInFileNames": true, - "baseUrl": ".", - "paths": { - "~/*": ["./app/*"] - }, - - // Remix takes care of building everything in `remix build`. - "noEmit": true - } -} diff --git a/integration/helpers/vite-cloudflare-template/.gitignore b/integration/helpers/vite-cloudflare-template/.gitignore deleted file mode 100644 index 80ec311f4f..0000000000 --- a/integration/helpers/vite-cloudflare-template/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -node_modules - -/.cache -/build -.env diff --git a/integration/helpers/vite-cloudflare-template/app/root.tsx b/integration/helpers/vite-cloudflare-template/app/root.tsx deleted file mode 100644 index e31409ca31..0000000000 --- a/integration/helpers/vite-cloudflare-template/app/root.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { - Links, - Meta, - Outlet, - Scripts, - ScrollRestoration, -} from "@remix-run/react"; - -export default function App() { - return ( - - - - - - - - - - - - - - ); -} diff --git a/integration/helpers/vite-cloudflare-template/app/routes/_index.tsx b/integration/helpers/vite-cloudflare-template/app/routes/_index.tsx deleted file mode 100644 index 4aa6089f12..0000000000 --- a/integration/helpers/vite-cloudflare-template/app/routes/_index.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import type { MetaFunction } from "@remix-run/cloudflare"; - -export const meta: MetaFunction = () => { - return [ - { title: "New Remix App" }, - { name: "description", content: "Welcome to Remix!" }, - ]; -}; - -export default function Index() { - return ( - - ); -} diff --git a/integration/helpers/vite-cloudflare-template/env.d.ts b/integration/helpers/vite-cloudflare-template/env.d.ts deleted file mode 100644 index 77f3942249..0000000000 --- a/integration/helpers/vite-cloudflare-template/env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/integration/helpers/vite-cloudflare-template/package.json b/integration/helpers/vite-cloudflare-template/package.json deleted file mode 100644 index 9be24cd7fa..0000000000 --- a/integration/helpers/vite-cloudflare-template/package.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "name": "integration-vite-cloudflare-template", - "version": "0.0.0", - "private": true, - "sideEffects": false, - "type": "module", - "scripts": { - "dev": "node ./node_modules/@remix-run/dev/dist/cli.js vite:dev", - "build": "node ./node_modules/@remix-run/dev/dist/cli.js vite:build", - "start": "wrangler pages dev ./build/client", - "typecheck": "tsc" - }, - "dependencies": { - "@remix-run/cloudflare": "2.9.0-pre.0", - "@remix-run/cloudflare-pages": "2.9.0-pre.0", - "@remix-run/react": "2.9.0-pre.0", - "isbot": "^4.1.0", - "miniflare": "^3.20231030.4", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@cloudflare/workers-types": "^4.20230518.0", - "@remix-run/dev": "workspace:*", - "@remix-run/eslint-config": "workspace:*", - "@types/react": "^18.2.20", - "@types/react-dom": "^18.2.7", - "typescript": "^5.1.6", - "vite": "5.1.3", - "vite-tsconfig-paths": "^4.2.1", - "wrangler": "^3.24.0" - }, - "engines": { - "node": ">=18.0.0" - } -} diff --git a/integration/helpers/vite-cloudflare-template/public/favicon.ico b/integration/helpers/vite-cloudflare-template/public/favicon.ico deleted file mode 100644 index 8830cf6821b354114848e6354889b8ecf6d2bc61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16958 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 EKbET!0{{R3 diff --git a/integration/helpers/vite-cloudflare-template/tsconfig.json b/integration/helpers/vite-cloudflare-template/tsconfig.json deleted file mode 100644 index ad5ae05598..0000000000 --- a/integration/helpers/vite-cloudflare-template/tsconfig.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "include": ["env.d.ts", "**/*.ts", "**/*.tsx"], - "compilerOptions": { - "lib": ["DOM", "DOM.Iterable", "ES2022"], - "isolatedModules": true, - "esModuleInterop": true, - "jsx": "react-jsx", - "module": "ESNext", - "moduleResolution": "Bundler", - "resolveJsonModule": true, - "target": "ES2022", - "strict": true, - "allowJs": true, - "forceConsistentCasingInFileNames": true, - "baseUrl": ".", - "paths": { - "~/*": ["./app/*"] - }, - "noEmit": true - } -} diff --git a/integration/helpers/vite-cloudflare-template/vite.config.ts b/integration/helpers/vite-cloudflare-template/vite.config.ts deleted file mode 100644 index a1fcb5a7b7..0000000000 --- a/integration/helpers/vite-cloudflare-template/vite.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { vitePlugin as remix } from "@remix-run/dev"; -import { defineConfig } from "vite"; -import tsconfigPaths from "vite-tsconfig-paths"; - -export default defineConfig({ - plugins: [remix(), tsconfigPaths()], -}); diff --git a/integration/helpers/vite.ts b/integration/helpers/vite.ts index 0216d50f59..126cab9476 100644 --- a/integration/helpers/vite.ts +++ b/integration/helpers/vite.ts @@ -1,4 +1,5 @@ -import { spawn, spawnSync, type ChildProcess } from "node:child_process"; +import { spawn, spawnSync } from "node:child_process"; +import type { ChildProcess } from "node:child_process"; import path from "node:path"; import fs from "node:fs/promises"; import type { Readable } from "node:stream"; diff --git a/integration/vite-dev-custom-entry-test.ts b/integration/vite-dev-custom-entry-test.ts index e7be9e7237..ac6e1bb50b 100644 --- a/integration/vite-dev-custom-entry-test.ts +++ b/integration/vite-dev-custom-entry-test.ts @@ -1,6 +1,7 @@ import { test, expect } from "@playwright/test"; import type { Readable } from "node:stream"; -import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process"; +import { spawn } from "node:child_process"; +import type { ChildProcessWithoutNullStreams } from "node:child_process"; import getPort from "get-port"; import waitOn from "wait-on"; diff --git a/integration/vite-dev-test.ts b/integration/vite-dev-test.ts index ec2f5d14fb..2ac9f70804 100644 --- a/integration/vite-dev-test.ts +++ b/integration/vite-dev-test.ts @@ -1,6 +1,7 @@ import { test, expect } from "@playwright/test"; import type { Readable } from "node:stream"; -import { spawn, type ChildProcessWithoutNullStreams } from "node:child_process"; +import { spawn } from "node:child_process"; +import type { ChildProcessWithoutNullStreams } from "node:child_process"; import fs from "node:fs/promises"; import path from "node:path"; import getPort from "get-port"; diff --git a/integration/vite-server-bundles-test.ts b/integration/vite-server-bundles-test.ts index 696b6040b7..05b4b00db6 100644 --- a/integration/vite-server-bundles-test.ts +++ b/integration/vite-server-bundles-test.ts @@ -1,6 +1,7 @@ import fs from "node:fs"; import path from "node:path"; -import { type Page, test, expect } from "@playwright/test"; +import { test, expect } from "@playwright/test"; +import type { Page } from "@playwright/test"; import getPort from "get-port"; import dedent from "dedent"; diff --git a/packages/react-router-dom/__tests__/data-browser-router-test.tsx b/packages/react-router-dom/__tests__/data-browser-router-test.tsx index 0ae3c3824f..6cf85e9a0d 100644 --- a/packages/react-router-dom/__tests__/data-browser-router-test.tsx +++ b/packages/react-router-dom/__tests__/data-browser-router-test.tsx @@ -59,10 +59,8 @@ function testDomRouter( search?: string ) { if (name === "") { - // eslint-disable-next-line jest/no-conditional-expect expect(testWindow.location.hash).toEqual("#" + pathname + (search || "")); } else { - // eslint-disable-next-line jest/no-conditional-expect expect(testWindow.location.pathname).toEqual(pathname); if (search) { expect(testWindow.location.search).toEqual(search); diff --git a/packages/react-router/__tests__/useNavigate-test.tsx b/packages/react-router/__tests__/useNavigate-test.tsx index 95499722d5..528174ed05 100644 --- a/packages/react-router/__tests__/useNavigate-test.tsx +++ b/packages/react-router/__tests__/useNavigate-test.tsx @@ -306,7 +306,6 @@ describe("useNavigate", () => { { path: "/*", Component() { - // eslint-disable-next-line @typescript-eslint/no-unused-vars let navigate = useNavigate(); let location = useLocation(); return ( diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/.gitignore b/packages/remix-dev/__tests__/fixtures/cloudflare/.gitignore deleted file mode 100644 index 7c0736ebf5..0000000000 --- a/packages/remix-dev/__tests__/fixtures/cloudflare/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -node_modules - -/.cache -/functions/\[\[path\]\].js -/functions/\[\[path\]\].js.map -/public/build -.dev.vars diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/.node-version b/packages/remix-dev/__tests__/fixtures/cloudflare/.node-version deleted file mode 100644 index 5b0ad74a81..0000000000 --- a/packages/remix-dev/__tests__/fixtures/cloudflare/.node-version +++ /dev/null @@ -1 +0,0 @@ -16.13.0 \ No newline at end of file diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/README.md b/packages/remix-dev/__tests__/fixtures/cloudflare/README.md deleted file mode 100644 index 130feb1486..0000000000 --- a/packages/remix-dev/__tests__/fixtures/cloudflare/README.md +++ /dev/null @@ -1,22 +0,0 @@ -# Welcome to Remix! - -- [Remix Docs](https://remix.run/docs) - -## Development - -You will be utilizing Wrangler for local development to emulate the Cloudflare runtime. This is already wired up in your package.json as the `dev` script: - -```sh -# start the remix dev server and wrangler -npm run dev -``` - -Open up [http://127.0.0.1:8788](http://127.0.0.1:8788) and you should be ready to go! - -## Deployment - -Cloudflare Pages are currently only deployable through their Git provider integrations. - -If you don't already have an account, then [create a Cloudflare account here](https://dash.cloudflare.com/sign-up/pages) and after verifying your email address with Cloudflare, go to your dashboard and follow the [Cloudflare Pages deployment guide](https://developers.cloudflare.com/pages/framework-guides/deploy-anything). - -Configure the "Build command" should be set to `npm run build`, and the "Build output directory" should be set to `public`. diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/app/root.tsx b/packages/remix-dev/__tests__/fixtures/cloudflare/app/root.tsx deleted file mode 100644 index 68397b09d4..0000000000 --- a/packages/remix-dev/__tests__/fixtures/cloudflare/app/root.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import type { LinksFunction } from "@remix-run/cloudflare"; -import { cssBundleHref } from "@remix-run/css-bundle"; -import { - Links, - LiveReload, - Meta, - Outlet, - Scripts, - ScrollRestoration, -} from "@remix-run/react"; - -export const links: LinksFunction = () => [ - ...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []), -]; - -export default function App() { - return ( - - - - - - - - - - - - - - - ); -} diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/app/routes/_index.tsx b/packages/remix-dev/__tests__/fixtures/cloudflare/app/routes/_index.tsx deleted file mode 100644 index 4aa6089f12..0000000000 --- a/packages/remix-dev/__tests__/fixtures/cloudflare/app/routes/_index.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import type { MetaFunction } from "@remix-run/cloudflare"; - -export const meta: MetaFunction = () => { - return [ - { title: "New Remix App" }, - { name: "description", content: "Welcome to Remix!" }, - ]; -}; - -export default function Index() { - return ( - - ); -} diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/package.json b/packages/remix-dev/__tests__/fixtures/cloudflare/package.json deleted file mode 100644 index c644afccb8..0000000000 --- a/packages/remix-dev/__tests__/fixtures/cloudflare/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "private": true, - "sideEffects": false, - "type": "module", - "scripts": { - "build": "remix build", - "dev": "remix dev --manual -c \"npm run start\"", - "start": "wrangler pages dev --compatibility-date=2023-06-21 ./public", - "typecheck": "tsc" - }, - "dependencies": { - "@remix-run/cloudflare": "*", - "@remix-run/cloudflare-pages": "*", - "@remix-run/css-bundle": "*", - "@remix-run/react": "*", - "isbot": "^4.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@cloudflare/workers-types": "^4.20230518.0", - "@remix-run/dev": "*", - "@types/react": "^18.2.20", - "@types/react-dom": "^18.2.7", - "eslint": "^8.38.0", - "typescript": "^5.1.0", - "wrangler": "^3.1.1" - }, - "engines": { - "node": ">=18.0.0" - } -} diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/public/_headers b/packages/remix-dev/__tests__/fixtures/cloudflare/public/_headers deleted file mode 100644 index c5129f35cd..0000000000 --- a/packages/remix-dev/__tests__/fixtures/cloudflare/public/_headers +++ /dev/null @@ -1,4 +0,0 @@ -/favicon.ico - Cache-Control: public, max-age=3600, s-maxage=3600 -/build/* - Cache-Control: public, max-age=31536000, immutable diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/public/_routes.json b/packages/remix-dev/__tests__/fixtures/cloudflare/public/_routes.json deleted file mode 100644 index 4b57270dae..0000000000 --- a/packages/remix-dev/__tests__/fixtures/cloudflare/public/_routes.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "version": 1, - "include": ["/*"], - "exclude": ["/favicon.ico", "/build/*"] -} diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/public/favicon.ico b/packages/remix-dev/__tests__/fixtures/cloudflare/public/favicon.ico deleted file mode 100644 index 8830cf6821b354114848e6354889b8ecf6d2bc61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16958 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 EKbET!0{{R3 diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/remix.config.js b/packages/remix-dev/__tests__/fixtures/cloudflare/remix.config.js deleted file mode 100644 index 88f8d63bbc..0000000000 --- a/packages/remix-dev/__tests__/fixtures/cloudflare/remix.config.js +++ /dev/null @@ -1,14 +0,0 @@ -/** @type {import('@remix-run/dev').AppConfig} */ -export default { - server: "./server.ts", - serverBuildPath: "functions/[[path]].js", - serverConditions: ["workerd", "worker", "browser"], - serverDependenciesToBundle: "all", - serverMainFields: ["browser", "module", "main"], - serverMinify: true, - serverModuleFormat: "esm", - serverPlatform: "neutral", - // appDirectory: "app", - // assetsBuildDirectory: "public/build", - // publicPath: "/build/", -}; diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/remix.env.d.ts b/packages/remix-dev/__tests__/fixtures/cloudflare/remix.env.d.ts deleted file mode 100644 index 425870ae63..0000000000 --- a/packages/remix-dev/__tests__/fixtures/cloudflare/remix.env.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -/// -/// -/// diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/server.ts b/packages/remix-dev/__tests__/fixtures/cloudflare/server.ts deleted file mode 100644 index 338a5e5737..0000000000 --- a/packages/remix-dev/__tests__/fixtures/cloudflare/server.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { logDevReady } from "@remix-run/cloudflare"; -import { createPagesFunctionHandler } from "@remix-run/cloudflare-pages"; -import * as build from "@remix-run/dev/server-build"; - -if (process.env.NODE_ENV === "development") { - logDevReady(build); -} - -export const onRequest = createPagesFunctionHandler({ build }); diff --git a/packages/remix-dev/__tests__/fixtures/cloudflare/tsconfig.json b/packages/remix-dev/__tests__/fixtures/cloudflare/tsconfig.json deleted file mode 100644 index 28cce918b8..0000000000 --- a/packages/remix-dev/__tests__/fixtures/cloudflare/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "include": ["remix.env.d.ts", "**/*.ts", "**/*.tsx"], - "compilerOptions": { - "lib": ["DOM", "DOM.Iterable", "ES2022"], - "isolatedModules": true, - "esModuleInterop": true, - "jsx": "react-jsx", - "moduleResolution": "Bundler", - "resolveJsonModule": true, - "target": "ES2022", - "strict": true, - "allowJs": true, - "forceConsistentCasingInFileNames": true, - "baseUrl": ".", - "paths": { - "~/*": ["./app/*"] - }, - - // Remix takes care of building everything in `remix build`. - "noEmit": true - } -} diff --git a/packages/remix-dev/__tests__/fixtures/deno/.gitignore b/packages/remix-dev/__tests__/fixtures/deno/.gitignore deleted file mode 100644 index 3f7bf98da3..0000000000 --- a/packages/remix-dev/__tests__/fixtures/deno/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules - -/.cache -/build -/public/build -.env diff --git a/packages/remix-dev/__tests__/fixtures/deno/.vscode/extensions.json b/packages/remix-dev/__tests__/fixtures/deno/.vscode/extensions.json deleted file mode 100644 index 74baffcc47..0000000000 --- a/packages/remix-dev/__tests__/fixtures/deno/.vscode/extensions.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "recommendations": ["denoland.vscode-deno"] -} diff --git a/packages/remix-dev/__tests__/fixtures/deno/.vscode/resolve_npm_imports.json b/packages/remix-dev/__tests__/fixtures/deno/.vscode/resolve_npm_imports.json deleted file mode 100644 index af7431c1ee..0000000000 --- a/packages/remix-dev/__tests__/fixtures/deno/.vscode/resolve_npm_imports.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "comment": [ - "Resolve NPM imports for `packages/remix-deno`.", - "This import map is used solely for the denoland.vscode-deno extension.", - "Remix does not support import maps.", - "Dependency management is done through `npm` and `node_modules/` instead.", - "Deno-only dependencies may be imported via URL imports (without using import maps)." - ], - "imports": { - "@remix-run/css-bundle": "https://esm.sh/@remix-run/css-bundle@1.16.0", - "// `@remix-run/deno` code is already a Deno module, so just get types for it directly from `node_modules/`": "", - "@remix-run/deno": "../node_modules/@remix-run/deno/index.ts", - "@remix-run/dev/server-build": "https://esm.sh/@remix-run/dev@1.16.0/server-build", - "@remix-run/react": "https://esm.sh/@remix-run/react@1.16.0", - "@remix-run/server-runtime": "https://esm.sh/@remix-run/server-runtime@1.16.0", - "isbot": "https://esm.sh/isbot@^4.1.0", - "react": "https://esm.sh/react@^18.2.0", - "react-dom": "https://esm.sh/react-dom@^18.2.0", - "react-dom/client": "https://esm.sh/react-dom@^18.2.0/client", - "react-dom/server": "https://esm.sh/react-dom@^18.2.0/server" - } -} diff --git a/packages/remix-dev/__tests__/fixtures/deno/.vscode/settings.json b/packages/remix-dev/__tests__/fixtures/deno/.vscode/settings.json deleted file mode 100644 index e1533c2bb7..0000000000 --- a/packages/remix-dev/__tests__/fixtures/deno/.vscode/settings.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "deno.enable": true, - "deno.lint": true -} diff --git a/packages/remix-dev/__tests__/fixtures/deno/README.md b/packages/remix-dev/__tests__/fixtures/deno/README.md deleted file mode 100644 index 3e7473485e..0000000000 --- a/packages/remix-dev/__tests__/fixtures/deno/README.md +++ /dev/null @@ -1,128 +0,0 @@ -# Remix + Deno - -Welcome to the Deno template for Remix! 🦕 - -For more, check out the [Remix docs](https://remix.run/docs). - -## Install - -```sh -npx create-remix@latest --template remix-run/remix/templates/classic-remix-compiler/deno -``` - -## Managing dependencies - -Read about -[how we recommend to manage dependencies for Remix projects using Deno](https://github.com/remix-run/remix/blob/main/decisions/0001-use-npm-to-manage-npm-dependencies-for-deno-projects.md). - -- ✅ You should use `npm` to install NPM packages - ```sh - npm install react - ``` - ```ts - import { useState } from "react"; - ``` -- ✅ You may use inlined URL imports or - [deps.ts](https://deno.land/manual/examples/manage_dependencies#managing-dependencies) - for Deno modules. - ```ts - import { copy } from "https://deno.land/std@0.138.0/streams/conversion.ts"; - ``` -- ❌ Do not use - [import maps](https://deno.land/manual/linking_to_external_code/import_maps). - -## Development - -From your terminal: - -```sh -npm run dev -``` - -This starts your app in development mode, rebuilding assets on file changes. - -### Type hints - -This template provides type hinting to VS Code via a -[dedicated import map](./.vscode/resolve_npm_imports.json). - -To get types in another editor, use an extension for Deno that supports import -maps and point your editor to `./.vscode/resolve_npm_imports.json`. - -For more, see -[our decision doc for interop between Deno and NPM](https://github.com/remix-run/remix/blob/main/decisions/0001-use-npm-to-manage-npm-dependencies-for-deno-projects.md#vs-code-type-hints). - -## Production - -First, build your app for production: - -```sh -npm run build -``` - -Then run the app in production mode: - -```sh -npm start -``` - -## Deployment - -Building the Deno app (`npm run build`) results in two outputs: - -- `build/` (server bundle) -- `public/build/` (browser bundle) - -You can deploy these bundles to any host that runs Deno, but here we'll focus on -deploying to [Deno Deploy](https://deno.com/deploy). - -### Setting up Deno Deploy - -1. [Sign up](https://dash.deno.com/signin) for Deno Deploy. - -2. [Create a new Deno Deploy project](https://dash.deno.com/new) for this app. - -3. Replace `` in the `deploy` script in `package.json` - with your Deno Deploy project name: - -```json filename=package.json -{ - "scripts": { - "deploy": "deployctl deploy --project= --include=.cache,build,public ./build/index.js" - } -} -``` - -4. [Create a personal access token](https://dash.deno.com/account) for the Deno - Deploy API and export it as `DENO_DEPLOY_TOKEN`: - -```sh -export DENO_DEPLOY_TOKEN= -``` - -You may want to add this to your `rc` file (e.g. `.bashrc` or `.zshrc`) to make -it available for new terminal sessions, but make sure you don't commit this -token into `git`. If you want to use this token in GitHub Actions, set it as a -GitHub secret. - -5. Install the Deno Deploy CLI, - [`deployctl`](https://github.com/denoland/deployctl): - -```sh -deno install --allow-read --allow-write --allow-env --allow-net --allow-run --no-check -r -f https://deno.land/x/deploy/deployctl.ts -``` - -6. If you have previously installed the Deno Deploy CLI, you should update it to - the latest version: - -```sh -deployctl upgrade -``` - -### Deploying to Deno Deploy - -After you've set up Deno Deploy, run: - -```sh -npm run deploy -``` diff --git a/packages/remix-dev/__tests__/fixtures/deno/app/root.tsx b/packages/remix-dev/__tests__/fixtures/deno/app/root.tsx deleted file mode 100644 index 60ddcdf8f8..0000000000 --- a/packages/remix-dev/__tests__/fixtures/deno/app/root.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { cssBundleHref } from "@remix-run/css-bundle"; -import type { LinksFunction } from "@remix-run/deno"; -import { - Links, - LiveReload, - Meta, - Outlet, - Scripts, - ScrollRestoration, -} from "@remix-run/react"; -import * as React from "react"; - -export const links: LinksFunction = () => [ - ...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []), -]; - -export default function App() { - return ( - - - - - - - - - - - - - - - ); -} diff --git a/packages/remix-dev/__tests__/fixtures/deno/app/routes/_index.tsx b/packages/remix-dev/__tests__/fixtures/deno/app/routes/_index.tsx deleted file mode 100644 index 2e62fab622..0000000000 --- a/packages/remix-dev/__tests__/fixtures/deno/app/routes/_index.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import * as React from "react"; -import type { MetaFunction } from "@remix-run/deno"; - -export const meta: MetaFunction = () => { - return [ - { title: "New Remix App" }, - { name: "description", content: "Welcome to Remix!" }, - ]; -}; - -export default function Index() { - return ( - - ); -} diff --git a/packages/remix-dev/__tests__/fixtures/deno/deno.json b/packages/remix-dev/__tests__/fixtures/deno/deno.json deleted file mode 100644 index 67973e8d59..0000000000 --- a/packages/remix-dev/__tests__/fixtures/deno/deno.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "importMap": ".vscode/resolve_npm_imports.json", - "compilerOptions": { - "lib": ["dom", "dom.iterable", "dom.asynciterable", "deno.ns"] - } -} diff --git a/packages/remix-dev/__tests__/fixtures/deno/package.json b/packages/remix-dev/__tests__/fixtures/deno/package.json deleted file mode 100644 index 7a4554c403..0000000000 --- a/packages/remix-dev/__tests__/fixtures/deno/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "private": true, - "sideEffects": false, - "scripts": { - "build": "remix build", - "deploy": "deployctl deploy --prod --include=build,public --project= ./build/index.js", - "dev": "npm-run-all build --parallel \"dev:*\"", - "dev:deno": "NODE_ENV=development deno run --unstable --watch --allow-net --allow-read --allow-env ./build/index.js", - "dev:remix": "remix watch", - "format": "deno fmt --ignore=node_modules,build,public/build", - "lint": "deno lint --ignore=node_modules,build,public/build", - "start": "NODE_ENV=production deno run --unstable --allow-net --allow-read --allow-env ./build/index.js", - "typecheck": "deno check" - }, - "dependencies": { - "@remix-run/css-bundle": "*", - "@remix-run/deno": "*", - "@remix-run/react": "*", - "isbot": "^4.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@remix-run/dev": "*", - "npm-run-all": "^4.1.5" - }, - "engines": { - "node": ">=18.0.0" - } -} diff --git a/packages/remix-dev/__tests__/fixtures/deno/public/favicon.ico b/packages/remix-dev/__tests__/fixtures/deno/public/favicon.ico deleted file mode 100644 index 8830cf6821b354114848e6354889b8ecf6d2bc61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16958 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 EKbET!0{{R3 diff --git a/packages/remix-dev/__tests__/fixtures/deno/remix.config.js b/packages/remix-dev/__tests__/fixtures/deno/remix.config.js deleted file mode 100644 index cd3a46d297..0000000000 --- a/packages/remix-dev/__tests__/fixtures/deno/remix.config.js +++ /dev/null @@ -1,13 +0,0 @@ -/** @type {import('@remix-run/dev').AppConfig} */ -module.exports = { - server: "./server.ts", - serverConditions: ["deno", "worker"], - serverDependenciesToBundle: "all", - serverMainFields: ["module", "main"], - serverModuleFormat: "esm", - serverPlatform: "neutral", - // appDirectory: "app", - // assetsBuildDirectory: "public/build", - // publicPath: "/build/", - // serverBuildPath: "build/index.js", -}; diff --git a/packages/remix-dev/__tests__/fixtures/deno/server.ts b/packages/remix-dev/__tests__/fixtures/deno/server.ts deleted file mode 100644 index a7caa47e20..0000000000 --- a/packages/remix-dev/__tests__/fixtures/deno/server.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { serve } from "https://deno.land/std@0.128.0/http/server.ts"; -import { createRequestHandlerWithStaticFiles } from "@remix-run/deno"; -// Import path interpreted by the Remix compiler -import * as build from "@remix-run/dev/server-build"; - -const remixHandler = createRequestHandlerWithStaticFiles({ - build, - getLoadContext: () => ({}), -}); - -const port = Number(Deno.env.get("PORT")) || 8000; -console.log(`Listening on http://localhost:${port}`); -serve(remixHandler, { port }); diff --git a/packages/remix-dev/__tests__/fixtures/examples-main.tar.gz b/packages/remix-dev/__tests__/fixtures/examples-main.tar.gz deleted file mode 100644 index f2a7d82029bfc005bc76efacc710df7a1d2a9f87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81920 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 HAQ1Tfg}c}x diff --git a/packages/remix-dev/__tests__/fixtures/failing-remix-init/package.json b/packages/remix-dev/__tests__/fixtures/failing-remix-init/package.json deleted file mode 100644 index 0967ef424b..0000000000 --- a/packages/remix-dev/__tests__/fixtures/failing-remix-init/package.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/packages/remix-dev/__tests__/fixtures/failing-remix-init/remix.init/index.js b/packages/remix-dev/__tests__/fixtures/failing-remix-init/remix.init/index.js deleted file mode 100644 index 2dbd14d432..0000000000 --- a/packages/remix-dev/__tests__/fixtures/failing-remix-init/remix.init/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = () => { - throw new Error("💣"); -}; diff --git a/packages/remix-dev/__tests__/fixtures/nested-dir-repo.tar.gz b/packages/remix-dev/__tests__/fixtures/nested-dir-repo.tar.gz deleted file mode 100644 index e0db0c2fc5806783dc9f6bd23af4b7eb78174646..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34304 zcmeI5dvIJ=eaFr4-~Lnn>fcwZ*Xp&aw;b7WWLxqh@hg7BFHF4FUP&9Tb~n2#*}^yv zLJ1*2cqE2~f)gl|l#r0ZbP5a%lt-tfG+~D6^bbhde_EL7Foph6{^IoeIp4yjbfKr<=W~hpruF~n?d=^I8uB*L54*m%f6(4* z$o_bJgZ=$|eFKBN{li{wU;lu*O+)Js%C#%b7fZ>4K)d$I+C~CAKvF;6+FrhWv$L!C zFKSGkUuSSck2Ugtpnqh8|Le?!%F9*ce6`jN!B`E(`~N#y6xWzti@UEI$u zMCv2*##?Vx3RKqr!;{-5_D{y=QtJYC75(q;m9nq&|AWH=8~VR4w6C^Evv=IjOy%Z$ zuaxr+`*Z1wO_4~CciLWh6S=A4nb>TplrN4Z5(OT|3-j4TO5+`oNOQ9{;V<}^Tz<~a zmLic|h1{ICn42$nCBHD2&L%UXk;vJzXN$9uY<|wun_kLaU?dVbI-4$f#9pPMdnK9A zducl%T+owU^1Ho)Z>>=}JL4sbMPKuCS#LU>@x7_pWOl|c#sf(5ncQLkNV-rgb$j-` z<<+Ni1utKat(z*PbJ=S^b2cvk&d*wKOS8Tg0Ji+5g=@v@77vHlf!qbY*q+IFS>I1V z)_i*EyqEN5bHx(3DIY++G&dG>QE~6dNM!G{eX-zs)5*DXCY>yJ7t*EKU_R()MGwG{ zO-_PBvD*Vc05A23c8+PlTl5PHe!&xom%&zmpG+<4i~E!3eXlsL4=qE(I=T5$e!k@8 zroFS4)sBARRgZVp5+`w%%W|in5lKO_cdTgH;~n+q@|k4Gk3^2oii9GBS4d{Pv)TMb zZ%W@U`GP`HG|r@A=`8RIjtl&g^rrm_;%P2DU1(H7P|!szkKt++vSlbHwTq zxk7_^1r^35#|4bz0?Ud^8a;Y!gZFa%>TTK0Ld9Y zet$8Sz0Qkk7_Jik^$w0)lmEGVaSh+7d+OUf|GO0Nyl6H#=SN4qsCCUfrND;=4xvbC$v!;`oqI=uD z%NRiD3pU1Jp|a@1E}>_N8<(GO0{|Mgk=N3b9vk<#xFxCymjf{Kem3Q2r_#RtS~$8e z;a7U#XJ^tY$F zc@u6c^WQ39+(p510u6q*n*ARb?q8Mv4-fQGFKqC;HNE~exBrRG&WP9Pjh7blzIQ1- zm(LYSvG#H232dtGFSK{Wx99UaZBBGqvl9_lFpT>bnO^k9tOa)kJ%bTWB*-Wx(gnGJTwzhxRJYcM^Tek0JE%F9&nQnc!>KN@wNnozOS4+XWu|Ev z_=^(NaGrZNnBoeU2|c^K;HWN1FQAFcW7io z|En@@9VR5Cep?Ivvj2%x5;vOy zH`4!fHeFhe@2@@n8yXnii2v4u^i|iW%>PnxDfU~30zftUKQeGl{MS3I{r`>luPXZ* zo?!F;bapB;Z*$z!F85}u*Sh{_w-@c~Omr#=D7(DqV!EjIjq(cg3I}Zope$p~q|Yf~ zJ{_GnxS!Y5#rJAUD0wd9b3b{czqjuWw}^81bTP+vKx)6+hSr;5g+UMfq8r|u)dIQv z%7^zCFOryRV_~Y)!%a{XaPjG3UklHN)d`!$2hR&US@7>tdCRT7a#>gEXXOCW;I(3@ zke({7oO>==^p6!XOpb@2&nq%rriPGsFwv-vl>UZ@UXd%57lY>Id#ZOjz4 z(V@){ZNk{VmTeVnu@x3evs`M^W5wP~+%6E!<|gOTAz&K1Tyuq@vi<|5cJvC1@u^H& z7h?a#`bDjp{`U>9-v1pL=-b%;t)Jj)c++Kk-X(8#F;$QfdY8Rvc5wrpO6BIFTOv!7 zteEa7EwK-r#n&^|FHkSyp9UQ;PJ@qQY8oOjGaRHQM$kHccGddGzF=NspP^qFz@3dbcHv$H5&@ zd$a=eU8po0(mP~N8Qm}I!*87plv|;sH}Mu{ykY-C z^4-)vwEr?6`_kF-Mbvj+dO=n^atllGGSaDv75ejsxEVxj0}g0`u0eg zO6*GkWEJziJ)e&`LtF5z4GPR4CdbR@WZziS&qgtC);eNR!W$V&z;ebfcy7U89@&~G ze_`vnTxzlGZHLVAY%O>VDyyGrqr13bY?)5W!&?)}UlIsdPa*KewRqRpeTcc`C zrmKxUYPy2^PTli7X6Hst+bVj5GU9NFF42y8v6iTPuS30C-}N0@oAqMq+bukf=HVJm zg0)F>tcJhvx~e&^-)LS`Yk_}@a0d6b04DJ37H)}H)bw>Un*my9)C_hu+cwY<)jea) z_Br!<+C`VPX3;}%Yn@P5+}iFQym<~CnIEp-7p|wiU*GE0dOQOL=ngGH+Cm55z7bx* zv#K@^{xk=;Lu>fJH~aMMLE$^n-E2mCTFh9y#oXCTYc}KRY21$`n#~qH+pKv*U5*xU z;e}klLtqXY_nmD`CLU|HI5K~;*5>`Oc(d7N*K09bbv>%ax1l+-=+>H+uD}Y+YBk_r zbq?#mANU3CJ%SrvZ|-sM?C5VXyN6oMU26MBTFt@DZECINfZG0%HgmVedA@VN(c=!i zhm62Gcnr+0Io)A=PU_$H#m&z+k1vu%)vX_%(1QQ=H#|^^X~C>b9Q^oB)8MIoA>Dc z)V4Nr@76YRkLE!m=(Q!F0eo{h;rd?5_E1;U@_Rz__KALnN88MCt$%7v>)+|xDShjh z);uH{Lz{8Q+~#gzb2LB~fZ57G4R+vqa)M1|4Qw2|LI=Tpd%xqy(JgHjrqs@uN$-l8 z+};jTxU0jI?(Q_jyE{yNPlw59e0m~g?h`Gb!#?qFr*IpUOrt-&lJ$fdHe^t^ZVH%()#}d$PmK?bdo)KfkxrWOgsF2_2A)?cxVI#yY@?ydt;P!>yKa@WJS=+M9Z`0pyN{m0+^ms#DO zdMIaUfW2WIWD1y@1$!-cUT+TaAId&@Inphi>}xgq1mBfM>cjsBFJ860MZUMlh7F5n zGt1HCPKdy+bw${l&I@re6GC zx@r!~7VHwN_=e4*skQL|?~(hn<1zE|@4irx|CR8+`e%7_T)Ki?#5W*Q_z`&52>wg_ zx4JL<1?$d%R&z-3e?~N~1WUECAArAX+OEM6f5&^PSF-8HWK(7)I?PYM`CQHGfAO)r zIV0PM|H1#_Kf0s?4*&XXfW=>SB;-FbxOV*A?+Hm4e|D?NWW zeO!39SsxO{MfB(ub`L*+4|)BcYRCW6^C!)e{KP$ytL<6`8`$06+_?N>|3w3AX^+-J zuYi@9Bz16`wSk}eK;As}!3WHjAAi6+|KWo9>JtU?!be>HysjDl;$sh(&ud=p*qzdy zb{o4O@AyFM)tKa9m*nAy;0KS3`#a6AfAQm*>HCTE2TV%up;tR4pV(94!G`re@c+d8 z_|#tcDSQBSdbe~HT!?#!d8Vba_siGgr?c|=b9*{<-(km-f{mEv=$3ZHa1KUrCWhUj z9^Y;4zGQ!PGG-n;)MbA6`p;{||3k?gW=b&#@epzp%75edyPS`8Z0swV4oJ4pS7Oh- zL&SB8Yit}ujHB33xSkU%#4XU}-FL<;jli8)aj$fILcE5C$N;$S5iRiv$bMe3|LD;! z^M_ymvS$1rym!cc_n_<_aRo50i~YCp4|3#L8;DL30}^j<3uKlUmDm;<*cerOJ|mpL z`?PE_@_|i1tcKr&|HM!DYGQbN7J7SH^JXPKiw8Q*r;?j%#vL0|xT{mKcFgP(ZO3H) ziP6cg8t1>u{aAjkVlagQXaB(^`ApUPRCp3Osjd&S8W2doo^u)wx z#P=D={rtX8^XQQ-^PNu>YsUY#zk1c`9N&SK*e4tR2!Cu>WBwoc7afH=H4NfPY@m&U zgm>b4lH5BXr zL`!%-*yU;w#4gi^wwVuPPM8npPMA*=PMRz7!JoZw%6v}k>f&kh?0Zj{XBTO@4jSXG zoifkq`Cnc-WnO%2#(Yci{_4wD%>1H|R=F`bFt&6#_i=Gsy|v*mHnj0CvM=6KTfkrQ9dzxp zkJcCe){ATTdw=-NFU>ceESLq^OY95&1HVt)6OXxg&Dp;CV}EF1b)VSB%D(e?#J(q# zYmsx6!*r{zU;FMC%$M?$=CPyQs5Es)<%3iSn6t}p*zZ(4ol z>f=@hs2T27JsuwQD@O@q02>3Yvzz9#-jDgL1biX1$r{QgTHdcb@o z$p62l{QpHY`bzD^kGkhCssH-N3g(+n7R`5`dC0u-5;0Kid2dL|_useO+ClOw;uGfw ziGdybwd@5}vJqkZpZuTvml`nf<<@`(?C+4D!(GaS;^seo^kU642y39!X73bVYz-*L z1FQ|G(+|Rb-iMC(LS(8-bhUd{vIl%;MD-wYVq4FWTtE}*TeNM8nZoPvp8SzUt(JXJ zXaNn7h4a#h_evK&B0czrs}I$T|I1HbwmJ7bqpk)v${B-{ul__h4@2DY%0E`M{y>$pd5FLo4$*Wz(!&t*y~+!Eu0xAR~-}X z)T^l_P)8(>#a2=SdqOtgCu`vU51)V9>Q5L84r@Qy;xCwqgKDvNmF9%gMjgls0UEcMTa?&&fgKee_x z(6`~g?8h?xj{npy8_|Ee2PoMOaZeBj2zTTe9k%BaWZTFK@W1$hdxQ`AOsy|$N9;8< z{&qJeJ;isDOHwzRR=tdR(fg$PA66~stBZ$fmVM%Yzj^Ait$~;4!dCw!ul42tq3pwZ z>VNQ^^CsYq-0oGp1@G`@rxgR(`k#0RAK8ys+1lN`@bq^&TTk8Yyy64!zOb*uJS@Ba z#EBmB#r))&Ye83nJuqwk#g}sXj|^9m?P_Dt&BcGJ{YvhM|IqOrl3#p2F(>CdsNH7w z#O#@e1>u4IE*=PbUCW*^_FkI!dr5iA`_%CDk4V-(`ku|^YVn}0gT3~{+I?Oa|NWo# z3N9RR{+}~4TZMmE19$$vPW(fgAH;sxRD3Hn{HNa_@jo>9#rIxVs)J3+mfj)TOTEs; ze~rmM{Kwz*iTC&{^qswoXC8fHzDTql{iS>E@305=htG`Ly(N4sF$K1n{YiKa z-_YG^HvUG>@f&vUTe?J?2mfz({TKZIS^4fmXSUmYA8JwPByvwqhTapS!na1^9_WJq zXYUXDhfWd4qGPwK{`D)JiTNv?r=X6&ULxluz#YDjlgDNAsZ(IH;C&-`&l3JY&PTpS z+_OWuZX@S^Liw$==N!|6d@8{ljSwB`H*Iq$IS401rt2mRyR9cMtO zeNpQ=A(*Mj*V@YKWZ(*q52;ZbqMiko4rf#l&~3?}5FmH`Wh%zPg8= z(3Njc2j}+}66F1o1MIMj(2(XmPd$`xJ9(*sS0ra#vu<&>F4<~QP9eYijH3Bxy#JJjzi<3FqhJMnA z*PQioH8R)R^KYt!*t&`4!CT~-wOEt2InRyl1!w#^{6^M8o?G|=IW32K4c9mP9gwgF zyetRqY&kv_n*dCl4eSw&!0DQ5q`_!DTlxOTBwinJAkqoPnM6@bM0ir#T@0=ti^q}W~J-$v2fna z?!g({`4Ju7ZomKf3OGCL-M`$ghaB8&zBRf&IIhNh6&=Pkhu;asHZIBSoBa9};dE7a zd*!%t{XcHtPrmQ^cRuX;cZ9vW-T3#-N`a7%VgG%H$U8&6yW5R_-@Fv4{P$n%A03SI z_umuYf2`2}iZ}lIFM6u~>~-b;|2opw+rRPmUm75J&99dI{U`qSNLaq{=bvh(-p0fY O3T#kdg92|}3j9CcaU`?= diff --git a/packages/remix-dev/__tests__/fixtures/node/.gitignore b/packages/remix-dev/__tests__/fixtures/node/.gitignore deleted file mode 100644 index 3f7bf98da3..0000000000 --- a/packages/remix-dev/__tests__/fixtures/node/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -node_modules - -/.cache -/build -/public/build -.env diff --git a/packages/remix-dev/__tests__/fixtures/node/README.md b/packages/remix-dev/__tests__/fixtures/node/README.md deleted file mode 100644 index da8d02ad77..0000000000 --- a/packages/remix-dev/__tests__/fixtures/node/README.md +++ /dev/null @@ -1,38 +0,0 @@ -# Welcome to Remix! - -- [Remix Docs](https://remix.run/docs) - -## Development - -From your terminal: - -```sh -npm run dev -``` - -This starts your app in development mode, rebuilding assets on file changes. - -## Deployment - -First, build your app for production: - -```sh -npm run build -``` - -Then run the app in production mode: - -```sh -npm start -``` - -Now you'll need to pick a host to deploy it to. - -### DIY - -If you're familiar with deploying node applications, the built-in Remix app server is production-ready. - -Make sure to deploy the output of `remix build` - -- `build/` -- `public/build/` diff --git a/packages/remix-dev/__tests__/fixtures/node/app/root.tsx b/packages/remix-dev/__tests__/fixtures/node/app/root.tsx deleted file mode 100644 index b46b8fb15b..0000000000 --- a/packages/remix-dev/__tests__/fixtures/node/app/root.tsx +++ /dev/null @@ -1,33 +0,0 @@ -import { cssBundleHref } from "@remix-run/css-bundle"; -import type { LinksFunction } from "@remix-run/node"; -import { - Links, - LiveReload, - Meta, - Outlet, - Scripts, - ScrollRestoration, -} from "@remix-run/react"; - -export const links: LinksFunction = () => [ - ...(cssBundleHref ? [{ rel: "stylesheet", href: cssBundleHref }] : []), -]; - -export default function App() { - return ( - - - - - - - - - - - - - - - ); -} diff --git a/packages/remix-dev/__tests__/fixtures/node/app/routes/_index.tsx b/packages/remix-dev/__tests__/fixtures/node/app/routes/_index.tsx deleted file mode 100644 index 5347369230..0000000000 --- a/packages/remix-dev/__tests__/fixtures/node/app/routes/_index.tsx +++ /dev/null @@ -1,41 +0,0 @@ -import type { MetaFunction } from "@remix-run/node"; - -export const meta: MetaFunction = () => { - return [ - { title: "New Remix App" }, - { name: "description", content: "Welcome to Remix!" }, - ]; -}; - -export default function Index() { - return ( - - ); -} diff --git a/packages/remix-dev/__tests__/fixtures/node/package.json b/packages/remix-dev/__tests__/fixtures/node/package.json deleted file mode 100644 index 26280f9db3..0000000000 --- a/packages/remix-dev/__tests__/fixtures/node/package.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "private": true, - "sideEffects": false, - "type": "module", - "scripts": { - "build": "remix build", - "dev": "remix dev", - "start": "remix-serve build/index.js", - "typecheck": "tsc" - }, - "dependencies": { - "@remix-run/css-bundle": "*", - "@remix-run/node": "*", - "@remix-run/react": "*", - "@remix-run/serve": "*", - "isbot": "^4.1.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@remix-run/dev": "*", - "@types/react": "^18.2.20", - "@types/react-dom": "^18.2.7", - "eslint": "^8.38.0", - "typescript": "^5.1.6" - }, - "engines": { - "node": ">=18.0.0" - } -} diff --git a/packages/remix-dev/__tests__/fixtures/node/public/favicon.ico b/packages/remix-dev/__tests__/fixtures/node/public/favicon.ico deleted file mode 100644 index 8830cf6821b354114848e6354889b8ecf6d2bc61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16958 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 EKbET!0{{R3 diff --git a/packages/remix-dev/__tests__/fixtures/node/remix.config.js b/packages/remix-dev/__tests__/fixtures/node/remix.config.js deleted file mode 100644 index 015e2b7085..0000000000 --- a/packages/remix-dev/__tests__/fixtures/node/remix.config.js +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('@remix-run/dev').AppConfig} */ -export default { - // appDirectory: "app", - // assetsBuildDirectory: "public/build", - // publicPath: "/build/", - // serverBuildPath: "build/index.js", -}; diff --git a/packages/remix-dev/__tests__/fixtures/node/remix.env.d.ts b/packages/remix-dev/__tests__/fixtures/node/remix.env.d.ts deleted file mode 100644 index dcf8c45e1d..0000000000 --- a/packages/remix-dev/__tests__/fixtures/node/remix.env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/packages/remix-dev/__tests__/fixtures/node/tsconfig.json b/packages/remix-dev/__tests__/fixtures/node/tsconfig.json deleted file mode 100644 index 28cce918b8..0000000000 --- a/packages/remix-dev/__tests__/fixtures/node/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "include": ["remix.env.d.ts", "**/*.ts", "**/*.tsx"], - "compilerOptions": { - "lib": ["DOM", "DOM.Iterable", "ES2022"], - "isolatedModules": true, - "esModuleInterop": true, - "jsx": "react-jsx", - "moduleResolution": "Bundler", - "resolveJsonModule": true, - "target": "ES2022", - "strict": true, - "allowJs": true, - "forceConsistentCasingInFileNames": true, - "baseUrl": ".", - "paths": { - "~/*": ["./app/*"] - }, - - // Remix takes care of building everything in `remix build`. - "noEmit": true - } -} diff --git a/packages/remix-dev/__tests__/fixtures/remix-repo.tar.gz b/packages/remix-dev/__tests__/fixtures/remix-repo.tar.gz deleted file mode 100644 index e804a00ed5ef34d0a69d80c53ca19cd280eb193b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 179712 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 LKmvguXbAlO_^W#h diff --git a/packages/remix-dev/__tests__/fixtures/stack.tar.gz b/packages/remix-dev/__tests__/fixtures/stack.tar.gz deleted file mode 100644 index edde2637f01a8cd73f8c1f6883fd1a971bc0378c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 34304 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 VpRUKO&Gt, document); diff --git a/packages/remix-dev/__tests__/fixtures/stack/app/entry.server.tsx b/packages/remix-dev/__tests__/fixtures/stack/app/entry.server.tsx deleted file mode 100644 index a80b466309..0000000000 --- a/packages/remix-dev/__tests__/fixtures/stack/app/entry.server.tsx +++ /dev/null @@ -1,23 +0,0 @@ -import type { AppLoadContext, EntryContext } from "@remix-run/node"; -import { RemixServer } from "@remix-run/react"; -import { renderToString } from "react-dom/server"; - -export default function handleRequest( - request: Request, - responseStatusCode: number, - responseHeaders: Headers, - remixContext: EntryContext, - loadContext: AppLoadContext -) { - // eslint-disable-next-line testing-library/render-result-naming-convention - let markup = renderToString( - - ); - - responseHeaders.set("Content-Type", "text/html"); - - return new Response("" + markup, { - status: responseStatusCode, - headers: responseHeaders, - }); -} diff --git a/packages/remix-dev/__tests__/fixtures/stack/app/root.tsx b/packages/remix-dev/__tests__/fixtures/stack/app/root.tsx deleted file mode 100644 index 1fedc5b72b..0000000000 --- a/packages/remix-dev/__tests__/fixtures/stack/app/root.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { - Links, - LiveReload, - Meta, - Outlet, - Scripts, - ScrollRestoration, -} from "@remix-run/react"; - -export default function App() { - return ( - - - - - - - - - - - - - ); -} diff --git a/packages/remix-dev/__tests__/fixtures/stack/app/utils.ts b/packages/remix-dev/__tests__/fixtures/stack/app/utils.ts deleted file mode 100644 index 304bb4e19c..0000000000 --- a/packages/remix-dev/__tests__/fixtures/stack/app/utils.ts +++ /dev/null @@ -1 +0,0 @@ -// this is a utility file diff --git a/packages/remix-dev/__tests__/fixtures/stack/package.json b/packages/remix-dev/__tests__/fixtures/stack/package.json deleted file mode 100644 index 6b54cd33fd..0000000000 --- a/packages/remix-dev/__tests__/fixtures/stack/package.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "remix-template-remix", - "private": true, - "sideEffects": false, - "scripts": { - "build": "remix build", - "dev": "remix dev", - "start": "remix-serve build/index.js" - }, - "dependencies": {}, - "devDependencies": {}, - "engines": { - "node": ">=18.0.0" - } -} diff --git a/packages/remix-dev/__tests__/fixtures/stack/public/favicon.ico b/packages/remix-dev/__tests__/fixtures/stack/public/favicon.ico deleted file mode 100644 index 8830cf6821b354114848e6354889b8ecf6d2bc61..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16958 zcmeI3+jCXb9mnJN2h^uNlXH@jlam{_a8F3W{T}Wih>9YJpaf7TUbu)A5fv|h7OMfR zR;q$lr&D!wv|c)`wcw1?>4QT1(&|jdsrI2h`Rn)dTW5t$8pz=s3_5L?#oBxAowe8R z_WfPfN?F+@`q$D@rvC?(W!uWieppskmQ~YG*>*L?{img@tWpnYXZslxeh#TSUS3{q z1Ju6JcfQSbQuORq69@YK(X-3c9vC2c2a2z~zw=F=50@pm0PUiCAm!bAT?2jpM`(^b zC|2&Ngngt^<>oCv#?P(AZ`5_84x#QBPulix)TpkIAUp=(KgGo4CVS~Sxt zVoR4>r5g9%bDh7hi0|v$={zr>CHd`?-l4^Ld(Z9PNz9piFY+llUw_x4ou7Vf-q%$g z)&)J4>6Ft~RZ(uV>dJD|`nxI1^x{X@Z5S<=vf;V3w_(*O-7}W<=e$=}CB9_R;)m9)d7`d_xx+nl^Bg|%ew=?uoKO8w zeQU7h;~8s!@9-k>7Cx}1SDQ7m(&miH zs8!l*wOJ!GHbdh)pD--&W3+w`9YJ=;m^FtMY=`mTq8pyV!-@L6smwp3(q?G>=_4v^ zn(ikLue7!y70#2uhqUVpb7fp!=xu2{aM^1P^pts#+feZv8d~)2sf`sjXLQCEj;pdI z%~f`JOO;*KnziMv^i_6+?mL?^wrE_&=IT9o1i!}Sd4Sx4O@w~1bi1)8(sXvYR-1?7~Zr<=SJ1Cw!i~yfi=4h6o3O~(-Sb2Ilwq%g$+V` z>(C&N1!FV5rWF&iwt8~b)=jIn4b!XbrWrZgIHTISrdHcpjjx=TwJXI7_%Ks4oFLl9 zNT;!%!P4~xH85njXdfqgnIxIFOOKW`W$fxU%{{5wZkVF^G=JB$oUNU5dQSL&ZnR1s z*ckJ$R`eCUJsWL>j6*+|2S1TL_J|Fl&kt=~XZF=+=iT0Xq1*KU-NuH%NAQff$LJp3 zU_*a;@7I0K{mqwux87~vwsp<}@P>KNDb}3U+6$rcZ114|QTMUSk+rhPA(b{$>pQTc zIQri{+U>GMzsCy0Mo4BfWXJlkk;RhfpWpAB{=Rtr*d1MNC+H3Oi5+3D$gUI&AjV-1 z=0ZOox+bGyHe=yk-yu%=+{~&46C$ut^ZN+ysx$NH}*F43)3bKkMsxGyIl#>7Yb8W zO{}&LUO8Ow{7>!bvSq?X{15&Y|4}0w2=o_^0ZzYgB+4HhZ4>s*mW&?RQ6&AY|CPcx z$*LjftNS|H)ePYnIKNg{ck*|y7EJ&Co0ho0K`!{ENPkASeKy-JWE}dF_%}j)Z5a&q zXAI2gPu6`s-@baW=*+keiE$ALIs5G6_X_6kgKK8n3jH2-H9`6bo)Qn1 zZ2x)xPt1=`9V|bE4*;j9$X20+xQCc$rEK|9OwH-O+Q*k`ZNw}K##SkY z3u}aCV%V|j@!gL5(*5fuWo>JFjeU9Qqk`$bdwH8(qZovE2tA7WUpoCE=VKm^eZ|vZ z(k<+j*mGJVah>8CkAsMD6#I$RtF;#57Wi`c_^k5?+KCmX$;Ky2*6|Q^bJ8+s%2MB}OH-g$Ev^ zO3uqfGjuN%CZiu<`aCuKCh{kK!dDZ+CcwgIeU2dsDfz+V>V3BDb~)~ zO!2l!_)m;ZepR~sL+-~sHS7;5ZB|~uUM&&5vDda2b z)CW8S6GI*oF><|ZeY5D^+Mcsri)!tmrM33qvwI4r9o@(GlW!u2R>>sB|E#%W`c*@5 z|0iA|`{6aA7D4Q?vc1{vT-#yytn07`H!QIO^1+X7?zG3%y0gPdIPUJ#s*DNAwd}m1_IMN1^T&be~+E z_z%1W^9~dl|Me9U6+3oNyuMDkF*z_;dOG(Baa*yq;TRiw{EO~O_S6>e*L(+Cdu(TM z@o%xTCV%hi&p)x3_inIF!b|W4|AF5p?y1j)cr9RG@v%QVaN8&LaorC-kJz_ExfVHB za!mtuee#Vb?dh&bwrfGHYAiX&&|v$}U*UBM;#F!N=x>x|G5s0zOa9{(`=k4v^6iK3 z8d&=O@xhDs{;v7JQ%eO;!Bt`&*MH&d zp^K#dkq;jnJz%%bsqwlaKA5?fy zS5JDbO#BgSAdi8NM zDo2SifX6^Z;vn>cBh-?~r_n9qYvP|3ihrnqq6deS-#>l#dV4mX|G%L8|EL;$U+w69 z;rTK3FW$ewUfH|R-Z;3;jvpfiDm?Fvyu9PeR>wi|E8>&j2Z@2h`U}|$>2d`BPV3pz#ViIzH8v6pP^L-p!GbLv<;(p>}_6u&E6XO5- zJ8JEvJ1)0>{iSd|kOQn#?0rTYL=KSmgMHCf$Qbm;7|8d(goD&T-~oCDuZf57iP#_Y zmxaoOSjQsm*^u+m$L9AMqwi=6bpdiAY6k3akjGN{xOZ`_J<~Puyzpi7yhhKrLmXV; z@ftONPy;Uw1F#{_fyGbk04yLE01v=i_5`RqQP+SUH0nb=O?l!J)qCSTdsbmjFJrTm zx4^ef@qt{B+TV_OHOhtR?XT}1Etm(f21;#qyyW6FpnM+S7*M1iME?9fe8d-`Q#InN z?^y{C_|8bxgUE@!o+Z72C)BrS&5D`gb-X8kq*1G7Uld-z19V}HY~mK#!o9MC-*#^+ znEsdc-|jj0+%cgBMy(cEkq4IQ1D*b;17Lyp>Utnsz%LRTfjQKL*vo(yJxwtw^)l|! z7jhIDdtLB}mpkOIG&4@F+9cYkS5r%%jz}I0R#F4oBMf-|Jmmk* zk^OEzF%}%5{a~kGYbFjV1n>HKC+a`;&-n*v_kD2DPP~n5(QE3C;30L<32GB*qV2z$ zWR1Kh=^1-q)P37WS6YWKlUSDe=eD^u_CV+P)q!3^{=$#b^auGS7m8zFfFS<>(e~)TG z&uwWhSoetoe!1^%)O}=6{SUcw-UQmw+i8lokRASPsbT=H|4D|( zk^P7>TUEFho!3qXSWn$m2{lHXw zD>eN6-;wwq9(?@f^F4L2Ny5_6!d~iiA^s~(|B*lbZir-$&%)l>%Q(36yOIAu|326K ztmBWz|MLA{Kj(H_{w2gd*nZ6a@ma(w==~EHIscEk|C=NGJa%Ruh4_+~f|%rt{I5v* zIX@F?|KJID56-ivb+PLo(9hn_CdK{irOcL15>JNQFY112^$+}JPyI{uQ~$&E*=ri; z`d^fH?4f=8vKHT4!p9O*fX(brB75Y9?e>T9=X#Fc@V#%@5^)~#zu5I(=>LQA-EGTS zecy*#6gG+8lapch#Hh%vl(+}J;Q!hC1OKoo;#h3#V%5Js)tQ)|>pTT@1ojd+F9Gey zg`B)zm`|Mo%tH31s4=<+`Pu|B3orXwNyIcNN>;fBkIj^X8P}RXhF= zXQK1u5RLN7k#_Q(KznJrALtMM13!vhfr025ar?@-%{l|uWt@NEd<$~n>RQL{ z+o;->n)+~0tt(u|o_9h!T`%M8%)w2awpV9b*xz9Pl-daUJm3y-HT%xg`^mFd6LBeL z!0~s;zEr)Bn9x)I(wx`;JVwvRcc^io2XX(Nn3vr3dgbrr@YJ?K3w18P*52^ieBCQP z=Up1V$N2~5ppJHRTeY8QfM(7Yv&RG7oWJAyv?c3g(29)P)u;_o&w|&)HGDIinXT~p z3;S|e$=&Tek9Wn!`cdY+d-w@o`37}x{(hl>ykB|%9yB$CGdIcl7Z?d&lJ%}QHck77 zJPR%C+s2w1_Dl_pxu6$Zi!`HmoD-%7OD@7%lKLL^Ixd9VlRSW*o&$^iQ2z+}hTgH) z#91TO#+jH<`w4L}XWOt(`gqM*uTUcky`O(mEyU|4dJoy6*UZJ7%*}ajuos%~>&P2j zk23f5<@GeV?(?`l=ih+D8t`d72xrUjv0wsg;%s1@*2p?TQ;n2$pV7h?_T%sL>iL@w zZ{lmc<|B7!e&o!zs6RW+u8+aDyUdG>ZS(v&rT$QVymB7sEC@VsK1dg^3F@K90-wYB zX!we79qx`(6LA>F$~{{xE8-3Wzyfe`+Lsce(?uj{k@lb97YTJt#>l*Z&LyKX@zjmu?UJC9w~;|NsB{%7G}y*uNDBxirfC EKbET!0{{R3 diff --git a/packages/remix-dev/__tests__/fixtures/stack/remix.config.js b/packages/remix-dev/__tests__/fixtures/stack/remix.config.js deleted file mode 100644 index 9d355b29b3..0000000000 --- a/packages/remix-dev/__tests__/fixtures/stack/remix.config.js +++ /dev/null @@ -1,7 +0,0 @@ -/** @type {import('@remix-run/dev').AppConfig} */ -module.exports = { - // appDirectory: "app", - // assetsBuildDirectory: "public/build", - // serverBuildPath: "build/index.js", - // publicPath: "/build/", -}; diff --git a/packages/remix-dev/__tests__/fixtures/stack/remix.env.d.ts b/packages/remix-dev/__tests__/fixtures/stack/remix.env.d.ts deleted file mode 100644 index 72e2affe31..0000000000 --- a/packages/remix-dev/__tests__/fixtures/stack/remix.env.d.ts +++ /dev/null @@ -1,2 +0,0 @@ -/// -/// diff --git a/packages/remix-dev/__tests__/fixtures/stack/remix.init/index.js b/packages/remix-dev/__tests__/fixtures/stack/remix.init/index.js deleted file mode 100644 index d3dd71ce24..0000000000 --- a/packages/remix-dev/__tests__/fixtures/stack/remix.init/index.js +++ /dev/null @@ -1 +0,0 @@ -// this is the init file diff --git a/packages/remix-dev/__tests__/fixtures/stack/tsconfig.json b/packages/remix-dev/__tests__/fixtures/stack/tsconfig.json deleted file mode 100644 index e8cb841e3a..0000000000 --- a/packages/remix-dev/__tests__/fixtures/stack/tsconfig.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "include": ["remix.env.d.ts", "**/*.ts", "**/*.tsx"], - "compilerOptions": { - "allowJs": true, - "forceConsistentCasingInFileNames": true, - "lib": ["DOM", "DOM.Iterable", "ES2022"], - "isolatedModules": true, - "esModuleInterop": true, - "jsx": "react-jsx", - "moduleResolution": "Bundler", - "resolveJsonModule": true, - "target": "ES2022", - "strict": true, - "baseUrl": ".", - "paths": { - "~/*": ["./app/*"] - }, - - // Remix takes care of building everything in `remix build`. - "noEmit": true - } -} diff --git a/packages/remix-dev/__tests__/fixtures/successful-remix-init/package.json b/packages/remix-dev/__tests__/fixtures/successful-remix-init/package.json deleted file mode 100644 index 0967ef424b..0000000000 --- a/packages/remix-dev/__tests__/fixtures/successful-remix-init/package.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/packages/remix-dev/__tests__/fixtures/successful-remix-init/remix.init/index.js b/packages/remix-dev/__tests__/fixtures/successful-remix-init/remix.init/index.js deleted file mode 100644 index 2523b045cc..0000000000 --- a/packages/remix-dev/__tests__/fixtures/successful-remix-init/remix.init/index.js +++ /dev/null @@ -1,9 +0,0 @@ -const fs = require("node:fs"); -const path = require("node:path"); - -module.exports = ({ rootDirectory }) => { - fs.writeFileSync( - path.join(rootDirectory, "test.txt"), - "added via remix.init" - ); -}; diff --git a/packages/remix-dev/__tests__/fixtures/tar.js b/packages/remix-dev/__tests__/fixtures/tar.js deleted file mode 100644 index f59cb607f5..0000000000 --- a/packages/remix-dev/__tests__/fixtures/tar.js +++ /dev/null @@ -1,21 +0,0 @@ -const tar = require("tar-fs"); -const fs = require("node:fs"); -const path = require("node:path"); - -let files = fs.readdirSync(__dirname); -let dirs = files.filter((file) => - fs.statSync(path.join(__dirname, file)).isDirectory() -); - -for (let dir of dirs) { - let fullPath = path.join(__dirname, dir); - console.log(`Creating archive for ${fullPath}`); - tar - .pack(fullPath, { - map(header) { - header.name = dir + "/" + header.name; - return header; - }, - }) - .pipe(fs.createWriteStream(path.join(__dirname, `${dir}.tar.gz`))); -} diff --git a/packages/remix-dev/__tests__/flat-routes-test.ts b/packages/remix-dev/__tests__/flat-routes-test.ts index b1947554ec..02e526aaa9 100644 --- a/packages/remix-dev/__tests__/flat-routes-test.ts +++ b/packages/remix-dev/__tests__/flat-routes-test.ts @@ -634,7 +634,9 @@ describe("flatRoutes", () => { ); let routes = Object.values(routeManifest); - expect(routes).toHaveLength(files.length); + test("route per file", () => { + expect(routes).toHaveLength(files.length); + }); for (let [file, route] of files) { test(`hierarchy for ${file} - ${route.path}`, () => { diff --git a/packages/remix-dev/__tests__/init-test.ts b/packages/remix-dev/__tests__/init-test.ts index 4a65e06901..63607af575 100644 --- a/packages/remix-dev/__tests__/init-test.ts +++ b/packages/remix-dev/__tests__/init-test.ts @@ -116,7 +116,7 @@ describe("the init command", () => { expect(fse.existsSync(path.join(projectDir, "remix.init"))).toBeFalsy(); }); - it("It keeps the `remix.init` script when using the `--no-delete` flag", async () => { + it("keeps the `remix.init` script when using the `--no-delete` flag", async () => { let projectDir = await getProjectDir("remix-init-manual"); fse.copySync( diff --git a/packages/remix-dev/__tests__/utils/captureError.ts b/packages/remix-dev/__tests__/utils/captureError.ts index f29f0bafae..e53e5f7be0 100644 --- a/packages/remix-dev/__tests__/utils/captureError.ts +++ b/packages/remix-dev/__tests__/utils/captureError.ts @@ -1,8 +1,8 @@ class NoErrorThrownError extends Error {} -export default async ( +export default async function captureError( erroring: Promise | (() => Promise) -) => { +) { try { let promise = typeof erroring === "function" ? erroring() : erroring; await promise; @@ -11,4 +11,4 @@ export default async ( if (error instanceof NoErrorThrownError) throw error; return error; } -}; +} diff --git a/packages/remix-dev/__tests__/utils/withApp.ts b/packages/remix-dev/__tests__/utils/withApp.ts index b4c77861f5..10366083f7 100644 --- a/packages/remix-dev/__tests__/utils/withApp.ts +++ b/packages/remix-dev/__tests__/utils/withApp.ts @@ -15,10 +15,10 @@ const retry = async ( } }; -export default async ( +export default async function withApp( fixture: string, callback: (projectDir: string) => Promise -): Promise => { +): Promise { let TEMP_DIR = path.join( fse.realpathSync(os.tmpdir()), `remix-tests-${Math.random().toString(32).slice(2)}` @@ -38,4 +38,4 @@ export default async ( // See https://github.com/jprichardson/node-fs-extra/issues?q=EBUSY%3A+resource+busy+or+locked%2C+rmdir await retry(async () => await fse.remove(TEMP_DIR), 3, 200); } -}; +} diff --git a/packages/remix-dev/cli/commands.ts b/packages/remix-dev/cli/commands.ts index 7eeded3c27..6c9297526a 100644 --- a/packages/remix-dev/cli/commands.ts +++ b/packages/remix-dev/cli/commands.ts @@ -15,7 +15,8 @@ import type { RemixConfig } from "../config"; import type { ViteDevOptions } from "../vite/dev"; import type { ViteBuildOptions } from "../vite/build"; import { readConfig } from "../config"; -import { formatRoutes, type RoutesFormat } from "../config/format"; +import { formatRoutes } from "../config/format"; +import type { RoutesFormat } from "../config/format"; import { loadVitePluginContext } from "../vite/plugin"; import { detectPackageManager } from "./detectPackageManager"; import { transpile as convertFileToJS } from "./useJavascript"; diff --git a/packages/remix-dev/compiler/js/compiler.ts b/packages/remix-dev/compiler/js/compiler.ts index 1a5ea772af..6babcd882b 100644 --- a/packages/remix-dev/compiler/js/compiler.ts +++ b/packages/remix-dev/compiler/js/compiler.ts @@ -3,7 +3,7 @@ import { builtinModules as nodeBuiltins } from "node:module"; import * as esbuild from "esbuild"; import type { RemixConfig } from "../../config"; -import { type Manifest } from "../../manifest"; +import type { Manifest } from "../../manifest"; import { getAppDependencies } from "../../dependencies"; import { loaders } from "../utils/loaders"; import { browserRouteModulesPlugin } from "./plugins/routes"; diff --git a/packages/remix-dev/compiler/manifest.ts b/packages/remix-dev/compiler/manifest.ts index b75da0a1b8..c0d496d692 100644 --- a/packages/remix-dev/compiler/manifest.ts +++ b/packages/remix-dev/compiler/manifest.ts @@ -4,10 +4,10 @@ import type * as esbuild from "esbuild"; import type { RemixConfig } from "../config"; import invariant from "../invariant"; -import { type Manifest } from "../manifest"; +import type { Manifest } from "../manifest"; import { getRouteModuleExports } from "./utils/routeExports"; import { getHash } from "./utils/crypto"; -import { type FileWatchCache } from "./fileWatchCache"; +import type { FileWatchCache } from "./fileWatchCache"; type Route = RemixConfig["routes"][string]; diff --git a/packages/remix-dev/compiler/plugins/cssImports.ts b/packages/remix-dev/compiler/plugins/cssImports.ts index 8fe9aaaaaf..077743f5e4 100644 --- a/packages/remix-dev/compiler/plugins/cssImports.ts +++ b/packages/remix-dev/compiler/plugins/cssImports.ts @@ -57,7 +57,6 @@ export function cssFilePlugin(ctx: Context): esbuild.Plugin { let fileDependencies = new Set([args.path]); let globDependencies = new Set(); - // eslint-disable-next-line prefer-let/prefer-let -- Avoid needing to repeatedly check for null since const can't be reassigned const postcssProcessor = await getPostcssProcessor(ctx); let { metafile, outputFiles, warnings, errors } = await esbuild.build( diff --git a/packages/remix-dev/compiler/plugins/cssSideEffectImports.ts b/packages/remix-dev/compiler/plugins/cssSideEffectImports.ts index 1daa196509..cbadb7abb7 100644 --- a/packages/remix-dev/compiler/plugins/cssSideEffectImports.ts +++ b/packages/remix-dev/compiler/plugins/cssSideEffectImports.ts @@ -1,7 +1,8 @@ import path from "node:path"; import type { Plugin } from "esbuild"; import fse from "fs-extra"; -import { parse, type ParserOptions } from "@babel/parser"; +import { parse } from "@babel/parser"; +import type { ParserOptions } from "@babel/parser"; import traverse from "@babel/traverse"; import generate from "@babel/generator"; @@ -24,7 +25,7 @@ const extensions = ["js", "jsx", "ts", "tsx", "mjs", "cjs"] as const; const allJsFilesFilter = new RegExp(`\\.(${extensions.join("|")})$`); type Loader = "js" | "jsx" | "ts" | "tsx"; -type Extension = `.${typeof extensions[number]}`; +type Extension = `.${(typeof extensions)[number]}`; const loaderForExtension: Record = { ".js": "jsx", // Remix supports JSX in JS files diff --git a/packages/remix-dev/compiler/server/compiler.ts b/packages/remix-dev/compiler/server/compiler.ts index 1fbfd76ae9..93d0891a12 100644 --- a/packages/remix-dev/compiler/server/compiler.ts +++ b/packages/remix-dev/compiler/server/compiler.ts @@ -1,6 +1,6 @@ import * as esbuild from "esbuild"; -import { type Manifest } from "../../manifest"; +import type { Manifest } from "../../manifest"; import { loaders } from "../utils/loaders"; import { cssModulesPlugin } from "../plugins/cssModuleImports"; import { cssSideEffectImportsPlugin } from "../plugins/cssSideEffectImports"; diff --git a/packages/remix-dev/compiler/server/plugins/manifest.ts b/packages/remix-dev/compiler/server/plugins/manifest.ts index 19d847f94f..63095e6cfb 100644 --- a/packages/remix-dev/compiler/server/plugins/manifest.ts +++ b/packages/remix-dev/compiler/server/plugins/manifest.ts @@ -2,7 +2,7 @@ import type { Plugin } from "esbuild"; import jsesc from "jsesc"; import type * as Channel from "../../../channel"; -import { type Manifest } from "../../../manifest"; +import type { Manifest } from "../../../manifest"; import { assetsManifestVirtualModule } from "../virtualModules"; import { Cancel } from "../../cancel"; diff --git a/packages/remix-dev/compiler/utils/postcss.ts b/packages/remix-dev/compiler/utils/postcss.ts index 9198664292..55986b9044 100644 --- a/packages/remix-dev/compiler/utils/postcss.ts +++ b/packages/remix-dev/compiler/utils/postcss.ts @@ -215,7 +215,6 @@ export async function getCachedPostcssProcessor({ options: Options; fileWatchCache: FileWatchCache; }) { - // eslint-disable-next-line prefer-let/prefer-let -- Avoid needing to repeatedly check for null since const can't be reassigned const postcssProcessor = await getPostcssProcessor({ config }); if (!postcssProcessor) { diff --git a/packages/remix-dev/devServer_unstable/hmr.ts b/packages/remix-dev/devServer_unstable/hmr.ts index 6f88ab803b..9b7386d017 100644 --- a/packages/remix-dev/devServer_unstable/hmr.ts +++ b/packages/remix-dev/devServer_unstable/hmr.ts @@ -1,7 +1,7 @@ import path from "node:path"; import type { RemixConfig } from "../config"; -import { type Manifest } from "../manifest"; +import type { Manifest } from "../manifest"; export type Update = { id: string; diff --git a/packages/remix-dev/devServer_unstable/index.ts b/packages/remix-dev/devServer_unstable/index.ts index ef3a3fb370..a5d4c06717 100644 --- a/packages/remix-dev/devServer_unstable/index.ts +++ b/packages/remix-dev/devServer_unstable/index.ts @@ -10,10 +10,10 @@ import pc from "picocolors"; import exitHook from "exit-hook"; import * as Channel from "../channel"; -import { type Manifest } from "../manifest"; +import type { Manifest } from "../manifest"; import * as Compiler from "../compiler"; import { createFileWatchCache } from "../compiler/fileWatchCache"; -import { type RemixConfig } from "../config"; +import type { RemixConfig } from "../config"; import { loadEnv } from "./env"; import * as Socket from "./socket"; import * as HMR from "./hmr"; diff --git a/packages/remix-dev/devServer_unstable/socket.ts b/packages/remix-dev/devServer_unstable/socket.ts index fa6afcb13c..b91c867084 100644 --- a/packages/remix-dev/devServer_unstable/socket.ts +++ b/packages/remix-dev/devServer_unstable/socket.ts @@ -1,7 +1,7 @@ import WebSocket from "ws"; import type { Server as HTTPServer } from "node:http"; -import { type Manifest } from "../manifest"; +import type { Manifest } from "../manifest"; import type * as HMR from "./hmr"; type Message = diff --git a/packages/remix-dev/vite/build.ts b/packages/remix-dev/vite/build.ts index 682f3cfefa..5eacb77e30 100644 --- a/packages/remix-dev/vite/build.ts +++ b/packages/remix-dev/vite/build.ts @@ -3,11 +3,13 @@ import path from "node:path"; import fse from "fs-extra"; import colors from "picocolors"; +import type { + RemixPluginContext, + BuildManifest, + ServerBundleBuildConfig, + ServerBundlesBuildManifest, +} from "./plugin"; import { - type RemixPluginContext, - type BuildManifest, - type ServerBundleBuildConfig, - type ServerBundlesBuildManifest, resolveViteConfig, extractRemixPluginContext, configRouteToBranchRoute, @@ -74,7 +76,6 @@ async function getServerBuilds(ctx: RemixPluginContext): Promise<{ buildManifest: BuildManifest; }> { let { rootDirectory } = ctx; - // eslint-disable-next-line prefer-let/prefer-let -- Improve type narrowing const { routes, serverBuildFile, serverBundles, appDirectory } = ctx.remixConfig; let serverBuildDirectory = getServerBuildDirectory(ctx); @@ -247,7 +248,6 @@ export async function build( let viteConfig = await resolveViteConfig({ configFile, mode, root }); - // eslint-disable-next-line prefer-let/prefer-let -- Improve type narrowing const ctx = await extractRemixPluginContext(viteConfig); if (!ctx) { diff --git a/packages/remix-dev/vite/cloudflare-proxy-plugin.ts b/packages/remix-dev/vite/cloudflare-proxy-plugin.ts index 314c94cf33..a65b251661 100644 --- a/packages/remix-dev/vite/cloudflare-proxy-plugin.ts +++ b/packages/remix-dev/vite/cloudflare-proxy-plugin.ts @@ -1,10 +1,7 @@ import { createRequestHandler } from "@remix-run/server-runtime"; -import { - type AppLoadContext, - type ServerBuild, -} from "@remix-run/server-runtime"; -import { type Plugin } from "vite"; -import { type GetPlatformProxyOptions, type PlatformProxy } from "wrangler"; +import type { AppLoadContext, ServerBuild } from "@remix-run/server-runtime"; +import type { Plugin } from "vite"; +import type { GetPlatformProxyOptions, PlatformProxy } from "wrangler"; import { fromNodeRequest, toNodeRequest } from "./node-adapter"; diff --git a/packages/remix-dev/vite/plugin.ts b/packages/remix-dev/vite/plugin.ts index 2160bcf7ed..c84e1e5465 100644 --- a/packages/remix-dev/vite/plugin.ts +++ b/packages/remix-dev/vite/plugin.ts @@ -1,13 +1,15 @@ // We can only import types from Vite at the top level since we're in a CJS // context but want to use Vite's ESM build to avoid deprecation warnings +// eslint-disable-next-line @typescript-eslint/consistent-type-imports -- "Type import [...] is used by decorator metadata" error, no idea why import type * as Vite from "vite"; -import { type BinaryLike, createHash } from "node:crypto"; +import { createHash } from "node:crypto"; +import type { BinaryLike } from "node:crypto"; import * as path from "node:path"; import * as url from "node:url"; import * as fse from "fs-extra"; import babel from "@babel/core"; +import type { ServerBuild } from "@remix-run/server-runtime"; import { - type ServerBuild, unstable_setDevServerHooks as setDevServerHooks, createRequestHandler, } from "@remix-run/server-runtime"; @@ -20,20 +22,21 @@ import pick from "lodash/pick"; import omit from "lodash/omit"; import colors from "picocolors"; -import { type ConfigRoute, type RouteManifest } from "../config/routes"; +// eslint-disable-next-line @typescript-eslint/consistent-type-imports -- "Type import [...] is used by decorator metadata" error, no idea why +import type { ConfigRoute, RouteManifest } from "../config/routes"; +// eslint-disable-next-line @typescript-eslint/consistent-type-imports -- "Type import [...] is used by decorator metadata" error, no idea why +import type { + AppConfig as RemixEsbuildUserConfig, + RemixConfig as ResolvedRemixEsbuildConfig, +} from "../config"; import { - type AppConfig as RemixEsbuildUserConfig, - type RemixConfig as ResolvedRemixEsbuildConfig, resolveConfig as resolveRemixEsbuildConfig, findConfig, } from "../config"; -import { type Manifest as RemixManifest } from "../manifest"; +import type { Manifest as RemixManifest } from "../manifest"; import invariant from "../invariant"; -import { - type NodeRequestHandler, - fromNodeRequest, - toNodeRequest, -} from "./node-adapter"; +import type { NodeRequestHandler } from "./node-adapter"; +import { fromNodeRequest, toNodeRequest } from "./node-adapter"; import { getStylesForUrl, isCssModulesFile } from "./styles"; import * as VirtualModule from "./vmod"; import { resolveFileUrl } from "./resolve-file-url"; @@ -113,7 +116,7 @@ const supportedRemixEsbuildConfigKeys = [ ] as const satisfies ReadonlyArray; type SupportedRemixEsbuildUserConfig = Pick< RemixEsbuildUserConfig, - typeof supportedRemixEsbuildConfigKeys[number] + (typeof supportedRemixEsbuildConfigKeys)[number] >; const SERVER_ONLY_ROUTE_EXPORTS = ["loader", "action", "headers"]; @@ -141,7 +144,7 @@ const branchRouteProperties = [ "file", "index", ] as const satisfies ReadonlyArray; -type BranchRoute = Pick; +type BranchRoute = Pick; export const configRouteToBranchRoute = ( configRoute: ConfigRoute @@ -177,7 +180,7 @@ const excludedRemixConfigPresetKeys = [ ] as const satisfies ReadonlyArray; type ExcludedRemixConfigPresetKey = - typeof excludedRemixConfigPresetKeys[number]; + (typeof excludedRemixConfigPresetKeys)[number]; type RemixConfigPreset = Omit; diff --git a/packages/remix-dev/vite/remove-exports.ts b/packages/remix-dev/vite/remove-exports.ts index 298d2cac86..c658766004 100644 --- a/packages/remix-dev/vite/remove-exports.ts +++ b/packages/remix-dev/vite/remove-exports.ts @@ -2,14 +2,8 @@ // Which was originally adapted from https://github.com/vercel/next.js/blob/574fe0b582d5cc1b13663121fd47a3d82deaaa17/packages/next/build/babel/plugins/next-ssg-transform.ts import type { GeneratorOptions } from "@babel/generator"; -import { - type BabelTypes, - type NodePath, - parse, - traverse, - generate, - t, -} from "./babel"; +import type { BabelTypes, NodePath } from "./babel"; +import { parse, traverse, generate, t } from "./babel"; function getIdentifier( path: NodePath< diff --git a/packages/remix-dev/vite/styles.ts b/packages/remix-dev/vite/styles.ts index 9996afa1b4..3e23770e1f 100644 --- a/packages/remix-dev/vite/styles.ts +++ b/packages/remix-dev/vite/styles.ts @@ -1,9 +1,9 @@ import * as path from "node:path"; -import { type ServerBuild } from "@remix-run/server-runtime"; +import type { ServerBuild } from "@remix-run/server-runtime"; import { matchRoutes } from "@remix-run/router"; -import { type ModuleNode, type ViteDevServer } from "vite"; +import type { ModuleNode, ViteDevServer } from "vite"; -import { type RemixConfig as ResolvedRemixConfig } from "../config"; +import type { RemixConfig as ResolvedRemixConfig } from "../config"; import { resolveFileUrl } from "./resolve-file-url"; type ServerRouteManifest = ServerBuild["routes"]; diff --git a/packages/remix-serve/cli.ts b/packages/remix-serve/cli.ts index 31c8b76508..728b014ebe 100644 --- a/packages/remix-serve/cli.ts +++ b/packages/remix-serve/cli.ts @@ -3,12 +3,10 @@ import fs from "node:fs"; import os from "node:os"; import path from "node:path"; import url from "node:url"; -import { - type ServerBuild, - broadcastDevReady, - installGlobals, -} from "@remix-run/node"; -import { type RequestHandler, createRequestHandler } from "@remix-run/express"; +import type { ServerBuild } from "@remix-run/node"; +import { broadcastDevReady, installGlobals } from "@remix-run/node"; +import type { RequestHandler } from "@remix-run/express"; +import { createRequestHandler } from "@remix-run/express"; import chokidar from "chokidar"; import compression from "compression"; import express from "express"; diff --git a/packages/remix-server-runtime/.eslintrc.js b/packages/remix-server-runtime/.eslintrc.js index 944d946959..075c83fe84 100644 --- a/packages/remix-server-runtime/.eslintrc.js +++ b/packages/remix-server-runtime/.eslintrc.js @@ -1,7 +1,7 @@ let restrictedGlobalsError = `Node globals are not allowed in this package.`; module.exports = { - extends: "../../.eslintrc.js", + extends: "../../.eslintrc", rules: { "no-restricted-globals": [ "error", diff --git a/packages/remix-server-runtime/__tests__/responses-test.ts b/packages/remix-server-runtime/__tests__/responses-test.ts index 0506d28c96..9263beb795 100644 --- a/packages/remix-server-runtime/__tests__/responses-test.ts +++ b/packages/remix-server-runtime/__tests__/responses-test.ts @@ -44,6 +44,7 @@ describe("json", () => { expect(result).toMatchObject({ hello: "remix" }); }); + // eslint-disable-next-line jest/expect-expect it("disallows unmatched typed responses", async () => { let response = json("hello"); isEqual, typeof response>(false); diff --git a/packages/remix-server-runtime/__tests__/serialize-test.ts b/packages/remix-server-runtime/__tests__/serialize-test.ts index 7b5a38b35d..15b8ad2ea7 100644 --- a/packages/remix-server-runtime/__tests__/serialize-test.ts +++ b/packages/remix-server-runtime/__tests__/serialize-test.ts @@ -2,6 +2,7 @@ import type { SerializeFrom } from "../index"; import { defer, json } from "../index"; import { isEqual } from "./utils"; +// eslint-disable-next-line jest/expect-expect it("infers basic types", () => { isEqual< SerializeFrom<{ @@ -21,6 +22,7 @@ it("infers basic types", () => { >(true); }); +// eslint-disable-next-line jest/expect-expect it("infers deferred types", () => { let get = (): Promise | undefined => { if (Math.random() > 0.5) return Promise.resolve(new Date()); @@ -40,6 +42,7 @@ it("infers deferred types", () => { >(true); }); +// eslint-disable-next-line jest/expect-expect it("infers types from json", () => { let loader = () => json({ data: "remix" }); isEqual, { data: string }>(true); @@ -48,6 +51,7 @@ it("infers types from json", () => { isEqual, { data: string }>(true); }); +// eslint-disable-next-line jest/expect-expect it("infers type from defer", () => { let loader = async () => defer({ data: "remix" }); isEqual, { data: string }>(true); diff --git a/packages/remix-server-runtime/jsonify.ts b/packages/remix-server-runtime/jsonify.ts index 80e524ff57..43b1f97769 100644 --- a/packages/remix-server-runtime/jsonify.ts +++ b/packages/remix-server-runtime/jsonify.ts @@ -1,9 +1,5 @@ -import { - expectType, - type Equal, - type Expect, - type MutualExtends, -} from "./typecheck"; +import type { Equal, Expect, MutualExtends } from "./typecheck"; +import { expectType } from "./typecheck"; // prettier-ignore // `Jsonify` emulates `let y = JSON.parse(JSON.stringify(x))`, but for types diff --git a/packages/remix-server-runtime/responses.ts b/packages/remix-server-runtime/responses.ts index 32a609cd5c..2f9e8dcca4 100644 --- a/packages/remix-server-runtime/responses.ts +++ b/packages/remix-server-runtime/responses.ts @@ -1,10 +1,12 @@ +import type { + UNSAFE_DeferredData as DeferredData, + TrackedPromise, +} from "@remix-run/router"; import { defer as routerDefer, json as routerJson, redirect as routerRedirect, redirectDocument as routerRedirectDocument, - type UNSAFE_DeferredData as DeferredData, - type TrackedPromise, } from "@remix-run/router"; import { serializeError } from "./errors"; diff --git a/packages/remix-server-runtime/serialize.ts b/packages/remix-server-runtime/serialize.ts index c3d4822f49..eceb42cd78 100644 --- a/packages/remix-server-runtime/serialize.ts +++ b/packages/remix-server-runtime/serialize.ts @@ -5,7 +5,7 @@ import type { ClientLoaderFunctionArgs, } from "./routeModules"; import { expectType } from "./typecheck"; -import { type Expect, type Equal } from "./typecheck"; +import type { Expect, Equal } from "./typecheck"; // prettier-ignore /** diff --git a/packages/remix-testing/__tests__/stub-test.tsx b/packages/remix-testing/__tests__/stub-test.tsx index 87ad7f968c..956c9c5d0f 100644 --- a/packages/remix-testing/__tests__/stub-test.tsx +++ b/packages/remix-testing/__tests__/stub-test.tsx @@ -52,6 +52,7 @@ test("renders a nested route", () => { expect(screen.getByText("INDEX")).toBeInTheDocument(); }); +// eslint-disable-next-line jest/expect-expect test("loaders work", async () => { let RemixStub = createRemixStub([ { @@ -71,6 +72,7 @@ test("loaders work", async () => { await waitFor(() => screen.findByText("Message: hello")); }); +// eslint-disable-next-line jest/expect-expect test("actions work", async () => { let RemixStub = createRemixStub([ { @@ -96,6 +98,7 @@ test("actions work", async () => { await waitFor(() => screen.findByText("Message: hello")); }); +// eslint-disable-next-line jest/expect-expect test("fetchers work", async () => { let count = 0; let RemixStub = createRemixStub([ @@ -127,6 +130,7 @@ test("fetchers work", async () => { await waitFor(() => screen.findByText("idle 2")); }); +// eslint-disable-next-line jest/expect-expect test("can pass a predefined loader", () => { async function loader(_args: LoaderFunctionArgs) { return json({ hi: "there" }); @@ -218,7 +222,7 @@ test("all routes have ids", () => { render(); let matchesTextContent = screen.getByTestId("matches").textContent; - // eslint-disable-next-line jest-dom/prefer-in-document + expect(matchesTextContent).toBeDefined(); let matches = JSON.parse(matchesTextContent!); let matchesWithoutIds = matches.filter((match: any) => match.id == null); diff --git a/packages/remix-testing/create-remix-stub.tsx b/packages/remix-testing/create-remix-stub.tsx index 0c19d2fb1a..e2ce168c05 100644 --- a/packages/remix-testing/create-remix-stub.tsx +++ b/packages/remix-testing/create-remix-stub.tsx @@ -1,12 +1,12 @@ import * as React from "react"; -import { - UNSAFE_convertRoutesToDataRoutes, - type HydrationState, - type InitialEntry, - type Router, - type ActionFunctionArgs as RRActionFunctionArgs, - type LoaderFunctionArgs as RRLoaderFunctionArgs, +import type { + HydrationState, + InitialEntry, + Router, + ActionFunctionArgs as RRActionFunctionArgs, + LoaderFunctionArgs as RRLoaderFunctionArgs, } from "@remix-run/router"; +import { UNSAFE_convertRoutesToDataRoutes } from "@remix-run/router"; import { UNSAFE_RemixContext as RemixContext } from "@remix-run/react"; import type { UNSAFE_FutureConfig as FutureConfig, diff --git a/packages/router/__tests__/lazy-test.ts b/packages/router/__tests__/lazy-test.ts index e631f03d41..20642ba907 100644 --- a/packages/router/__tests__/lazy-test.ts +++ b/packages/router/__tests__/lazy-test.ts @@ -1,4 +1,3 @@ -/* eslint-disable jest/valid-title */ import { createMemoryHistory, createRouter, diff --git a/packages/router/__tests__/utils/data-router-setup.ts b/packages/router/__tests__/utils/data-router-setup.ts index cc77d8f290..f79be10f71 100644 --- a/packages/router/__tests__/utils/data-router-setup.ts +++ b/packages/router/__tests__/utils/data-router-setup.ts @@ -1,4 +1,3 @@ -/* eslint-disable jest/valid-title */ import type { AgnosticDataRouteObject, AgnosticRouteMatch, @@ -746,9 +745,7 @@ export function cleanup(_router?: Router) { // Cleanup any routers created using setup() if (router) { - // eslint-disable-next-line jest/no-standalone-expect expect(router._internalFetchControllers.size).toBe(0); - // eslint-disable-next-line jest/no-standalone-expect expect(router._internalActiveDeferreds.size).toBe(0); } router?.dispose(); diff --git a/packages/router/history.ts b/packages/router/history.ts index 335645db1c..d55375ff6a 100644 --- a/packages/router/history.ts +++ b/packages/router/history.ts @@ -497,7 +497,6 @@ export function invariant(value: any, message?: string) { export function warning(cond: any, message: string) { if (!cond) { - // eslint-disable-next-line no-console if (typeof console !== "undefined") console.warn(message); try { @@ -507,7 +506,6 @@ export function warning(cond: any, message: string) { // find the source for a warning that appears in the console by // enabling "pause on exceptions" in your JavaScript debugger. throw new Error(message); - // eslint-disable-next-line no-empty } catch (e) {} } }