Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(remix-dev): make entry.{client,server}.tsx optional #4600

Merged
merged 63 commits into from
Feb 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
e46d08c
chore: make entry.{client,server}.tsx and root.tsx optional
mcansh Nov 14, 2022
b7df8da
chore: use absolute path
mcansh Nov 15, 2022
950f699
chore: require root route
mcansh Dec 13, 2022
4d88435
feat: initial eject generator
mcansh Dec 13, 2022
ba48926
chore: determine if streaming should be used
mcansh Dec 21, 2022
c9d11b8
chore: check if entry is js, convert ts to js
mcansh Dec 21, 2022
9aa4cbf
chore: remove extra log, relative path in log
mcansh Dec 21, 2022
e8a6bfa
fix: oops
mcansh Dec 21, 2022
22f867c
chore: check if any of the server/client entries exist
mcansh Dec 21, 2022
500d04b
chore: use onAllReady for everyone by default
mcansh Jan 3, 2023
f7e45f6
chore: set exit code
mcansh Jan 3, 2023
e74211d
chore: rename to eject
mcansh Jan 3, 2023
fa1abe9
chore: Intl.ListFormat
mcansh Jan 3, 2023
3a39858
chore: update asset manifest to use config.entryClientFilePath
mcansh Jan 3, 2023
e6a3a09
test: remove entry.{client,server} from createFixture
mcansh Jan 3, 2023
300d032
chore: check and replace runtime if non node
mcansh Jan 6, 2023
fec99aa
Update packages/remix-dev/cli/commands.ts
mcansh Jan 6, 2023
9653bec
chore: add deno/cloudflare flavor of streaming
mcansh Jan 10, 2023
53dac7f
chore: update deno/cloudflare server entry
mcansh Jan 10, 2023
1c8a591
fix: rebase error
mcansh Jan 10, 2023
de903ca
test: add test for user defined entry.server
mcansh Jan 10, 2023
b32666f
chore: use array instead of set
mcansh Jan 10, 2023
863af0c
chore: add TODO
mcansh Jan 10, 2023
2d91b3d
chore: remove react import
mcansh Jan 10, 2023
c511581
chore: remove unused type import
mcansh Jan 10, 2023
dfa0801
chore: normalize console errors
mcansh Jan 10, 2023
7a96641
chore: update cssBundleEntryModulePlugin entry.client to use absolute…
mcansh Jan 10, 2023
74c9e90
test: add "@remix-run/cloudflare" to cf-compiler-test
mcansh Jan 10, 2023
411f437
chore: add abortDelay prop to <RemixServer>
mcansh Jan 17, 2023
f5fbdac
chore: update cloudflare/deno default entry.server
mcansh Jan 23, 2023
10fe5c3
chore: enable `new ReadableStream()` via wrangler.toml
mcansh Jan 24, 2023
37f80ed
chore: Apply suggestions from code review
mcansh Jan 24, 2023
a9c290a
chore: update default node entry.server
mcansh Jan 31, 2023
167c32a
chore: add signal to cf/deno entry.server
mcansh Jan 31, 2023
eaf34ca
chore: use appDirectory from config
mcansh Jan 31, 2023
ed444d4
chore: dont exit
mcansh Jan 31, 2023
db80c70
chore(cssBundleEntryModulePlugin): use relative path so builds stay d…
mcansh Jan 31, 2023
b0fee68
chore: warn when isbot is not installed
mcansh Jan 31, 2023
a5202ff
chore: export transpile fn
mcansh Jan 31, 2023
e92e3dd
fix: filename is the filename
mcansh Jan 31, 2023
e635dc6
test: add tests and fixtures for eject
mcansh Jan 31, 2023
ceee1c1
chore: dont auto install isbot as that breaks e2e tests
mcansh Jan 31, 2023
4fc7e15
chore: lint
mcansh Jan 31, 2023
9f5da53
Revert "chore: dont auto install isbot as that breaks e2e tests"
mcansh Jan 31, 2023
60102e2
chore: add isbot to e2e tests
mcansh Jan 31, 2023
0c42048
chore: add isbot to e2e tests
mcansh Jan 31, 2023
cc79d61
Create heavy-jars-accept.md
mcansh Jan 31, 2023
3dda83b
fix: add isbot
mcansh Jan 31, 2023
d44fb6f
chore: update changeset
mcansh Jan 31, 2023
94df96f
chore: update cloudflare workers entry.server to use streaming
mcansh Jan 31, 2023
c0d82f2
chore: "err" -> "error"; remove "didError"
mcansh Feb 1, 2023
74e48e3
chore: "err" -> "error"; remove "didError"
mcansh Feb 1, 2023
29f1d4b
fix: generating js entry
mcansh Feb 7, 2023
d77d3ad
chore: rename to reveal ✨
mcansh Feb 7, 2023
b832493
fix: make remixRoot the second arg
mcansh Feb 7, 2023
86a5d0f
feat: anticipate other client runtimes
mcansh Feb 7, 2023
41ec8f0
chore: add todo
mcansh Feb 7, 2023
86871d1
test: update for c6f876158a752f22e242de7c80529d836cb1ee4c
mcansh Feb 7, 2023
9d7b523
fixup! feat: anticipate other client runtimes
mcansh Feb 7, 2023
23fd35b
chore: flip if..else for user defined entry files
mcansh Feb 7, 2023
33d797b
fix
mcansh Feb 7, 2023
282ce35
chore(reveal): only support entry.client or entry.server, use flag fo…
mcansh Feb 10, 2023
a7661fc
test: update snapshot, tweak test to use updated name, add js version
mcansh Feb 10, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .changeset/heavy-jars-accept.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
"remix": minor
"@remix-run/dev": minor
---

make `entry.client` and `entry.server` files optional

we'll use a bundled version of each unless you provide your own
2 changes: 2 additions & 0 deletions .eslintignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@
integration/helpers/deno-template
packages/remix-deno
templates/deno

packages/remix-dev/config/defaults
2 changes: 2 additions & 0 deletions integration/cf-compiler-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,10 @@ test.describe("cloudflare compiler", () => {
sideEffects: false,
main: "build/index.js",
dependencies: {
"@remix-run/cloudflare": "0.0.0-local-version",
"@remix-run/cloudflare-workers": "0.0.0-local-version",
"@remix-run/react": "0.0.0-local-version",
isbot: "0.0.0-local-version",
react: "0.0.0-local-version",
"react-dom": "0.0.0-local-version",
"worker-pkg": "0.0.0-local-version",
Expand Down
56 changes: 56 additions & 0 deletions integration/custom-entry-server-test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import { expect, test } from "@playwright/test";

import { PlaywrightFixture } from "./helpers/playwright-fixture";
import type { Fixture, AppFixture } from "./helpers/create-fixture";
import { createAppFixture, createFixture, js } from "./helpers/create-fixture";

let fixture: Fixture;
let appFixture: AppFixture;

test.beforeAll(async () => {
fixture = await createFixture({
files: {
"app/entry.server.jsx": js`
import * as React from "react";
import { RemixServer } from "@remix-run/react";
import { renderToString } from "react-dom/server";

export default function handleRequest(
request,
responseStatusCode,
responseHeaders,
remixContext
) {
let markup = renderToString(
<RemixServer context={remixContext} url={request.url} />
);
responseHeaders.set("Content-Type", "text/html");
responseHeaders.set("x-custom-header", "custom-value");
return new Response('<!doctype html>' + markup, {
headers: responseHeaders,
status: responseStatusCode,
});
}
`,
"app/routes/index.jsx": js`
export default function Index() {
return <h1>Hello World</h1>
}
`,
},
});

appFixture = await createAppFixture(fixture);
});

test.afterAll(() => {
appFixture.close();
});

test("allows user specified entry.server", async ({ page }) => {
let app = new PlaywrightFixture(appFixture, page);
let responses = app.collectResponses((url) => url.pathname === "/");
await app.goto("/");
let header = await responses[0].headerValues("x-custom-header");
expect(header).toEqual(["custom-value"]);
});
1 change: 1 addition & 0 deletions integration/deno-compiler-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ test.beforeAll(async () => {
dependencies: {
"@remix-run/deno": "0.0.0-local-version",
"@remix-run/react": "0.0.0-local-version",
isbot: "0.0.0-local-version",
react: "0.0.0-local-version",
"react-dom": "0.0.0-local-version",
component: "0.0.0-local-version",
Expand Down
1 change: 1 addition & 0 deletions integration/esm-only-warning-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ test.beforeAll(async () => {
"@remix-run/node": "0.0.0-local-version",
"@remix-run/react": "0.0.0-local-version",
"@remix-run/serve": "0.0.0-local-version",
isbot: "0.0.0-local-version",
react: "0.0.0-local-version",
"react-dom": "0.0.0-local-version",
"esm-only-no-exports": "0.0.0-local-version",
Expand Down
4 changes: 0 additions & 4 deletions integration/helpers/cf-template/app/entry.client.tsx

This file was deleted.

21 changes: 0 additions & 21 deletions integration/helpers/cf-template/app/entry.server.tsx

This file was deleted.

1 change: 1 addition & 0 deletions integration/helpers/cf-template/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
"@remix-run/cloudflare": "0.0.0-local-version",
"@remix-run/cloudflare-workers": "0.0.0-local-version",
"@remix-run/react": "0.0.0-local-version",
"isbot": "0.0.0-local-version",
"react": "0.0.0-local-version",
"react-dom": "0.0.0-local-version"
},
Expand Down
2 changes: 2 additions & 0 deletions integration/helpers/cf-template/wrangler.toml
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
name = "remix-cloudflare-workers"
type = "javascript"
compatibility_date = "2022-04-05"
compatibility_flags = ["streams_enable_constructors"]

zone_id = ""
account_id = ""
Expand Down
5 changes: 0 additions & 5 deletions integration/helpers/deno-template/app/entry.client.tsx

This file was deleted.

22 changes: 0 additions & 22 deletions integration/helpers/deno-template/app/entry.server.tsx

This file was deleted.

1 change: 1 addition & 0 deletions integration/helpers/deno-template/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"dependencies": {
"@remix-run/deno": "0.0.0-local-version",
"@remix-run/react": "0.0.0-local-version",
"isbot": "0.0.0-local-version",
"react": "0.0.0-local-version",
"react-dom": "0.0.0-local-version"
},
Expand Down
9 changes: 8 additions & 1 deletion packages/remix-dev/__tests__/cli-test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -182,7 +182,14 @@ describe("remix CLI", () => {

$ remix routes
$ remix routes my-app
$ remix routes --json"
$ remix routes --json

Reveal the used entry point:

$ remix reveal entry.client
$ remix reveal entry.server
$ remix reveal entry.client --no-typescript
$ remix reveal entry.server --no-typescript"
`);
});
});
Expand Down
4 changes: 4 additions & 0 deletions packages/remix-dev/__tests__/fixtures/cloudflare/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/** @type {import('eslint').Linter.Config} */
module.exports = {
extends: ["@remix-run/eslint-config", "@remix-run/eslint-config/node"],
};
7 changes: 7 additions & 0 deletions packages/remix-dev/__tests__/fixtures/cloudflare/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
node_modules

/.cache
/functions/\[\[path\]\].js
/functions/\[\[path\]\].js.map
/public/build
.env
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
16.13.0
22 changes: 22 additions & 0 deletions packages/remix-dev/__tests__/fixtures/cloudflare/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# 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`.
32 changes: 32 additions & 0 deletions packages/remix-dev/__tests__/fixtures/cloudflare/app/root.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import type { MetaFunction } from "@remix-run/cloudflare";
import {
Links,
LiveReload,
Meta,
Outlet,
Scripts,
ScrollRestoration,
} from "@remix-run/react";

export const meta: MetaFunction = () => ({
charset: "utf-8",
title: "New Remix App",
viewport: "width=device-width,initial-scale=1",
});

export default function App() {
return (
<html lang="en">
<head>
<Meta />
<Links />
</head>
<body>
<Outlet />
<ScrollRestoration />
<Scripts />
<LiveReload />
</body>
</html>
);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
export default function Index() {
return (
<div style={{ fontFamily: "system-ui, sans-serif", lineHeight: "1.4" }}>
<h1>Welcome to Remix</h1>
<ul>
<li>
<a
target="_blank"
href="https://remix.run/tutorials/blog"
rel="noreferrer"
>
15m Quickstart Blog Tutorial
</a>
</li>
<li>
<a
target="_blank"
href="https://remix.run/tutorials/jokes"
rel="noreferrer"
>
Deep Dive Jokes App Tutorial
</a>
</li>
<li>
<a target="_blank" href="https://remix.run/docs" rel="noreferrer">
Remix Docs
</a>
</li>
</ul>
</div>
);
}
36 changes: 36 additions & 0 deletions packages/remix-dev/__tests__/fixtures/cloudflare/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"private": true,
"sideEffects": false,
"scripts": {
"build": "remix build",
"dev:remix": "remix watch",
"dev:wrangler": "cross-env NODE_ENV=development npm run wrangler",
"dev": "remix build && run-p \"dev:*\"",
"start": "cross-env NODE_ENV=production npm run wrangler",
"typecheck": "tsc",
"wrangler": "wrangler pages dev ./public"
},
"dependencies": {
"@remix-run/cloudflare": "^1.12.0",
"@remix-run/cloudflare-pages": "^1.12.0",
"@remix-run/react": "^1.12.0",
"cross-env": "^7.0.3",
"isbot": "^3.6.5",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@cloudflare/workers-types": "^3.18.0",
"@remix-run/dev": "^1.12.0",
"@remix-run/eslint-config": "^1.12.0",
"@types/react": "^18.0.25",
"@types/react-dom": "^18.0.8",
"eslint": "^8.27.0",
"npm-run-all": "^4.1.5",
"typescript": "^4.8.4",
"wrangler": "^2.2.1"
},
"engines": {
"node": ">=16.13"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/build/*
Cache-Control: public, max-age=31536000, s-maxage=31536000
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"version": 1,
"include": ["/*"],
"exclude": ["/build/*"]
}
Binary file not shown.
11 changes: 11 additions & 0 deletions packages/remix-dev/__tests__/fixtures/cloudflare/remix.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/** @type {import('@remix-run/dev').AppConfig} */
module.exports = {
serverBuildTarget: "cloudflare-pages",
server: "./server.js",
devServerBroadcastDelay: 1000,
ignoredRouteFiles: ["**/.*"],
// appDirectory: "app",
// assetsBuildDirectory: "public/build",
// serverBuildPath: "functions/[[path]].js",
// publicPath: "/build/",
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
/// <reference types="@remix-run/dev" />
/// <reference types="@remix-run/cloudflare" />
/// <reference types="@cloudflare/workers-types" />
12 changes: 12 additions & 0 deletions packages/remix-dev/__tests__/fixtures/cloudflare/server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { createPagesFunctionHandler } from "@remix-run/cloudflare-pages";
import * as build from "@remix-run/dev/server-build";

const handleRequest = createPagesFunctionHandler({
build,
mode: process.env.NODE_ENV,
getLoadContext: (context) => context.env,
});

export function onRequest(context) {
return handleRequest(context);
}
22 changes: 22 additions & 0 deletions packages/remix-dev/__tests__/fixtures/cloudflare/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"include": ["remix.env.d.ts", "**/*.ts", "**/*.tsx"],
"compilerOptions": {
"lib": ["DOM", "DOM.Iterable", "ES2019"],
"isolatedModules": true,
"esModuleInterop": true,
"jsx": "react-jsx",
"moduleResolution": "node",
"resolveJsonModule": true,
"target": "ES2019",
"strict": true,
"allowJs": true,
"forceConsistentCasingInFileNames": true,
"baseUrl": ".",
"paths": {
"~/*": ["./app/*"]
},

// Remix takes care of building everything in `remix build`.
"noEmit": true
}
}
Loading