diff --git a/.changeset/shiny-eels-brush.md b/.changeset/shiny-eels-brush.md new file mode 100644 index 000000000000..d00400c31af5 --- /dev/null +++ b/.changeset/shiny-eels-brush.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Show more descriptive error if data returned from `load` is a non-POJO diff --git a/packages/kit/src/runtime/server/page/render.js b/packages/kit/src/runtime/server/page/render.js index c0650e00f455..b24a9c14f54c 100644 --- a/packages/kit/src/runtime/server/page/render.js +++ b/packages/kit/src/runtime/server/page/render.js @@ -182,6 +182,20 @@ export async function render_response({ `Data returned from \`load\` while rendering ${event.routeId} is not serializable: ${error.message} (data.${match[2]})` ); } + + const nonPojoError = /pojo/i.exec(error.message); + + if (nonPojoError) { + const constructorName = branch.find(({ server_data }) => server_data?.data?.constructor?.name) + ?.server_data?.data?.constructor?.name; + + throw new Error( + `Data returned from \`load\` (while rendering ${event.routeId}) must be a plain object${ + constructorName ? ` rather than an instance of ${constructorName}` : '' + }` + ); + } + throw error; }