@@ -6,45 +6,70 @@ import { type Files, test, viteConfig } from "./helpers/vite.js";
66const tsx = dedent ;
77const css = dedent ;
88
9- test . describe ( "vite-plugin-cloudflare" , ( ) => {
9+ function defineFiles ( {
10+ reversePlugins = false ,
11+ } : { reversePlugins ?: boolean } = { } ) : Files {
1012 const files : Files = async ( { port } ) => ( {
1113 "vite.config.ts" : tsx `
12- import { defineConfig } from "vite" ;
13- impor t { cloudflare } from "@cloudflare/vite-plugin" ;
14- impor t { reactRouter } from "@react-router/dev/vite" ;
15-
16- expor t default defineConfig({
17- ${ await viteConfig . server ( { port } ) }
18- plugins : [
19- cloudflare({ viteEnvironment : { name : "ssr" } }),
20- reactRouter(),
21- ] ,
22- });
23- ` ,
14+ import { defineConfig } from "vite" ;
15+ impor t { cloudflare } from "@cloudflare/vite-plugin" ;
16+ impor t { reactRouter } from "@react-router/dev/vite" ;
17+
18+ expor t default defineConfig({
19+ ${ await viteConfig . server ( { port } ) }
20+ plugins : [
21+ cloudflare({ viteEnvironment : { name : "ssr" } }),
22+ reactRouter(),
23+ ] ${ reversePlugins ? ".reverse()" : "" } ,
24+ });
25+ ` ,
2426 "app/routes/env.tsx" : tsx `
25- impor t type { Route } from "./+types/env" ;
26- expor t function loader({ context }: Route .LoaderArgs ) {
27- return { message : context.cloudflare.env.VALUE_FROM_CLOUDFLARE };
28- }
29- export default function EnvRoute ({ loaderData }: Route .RouteComponentProps ) {
30- return <div data- loader- message> {loaderData .message }</ div> ;
31- }
32- ` ,
27+ impor t type { Route } from "./+types/env" ;
28+ expor t function loader({ context }: Route .LoaderArgs ) {
29+ return { message : context.cloudflare.env.VALUE_FROM_CLOUDFLARE };
30+ }
31+ export default function EnvRoute ({ loaderData }: Route .RouteComponentProps ) {
32+ return <div data- loader- message> {loaderData .message }</ div> ;
33+ }
34+ ` ,
3335 "app/routes/css-side-effect/route.tsx" : tsx `
34- import "./styles.css" ;
35-
36- expor t default function CssSideEffectRoute() {
37- return <div className= "css-side-effect" data-css-side-effect > CSS Side Effect </ div> ;
38- }
39- ` ,
36+ import "./styles.css" ;
37+
38+ expor t default function CssSideEffectRoute() {
39+ return <div className= "css-side-effect" data-css-side-effect > CSS Side Effect </ div> ;
40+ }
41+ ` ,
4042 "app/routes/css-side-effect/styles.css" : css `
4143 .css-side-effect {
4244 padding : 20px ;
4345 }
4446 ` ,
4547 } ) ;
48+ return files ;
49+ }
4650
51+ test . describe ( "vite-plugin-cloudflare" , ( ) => {
4752 test ( "handles Cloudflare env" , async ( { dev, page } ) => {
53+ const files = defineFiles ( ) ;
54+ const { port } = await dev ( files , "vite-plugin-cloudflare-template" ) ;
55+
56+ await page . goto ( `http://localhost:${ port } /env` , {
57+ waitUntil : "networkidle" ,
58+ } ) ;
59+
60+ // Ensure no errors on page load
61+ expect ( page . errors ) . toEqual ( [ ] ) ;
62+
63+ await expect ( page . locator ( "[data-loader-message]" ) ) . toHaveText (
64+ "Hello from Cloudflare"
65+ ) ;
66+ } ) ;
67+
68+ test ( "handles Cloudflare env with plugin order reversed" , async ( {
69+ dev,
70+ page,
71+ } ) => {
72+ const files = defineFiles ( { reversePlugins : true } ) ;
4873 const { port } = await dev ( files , "vite-plugin-cloudflare-template" ) ;
4974
5075 await page . goto ( `http://localhost:${ port } /env` , {
@@ -66,6 +91,7 @@ test.describe("vite-plugin-cloudflare", () => {
6691 dev,
6792 page,
6893 } ) => {
94+ const files = defineFiles ( ) ;
6995 const { port } = await dev ( files , "vite-plugin-cloudflare-template" ) ;
7096
7197 await page . goto ( `http://localhost:${ port } /css-side-effect` , {
@@ -78,4 +104,21 @@ test.describe("vite-plugin-cloudflare", () => {
78104 ) ;
79105 } ) ;
80106 } ) ;
107+
108+ test ( "handles CSS side effects during SSR in dev with plugin order reversed" , async ( {
109+ dev,
110+ page,
111+ } ) => {
112+ const files = defineFiles ( { reversePlugins : true } ) ;
113+ const { port } = await dev ( files , "vite-plugin-cloudflare-template" ) ;
114+
115+ await page . goto ( `http://localhost:${ port } /css-side-effect` , {
116+ waitUntil : "networkidle" ,
117+ } ) ;
118+
119+ await expect ( page . locator ( "[data-css-side-effect]" ) ) . toHaveCSS (
120+ "padding" ,
121+ "20px"
122+ ) ;
123+ } ) ;
81124} ) ;
0 commit comments