From aa3a0a01cfe45a997c7339b05cab3fac07b1dc33 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 30 Aug 2023 11:30:04 +0100 Subject: [PATCH 1/7] feat: allow disabling rendering HTML in subfolders --- src/options.ts | 4 +++- src/prerender.ts | 5 ++++- src/types/nitro.ts | 6 ++++++ 3 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/options.ts b/src/options.ts index 585d3ffba7..5c83cfe38c 100644 --- a/src/options.ts +++ b/src/options.ts @@ -48,7 +48,9 @@ const NitroDefaults: NitroConfig = { }, // Features - experimental: {}, + experimental: { + prerenderIndexHTML: true, + }, future: {}, storage: {}, devStorage: {}, diff --git a/src/prerender.ts b/src/prerender.ts index a800ccc636..d7c71160e0 100644 --- a/src/prerender.ts +++ b/src/prerender.ts @@ -214,8 +214,11 @@ export async function prerender(nitro: Nitro) { const isImplicitHTML = !route.endsWith(".html") && contentType.includes("html"); const routeWithIndex = route.endsWith("/") ? route + "index" : route; + const htmlPath = route.endsWith("/") || nitro.options.experimental.prerenderIndexHTML + ? joinURL(route, "index.html") + : route + ".html"; _route.fileName = withoutBase( - isImplicitHTML ? joinURL(route, "index.html") : routeWithIndex, + isImplicitHTML ? htmlPath : routeWithIndex, nitro.options.baseURL ); // Allow overriding content-type in `prerender:generate` hook diff --git a/src/types/nitro.ts b/src/types/nitro.ts index 6055490476..bde99df52b 100644 --- a/src/types/nitro.ts +++ b/src/types/nitro.ts @@ -234,6 +234,12 @@ export interface NitroOptions extends PresetOptions { /** @experimental Requires `experimental.wasm` to be effective */ wasm?: WasmOptions; experimental?: { + /** + * Prerender HTML routes within subfolders (`/test` would produce `/test/index.html`) + * + * @default true + */ + prerenderIndexHTML?: boolean; legacyExternals?: boolean; openAPI?: boolean; /** From 60c3d5f1b7a2d5f75e19fda7c5bd5e7d81571037 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 30 Aug 2023 11:30:18 +0100 Subject: [PATCH 2/7] fix: disable by default for vercel/cloudflare pages --- src/presets/cloudflare-pages.ts | 3 +++ src/presets/vercel.ts | 9 +++++++++ 2 files changed, 12 insertions(+) diff --git a/src/presets/cloudflare-pages.ts b/src/presets/cloudflare-pages.ts index 3ae3f00140..04fa3dd3b5 100644 --- a/src/presets/cloudflare-pages.ts +++ b/src/presets/cloudflare-pages.ts @@ -18,6 +18,9 @@ export const cloudflarePages = defineNitroPreset({ publicDir: "{{ output.dir }}", serverDir: "{{ output.dir }}", }, + experimental: { + prerenderIndexHTML: false, + }, alias: { // Hotfix: Cloudflare appends /index.html if mime is not found and things like ico are not in standard lite.js! // https://github.com/unjs/nitro/pull/933 diff --git a/src/presets/vercel.ts b/src/presets/vercel.ts index 176875025b..2754c1b7a8 100644 --- a/src/presets/vercel.ts +++ b/src/presets/vercel.ts @@ -24,6 +24,9 @@ export const vercel = defineNitroPreset({ deploy: "", preview: "", }, + experimental: { + prerenderIndexHTML: false, + }, hooks: { "rollup:before": (nitro: Nitro) => { deprecateSWR(nitro); @@ -102,6 +105,9 @@ export const vercelEdge = defineNitroPreset({ process: undefined, }, }, + experimental: { + prerenderIndexHTML: false, + }, hooks: { "rollup:before": (nitro: Nitro) => { deprecateSWR(nitro); @@ -137,6 +143,9 @@ export const vercelStatic = defineNitroPreset({ commands: { preview: "npx serve ./static", }, + experimental: { + prerenderIndexHTML: false, + }, hooks: { "rollup:before": (nitro: Nitro) => { deprecateSWR(nitro); From b28b27edb0258b02bb50c9bc2783d4562bd8819c Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 30 Aug 2023 11:42:36 +0100 Subject: [PATCH 3/7] style: lint --- src/prerender.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/prerender.ts b/src/prerender.ts index d7c71160e0..8d7a77b184 100644 --- a/src/prerender.ts +++ b/src/prerender.ts @@ -214,9 +214,10 @@ export async function prerender(nitro: Nitro) { const isImplicitHTML = !route.endsWith(".html") && contentType.includes("html"); const routeWithIndex = route.endsWith("/") ? route + "index" : route; - const htmlPath = route.endsWith("/") || nitro.options.experimental.prerenderIndexHTML - ? joinURL(route, "index.html") - : route + ".html"; + const htmlPath = + route.endsWith("/") || nitro.options.experimental.prerenderIndexHTML + ? joinURL(route, "index.html") + : route + ".html"; _route.fileName = withoutBase( isImplicitHTML ? htmlPath : routeWithIndex, nitro.options.baseURL From 3de44f729ef886eeb41b64bf490fc3e2f80b43c2 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 30 Aug 2023 11:43:11 +0100 Subject: [PATCH 4/7] test: update snapshots --- test/presets/cloudflare-pages.test.ts | 8 ++++---- test/presets/vercel.test.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/presets/cloudflare-pages.test.ts b/test/presets/cloudflare-pages.test.ts index 52b844f1bf..48fce87859 100644 --- a/test/presets/cloudflare-pages.test.ts +++ b/test/presets/cloudflare-pages.test.ts @@ -53,11 +53,11 @@ describe("nitro:preset:cloudflare-pages", async () => { "/build/*", "/favicon.ico", "/icon.png", + "/prerender.html", + "/prerender.html.br", + "/prerender.html.gz", "/api/hello", - "/prerender/index.html", - "/prerender/index.html.br", - "/prerender/index.html.gz", - "/api/hey/index.html", + "/api/hey.html", "/api/param/foo.json", "/api/param/hidden", "/api/param/prerender1", diff --git a/test/presets/vercel.test.ts b/test/presets/vercel.test.ts index 8a78cb8f99..7dec79d156 100644 --- a/test/presets/vercel.test.ts +++ b/test/presets/vercel.test.ts @@ -25,10 +25,10 @@ describe("nitro:preset:vercel", async () => { expect(config).toMatchInlineSnapshot(` { "overrides": { - "api/hey/index.html": { + "api/hey.html": { "path": "api/hey", }, - "prerender/index.html": { + "prerender.html": { "path": "prerender", }, }, From e9540fcb0ad23e64e02425a264bdc9fdf89ac8f3 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 30 Aug 2023 11:51:19 +0100 Subject: [PATCH 5/7] Revert "test: update snapshots" This reverts commit 3de44f729ef886eeb41b64bf490fc3e2f80b43c2. --- test/presets/cloudflare-pages.test.ts | 8 ++++---- test/presets/vercel.test.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/test/presets/cloudflare-pages.test.ts b/test/presets/cloudflare-pages.test.ts index 48fce87859..52b844f1bf 100644 --- a/test/presets/cloudflare-pages.test.ts +++ b/test/presets/cloudflare-pages.test.ts @@ -53,11 +53,11 @@ describe("nitro:preset:cloudflare-pages", async () => { "/build/*", "/favicon.ico", "/icon.png", - "/prerender.html", - "/prerender.html.br", - "/prerender.html.gz", "/api/hello", - "/api/hey.html", + "/prerender/index.html", + "/prerender/index.html.br", + "/prerender/index.html.gz", + "/api/hey/index.html", "/api/param/foo.json", "/api/param/hidden", "/api/param/prerender1", diff --git a/test/presets/vercel.test.ts b/test/presets/vercel.test.ts index 7dec79d156..8a78cb8f99 100644 --- a/test/presets/vercel.test.ts +++ b/test/presets/vercel.test.ts @@ -25,10 +25,10 @@ describe("nitro:preset:vercel", async () => { expect(config).toMatchInlineSnapshot(` { "overrides": { - "api/hey.html": { + "api/hey/index.html": { "path": "api/hey", }, - "prerender.html": { + "prerender/index.html": { "path": "prerender", }, }, From f54a0d0f8b91df4deba8b4c20d87235f30cc1c60 Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 30 Aug 2023 11:51:25 +0100 Subject: [PATCH 6/7] Revert "fix: disable by default for vercel/cloudflare pages" This reverts commit 60c3d5f1b7a2d5f75e19fda7c5bd5e7d81571037. --- src/presets/cloudflare-pages.ts | 3 --- src/presets/vercel.ts | 9 --------- 2 files changed, 12 deletions(-) diff --git a/src/presets/cloudflare-pages.ts b/src/presets/cloudflare-pages.ts index 04fa3dd3b5..3ae3f00140 100644 --- a/src/presets/cloudflare-pages.ts +++ b/src/presets/cloudflare-pages.ts @@ -18,9 +18,6 @@ export const cloudflarePages = defineNitroPreset({ publicDir: "{{ output.dir }}", serverDir: "{{ output.dir }}", }, - experimental: { - prerenderIndexHTML: false, - }, alias: { // Hotfix: Cloudflare appends /index.html if mime is not found and things like ico are not in standard lite.js! // https://github.com/unjs/nitro/pull/933 diff --git a/src/presets/vercel.ts b/src/presets/vercel.ts index 2754c1b7a8..176875025b 100644 --- a/src/presets/vercel.ts +++ b/src/presets/vercel.ts @@ -24,9 +24,6 @@ export const vercel = defineNitroPreset({ deploy: "", preview: "", }, - experimental: { - prerenderIndexHTML: false, - }, hooks: { "rollup:before": (nitro: Nitro) => { deprecateSWR(nitro); @@ -105,9 +102,6 @@ export const vercelEdge = defineNitroPreset({ process: undefined, }, }, - experimental: { - prerenderIndexHTML: false, - }, hooks: { "rollup:before": (nitro: Nitro) => { deprecateSWR(nitro); @@ -143,9 +137,6 @@ export const vercelStatic = defineNitroPreset({ commands: { preview: "npx serve ./static", }, - experimental: { - prerenderIndexHTML: false, - }, hooks: { "rollup:before": (nitro: Nitro) => { deprecateSWR(nitro); From b35261836a1a6ac773fb9fc51d61784797187d3f Mon Sep 17 00:00:00 2001 From: Daniel Roe Date: Wed, 30 Aug 2023 16:50:41 +0100 Subject: [PATCH 7/7] refactor: move to `prerender.autoSubfolderIndex` --- src/options.ts | 5 ++--- src/prerender.ts | 2 +- src/types/nitro.ts | 10 ++++------ 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/src/options.ts b/src/options.ts index 5c83cfe38c..bd76b5bcd2 100644 --- a/src/options.ts +++ b/src/options.ts @@ -48,9 +48,7 @@ const NitroDefaults: NitroConfig = { }, // Features - experimental: { - prerenderIndexHTML: true, - }, + experimental: {}, future: {}, storage: {}, devStorage: {}, @@ -81,6 +79,7 @@ const NitroDefaults: NitroConfig = { errorHandler: "#internal/nitro/error", routeRules: {}, prerender: { + autoSubfolderIndex: true, concurrency: 1, interval: 0, failOnError: false, diff --git a/src/prerender.ts b/src/prerender.ts index 8d7a77b184..9bb7ca293d 100644 --- a/src/prerender.ts +++ b/src/prerender.ts @@ -215,7 +215,7 @@ export async function prerender(nitro: Nitro) { !route.endsWith(".html") && contentType.includes("html"); const routeWithIndex = route.endsWith("/") ? route + "index" : route; const htmlPath = - route.endsWith("/") || nitro.options.experimental.prerenderIndexHTML + route.endsWith("/") || nitro.options.prerender.autoSubfolderIndex ? joinURL(route, "index.html") : route + ".html"; _route.fileName = withoutBase( diff --git a/src/types/nitro.ts b/src/types/nitro.ts index bde99df52b..054388e97a 100644 --- a/src/types/nitro.ts +++ b/src/types/nitro.ts @@ -234,12 +234,6 @@ export interface NitroOptions extends PresetOptions { /** @experimental Requires `experimental.wasm` to be effective */ wasm?: WasmOptions; experimental?: { - /** - * Prerender HTML routes within subfolders (`/test` would produce `/test/index.html`) - * - * @default true - */ - prerenderIndexHTML?: boolean; legacyExternals?: boolean; openAPI?: boolean; /** @@ -289,6 +283,10 @@ export interface NitroOptions extends PresetOptions { errorHandler: string; devErrorHandler: NitroErrorHandler; prerender: { + /** + * Prerender HTML routes within subfolders (`/test` would produce `/test/index.html`) + */ + autoSubfolderIndex: boolean; concurrency: number; interval: number; crawlLinks: boolean;