Skip to content

Commit 04ba87e

Browse files
fix: HMR for query (#14587)
* accept hot updates * update cached entries * changeset * Update packages/kit/src/runtime/client/remote-functions/query.svelte.js Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> --------- Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
1 parent 342fed6 commit 04ba87e

File tree

3 files changed

+24
-2
lines changed

3 files changed

+24
-2
lines changed

.changeset/cute-bushes-hope.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@sveltejs/kit': patch
3+
---
4+
5+
fix: HMR for `query`

packages/kit/src/exports/vite/index.js

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -788,8 +788,14 @@ async function kit({ svelte_config }) {
788788
return `export const ${name} = ${namespace}.${type}('${remote.hash}/${name}');`;
789789
});
790790

791+
let result = `import * as ${namespace} from '__sveltekit/remote';\n\n${exports.join('\n')}\n`;
792+
793+
if (dev_server) {
794+
result += `\nimport.meta.hot?.accept();\n`;
795+
}
796+
791797
return {
792-
code: `import * as ${namespace} from '__sveltekit/remote';\n\n${exports.join('\n')}\n`
798+
code: result
793799
};
794800
},
795801

packages/kit/src/runtime/client/remote-functions/query.svelte.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
11
/** @import { RemoteQueryFunction } from '@sveltejs/kit' */
22
/** @import { RemoteFunctionResponse } from 'types' */
33
import { app_dir, base } from '$app/paths/internal/client';
4-
import { app, goto, remote_responses } from '../client.js';
4+
import { app, goto, query_map, remote_responses } from '../client.js';
55
import { tick } from 'svelte';
66
import { create_remote_function, remote_request } from './shared.svelte.js';
77
import * as devalue from 'devalue';
88
import { HttpError, Redirect } from '@sveltejs/kit/internal';
9+
import { DEV } from 'esm-env';
910

1011
/**
1112
* @param {string} id
1213
* @returns {RemoteQueryFunction<any, any>}
1314
*/
1415
export function query(id) {
16+
if (DEV) {
17+
// If this reruns as part of HMR, refresh the query
18+
for (const [key, entry] of query_map) {
19+
if (key === id || key.startsWith(id + '/')) {
20+
// use optional chaining in case a prerender function was turned into a query
21+
entry.resource.refresh?.();
22+
}
23+
}
24+
}
25+
1526
return create_remote_function(id, (cache_key, payload) => {
1627
return new Query(cache_key, async () => {
1728
if (Object.hasOwn(remote_responses, cache_key)) {

0 commit comments

Comments
 (0)