import { detectPackageManager } from "../../../src/helpers/packageManagers"; import { CLOUDFLARE_API_TOKEN, frameworkToTestFilter, isExperimental, keys, LONG_TIMEOUT, } from "../../helpers/constants"; import type { FrameworkTestConfig } from "../../helpers/framework-helpers"; export type NamedFrameworkTestConfig = FrameworkTestConfig & { name: string; }; /** * Gets the list of non-experimental framework test configurations. */ function getFrameworkTestConfig(pm: string): NamedFrameworkTestConfig[] { return [ { name: "react-router", unsupportedOSs: ["win32"], testCommitMessage: true, timeout: LONG_TIMEOUT, verifyDeploy: { route: "/", expectedText: "Hello from Cloudflare", }, verifyPreview: { route: "/", expectedText: "Hello from Cloudflare", previewArgs: ["--host=127.0.0.1"], }, verifyDev: { route: "/", expectedText: "Hello from Cloudflare", devArgs: ["--host=127.0.0.1"], configChanges: { vars: { VALUE_FROM_CLOUDFLARE: "Hello React Router", }, expectedText: "Hello React Router", }, }, nodeCompat: false, flags: ["--no-install", "--no-git-init"], }, { name: "astro:pages", argv: ["--platform", "pages"], quarantine: true, testCommitMessage: true, unsupportedOSs: ["win32"], verifyDeploy: { route: "/", expectedText: "Hello, Astronaut!", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/test", expectedText: "C3_TEST", }, nodeCompat: true, flags: ["--skip-houston", "--template", "blog", "--typescript", "strict"], }, { name: "astro:workers", argv: ["--platform", "workers"], testCommitMessage: true, timeout: LONG_TIMEOUT, unsupportedOSs: ["win32"], verifyDeploy: { route: "/", expectedText: "Hello, Astronaut!", }, verifyDev: { route: "/", expectedText: "Hello, Astronaut!", devArgs: ["--host=127.0.0.1"], }, verifyPreview: { previewArgs: ["--host=127.0.0.1"], route: "/test", expectedText: "C3_TEST", }, nodeCompat: false, flags: ["--skip-houston", "--template", "blog", "--typescript", "strict"], }, { name: "docusaurus:pages", argv: ["--platform", "pages"], unsupportedPms: ["bun"], // `create-docusaurus` installs internally (no `--no-install`), // tripping `ERR_PNPM_IGNORED_BUILDS` on pnpm 11 before C3's // recovery path can engage. unsupportedPmRanges: { pnpm: ">=11.0.0" }, testCommitMessage: true, unsupportedOSs: ["win32"], timeout: LONG_TIMEOUT, verifyDeploy: { route: "/", expectedText: "Dinosaurs are cool", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/", expectedText: "Dinosaurs are cool", }, nodeCompat: false, flags: [`--package-manager`, pm], promptHandlers: [ // { // matcher: /Which platform do you want to deploy to\?/, // input: [keys.enter], // }, { matcher: /Which language do you want to use\?/, input: [keys.enter], }, ], }, { name: "docusaurus:workers", argv: ["--platform", "workers"], unsupportedPms: ["bun"], // See note on docusaurus:pages above. unsupportedPmRanges: { pnpm: ">=11.0.0" }, testCommitMessage: true, unsupportedOSs: ["win32"], timeout: LONG_TIMEOUT, verifyDeploy: { route: "/", expectedText: "Dinosaurs are cool", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/", expectedText: "Dinosaurs are cool", }, nodeCompat: false, flags: [`--package-manager`, pm], promptHandlers: [ { matcher: /Which language do you want to use\?/, input: [keys.enter], }, ], }, { name: "analog", testCommitMessage: true, timeout: LONG_TIMEOUT, unsupportedOSs: ["win32"], verifyDeploy: { route: "/", expectedText: "The fullstack Angular meta-framework", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/api/v1/hello", expectedText: "Hello World", }, nodeCompat: false, flags: ["--skipTailwind"], }, { name: "angular:pages", argv: ["--platform", "pages"], testCommitMessage: true, timeout: LONG_TIMEOUT, unsupportedOSs: ["win32"], unsupportedPms: ["bun"], verifyDeploy: { route: "/", expectedText: "Congratulations! Your app is running.", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/", expectedText: "Congratulations! Your app is running.", }, nodeCompat: false, flags: ["--style", "sass"], }, { name: "angular:workers", argv: ["--platform", "workers"], testCommitMessage: true, timeout: LONG_TIMEOUT, unsupportedOSs: ["win32"], unsupportedPms: ["bun"], verifyDeploy: { route: "/", expectedText: "Congratulations! Your app is running.", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/", expectedText: "Congratulations! Your app is running.", }, nodeCompat: false, flags: ["--style", "sass"], }, { name: "gatsby:pages", argv: ["--platform", "pages"], unsupportedPms: ["bun", "pnpm", "yarn"], promptHandlers: [ { matcher: /Would you like to use a template\?/, input: ["n"], }, ], testCommitMessage: true, timeout: LONG_TIMEOUT, verifyDeploy: { route: "/", expectedText: "Gatsby!", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/", expectedText: "Gatsby!", }, nodeCompat: false, }, { name: "gatsby:workers", argv: ["--platform", "workers"], unsupportedPms: ["bun", "pnpm", "yarn"], promptHandlers: [ { matcher: /Would you like to use a template\?/, input: ["n"], }, ], testCommitMessage: true, timeout: LONG_TIMEOUT, verifyDeploy: { route: "/", expectedText: "Gatsby!", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/", expectedText: "Gatsby!", }, nodeCompat: false, }, { name: "hono:pages", argv: ["--platform", "pages"], testCommitMessage: true, unsupportedOSs: ["win32"], // `create-hono --install` runs the install inside the generator, // before C3's recovery path can engage. Fails on pnpm 11. unsupportedPmRanges: { pnpm: ">=11.0.0" }, verifyDeploy: { route: "/", expectedText: "Hello!", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/", expectedText: "Hello!", }, nodeCompat: false, promptHandlers: [ { matcher: /Do you want to install project dependencies\?/, input: [keys.enter], }, ], }, { name: "hono:workers", argv: ["--platform", "workers"], testCommitMessage: true, unsupportedOSs: ["win32"], // See note on hono:pages above. unsupportedPmRanges: { pnpm: ">=11.0.0" }, verifyDeploy: { route: "/message", expectedText: "Hello Hono!", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/message", expectedText: "Hello Hono!", }, nodeCompat: false, promptHandlers: [ { matcher: /Do you want to install project dependencies\?/, input: [keys.enter], }, ], }, { name: "qwik:pages", argv: ["--platform", "pages"], promptHandlers: [ { matcher: /Yes looks good, finish update/, input: [keys.enter], }, ], testCommitMessage: true, unsupportedOSs: ["win32"], unsupportedPms: ["yarn"], verifyDeploy: { route: "/", expectedText: "Welcome to Qwik", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/", expectedText: "Welcome to Qwik", }, nodeCompat: true, }, { name: "qwik:workers", argv: ["--platform", "workers"], promptHandlers: [ { matcher: /Yes looks good, finish update/, input: [keys.enter], }, ], flags: [], testCommitMessage: true, unsupportedOSs: ["win32"], unsupportedPms: ["yarn"], verifyDeploy: { route: "/", expectedText: "Welcome to Qwik", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/", expectedText: "Welcome to Qwik", }, nodeCompat: true, }, { name: "next", timeout: LONG_TIMEOUT, testCommitMessage: true, verifyPreview: { previewArgs: ["--", "--inspector-port=0"], route: "/", expectedText: "Create Next App", }, verifyDeploy: { route: "/", expectedText: "Create Next App", }, nodeCompat: true, unsupportedOSs: ["win32"], }, { name: "nuxt:pages", promptHandlers: [ { matcher: /Would you like to .* install .*modules\?/, input: [keys.enter], }, ], argv: ["--platform", "pages"], testCommitMessage: true, timeout: LONG_TIMEOUT, unsupportedPms: ["yarn"], // Currently nitro requires youch which expects Node 20+, and yarn will fail hard since we run on Node 18 unsupportedOSs: ["win32"], // Nuxt's deps trip `ERR_PNPM_IGNORED_BUILDS` on pnpm 11; the e2e // harness has closed stdin by the time C3's recovery prompt fires // (real-TTY users are unaffected). unsupportedPmRanges: { pnpm: ">=11.0.0" }, verifyDeploy: { route: "/", expectedText: "Welcome to Nuxt!", }, nodeCompat: false, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/test", expectedText: "C3_TEST", }, flags: ["--template", "minimal"], }, { name: "nuxt:workers", promptHandlers: [ { matcher: /Would you like to .* install .*modules\?/, input: [keys.enter], }, ], argv: ["--platform", "workers"], testCommitMessage: true, timeout: LONG_TIMEOUT, unsupportedPms: ["yarn"], // Currently nitro requires youch which expects Node 20+, and yarn will fail hard since we run on Node 18 unsupportedOSs: ["win32"], // See note on nuxt:pages above. unsupportedPmRanges: { pnpm: ">=11.0.0" }, verifyDeploy: { route: "/", expectedText: "Welcome to Nuxt!", }, verifyPreview: { previewArgs: ["--inspector-port=0"], route: "/test", expectedText: "C3_TEST", }, nodeCompat: false, flags: ["--template", "minimal"], }, { name: "react:pages", argv: ["--platform", "pages"], promptHandlers: [ { matcher: /Select a variant:/, input: [keys.enter], }, ], testCommitMessage: true, unsupportedOSs: ["win32"], timeout: LONG_TIMEOUT, verifyDeploy: { route: "/", // Note that this is the text in the static HTML that is returned // This React SPA will change this at runtime but we are only making a fetch request // not actually running the client side JS. // create-vite 8+ changed the