From 4f5e266134e5dd8a04854db86ba5c4ee4d707587 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Fri, 2 Sep 2022 09:35:54 -0400 Subject: [PATCH] fix server manifest generation (#6507) * fix server manifest generation * ok think i fixed it * oops --- .changeset/fresh-brooms-relate.md | 5 ++++ .../kit/src/core/generate_manifest/index.js | 28 ++++++++++++++----- 2 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 .changeset/fresh-brooms-relate.md diff --git a/.changeset/fresh-brooms-relate.md b/.changeset/fresh-brooms-relate.md new file mode 100644 index 000000000000..0724963fe56f --- /dev/null +++ b/.changeset/fresh-brooms-relate.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Fix server manifest generation diff --git a/packages/kit/src/core/generate_manifest/index.js b/packages/kit/src/core/generate_manifest/index.js index 8f4529cb93aa..d0e35d59fb48 100644 --- a/packages/kit/src/core/generate_manifest/index.js +++ b/packages/kit/src/core/generate_manifest/index.js @@ -60,13 +60,13 @@ export function generate_manifest({ build_data, relative_path, routes, format = if (!route.page && !route.endpoint) return; return `{ - id: ${s(route.id)}, - pattern: ${route.pattern}, - names: ${s(route.names)}, - types: ${s(route.types)}, - page: ${s(route.page)}, - endpoint: ${route.endpoint ? loader(`${relative_path}/${build_data.server.vite_manifest[route.endpoint.file].file}`) : 'null'} - }`; + id: ${s(route.id)}, + pattern: ${route.pattern}, + names: ${s(route.names)}, + types: ${s(route.types)}, + page: ${route.page ? `{ layouts: ${get_nodes(route.page.layouts)}, errors: ${get_nodes(route.page.errors)}, leaf: ${route.page.leaf} }` : 'null'}, + endpoint: ${route.endpoint ? loader(`${relative_path}/${build_data.server.vite_manifest[route.endpoint.file].file}`) : 'null'} + }`; }).filter(Boolean).join(',\n\t\t\t\t')} ], matchers: async () => { @@ -76,3 +76,17 @@ export function generate_manifest({ build_data, relative_path, routes, format = } }`.replace(/^\t/gm, ''); } + +/** @param {Array} indexes */ +function get_nodes(indexes) { + let string = indexes.map((n) => n ?? '').join(','); + + if (indexes.at(-1) === undefined) { + // since JavaScript ignores trailing commas, we need to insert a dummy + // comma so that the array has the correct length if the last item + // is undefined + string += ','; + } + + return `[${string}]`; +}