From 01e78b6b199ab97b26bede449547afbe7dd01281 Mon Sep 17 00:00:00 2001 From: John Simons Date: Sun, 4 Jul 2021 15:24:27 -0700 Subject: [PATCH] Adding a routes.json manifest file --- packages/kit/src/core/create_app/index.js | 24 ++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/packages/kit/src/core/create_app/index.js b/packages/kit/src/core/create_app/index.js index 299ea247d056..5bf9ebf06f56 100644 --- a/packages/kit/src/core/create_app/index.js +++ b/packages/kit/src/core/create_app/index.js @@ -33,7 +33,7 @@ export function create_app({ manifest_data, output, cwd = process.cwd() }) { const base = path.relative(cwd, dir); write_if_changed(`${dir}/manifest.js`, generate_client_manifest(manifest_data, base)); - + write_if_changed(`${dir}/routes.json`, generate_route_manifest(manifest_data)); write_if_changed(`${dir}/root.svelte`, generate_app(manifest_data, base)); } @@ -107,6 +107,28 @@ function generate_client_manifest(manifest_data, base) { `); } +/** + * Information about all page routes, in a language-agnostic JSON file. + * + * @param {ManifestData} manifest_data + * @returns {string} + */ +function generate_route_manifest(manifest_data) { + const page_routes = manifest_data.routes + .map((route) => { + if (route.type === 'page') { + const pattern = route.pattern.toString(); + return { + pattern: pattern.slice(1, pattern.length - 1), // strip delimiters + params: route.params, + componentPath: route.a[route.a.length - 1] + }; + } + }) + .filter((route) => !!route); + return JSON.stringify(page_routes, undefined, 2); +} + /** * @param {ManifestData} manifest_data * @param {string} base