From 7ae3abc527a9c19d27ab97a26bfd06e1310c859e Mon Sep 17 00:00:00 2001 From: Eike Thies Date: Sat, 28 Oct 2023 18:17:38 +0200 Subject: [PATCH] Fix compatability issue with sveltekit-flash-messages (#1222) Co-authored-by: Alec Aivazis --- .changeset/selfish-turkeys-move.md | 5 ++++ .../src/plugin/transforms/kit/session.test.ts | 25 +++++++++++++++++++ packages/houdini/src/vite/ast.ts | 10 ++++++++ 3 files changed, 40 insertions(+) create mode 100644 .changeset/selfish-turkeys-move.md diff --git a/.changeset/selfish-turkeys-move.md b/.changeset/selfish-turkeys-move.md new file mode 100644 index 000000000..0e2dc96e9 --- /dev/null +++ b/.changeset/selfish-turkeys-move.md @@ -0,0 +1,5 @@ +--- +'houdini-svelte': patch +--- + +Fix bug extending load functions that are wrapped by a utility diff --git a/packages/houdini-svelte/src/plugin/transforms/kit/session.test.ts b/packages/houdini-svelte/src/plugin/transforms/kit/session.test.ts index 3304c7b09..d5975ba13 100644 --- a/packages/houdini-svelte/src/plugin/transforms/kit/session.test.ts +++ b/packages/houdini-svelte/src/plugin/transforms/kit/session.test.ts @@ -27,6 +27,31 @@ test('modifies root +layout.svelte with data prop', async function () { `) }) +test('export const load', async function () { + const result = await test_transform_js( + 'src/routes/+layout.server.js', + ` + export const load = loadFlash(async () => { + "some random stuff that's valid javascript" + }) + ` + ) + + expect(result).toMatchInlineSnapshot(` + import { buildSessionObject } from "$houdini/plugins/houdini-svelte/runtime/session"; + + export const load = loadFlash(async event => { + "some random stuff that's valid javascript"; + const __houdini__vite__plugin__return__value__ = {}; + + return { + ...buildSessionObject(event), + ...__houdini__vite__plugin__return__value__ + }; + }); + `) +}) + test('modifies root +layout.svelte without data prop', async function () { // run the test const result = await test_transform_svelte('src/routes/+layout.svelte', ``) diff --git a/packages/houdini/src/vite/ast.ts b/packages/houdini/src/vite/ast.ts index f339d4fd5..0ac7fb38c 100644 --- a/packages/houdini/src/vite/ast.ts +++ b/packages/houdini/src/vite/ast.ts @@ -67,6 +67,16 @@ export function find_exported_fn( init = init.expression } + //if the value is a CallExpression the actual FunctionExpression might reside inside the arguments array, see https://github.com/HoudiniGraphql/houdini/issues/1137 + if ( + init.type === 'CallExpression' && + init.arguments[0] && + (init.arguments[0].type === 'FunctionExpression' || + init.arguments[0].type === 'ArrowFunctionExpression') + ) { + init = init.arguments[0] + } + if (init.type === 'FunctionExpression' || init.type === 'ArrowFunctionExpression') { return init }