Restore SSG serve logic (#4111)

* Build ssg routes when both the client and server builds are finished

* Fix default server fn encoding

* fix tokio console

* fix ssg

* add prerendering message

* render under the same environment variables as normal

* fix check

* use should_bundle_to_asset

* enable ssg playwright test

* fix clippy
This commit is contained in:
Evan Almloff authored and GitHub committed 2025-06-23 13:35:46 -07:00
1 parent f610c6b8c1
commit fdd77d79c1
17 files changed
+357 -236

No files matched your search

@@ -1,51 +1,50 @@
// TODO: ssg is disabled in the CLI server
// // @ts-check
// const { test, expect } = require("@playwright/test");
// @ts-check
const { test, expect } = require("@playwright/test");
// test("nested suspense resolves", async ({ page }) => {
// // Wait for the dev server to reload
// await page.goto("http://localhost:6060");
// // Then wait for the page to start loading
// await page.goto("http://localhost:6060", { waitUntil: "commit" });
test("nested suspense resolves", async ({ page }) => {
// Wait for the dev server to reload
await page.goto("http://localhost:6060");
// Then wait for the page to start loading
await page.goto("http://localhost:6060", { waitUntil: "commit" });
// // Expect the page to contain the suspense result from the server
// const mainMessageTitle = page.locator("#title-0");
// await expect(mainMessageTitle).toContainText("The robot says hello world");
// const mainMessageBody = page.locator("#body-0");
// await expect(mainMessageBody).toContainText(
// "The robot becomes sentient and says hello world"
// );
// Expect the page to contain the suspense result from the server
const mainMessageTitle = page.locator("#title-0");
await expect(mainMessageTitle).toContainText("The robot says hello world");
const mainMessageBody = page.locator("#body-0");
await expect(mainMessageBody).toContainText(
"The robot becomes sentient and says hello world"
);
// // And expect the title to have resolved on the client
// await expect(page).toHaveTitle("The robot says hello world");
// And expect the title to have resolved on the client
await expect(page).toHaveTitle("The robot says hello world");
// // Nested suspense should be resolved
// const nestedMessageTitle1 = page.locator("#title-1");
// await expect(nestedMessageTitle1).toContainText("The world says hello back");
// const nestedMessageBody1 = page.locator("#body-1");
// await expect(nestedMessageBody1).toContainText(
// "In a stunning turn of events, the world collectively unites and says hello back"
// );
// Nested suspense should be resolved
const nestedMessageTitle1 = page.locator("#title-1");
await expect(nestedMessageTitle1).toContainText("The world says hello back");
const nestedMessageBody1 = page.locator("#body-1");
await expect(nestedMessageBody1).toContainText(
"In a stunning turn of events, the world collectively unites and says hello back"
);
// const nestedMessageDiv2 = page.locator("#children-2");
// await expect(nestedMessageDiv2).toBeEmpty();
// const nestedMessageTitle2 = page.locator("#title-2");
// await expect(nestedMessageTitle2).toContainText("Goodbye Robot");
// const nestedMessageBody2 = page.locator("#body-2");
// await expect(nestedMessageBody2).toContainText("The robot says goodbye");
const nestedMessageDiv2 = page.locator("#children-2");
await expect(nestedMessageDiv2).toBeEmpty();
const nestedMessageTitle2 = page.locator("#title-2");
await expect(nestedMessageTitle2).toContainText("Goodbye Robot");
const nestedMessageBody2 = page.locator("#body-2");
await expect(nestedMessageBody2).toContainText("The robot says goodbye");
// const nestedMessageDiv3 = page.locator("#children-3");
// await expect(nestedMessageDiv3).toBeEmpty();
// const nestedMessageTitle3 = page.locator("#title-3");
// await expect(nestedMessageTitle3).toContainText("Goodbye World");
// const nestedMessageBody3 = page.locator("#body-3");
// await expect(nestedMessageBody3).toContainText("The world says goodbye");
const nestedMessageDiv3 = page.locator("#children-3");
await expect(nestedMessageDiv3).toBeEmpty();
const nestedMessageTitle3 = page.locator("#title-3");
await expect(nestedMessageTitle3).toContainText("Goodbye World");
const nestedMessageBody3 = page.locator("#body-3");
await expect(nestedMessageBody3).toContainText("The world says goodbye");
// // Deeply nested suspense should be resolved
// const nestedMessageDiv4 = page.locator("#children-4");
// await expect(nestedMessageDiv4).toBeEmpty();
// const nestedMessageTitle4 = page.locator("#title-4");
// await expect(nestedMessageTitle4).toContainText("Hello World");
// const nestedMessageBody4 = page.locator("#body-4");
// await expect(nestedMessageBody4).toContainText("The world says hello again");
// });
// Deeply nested suspense should be resolved
const nestedMessageDiv4 = page.locator("#children-4");
await expect(nestedMessageDiv4).toBeEmpty();
const nestedMessageTitle4 = page.locator("#title-4");
await expect(nestedMessageTitle4).toContainText("Hello World");
const nestedMessageBody4 = page.locator("#body-4");
await expect(nestedMessageBody4).toContainText("The world says hello again");
});
+9 -10
View File
@@ -147,16 +147,15 @@ module.exports = defineConfig({
reuseExistingServer: !process.env.CI,
stdout: "pipe",
},
// currently disabled - we want ssg to be a "bundle" feature, not a serve feature.
// {
// cwd: path.join(process.cwd(), "nested-suspense"),
// command:
// 'cargo run --package dioxus-cli --release -- serve --bin nested-suspense-ssg --force-sequential --platform web --ssg --addr "127.0.0.1" --port 6060',
// port: 6060,
// timeout: 50 * 60 * 1000,
// reuseExistingServer: !process.env.CI,
// stdout: "pipe",
// },
{
cwd: path.join(process.cwd(), "nested-suspense"),
command:
'cargo run --package dioxus-cli --release -- serve --bin nested-suspense-ssg --force-sequential --platform web --ssg --addr "127.0.0.1" --port 6060',
port: 6060,
timeout: 50 * 60 * 1000,
reuseExistingServer: !process.env.CI,
stdout: "pipe",
},
{
cwd: path.join(process.cwd(), "cli-optimization"),
// Remove the cache folder for the cli-optimization build to force a full cache reset