@sveltejs/kit 2.52.0 → 2.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +5 -6
- package/src/cli.js +72 -24
- package/src/core/adapt/builder.js +1 -1
- package/src/exports/vite/build/build_server.js +3 -2
- package/src/exports/vite/build/utils.js +16 -0
- package/src/exports/vite/index.js +37 -20
- package/src/runtime/app/paths/server.js +1 -1
- package/src/runtime/client/client.js +8 -3
- package/src/runtime/client/remote-functions/form.svelte.js +24 -7
- package/src/runtime/client/remote-functions/query.svelte.js +2 -0
- package/src/runtime/form-utils.js +21 -4
- package/src/runtime/server/page/actions.js +3 -2
- package/src/runtime/server/page/data_serializer.js +2 -3
- package/src/runtime/server/remote.js +2 -0
- package/src/utils/css.js +3 -0
- package/src/utils/escape.js +9 -0
- package/src/utils/filesystem.js +3 -1
- package/src/version.js +1 -1
- package/types/index.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sveltejs/kit",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.53.0",
|
|
4
4
|
"description": "SvelteKit is the fastest way to build Svelte apps",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"framework",
|
|
@@ -23,12 +23,11 @@
|
|
|
23
23
|
"@types/cookie": "^0.6.0",
|
|
24
24
|
"acorn": "^8.14.1",
|
|
25
25
|
"cookie": "^0.6.0",
|
|
26
|
-
"devalue": "^5.6.
|
|
26
|
+
"devalue": "^5.6.3",
|
|
27
27
|
"esm-env": "^1.2.2",
|
|
28
28
|
"kleur": "^4.1.5",
|
|
29
29
|
"magic-string": "^0.30.5",
|
|
30
30
|
"mrmime": "^2.0.0",
|
|
31
|
-
"sade": "^1.8.1",
|
|
32
31
|
"set-cookie-parser": "^3.0.0",
|
|
33
32
|
"sirv": "^3.0.0"
|
|
34
33
|
},
|
|
@@ -41,18 +40,18 @@
|
|
|
41
40
|
"@types/set-cookie-parser": "^2.4.7",
|
|
42
41
|
"dts-buddy": "^0.6.2",
|
|
43
42
|
"rollup": "^4.14.2",
|
|
44
|
-
"svelte": "^5.
|
|
43
|
+
"svelte": "^5.51.5",
|
|
45
44
|
"svelte-preprocess": "^6.0.0",
|
|
46
45
|
"typescript": "^5.3.3",
|
|
47
46
|
"vite": "^6.3.5",
|
|
48
47
|
"vitest": "^4.0.0"
|
|
49
48
|
},
|
|
50
49
|
"peerDependencies": {
|
|
51
|
-
"@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0",
|
|
50
|
+
"@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0 || ^7.0.0",
|
|
52
51
|
"@opentelemetry/api": "^1.0.0",
|
|
53
52
|
"svelte": "^4.0.0 || ^5.0.0-next.0",
|
|
54
53
|
"typescript": "^5.3.3",
|
|
55
|
-
"vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0"
|
|
54
|
+
"vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0 || ^8.0.0"
|
|
56
55
|
},
|
|
57
56
|
"peerDependenciesMeta": {
|
|
58
57
|
"@opentelemetry/api": {
|
package/src/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import process from 'node:process';
|
|
3
|
+
import { parseArgs } from 'node:util';
|
|
3
4
|
import colors from 'kleur';
|
|
4
|
-
import sade from 'sade';
|
|
5
5
|
import { load_config } from './core/config/index.js';
|
|
6
6
|
import { coalesce_to_error } from './utils/error.js';
|
|
7
7
|
|
|
@@ -20,28 +20,76 @@ function handle_error(e) {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
const pkg = JSON.parse(fs.readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
23
|
+
|
|
24
|
+
const help = `
|
|
25
|
+
Usage: svelte-kit <command> [options]
|
|
26
|
+
|
|
27
|
+
Commands:
|
|
28
|
+
sync Synchronise generated type definitions
|
|
29
|
+
|
|
30
|
+
Options:
|
|
31
|
+
--version, -v Show version number
|
|
32
|
+
--help, -h Show this help message
|
|
33
|
+
|
|
34
|
+
Sync Options:
|
|
35
|
+
--mode <mode> Specify a mode for loading environment variables (default: development)
|
|
36
|
+
`;
|
|
37
|
+
|
|
38
|
+
let parsed;
|
|
39
|
+
try {
|
|
40
|
+
parsed = parseArgs({
|
|
41
|
+
options: {
|
|
42
|
+
version: { type: 'boolean', short: 'v' },
|
|
43
|
+
help: { type: 'boolean', short: 'h' },
|
|
44
|
+
mode: { type: 'string', default: 'development' }
|
|
45
|
+
},
|
|
46
|
+
allowPositionals: true,
|
|
47
|
+
strict: true
|
|
45
48
|
});
|
|
49
|
+
} catch (err) {
|
|
50
|
+
const error = /** @type {Error} */ (err);
|
|
51
|
+
console.error(colors.bold().red(`> ${error.message}`));
|
|
52
|
+
console.log(help);
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
const { values, positionals } = parsed;
|
|
57
|
+
|
|
58
|
+
if (values.version) {
|
|
59
|
+
console.log(pkg.version);
|
|
60
|
+
process.exit(0);
|
|
61
|
+
}
|
|
46
62
|
|
|
47
|
-
|
|
63
|
+
if (values.help) {
|
|
64
|
+
console.log(help);
|
|
65
|
+
process.exit(0);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
const command = positionals[0];
|
|
69
|
+
|
|
70
|
+
if (!command) {
|
|
71
|
+
console.log(help);
|
|
72
|
+
process.exit(0);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
if (command === 'sync') {
|
|
76
|
+
const config_files = ['js', 'ts']
|
|
77
|
+
.map((ext) => `svelte.config.${ext}`)
|
|
78
|
+
.filter((f) => fs.existsSync(f));
|
|
79
|
+
if (config_files.length === 0) {
|
|
80
|
+
console.warn(`Missing Svelte config file in ${process.cwd()} — skipping`);
|
|
81
|
+
process.exit(0);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
try {
|
|
85
|
+
const config = await load_config();
|
|
86
|
+
const sync = await import('./core/sync/sync.js');
|
|
87
|
+
sync.all_types(config, values.mode);
|
|
88
|
+
} catch (error) {
|
|
89
|
+
handle_error(error);
|
|
90
|
+
}
|
|
91
|
+
} else {
|
|
92
|
+
console.error(colors.bold().red(`> Unknown command: ${command}`));
|
|
93
|
+
console.log(help);
|
|
94
|
+
process.exit(1);
|
|
95
|
+
}
|
|
@@ -19,7 +19,7 @@ import { find_server_assets } from '../generate_manifest/find_server_assets.js';
|
|
|
19
19
|
import { reserved } from '../env.js';
|
|
20
20
|
|
|
21
21
|
const pipe = promisify(pipeline);
|
|
22
|
-
const extensions = ['.html', '.js', '.mjs', '.json', '.css', '.svg', '.xml', '.wasm'];
|
|
22
|
+
const extensions = ['.html', '.js', '.mjs', '.json', '.css', '.svg', '.xml', '.wasm', '.txt'];
|
|
23
23
|
|
|
24
24
|
/**
|
|
25
25
|
* Creates the Builder which is passed to adapters for building the application.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import { mkdirp } from '../../../utils/filesystem.js';
|
|
3
|
-
import { filter_fonts, find_deps, resolve_symlinks } from './utils.js';
|
|
3
|
+
import { create_function_as_string, filter_fonts, find_deps, resolve_symlinks } from './utils.js';
|
|
4
4
|
import { s } from '../../../utils/misc.js';
|
|
5
5
|
import { normalizePath } from 'vite';
|
|
6
6
|
import { basename } from 'node:path';
|
|
@@ -78,8 +78,9 @@ export function build_server_nodes(
|
|
|
78
78
|
|
|
79
79
|
// only convert to a function if we have adjusted any URLs
|
|
80
80
|
if (css !== transformed_css) {
|
|
81
|
-
return
|
|
81
|
+
return create_function_as_string('css', ['assets', 'base'], transformed_css);
|
|
82
82
|
}
|
|
83
|
+
|
|
83
84
|
return s(css);
|
|
84
85
|
};
|
|
85
86
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { normalizePath } from 'vite';
|
|
4
|
+
import { s } from '../../../utils/misc.js';
|
|
4
5
|
|
|
5
6
|
/**
|
|
6
7
|
* Adds transitive JS and CSS dependencies to the js and css inputs.
|
|
@@ -129,3 +130,18 @@ export function filter_fonts(assets) {
|
|
|
129
130
|
export function assets_base(config) {
|
|
130
131
|
return (config.paths.assets || config.paths.base || '.') + '/';
|
|
131
132
|
}
|
|
133
|
+
|
|
134
|
+
/**
|
|
135
|
+
* Writes a function with arguments used by a template literal.
|
|
136
|
+
* This helps us store strings in a module and inject values at runtime.
|
|
137
|
+
* @param {string} name The name of the function
|
|
138
|
+
* @param {string[]} placeholder_names The names of the placeholders in the string
|
|
139
|
+
* @param {string} str A string with placeholders such as "Hello ${arg0}".
|
|
140
|
+
* It must have backticks and dollar signs escaped.
|
|
141
|
+
* @returns {string} The function written as a string
|
|
142
|
+
*/
|
|
143
|
+
export function create_function_as_string(name, placeholder_names, str) {
|
|
144
|
+
str = s(str).slice(1, -1);
|
|
145
|
+
const args = placeholder_names ? placeholder_names.join(', ') : '';
|
|
146
|
+
return `function ${name}(${args}) { return \`${str}\`; }`;
|
|
147
|
+
}
|
|
@@ -190,8 +190,8 @@ async function kit({ svelte_config }) {
|
|
|
190
190
|
/** @type {import('vite')} */
|
|
191
191
|
const vite = await import_peer('vite');
|
|
192
192
|
|
|
193
|
-
// @ts-ignore `vite.rolldownVersion` only exists in `
|
|
194
|
-
const
|
|
193
|
+
// @ts-ignore `vite.rolldownVersion` only exists in `vite 8`
|
|
194
|
+
const is_rolldown = !!vite.rolldownVersion;
|
|
195
195
|
|
|
196
196
|
const { kit } = svelte_config;
|
|
197
197
|
const out = `${kit.outDir}/output`;
|
|
@@ -296,23 +296,6 @@ async function kit({ svelte_config }) {
|
|
|
296
296
|
`${kit.files.routes}/**/+*.{svelte,js,ts}`,
|
|
297
297
|
`!${kit.files.routes}/**/+*server.*`
|
|
298
298
|
],
|
|
299
|
-
esbuildOptions: {
|
|
300
|
-
plugins: [
|
|
301
|
-
{
|
|
302
|
-
name: 'vite-plugin-sveltekit-setup:optimize',
|
|
303
|
-
setup(build) {
|
|
304
|
-
if (!kit.experimental.remoteFunctions) return;
|
|
305
|
-
|
|
306
|
-
const filter = new RegExp(
|
|
307
|
-
`.remote(${kit.moduleExtensions.join('|')})$`.replaceAll('.', '\\.')
|
|
308
|
-
);
|
|
309
|
-
|
|
310
|
-
// treat .remote.js files as empty for the purposes of prebundling
|
|
311
|
-
build.onLoad({ filter }, () => ({ contents: '' }));
|
|
312
|
-
}
|
|
313
|
-
}
|
|
314
|
-
]
|
|
315
|
-
},
|
|
316
299
|
exclude: [
|
|
317
300
|
// Without this SvelteKit will be prebundled on the client, which means we end up with two versions of Redirect etc.
|
|
318
301
|
// Also see https://github.com/sveltejs/kit/issues/5952#issuecomment-1218844057
|
|
@@ -340,6 +323,40 @@ async function kit({ svelte_config }) {
|
|
|
340
323
|
}
|
|
341
324
|
};
|
|
342
325
|
|
|
326
|
+
if (kit.experimental.remoteFunctions) {
|
|
327
|
+
// treat .remote.js files as empty for the purposes of prebundling
|
|
328
|
+
// detects rolldown to avoid a warning message in vite 8 beta
|
|
329
|
+
const remote_id_filter = new RegExp(
|
|
330
|
+
`.remote(${kit.moduleExtensions.join('|')})$`.replaceAll('.', '\\.')
|
|
331
|
+
);
|
|
332
|
+
new_config.optimizeDeps ??= {}; // for some reason ts says this could be undefined even though it was set above
|
|
333
|
+
if (is_rolldown) {
|
|
334
|
+
// @ts-ignore
|
|
335
|
+
new_config.optimizeDeps.rolldownOptions ??= {};
|
|
336
|
+
// @ts-ignore
|
|
337
|
+
new_config.optimizeDeps.rolldownOptions.plugins ??= [];
|
|
338
|
+
// @ts-ignore
|
|
339
|
+
new_config.optimizeDeps.rolldownOptions.plugins.push({
|
|
340
|
+
name: 'vite-plugin-sveltekit-setup:optimize-remote-functions',
|
|
341
|
+
load: {
|
|
342
|
+
filter: { id: remote_id_filter },
|
|
343
|
+
handler() {
|
|
344
|
+
return '';
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
});
|
|
348
|
+
} else {
|
|
349
|
+
new_config.optimizeDeps.esbuildOptions ??= {};
|
|
350
|
+
new_config.optimizeDeps.esbuildOptions.plugins ??= [];
|
|
351
|
+
new_config.optimizeDeps.esbuildOptions.plugins.push({
|
|
352
|
+
name: 'vite-plugin-sveltekit-setup:optimize-remote-functions',
|
|
353
|
+
setup(build) {
|
|
354
|
+
build.onLoad({ filter: remote_id_filter }, () => ({ contents: '' }));
|
|
355
|
+
}
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
|
|
343
360
|
const define = {
|
|
344
361
|
__SVELTEKIT_APP_DIR__: s(kit.appDir),
|
|
345
362
|
__SVELTEKIT_EMBEDDED__: s(kit.embedded),
|
|
@@ -920,7 +937,7 @@ async function kit({ svelte_config }) {
|
|
|
920
937
|
preserveEntrySignatures: 'strict',
|
|
921
938
|
onwarn(warning, handler) {
|
|
922
939
|
if (
|
|
923
|
-
(
|
|
940
|
+
(is_rolldown
|
|
924
941
|
? warning.code === 'IMPORT_IS_UNDEFINED'
|
|
925
942
|
: warning.code === 'MISSING_EXPORT') &&
|
|
926
943
|
warning.id === `${kit.outDir}/generated/client-optimized/app.js`
|
|
@@ -565,7 +565,11 @@ async function _preload_code(url) {
|
|
|
565
565
|
const route = (await get_navigation_intent(url, false))?.route;
|
|
566
566
|
|
|
567
567
|
if (route) {
|
|
568
|
-
await Promise.all(
|
|
568
|
+
await Promise.all(
|
|
569
|
+
/** @type {[has_server_load: boolean, node_loader: import('types').CSRPageNodeLoader][]} */ (
|
|
570
|
+
[...route.layouts, route.leaf].filter(Boolean)
|
|
571
|
+
).map((load) => load[1]())
|
|
572
|
+
);
|
|
569
573
|
}
|
|
570
574
|
}
|
|
571
575
|
|
|
@@ -1707,6 +1711,7 @@ async function navigate({
|
|
|
1707
1711
|
if (started) {
|
|
1708
1712
|
const after_navigate = (
|
|
1709
1713
|
await Promise.all(
|
|
1714
|
+
// eslint-disable-next-line @typescript-eslint/await-thenable -- we need to await because they can be asynchronous
|
|
1710
1715
|
Array.from(on_navigate_callbacks, (fn) =>
|
|
1711
1716
|
fn(/** @type {import('@sveltejs/kit').OnNavigate} */ (nav.navigation))
|
|
1712
1717
|
)
|
|
@@ -2279,7 +2284,7 @@ export function pushState(url, state) {
|
|
|
2279
2284
|
devalue.stringify(state);
|
|
2280
2285
|
} catch (error) {
|
|
2281
2286
|
// @ts-expect-error
|
|
2282
|
-
throw new Error(`Could not serialize state${error.path}
|
|
2287
|
+
throw new Error(`Could not serialize state${error.path}`, { cause: error });
|
|
2283
2288
|
}
|
|
2284
2289
|
}
|
|
2285
2290
|
|
|
@@ -2326,7 +2331,7 @@ export function replaceState(url, state) {
|
|
|
2326
2331
|
devalue.stringify(state);
|
|
2327
2332
|
} catch (error) {
|
|
2328
2333
|
// @ts-expect-error
|
|
2329
|
-
throw new Error(`Could not serialize state${error.path}
|
|
2334
|
+
throw new Error(`Could not serialize state${error.path}`, { cause: error });
|
|
2330
2335
|
}
|
|
2331
2336
|
}
|
|
2332
2337
|
|
|
@@ -53,6 +53,7 @@ function merge_with_server_issues(form_data, current_issues, client_issues) {
|
|
|
53
53
|
*/
|
|
54
54
|
export function form(id) {
|
|
55
55
|
/** @type {Map<any, { count: number, instance: RemoteForm<T, U> }>} */
|
|
56
|
+
// eslint-disable-next-line svelte/prefer-svelte-reactivity -- we don't need reactivity for this
|
|
56
57
|
const instances = new Map();
|
|
57
58
|
|
|
58
59
|
/** @param {string | number | boolean} [key] */
|
|
@@ -110,6 +111,10 @@ export function form(id) {
|
|
|
110
111
|
|
|
111
112
|
submitted = true;
|
|
112
113
|
|
|
114
|
+
// Increment pending count immediately so that `pending` reflects
|
|
115
|
+
// the in-progress state during async preflight validation
|
|
116
|
+
pending_count++;
|
|
117
|
+
|
|
113
118
|
const validated = await preflight_schema?.['~standard'].validate(data);
|
|
114
119
|
|
|
115
120
|
if (validated?.issues) {
|
|
@@ -118,9 +123,15 @@ export function form(id) {
|
|
|
118
123
|
raw_issues,
|
|
119
124
|
validated.issues.map((issue) => normalize_issue(issue, false))
|
|
120
125
|
);
|
|
126
|
+
pending_count--;
|
|
121
127
|
return;
|
|
122
128
|
}
|
|
123
129
|
|
|
130
|
+
// Preflight passed - clear stale client-side preflight issues
|
|
131
|
+
if (preflight_schema) {
|
|
132
|
+
raw_issues = raw_issues.filter((issue) => issue.server);
|
|
133
|
+
}
|
|
134
|
+
|
|
124
135
|
// TODO 3.0 remove this warning
|
|
125
136
|
if (DEV) {
|
|
126
137
|
const error = () => {
|
|
@@ -174,9 +185,6 @@ export function form(id) {
|
|
|
174
185
|
entry.count++;
|
|
175
186
|
}
|
|
176
187
|
|
|
177
|
-
// Increment pending count when submission starts
|
|
178
|
-
pending_count++;
|
|
179
|
-
|
|
180
188
|
/** @type {Array<Query<any> | RemoteQueryOverride>} */
|
|
181
189
|
let updates = [];
|
|
182
190
|
|
|
@@ -277,6 +285,7 @@ export function form(id) {
|
|
|
277
285
|
|
|
278
286
|
if (method !== 'post') return;
|
|
279
287
|
|
|
288
|
+
// eslint-disable-next-line svelte/prefer-svelte-reactivity
|
|
280
289
|
const action = new URL(
|
|
281
290
|
// We can't do submitter.formAction directly because that property is always set
|
|
282
291
|
event.submitter?.hasAttribute('formaction')
|
|
@@ -319,7 +328,8 @@ export function form(id) {
|
|
|
319
328
|
|
|
320
329
|
form.addEventListener('submit', onsubmit);
|
|
321
330
|
|
|
322
|
-
|
|
331
|
+
/** @param {Event} e */
|
|
332
|
+
const handle_input = (e) => {
|
|
323
333
|
// strictly speaking it can be an HTMLTextAreaElement or HTMLSelectElement
|
|
324
334
|
// but that makes the types unnecessarily awkward
|
|
325
335
|
const element = /** @type {HTMLInputElement} */ (e.target);
|
|
@@ -398,17 +408,24 @@ export function form(id) {
|
|
|
398
408
|
name = name.replace(/^[nb]:/, '');
|
|
399
409
|
|
|
400
410
|
touched[name] = true;
|
|
401
|
-
}
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
form.addEventListener('input', handle_input);
|
|
402
414
|
|
|
403
|
-
|
|
415
|
+
const handle_reset = async () => {
|
|
404
416
|
// need to wait a moment, because the `reset` event occurs before
|
|
405
417
|
// the inputs are actually updated (so that it can be cancelled)
|
|
406
418
|
await tick();
|
|
407
419
|
|
|
408
420
|
input = convert_formdata(new FormData(form));
|
|
409
|
-
}
|
|
421
|
+
};
|
|
422
|
+
|
|
423
|
+
form.addEventListener('reset', handle_reset);
|
|
410
424
|
|
|
411
425
|
return () => {
|
|
426
|
+
form.removeEventListener('submit', onsubmit);
|
|
427
|
+
form.removeEventListener('input', handle_input);
|
|
428
|
+
form.removeEventListener('reset', handle_reset);
|
|
412
429
|
element = null;
|
|
413
430
|
preflight_schema = undefined;
|
|
414
431
|
};
|
|
@@ -43,6 +43,7 @@ export function query(id) {
|
|
|
43
43
|
*/
|
|
44
44
|
export function query_batch(id) {
|
|
45
45
|
/** @type {Map<string, Array<{resolve: (value: any) => void, reject: (error: any) => void}>>} */
|
|
46
|
+
// eslint-disable-next-line svelte/prefer-svelte-reactivity -- we don't need reactivity for this
|
|
46
47
|
let batching = new Map();
|
|
47
48
|
|
|
48
49
|
return create_remote_function(id, (cache_key, payload) => {
|
|
@@ -66,6 +67,7 @@ export function query_batch(id) {
|
|
|
66
67
|
// and flushes could reveal more queries that should be batched.
|
|
67
68
|
setTimeout(async () => {
|
|
68
69
|
const batched = batching;
|
|
70
|
+
// eslint-disable-next-line svelte/prefer-svelte-reactivity
|
|
69
71
|
batching = new Map();
|
|
70
72
|
|
|
71
73
|
try {
|
|
@@ -254,14 +254,30 @@ export async function deserialize_binary_form(request) {
|
|
|
254
254
|
const file_offsets_buffer = await get_buffer(HEADER_BYTES + data_length, file_offsets_length);
|
|
255
255
|
if (!file_offsets_buffer) throw deserialize_error('file offset table too short');
|
|
256
256
|
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
257
|
+
const parsed_offsets = JSON.parse(text_decoder.decode(file_offsets_buffer));
|
|
258
|
+
|
|
259
|
+
if (
|
|
260
|
+
!Array.isArray(parsed_offsets) ||
|
|
261
|
+
parsed_offsets.some((n) => typeof n !== 'number' || !Number.isInteger(n) || n < 0)
|
|
262
|
+
) {
|
|
263
|
+
throw deserialize_error('invalid file offset table');
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
file_offsets = /** @type {Array<number>} */ (parsed_offsets);
|
|
260
267
|
files_start_offset = HEADER_BYTES + data_length + file_offsets_length;
|
|
261
268
|
}
|
|
262
269
|
|
|
263
270
|
const [data, meta] = devalue.parse(text_decoder.decode(data_buffer), {
|
|
264
271
|
File: ([name, type, size, last_modified, index]) => {
|
|
272
|
+
if (
|
|
273
|
+
typeof name !== 'string' ||
|
|
274
|
+
typeof type !== 'string' ||
|
|
275
|
+
typeof size !== 'number' ||
|
|
276
|
+
typeof last_modified !== 'number' ||
|
|
277
|
+
typeof index !== 'number'
|
|
278
|
+
) {
|
|
279
|
+
throw deserialize_error('invalid file metadata');
|
|
280
|
+
}
|
|
265
281
|
if (files_start_offset + file_offsets[index] + size > content_length) {
|
|
266
282
|
throw deserialize_error('file data overflow');
|
|
267
283
|
}
|
|
@@ -377,7 +393,8 @@ class LazyFile {
|
|
|
377
393
|
return new ReadableStream({
|
|
378
394
|
start: async (controller) => {
|
|
379
395
|
let chunk_start = 0;
|
|
380
|
-
|
|
396
|
+
/** @type {Uint8Array} */
|
|
397
|
+
let start_chunk;
|
|
381
398
|
for (chunk_index = 0; ; chunk_index++) {
|
|
382
399
|
const chunk = await this.#get_chunk(chunk_index);
|
|
383
400
|
if (!chunk) return null;
|
|
@@ -340,7 +340,8 @@ function try_serialize(data, fn, route_id) {
|
|
|
340
340
|
// if someone tries to use `json()` in their action
|
|
341
341
|
if (data instanceof Response) {
|
|
342
342
|
throw new Error(
|
|
343
|
-
`Data returned from action inside ${route_id} is not serializable. Form actions need to return plain objects or fail(). E.g. return { success: true } or return fail(400, { message: "invalid" })
|
|
343
|
+
`Data returned from action inside ${route_id} is not serializable. Form actions need to return plain objects or fail(). E.g. return { success: true } or return fail(400, { message: "invalid" });`,
|
|
344
|
+
{ cause: e }
|
|
344
345
|
);
|
|
345
346
|
}
|
|
346
347
|
|
|
@@ -348,7 +349,7 @@ function try_serialize(data, fn, route_id) {
|
|
|
348
349
|
if ('path' in error) {
|
|
349
350
|
let message = `Data returned from action inside ${route_id} is not serializable: ${error.message}`;
|
|
350
351
|
if (error.path !== '') message += ` (data.${error.path})`;
|
|
351
|
-
throw new Error(message);
|
|
352
|
+
throw new Error(message, { cause: e });
|
|
352
353
|
}
|
|
353
354
|
|
|
354
355
|
throw error;
|
|
@@ -52,7 +52,6 @@ export function server_data_serializer(event, event_state, options) {
|
|
|
52
52
|
options,
|
|
53
53
|
new Error(`Failed to serialize promise while rendering ${event.route.id}`)
|
|
54
54
|
);
|
|
55
|
-
data = undefined;
|
|
56
55
|
str = devalue.uneval([, error], replacer);
|
|
57
56
|
}
|
|
58
57
|
|
|
@@ -99,7 +98,7 @@ export function server_data_serializer(event, event_state, options) {
|
|
|
99
98
|
} catch (e) {
|
|
100
99
|
// @ts-expect-error
|
|
101
100
|
e.path = e.path.slice(1);
|
|
102
|
-
throw new Error(clarify_devalue_error(event, /** @type {any} */ (e)));
|
|
101
|
+
throw new Error(clarify_devalue_error(event, /** @type {any} */ (e)), { cause: e });
|
|
103
102
|
}
|
|
104
103
|
},
|
|
105
104
|
|
|
@@ -209,7 +208,7 @@ export function server_data_serializer_json(event, event_state, options) {
|
|
|
209
208
|
} catch (e) {
|
|
210
209
|
// @ts-expect-error
|
|
211
210
|
e.path = 'data' + e.path;
|
|
212
|
-
throw new Error(clarify_devalue_error(event, /** @type {any} */ (e)));
|
|
211
|
+
throw new Error(clarify_devalue_error(event, /** @type {any} */ (e)), { cause: e });
|
|
213
212
|
}
|
|
214
213
|
},
|
|
215
214
|
|
|
@@ -108,6 +108,8 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
|
|
|
108
108
|
|
|
109
109
|
const { data, meta, form_data } = await deserialize_binary_form(event.request);
|
|
110
110
|
|
|
111
|
+
form_client_refreshes = meta.remote_refreshes;
|
|
112
|
+
|
|
111
113
|
// If this is a keyed form instance (created via form.for(key)), add the key to the form data (unless already set)
|
|
112
114
|
// Note that additional_args will only be set if the form is not enhanced, as enhanced forms transfer the key inside `data`.
|
|
113
115
|
if (additional_args && !('id' in data)) {
|
package/src/utils/css.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import MagicString from 'magic-string';
|
|
2
2
|
import * as svelte from 'svelte/compiler';
|
|
3
|
+
import { escape_for_interpolation } from './escape.js';
|
|
3
4
|
|
|
4
5
|
/** @typedef {ReturnType<typeof import('svelte/compiler').parseCss>['children']} StyleSheetChildren */
|
|
5
6
|
|
|
@@ -59,6 +60,8 @@ export function fix_css_urls({
|
|
|
59
60
|
return css;
|
|
60
61
|
}
|
|
61
62
|
|
|
63
|
+
css = escape_for_interpolation(css);
|
|
64
|
+
|
|
62
65
|
// safe guard in case of trailing slashes (but this should never happen)
|
|
63
66
|
if (paths_assets.endsWith('/')) {
|
|
64
67
|
paths_assets = paths_assets.slice(0, -1);
|
package/src/utils/escape.js
CHANGED
|
@@ -60,3 +60,12 @@ export function escape_html(str, is_attr) {
|
|
|
60
60
|
|
|
61
61
|
return escaped_str;
|
|
62
62
|
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Escapes backticks and dollar signs so that they can be safely used in template literals.
|
|
66
|
+
* @param {string} str
|
|
67
|
+
* @returns {string} escaped string
|
|
68
|
+
*/
|
|
69
|
+
export function escape_for_interpolation(str) {
|
|
70
|
+
return str.replaceAll('`', '\\`').replaceAll('$', '\\$');
|
|
71
|
+
}
|
package/src/utils/filesystem.js
CHANGED
|
@@ -8,7 +8,9 @@ export function mkdirp(dir) {
|
|
|
8
8
|
} catch (/** @type {any} */ e) {
|
|
9
9
|
if (e.code === 'EEXIST') {
|
|
10
10
|
if (!fs.statSync(dir).isDirectory()) {
|
|
11
|
-
throw new Error(`Cannot create directory ${dir}, a file already exists at this position
|
|
11
|
+
throw new Error(`Cannot create directory ${dir}, a file already exists at this position`, {
|
|
12
|
+
cause: e
|
|
13
|
+
});
|
|
12
14
|
}
|
|
13
15
|
return;
|
|
14
16
|
}
|
package/src/version.js
CHANGED
package/types/index.d.ts.map
CHANGED
|
@@ -223,6 +223,6 @@
|
|
|
223
223
|
null,
|
|
224
224
|
null
|
|
225
225
|
],
|
|
226
|
-
"mappings": "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
|
|
226
|
+
"mappings": "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",
|
|
227
227
|
"ignoreList": []
|
|
228
228
|
}
|