diff --git a/.changeset/clean-schools-doubt.md b/.changeset/clean-schools-doubt.md new file mode 100644 index 000000000000..a8515550ad31 --- /dev/null +++ b/.changeset/clean-schools-doubt.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Make 404 error more helpful if paths.base is missing diff --git a/packages/kit/src/core/prerender/prerender.js b/packages/kit/src/core/prerender/prerender.js index 5995984c2861..7e0f2ff6fb95 100644 --- a/packages/kit/src/core/prerender/prerender.js +++ b/packages/kit/src/core/prerender/prerender.js @@ -10,28 +10,39 @@ import { escape_html_attr } from '../../utils/escape.js'; /** * @typedef {import('types').PrerenderErrorHandler} PrerenderErrorHandler - * @typedef {import('types').PrerenderOnErrorValue} OnError * @typedef {import('types').Logger} Logger */ -/** @type {(details: Parameters[0] ) => string} */ -function format_error({ status, path, referrer, referenceType }) { - return `${status} ${path}${referrer ? ` (${referenceType} from ${referrer})` : ''}`; +/** + * @param {Parameters[0]} details + * @param {import('types').ValidatedKitConfig} config + */ +function format_error({ status, path, referrer, referenceType }, config) { + const message = + status === 404 && !path.startsWith(config.paths.base) + ? `${path} does not begin with \`base\`, which is configured in \`paths.base\` and can be imported from \`$app/paths\`` + : path; + + return `${status} ${message}${referrer ? ` (${referenceType} from ${referrer})` : ''}`; } -/** @type {(log: Logger, onError: OnError) => PrerenderErrorHandler} */ -function normalise_error_handler(log, onError) { - switch (onError) { +/** + * @param {Logger} log + * @param {import('types').ValidatedKitConfig} config + * @returns {PrerenderErrorHandler} + */ +function normalise_error_handler(log, config) { + switch (config.prerender.onError) { case 'continue': return (details) => { - log.error(format_error(details)); + log.error(format_error(details, config)); }; case 'fail': return (details) => { - throw new Error(format_error(details)); + throw new Error(format_error(details, config)); }; default: - return onError; + return config.prerender.onError; } } @@ -75,7 +86,7 @@ export async function prerender({ config, entries, files, log }) { const server = new Server(manifest); - const error = normalise_error_handler(log, config.prerender.onError); + const error = normalise_error_handler(log, config); const q = queue(config.prerender.concurrency);