From ecc6f1c634c96032b55a2bb6628020a9a8f40933 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Tue, 31 Jan 2023 21:46:23 +0545 Subject: [PATCH 1/6] fix: output errors if pages fail to compile --- packages/kit/src/exports/vite/dev/index.js | 27 +++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index 0c59327c1c40..ed3990001f5b 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -50,11 +50,36 @@ export async function dev(vite, vite_config, svelte_config) { /** @type {Error | null} */ let manifest_error = null; + /** + * @param {any} e + */ + const outputModuleLoadError = (e) => { + let msg = colors.red((e.plugin ? `[${e.plugin}] ` : '') + e.message); + if (e.id) { + msg += `\nfile: ${colors.cyan(e.id + (e.loc ? `:${e.loc.line}:${e.loc.column}` : ''))}`; + } + if (e.frame) { + msg += `\n` + colors.yellow(e.frame); + } + vite.ws.send({ + type: 'error', + err: e + }); + vite.config.logger.error(msg, { error: e }); + }; + /** @param {string} id */ async function resolve(id) { const url = id.startsWith('..') ? `/@fs${path.posix.resolve(id)}` : `/${id}`; - const module = await vite.ssrLoadModule(url); + /** @type {Record} */ + let module; + try { + module = await vite.ssrLoadModule(url); + } catch (e) { + outputModuleLoadError(e); + throw e; + } const module_node = await vite.moduleGraph.getModuleByUrl(url); if (!module_node) throw new Error(`Could not find node for ${url}`); From 90d6a43eb672d0b1ae72191024dc0a782412e372 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Tue, 31 Jan 2023 21:50:01 +0545 Subject: [PATCH 2/6] stupid javascript try catch syntax --- packages/kit/src/exports/vite/dev/index.js | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index ed3990001f5b..e4baf284c137 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -72,14 +72,10 @@ export async function dev(vite, vite_config, svelte_config) { async function resolve(id) { const url = id.startsWith('..') ? `/@fs${path.posix.resolve(id)}` : `/${id}`; - /** @type {Record} */ - let module; - try { - module = await vite.ssrLoadModule(url); - } catch (e) { - outputModuleLoadError(e); - throw e; - } + let module = await vite.ssrLoadModule(url).catch((error) => { + outputModuleLoadError(error); + throw error; + }); const module_node = await vite.moduleGraph.getModuleByUrl(url); if (!module_node) throw new Error(`Could not find node for ${url}`); From bff189966aca640182dfb10b6952e4b94c58ece7 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Tue, 31 Jan 2023 21:57:29 +0545 Subject: [PATCH 3/6] changeset --- .changeset/curly-jobs-switch.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/curly-jobs-switch.md diff --git a/.changeset/curly-jobs-switch.md b/.changeset/curly-jobs-switch.md new file mode 100644 index 000000000000..5ee118ded700 --- /dev/null +++ b/.changeset/curly-jobs-switch.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +fix: output errors properly if pages fail to compile From d60552e2286910aa1ac575c7abc1b1eb560bdf51 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Tue, 31 Jan 2023 22:12:02 +0545 Subject: [PATCH 4/6] less blatant copy paste, more code reuse --- packages/kit/src/exports/vite/dev/index.js | 25 +++++++++------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index e4baf284c137..1f67f1889b2c 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -3,7 +3,7 @@ import path from 'node:path'; import { URL } from 'node:url'; import colors from 'kleur'; import sirv from 'sirv'; -import { isCSSRequest, loadEnv } from 'vite'; +import { isCSSRequest, loadEnv, buildErrorMessage } from 'vite'; import { getRequest, setResponse } from '../../../exports/node/index.js'; import { installPolyfills } from '../../../exports/node/polyfills.js'; import { coalesce_to_error } from '../../../utils/error.js'; @@ -50,23 +50,18 @@ export async function dev(vite, vite_config, svelte_config) { /** @type {Error | null} */ let manifest_error = null; - /** - * @param {any} e - */ - const outputModuleLoadError = (e) => { - let msg = colors.red((e.plugin ? `[${e.plugin}] ` : '') + e.message); - if (e.id) { - msg += `\nfile: ${colors.cyan(e.id + (e.loc ? `:${e.loc.line}:${e.loc.column}` : ''))}`; - } - if (e.frame) { - msg += `\n` + colors.yellow(e.frame); - } + /** @param {any} err */ + function outputModuleLoadError(err) { + const msg = buildErrorMessage(err, [colors.red(`Internal server error: ${err.message}`)]); + + vite.config.logger.error(msg, { + error: err + }); vite.ws.send({ type: 'error', - err: e + err: err }); - vite.config.logger.error(msg, { error: e }); - }; + } /** @param {string} id */ async function resolve(id) { From 60ffe187b019d7f2fbfc0326664628199e6f18af Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Wed, 1 Feb 2023 08:54:13 +0545 Subject: [PATCH 5/6] use superior casing and wrap a few more places --- packages/kit/src/exports/vite/dev/index.js | 30 ++++++++++------------ 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index 1f67f1889b2c..f948f602f394 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -50,27 +50,25 @@ export async function dev(vite, vite_config, svelte_config) { /** @type {Error | null} */ let manifest_error = null; - /** @param {any} err */ - function outputModuleLoadError(err) { - const msg = buildErrorMessage(err, [colors.red(`Internal server error: ${err.message}`)]); + /** @param {string} url */ + async function loud_ssr_load_module(url) { + try { + return await vite.ssrLoadModule(url); + } catch (/** @type {any} */ err) { + const msg = buildErrorMessage(err, [colors.red(`Internal server error: ${err.message}`)]); - vite.config.logger.error(msg, { - error: err - }); - vite.ws.send({ - type: 'error', - err: err - }); + vite.config.logger.error(msg, { error: err }); + vite.ws.send({ type: 'error', err: err }); + + throw err; + } } /** @param {string} id */ async function resolve(id) { const url = id.startsWith('..') ? `/@fs${path.posix.resolve(id)}` : `/${id}`; - let module = await vite.ssrLoadModule(url).catch((error) => { - outputModuleLoadError(error); - throw error; - }); + let module = await loud_ssr_load_module(url); const module_node = await vite.moduleGraph.getModuleByUrl(url); if (!module_node) throw new Error(`Could not find node for ${url}`); @@ -177,7 +175,7 @@ export async function dev(vite, vite_config, svelte_config) { (query.has('svelte') && query.get('type') === 'style') ) { try { - const mod = await vite.ssrLoadModule(dep.url); + const mod = await loud_ssr_load_module(dep.url); styles[dep.url] = mod.default; } catch { // this can happen with dynamically imported modules, I think @@ -207,7 +205,7 @@ export async function dev(vite, vite_config, svelte_config) { endpoint: endpoint ? async () => { const url = path.resolve(cwd, endpoint.file); - return await vite.ssrLoadModule(url); + return await loud_ssr_load_module(url); } : null, endpoint_id: endpoint?.file From 4889c81f7ba7f3e325355a7116f5410fcf03f2c7 Mon Sep 17 00:00:00 2001 From: gtmnayan Date: Wed, 1 Feb 2023 09:14:15 +0545 Subject: [PATCH 6/6] why did I change this --- packages/kit/src/exports/vite/dev/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/kit/src/exports/vite/dev/index.js b/packages/kit/src/exports/vite/dev/index.js index f948f602f394..927bc921a5f8 100644 --- a/packages/kit/src/exports/vite/dev/index.js +++ b/packages/kit/src/exports/vite/dev/index.js @@ -68,7 +68,7 @@ export async function dev(vite, vite_config, svelte_config) { async function resolve(id) { const url = id.startsWith('..') ? `/@fs${path.posix.resolve(id)}` : `/${id}`; - let module = await loud_ssr_load_module(url); + const module = await loud_ssr_load_module(url); const module_node = await vite.moduleGraph.getModuleByUrl(url); if (!module_node) throw new Error(`Could not find node for ${url}`);