diff --git a/packages/kit/src/exports/internal/index.js b/packages/kit/src/exports/internal/index.js index b87448b30914..15838944b030 100644 --- a/packages/kit/src/exports/internal/index.js +++ b/packages/kit/src/exports/internal/index.js @@ -62,4 +62,10 @@ export class ActionFailure { } } -export { init_remote_functions } from './remote-functions.js'; +export { + init_remote_functions, + create_remote_id, + create_remote_cache_key, + REMOTE_CACHE_DELIMITER, + REMOTE_CACHE_PREFIX +} from './remote-functions.js'; diff --git a/packages/kit/src/exports/internal/remote-functions.js b/packages/kit/src/exports/internal/remote-functions.js index ae83ed5d3d2b..c7097c4e5c23 100644 --- a/packages/kit/src/exports/internal/remote-functions.js +++ b/packages/kit/src/exports/internal/remote-functions.js @@ -22,7 +22,25 @@ export function init_remote_functions(module, file, hash) { ); } - fn.__.id = `${hash}/${name}`; + fn.__.id = create_remote_id(hash, name); fn.__.name = name; } } + +export const REMOTE_CACHE_PREFIX = '@sveltejs/kit/remote'; +export const REMOTE_CACHE_DELIMITER = '::::'; + +/** + * @param {string} id + * @param {string} payload + */ +export function create_remote_cache_key(id, payload) { + return `${REMOTE_CACHE_PREFIX}${REMOTE_CACHE_DELIMITER}${id}${REMOTE_CACHE_DELIMITER}${payload ?? ''}`; +} + +/** + * @param {(string | undefined)[]} identifiers + */ +export function create_remote_id(...identifiers) { + return identifiers.filter((id) => id !== undefined).join(REMOTE_CACHE_DELIMITER); +} diff --git a/packages/kit/src/exports/vite/index.js b/packages/kit/src/exports/vite/index.js index 14a1103f6a61..5a8d4097cb0e 100644 --- a/packages/kit/src/exports/vite/index.js +++ b/packages/kit/src/exports/vite/index.js @@ -41,6 +41,7 @@ import { import { import_peer } from '../../utils/import.js'; import { compact } from '../../utils/array.js'; import { should_ignore } from './static_analysis/utils.js'; +import { create_remote_id } from '@sveltejs/kit/internal'; const cwd = process.cwd(); @@ -709,14 +710,14 @@ async function kit({ svelte_config }) { '\n\n' + dedent` import * as $$_self_$$ from './${path.basename(id)}'; - import { init_remote_functions as $$_init_$$ } from '@sveltejs/kit/internal'; + import { init_remote_functions as $$_init_$$, create_remote_id as $$_create_remote_id_$$ } from '@sveltejs/kit/internal'; ${dev_server ? 'await Promise.resolve()' : ''} $$_init_$$($$_self_$$, ${s(file)}, ${s(remote.hash)}); for (const [name, fn] of Object.entries($$_self_$$)) { - fn.__.id = ${s(remote.hash)} + '/' + name; + fn.__.id = $$_create_remote_id_$$(${s(remote.hash)}, name); fn.__.name = name; } `; @@ -772,7 +773,7 @@ async function kit({ svelte_config }) { while (map.has(namespace)) namespace = `__remote${uid++}`; const exports = Array.from(map).map(([name, type]) => { - return `export const ${name} = ${namespace}.${type}('${remote.hash}/${name}');`; + return `export const ${name} = ${namespace}.${type}('${create_remote_id(remote.hash, name)}');`; }); let result = `import * as ${namespace} from '__sveltekit/remote';\n\n${exports.join('\n')}\n`; diff --git a/packages/kit/src/runtime/app/server/remote/form.js b/packages/kit/src/runtime/app/server/remote/form.js index c1fe5a1d2c10..d6539239cc69 100644 --- a/packages/kit/src/runtime/app/server/remote/form.js +++ b/packages/kit/src/runtime/app/server/remote/form.js @@ -13,6 +13,7 @@ import { flatten_issues } from '../../../form-utils.js'; import { get_cache, run_remote_function } from './shared.js'; +import { create_remote_id } from '@sveltejs/kit/internal'; /** * Creates a form object that can be spread onto a `