@sveltejs/kit 2.47.0 → 2.47.2
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 +1 -1
- package/src/core/postbuild/analyse.js +1 -1
- package/src/core/postbuild/prerender.js +5 -3
- package/src/exports/public.d.ts +3 -0
- package/src/exports/vite/index.js +27 -107
- package/src/runtime/app/server/remote/form.js +10 -7
- package/src/runtime/client/remote-functions/form.svelte.js +38 -53
- package/src/runtime/form-utils.svelte.js +36 -17
- package/src/utils/streaming.js +11 -35
- package/src/version.js +1 -1
- package/types/index.d.ts +4 -1
- package/types/index.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -56,7 +56,7 @@ async function analyse({
|
|
|
56
56
|
// essential we do this before analysing the code
|
|
57
57
|
internal.set_building();
|
|
58
58
|
|
|
59
|
-
// set env, in case
|
|
59
|
+
// set env, `read`, and `manifest`, in case they're used in initialisation
|
|
60
60
|
const { publicPrefix: public_prefix, privatePrefix: private_prefix } = config.env;
|
|
61
61
|
const private_env = filter_env(env, private_prefix, public_prefix);
|
|
62
62
|
const public_env = filter_env(env, public_prefix, private_prefix);
|
|
@@ -485,14 +485,16 @@ async function prerender({ hash, out, manifest_path, metadata, verbose, env }) {
|
|
|
485
485
|
}
|
|
486
486
|
}
|
|
487
487
|
|
|
488
|
-
// the user's remote function modules may reference environment variables
|
|
489
|
-
// the top-level so we need to set
|
|
490
|
-
// to avoid potential runtime errors
|
|
488
|
+
// the user's remote function modules may reference environment variables,
|
|
489
|
+
// `read` or the `manifest` at the top-level so we need to set them before
|
|
490
|
+
// evaluating those modules to avoid potential runtime errors
|
|
491
491
|
const { publicPrefix: public_prefix, privatePrefix: private_prefix } = config.env;
|
|
492
492
|
const private_env = filter_env(env, private_prefix, public_prefix);
|
|
493
493
|
const public_env = filter_env(env, public_prefix, private_prefix);
|
|
494
494
|
internal.set_private_env(private_env);
|
|
495
495
|
internal.set_public_env(public_env);
|
|
496
|
+
internal.set_manifest(manifest);
|
|
497
|
+
internal.set_read_implementation((file) => createReadableStream(`${out}/server/${file}`));
|
|
496
498
|
|
|
497
499
|
/** @type {Array<import('types').RemoteInfo & { type: 'prerender'}>} */
|
|
498
500
|
const prerender_functions = [];
|
package/src/exports/public.d.ts
CHANGED
|
@@ -2021,7 +2021,10 @@ export type RemoteForm<Input extends RemoteFormInput | void, Output> = {
|
|
|
2021
2021
|
preflight(schema: StandardSchemaV1<Input, any>): RemoteForm<Input, Output>;
|
|
2022
2022
|
/** Validate the form contents programmatically */
|
|
2023
2023
|
validate(options?: {
|
|
2024
|
+
/** Set this to `true` to also show validation issues of fields that haven't been touched yet. */
|
|
2024
2025
|
includeUntouched?: boolean;
|
|
2026
|
+
/** Set this to `true` to only run the `preflight` validation. */
|
|
2027
|
+
preflightOnly?: boolean;
|
|
2025
2028
|
/** Perform validation as if the form was submitted by the given button. */
|
|
2026
2029
|
submitter?: HTMLButtonElement | HTMLInputElement;
|
|
2027
2030
|
}): Promise<void>;
|
|
@@ -41,7 +41,6 @@ import {
|
|
|
41
41
|
import { import_peer } from '../../utils/import.js';
|
|
42
42
|
import { compact } from '../../utils/array.js';
|
|
43
43
|
import { should_ignore } from './static_analysis/utils.js';
|
|
44
|
-
import { rollupVersion } from 'vite';
|
|
45
44
|
|
|
46
45
|
const cwd = process.cwd();
|
|
47
46
|
|
|
@@ -636,102 +635,30 @@ async function kit({ svelte_config }) {
|
|
|
636
635
|
/** @type {Array<{ hash: string, file: string }>} */
|
|
637
636
|
const remotes = [];
|
|
638
637
|
|
|
639
|
-
/**
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
*/
|
|
645
|
-
const imported_by_remotes = new Set();
|
|
646
|
-
let uid = 1;
|
|
638
|
+
/** @type {Map<string, string>} Maps remote hash -> original module id */
|
|
639
|
+
const remote_original_by_hash = new Map();
|
|
640
|
+
|
|
641
|
+
/** @type {Set<string>} Track which remote hashes have already been emitted */
|
|
642
|
+
const emitted_remote_hashes = new Set();
|
|
647
643
|
|
|
648
644
|
/** @type {import('vite').Plugin} */
|
|
649
645
|
const plugin_remote = {
|
|
650
646
|
name: 'vite-plugin-sveltekit-remote',
|
|
651
647
|
|
|
652
|
-
|
|
653
|
-
if (
|
|
654
|
-
for (const id of info.importedIds) {
|
|
655
|
-
imported_by_remotes.add(id);
|
|
656
|
-
}
|
|
657
|
-
}
|
|
648
|
+
resolveId(id) {
|
|
649
|
+
if (id.startsWith('\0sveltekit-remote:')) return id;
|
|
658
650
|
},
|
|
659
651
|
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
if (Array.isArray(config.build.rollupOptions.output)) {
|
|
672
|
-
// TODO I have no idea how this could occur
|
|
673
|
-
throw new Error('rollupOptions.output cannot be an array');
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
// Set up manualChunks to isolate *.remote.ts files
|
|
677
|
-
const { manualChunks } = config.build.rollupOptions.output;
|
|
678
|
-
|
|
679
|
-
const [major, minor] = rollupVersion.split('.').map(Number);
|
|
680
|
-
const is_outdated_rollup = major === 4 && minor < 52;
|
|
681
|
-
if (is_outdated_rollup) {
|
|
682
|
-
console.warn(
|
|
683
|
-
'Rollup >=4.52.0 is recommended when using SvelteKit remote functions as it fixes some bugs related to code-splitting. Current version: ' +
|
|
684
|
-
rollupVersion
|
|
685
|
-
);
|
|
686
|
-
}
|
|
687
|
-
|
|
688
|
-
config.build.rollupOptions.output = {
|
|
689
|
-
...config.build.rollupOptions.output,
|
|
690
|
-
manualChunks(id, meta) {
|
|
691
|
-
// Check if this is a *.remote.ts file
|
|
692
|
-
if (svelte_config.kit.moduleExtensions.some((ext) => id.endsWith(`.remote${ext}`))) {
|
|
693
|
-
const relative = posixify(path.relative(cwd, id));
|
|
694
|
-
|
|
695
|
-
return `remote-${hash(relative)}`;
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
// With onlyExplicitManualChunks Rollup will keep any manual chunk's dependencies out of that chunk.
|
|
699
|
-
// This option only exists on more recent Rollup versions; use this as a fallback for older versions.
|
|
700
|
-
if (is_outdated_rollup) {
|
|
701
|
-
// Prevent core runtime and env from ending up in a remote chunk, which could break because of initialization order
|
|
702
|
-
if (id === `${runtime_directory}/app/server/index.js`) {
|
|
703
|
-
return 'app-server';
|
|
704
|
-
}
|
|
705
|
-
if (id === `${runtime_directory}/shared-server.js`) {
|
|
706
|
-
return 'app-shared-server';
|
|
707
|
-
}
|
|
708
|
-
if (imported_by_remotes.has(id)) {
|
|
709
|
-
return `chunk-${uid++}`;
|
|
710
|
-
}
|
|
711
|
-
}
|
|
712
|
-
|
|
713
|
-
// If there was an existing manualChunks function, call it
|
|
714
|
-
if (typeof manualChunks === 'function') {
|
|
715
|
-
return manualChunks(id, meta);
|
|
716
|
-
}
|
|
717
|
-
|
|
718
|
-
// If manualChunks is an object, check if this module matches any patterns
|
|
719
|
-
if (manualChunks) {
|
|
720
|
-
for (const name in manualChunks) {
|
|
721
|
-
const patterns = manualChunks[name];
|
|
722
|
-
|
|
723
|
-
// TODO is `id.includes(pattern)` correct?
|
|
724
|
-
if (patterns.some((pattern) => id.includes(pattern))) {
|
|
725
|
-
return name;
|
|
726
|
-
}
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
|
-
}
|
|
730
|
-
};
|
|
731
|
-
|
|
732
|
-
if (!is_outdated_rollup) {
|
|
733
|
-
// @ts-expect-error only exists in more recent Rollup versions https://rollupjs.org/configuration-options/#output-onlyexplicitmanualchunks
|
|
734
|
-
config.build.rollupOptions.output.onlyExplicitManualChunks = true;
|
|
652
|
+
load(id) {
|
|
653
|
+
// On-the-fly generated entry point for remote file just forwards the original module
|
|
654
|
+
// We're not using manualChunks because it can cause problems with circular dependencies
|
|
655
|
+
// (e.g. https://github.com/sveltejs/kit/issues/14679) and module ordering in general
|
|
656
|
+
// (e.g. https://github.com/sveltejs/kit/issues/14590).
|
|
657
|
+
if (id.startsWith('\0sveltekit-remote:')) {
|
|
658
|
+
const hash_id = id.slice('\0sveltekit-remote:'.length);
|
|
659
|
+
const original = remote_original_by_hash.get(hash_id);
|
|
660
|
+
if (!original) throw new Error(`Expected to find metadata for remote file ${id}`);
|
|
661
|
+
return `import * as m from ${s(original)};\nexport default m;`;
|
|
735
662
|
}
|
|
736
663
|
},
|
|
737
664
|
|
|
@@ -746,7 +673,6 @@ async function kit({ svelte_config }) {
|
|
|
746
673
|
}
|
|
747
674
|
|
|
748
675
|
const file = posixify(path.relative(cwd, id));
|
|
749
|
-
|
|
750
676
|
const remote = {
|
|
751
677
|
hash: hash(file),
|
|
752
678
|
file
|
|
@@ -770,10 +696,17 @@ async function kit({ svelte_config }) {
|
|
|
770
696
|
}
|
|
771
697
|
`;
|
|
772
698
|
|
|
699
|
+
// Emit a dedicated entry chunk for this remote in SSR builds (prod only)
|
|
773
700
|
if (!dev_server) {
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
701
|
+
remote_original_by_hash.set(remote.hash, id);
|
|
702
|
+
if (!emitted_remote_hashes.has(remote.hash)) {
|
|
703
|
+
this.emitFile({
|
|
704
|
+
type: 'chunk',
|
|
705
|
+
id: `\0sveltekit-remote:${remote.hash}`,
|
|
706
|
+
name: `remote-${remote.hash}`
|
|
707
|
+
});
|
|
708
|
+
emitted_remote_hashes.add(remote.hash);
|
|
709
|
+
}
|
|
777
710
|
}
|
|
778
711
|
|
|
779
712
|
return code;
|
|
@@ -826,19 +759,6 @@ async function kit({ svelte_config }) {
|
|
|
826
759
|
return {
|
|
827
760
|
code: result
|
|
828
761
|
};
|
|
829
|
-
},
|
|
830
|
-
|
|
831
|
-
writeBundle() {
|
|
832
|
-
for (const remote of remotes) {
|
|
833
|
-
const file = `${out}/server/chunks/remote-${remote.hash}.js`;
|
|
834
|
-
const code = fs.readFileSync(file, 'utf-8');
|
|
835
|
-
|
|
836
|
-
fs.writeFileSync(
|
|
837
|
-
file,
|
|
838
|
-
// build process might have minified/adjusted the $$_self_$$ variable, but not the fake global $$_export_$$ function
|
|
839
|
-
code.replace(/\$\$_export_\$\$\((.+?)\)/, (_, name) => `export default ${name};`)
|
|
840
|
-
);
|
|
841
|
-
}
|
|
842
762
|
}
|
|
843
763
|
};
|
|
844
764
|
|
|
@@ -5,11 +5,12 @@ import { get_request_store } from '@sveltejs/kit/internal/server';
|
|
|
5
5
|
import { DEV } from 'esm-env';
|
|
6
6
|
import {
|
|
7
7
|
convert_formdata,
|
|
8
|
-
flatten_issues,
|
|
9
8
|
create_field_proxy,
|
|
10
9
|
set_nested_value,
|
|
11
10
|
throw_on_old_property_access,
|
|
12
|
-
deep_set
|
|
11
|
+
deep_set,
|
|
12
|
+
normalize_issue,
|
|
13
|
+
flatten_issues
|
|
13
14
|
} from '../../../form-utils.svelte.js';
|
|
14
15
|
import { get_cache, run_remote_function } from './shared.js';
|
|
15
16
|
|
|
@@ -46,7 +47,7 @@ import { get_cache, run_remote_function } from './shared.js';
|
|
|
46
47
|
* @template Output
|
|
47
48
|
* @overload
|
|
48
49
|
* @param {Schema} validate
|
|
49
|
-
* @param {(data: StandardSchemaV1.InferOutput<Schema>, invalid: import('@sveltejs/kit').Invalid<StandardSchemaV1.
|
|
50
|
+
* @param {(data: StandardSchemaV1.InferOutput<Schema>, invalid: import('@sveltejs/kit').Invalid<StandardSchemaV1.InferInput<Schema>>) => MaybePromise<Output>} fn
|
|
50
51
|
* @returns {RemoteForm<StandardSchemaV1.InferInput<Schema>, Output>}
|
|
51
52
|
* @since 2.27
|
|
52
53
|
*/
|
|
@@ -142,7 +143,7 @@ export function form(validate_or_fn, maybe_fn) {
|
|
|
142
143
|
}
|
|
143
144
|
}
|
|
144
145
|
|
|
145
|
-
/** @type {{ submission: true, input?: Record<string, any>, issues?:
|
|
146
|
+
/** @type {{ submission: true, input?: Record<string, any>, issues?: InternalRemoteFormIssue[], result: Output }} */
|
|
146
147
|
const output = {};
|
|
147
148
|
|
|
148
149
|
// make it possible to differentiate between user submission and programmatic `field.set(...)` updates
|
|
@@ -209,6 +210,8 @@ export function form(validate_or_fn, maybe_fn) {
|
|
|
209
210
|
Object.defineProperty(instance, 'fields', {
|
|
210
211
|
get() {
|
|
211
212
|
const data = get_cache(__)?.[''];
|
|
213
|
+
const issues = flatten_issues(data?.issues ?? []);
|
|
214
|
+
|
|
212
215
|
return create_field_proxy(
|
|
213
216
|
{},
|
|
214
217
|
() => data?.input ?? {},
|
|
@@ -224,7 +227,7 @@ export function form(validate_or_fn, maybe_fn) {
|
|
|
224
227
|
|
|
225
228
|
(get_cache(__)[''] ??= {}).input = input;
|
|
226
229
|
},
|
|
227
|
-
() =>
|
|
230
|
+
() => issues
|
|
228
231
|
);
|
|
229
232
|
}
|
|
230
233
|
});
|
|
@@ -293,13 +296,13 @@ export function form(validate_or_fn, maybe_fn) {
|
|
|
293
296
|
}
|
|
294
297
|
|
|
295
298
|
/**
|
|
296
|
-
* @param {{ issues?:
|
|
299
|
+
* @param {{ issues?: InternalRemoteFormIssue[], input?: Record<string, any>, result: any }} output
|
|
297
300
|
* @param {readonly StandardSchemaV1.Issue[]} issues
|
|
298
301
|
* @param {boolean} is_remote_request
|
|
299
302
|
* @param {FormData} form_data
|
|
300
303
|
*/
|
|
301
304
|
function handle_issues(output, issues, is_remote_request, form_data) {
|
|
302
|
-
output.issues =
|
|
305
|
+
output.issues = issues.map((issue) => normalize_issue(issue, true));
|
|
303
306
|
|
|
304
307
|
// if it was a progressively-enhanced submission, we don't need
|
|
305
308
|
// to return the input — it's already there
|
|
@@ -18,27 +18,29 @@ import {
|
|
|
18
18
|
set_nested_value,
|
|
19
19
|
throw_on_old_property_access,
|
|
20
20
|
split_path,
|
|
21
|
-
build_path_string
|
|
21
|
+
build_path_string,
|
|
22
|
+
normalize_issue
|
|
22
23
|
} from '../../form-utils.svelte.js';
|
|
23
24
|
|
|
24
25
|
/**
|
|
25
|
-
* Merge client issues into server issues
|
|
26
|
-
*
|
|
27
|
-
* @param {
|
|
28
|
-
* @
|
|
26
|
+
* Merge client issues into server issues. Server issues are persisted unless
|
|
27
|
+
* a client-issue exists for the same path, in which case the client-issue overrides it.
|
|
28
|
+
* @param {FormData} form_data
|
|
29
|
+
* @param {InternalRemoteFormIssue[]} current_issues
|
|
30
|
+
* @param {InternalRemoteFormIssue[]} client_issues
|
|
31
|
+
* @returns {InternalRemoteFormIssue[]}
|
|
29
32
|
*/
|
|
30
|
-
function merge_with_server_issues(current_issues, client_issues) {
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
for (const [key, new_issue_list] of Object.entries(client_issues)) {
|
|
38
|
-
merged_issues[key] = [...(merged_issues[key] || []), ...new_issue_list];
|
|
39
|
-
}
|
|
33
|
+
function merge_with_server_issues(form_data, current_issues, client_issues) {
|
|
34
|
+
const merged = [
|
|
35
|
+
...current_issues.filter(
|
|
36
|
+
(issue) => issue.server && !client_issues.some((i) => i.name === issue.name)
|
|
37
|
+
),
|
|
38
|
+
...client_issues
|
|
39
|
+
];
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
const keys = Array.from(form_data.keys());
|
|
42
|
+
|
|
43
|
+
return merged.sort((a, b) => keys.indexOf(a.name) - keys.indexOf(b.name));
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
/**
|
|
@@ -77,8 +79,10 @@ export function form(id) {
|
|
|
77
79
|
*/
|
|
78
80
|
const version_reads = new Set();
|
|
79
81
|
|
|
80
|
-
/** @type {
|
|
81
|
-
let
|
|
82
|
+
/** @type {InternalRemoteFormIssue[]} */
|
|
83
|
+
let raw_issues = $state.raw([]);
|
|
84
|
+
|
|
85
|
+
const issues = $derived(flatten_issues(raw_issues));
|
|
82
86
|
|
|
83
87
|
/** @type {any} */
|
|
84
88
|
let result = $state.raw(remote_responses[action_id]);
|
|
@@ -132,8 +136,11 @@ export function form(id) {
|
|
|
132
136
|
const validated = await preflight_schema?.['~standard'].validate(data);
|
|
133
137
|
|
|
134
138
|
if (validated?.issues) {
|
|
135
|
-
|
|
136
|
-
|
|
139
|
+
raw_issues = merge_with_server_issues(
|
|
140
|
+
form_data,
|
|
141
|
+
raw_issues,
|
|
142
|
+
validated.issues.map((issue) => normalize_issue(issue, false))
|
|
143
|
+
);
|
|
137
144
|
return;
|
|
138
145
|
}
|
|
139
146
|
|
|
@@ -223,14 +230,7 @@ export function form(id) {
|
|
|
223
230
|
const form_result = /** @type { RemoteFunctionResponse} */ (await response.json());
|
|
224
231
|
|
|
225
232
|
if (form_result.type === 'result') {
|
|
226
|
-
({ issues =
|
|
227
|
-
|
|
228
|
-
// Mark server issues with server: true
|
|
229
|
-
for (const issue_list of Object.values(issues)) {
|
|
230
|
-
for (const issue of issue_list) {
|
|
231
|
-
issue.server = true;
|
|
232
|
-
}
|
|
233
|
-
}
|
|
233
|
+
({ issues: raw_issues = [], result } = devalue.parse(form_result.result, app.decoders));
|
|
234
234
|
|
|
235
235
|
if (issues.$) {
|
|
236
236
|
release_overrides(updates);
|
|
@@ -572,7 +572,7 @@ export function form(id) {
|
|
|
572
572
|
},
|
|
573
573
|
validate: {
|
|
574
574
|
/** @type {RemoteForm<any, any>['validate']} */
|
|
575
|
-
value: async ({ includeUntouched = false, submitter } = {}) => {
|
|
575
|
+
value: async ({ includeUntouched = false, preflightOnly = false, submitter } = {}) => {
|
|
576
576
|
if (!element) return;
|
|
577
577
|
|
|
578
578
|
const id = ++validate_id;
|
|
@@ -582,7 +582,7 @@ export function form(id) {
|
|
|
582
582
|
|
|
583
583
|
const form_data = new FormData(element, submitter);
|
|
584
584
|
|
|
585
|
-
/** @type {
|
|
585
|
+
/** @type {InternalRemoteFormIssue[]} */
|
|
586
586
|
let array = [];
|
|
587
587
|
|
|
588
588
|
const validated = await preflight_schema?.['~standard'].validate(convert(form_data));
|
|
@@ -592,8 +592,8 @@ export function form(id) {
|
|
|
592
592
|
}
|
|
593
593
|
|
|
594
594
|
if (validated?.issues) {
|
|
595
|
-
array = validated.issues;
|
|
596
|
-
} else {
|
|
595
|
+
array = validated.issues.map((issue) => normalize_issue(issue, false));
|
|
596
|
+
} else if (!preflightOnly) {
|
|
597
597
|
form_data.set('sveltekit:validate_only', 'true');
|
|
598
598
|
|
|
599
599
|
const response = await fetch(`${base}/${app_dir}/remote/${action_id}`, {
|
|
@@ -608,36 +608,21 @@ export function form(id) {
|
|
|
608
608
|
}
|
|
609
609
|
|
|
610
610
|
if (result.type === 'result') {
|
|
611
|
-
array = /** @type {
|
|
611
|
+
array = /** @type {InternalRemoteFormIssue[]} */ (
|
|
612
612
|
devalue.parse(result.result, app.decoders)
|
|
613
613
|
);
|
|
614
614
|
}
|
|
615
615
|
}
|
|
616
616
|
|
|
617
617
|
if (!includeUntouched && !submitted) {
|
|
618
|
-
array = array.filter((issue) =>
|
|
619
|
-
if (issue.path !== undefined) {
|
|
620
|
-
let path = '';
|
|
621
|
-
|
|
622
|
-
for (const segment of issue.path) {
|
|
623
|
-
const key = typeof segment === 'object' ? segment.key : segment;
|
|
624
|
-
|
|
625
|
-
if (typeof key === 'number') {
|
|
626
|
-
path += `[${key}]`;
|
|
627
|
-
} else if (typeof key === 'string') {
|
|
628
|
-
path += path === '' ? key : '.' + key;
|
|
629
|
-
}
|
|
630
|
-
}
|
|
631
|
-
|
|
632
|
-
return touched[path];
|
|
633
|
-
}
|
|
634
|
-
});
|
|
618
|
+
array = array.filter((issue) => touched[issue.name]);
|
|
635
619
|
}
|
|
636
620
|
|
|
637
|
-
const is_server_validation = !validated?.issues;
|
|
638
|
-
const new_issues = flatten_issues(array, is_server_validation);
|
|
621
|
+
const is_server_validation = !validated?.issues && !preflightOnly;
|
|
639
622
|
|
|
640
|
-
|
|
623
|
+
raw_issues = is_server_validation
|
|
624
|
+
? array
|
|
625
|
+
: merge_with_server_issues(form_data, raw_issues, array);
|
|
641
626
|
}
|
|
642
627
|
},
|
|
643
628
|
enhance: {
|
|
@@ -116,39 +116,58 @@ export function deep_set(object, keys, value) {
|
|
|
116
116
|
}
|
|
117
117
|
|
|
118
118
|
/**
|
|
119
|
-
* @param {
|
|
120
|
-
* @param {boolean}
|
|
119
|
+
* @param {StandardSchemaV1.Issue} issue
|
|
120
|
+
* @param {boolean} server Whether this issue came from server validation
|
|
121
121
|
*/
|
|
122
|
-
export function
|
|
122
|
+
export function normalize_issue(issue, server = false) {
|
|
123
|
+
/** @type {InternalRemoteFormIssue} */
|
|
124
|
+
const normalized = { name: '', path: [], message: issue.message, server };
|
|
125
|
+
|
|
126
|
+
if (issue.path !== undefined) {
|
|
127
|
+
let name = '';
|
|
128
|
+
|
|
129
|
+
for (const segment of issue.path) {
|
|
130
|
+
const key = /** @type {string | number} */ (
|
|
131
|
+
typeof segment === 'object' ? segment.key : segment
|
|
132
|
+
);
|
|
133
|
+
|
|
134
|
+
normalized.path.push(key);
|
|
135
|
+
|
|
136
|
+
if (typeof key === 'number') {
|
|
137
|
+
name += `[${key}]`;
|
|
138
|
+
} else if (typeof key === 'string') {
|
|
139
|
+
name += name === '' ? key : '.' + key;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
normalized.name = name;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return normalized;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* @param {InternalRemoteFormIssue[]} issues
|
|
151
|
+
*/
|
|
152
|
+
export function flatten_issues(issues) {
|
|
123
153
|
/** @type {Record<string, InternalRemoteFormIssue[]>} */
|
|
124
154
|
const result = {};
|
|
125
155
|
|
|
126
156
|
for (const issue of issues) {
|
|
127
|
-
|
|
128
|
-
const normalized = { name: '', path: [], message: issue.message, server };
|
|
129
|
-
|
|
130
|
-
(result.$ ??= []).push(normalized);
|
|
157
|
+
(result.$ ??= []).push(issue);
|
|
131
158
|
|
|
132
159
|
let name = '';
|
|
133
160
|
|
|
134
161
|
if (issue.path !== undefined) {
|
|
135
|
-
for (const
|
|
136
|
-
const key = /** @type {string | number} */ (
|
|
137
|
-
typeof segment === 'object' ? segment.key : segment
|
|
138
|
-
);
|
|
139
|
-
|
|
140
|
-
normalized.path.push(key);
|
|
141
|
-
|
|
162
|
+
for (const key of issue.path) {
|
|
142
163
|
if (typeof key === 'number') {
|
|
143
164
|
name += `[${key}]`;
|
|
144
165
|
} else if (typeof key === 'string') {
|
|
145
166
|
name += name === '' ? key : '.' + key;
|
|
146
167
|
}
|
|
147
168
|
|
|
148
|
-
(result[name] ??= []).push(
|
|
169
|
+
(result[name] ??= []).push(issue);
|
|
149
170
|
}
|
|
150
|
-
|
|
151
|
-
normalized.name = name;
|
|
152
171
|
}
|
|
153
172
|
}
|
|
154
173
|
|
package/src/utils/streaming.js
CHANGED
|
@@ -1,18 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* @returns {import('types').Deferred & { promise: Promise<any> }}}
|
|
3
|
-
*/
|
|
4
|
-
function defer() {
|
|
5
|
-
let fulfil;
|
|
6
|
-
let reject;
|
|
7
|
-
|
|
8
|
-
const promise = new Promise((f, r) => {
|
|
9
|
-
fulfil = f;
|
|
10
|
-
reject = r;
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
// @ts-expect-error
|
|
14
|
-
return { promise, fulfil, reject };
|
|
15
|
-
}
|
|
1
|
+
import { with_resolvers } from './promise.js';
|
|
16
2
|
|
|
17
3
|
/**
|
|
18
4
|
* Create an async iterator and a function to push values into it
|
|
@@ -23,9 +9,11 @@ function defer() {
|
|
|
23
9
|
* }}
|
|
24
10
|
*/
|
|
25
11
|
export function create_async_iterator() {
|
|
26
|
-
let
|
|
12
|
+
let resolved = -1;
|
|
13
|
+
let returned = -1;
|
|
27
14
|
|
|
28
|
-
|
|
15
|
+
/** @type {import('./promise.js').PromiseWithResolvers<T>[]} */
|
|
16
|
+
const deferred = [];
|
|
29
17
|
|
|
30
18
|
return {
|
|
31
19
|
iterate: (transform = (x) => x) => {
|
|
@@ -33,32 +21,20 @@ export function create_async_iterator() {
|
|
|
33
21
|
[Symbol.asyncIterator]() {
|
|
34
22
|
return {
|
|
35
23
|
next: async () => {
|
|
36
|
-
const next =
|
|
24
|
+
const next = deferred[++returned];
|
|
25
|
+
if (!next) return { value: null, done: true };
|
|
37
26
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
return { value: transform(next.value), done: false };
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
return next;
|
|
27
|
+
const value = await next.promise;
|
|
28
|
+
return { value: transform(value), done: false };
|
|
44
29
|
}
|
|
45
30
|
};
|
|
46
31
|
}
|
|
47
32
|
};
|
|
48
33
|
},
|
|
49
34
|
add: (promise) => {
|
|
50
|
-
|
|
51
|
-
|
|
35
|
+
deferred.push(with_resolvers());
|
|
52
36
|
void promise.then((value) => {
|
|
53
|
-
deferred[
|
|
54
|
-
value,
|
|
55
|
-
done: false
|
|
56
|
-
});
|
|
57
|
-
deferred.push(defer());
|
|
58
|
-
|
|
59
|
-
if (--count === 0) {
|
|
60
|
-
deferred[deferred.length - 1].fulfil({ done: true });
|
|
61
|
-
}
|
|
37
|
+
deferred[++resolved].resolve(value);
|
|
62
38
|
});
|
|
63
39
|
}
|
|
64
40
|
};
|
package/src/version.js
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -1997,7 +1997,10 @@ declare module '@sveltejs/kit' {
|
|
|
1997
1997
|
preflight(schema: StandardSchemaV1<Input, any>): RemoteForm<Input, Output>;
|
|
1998
1998
|
/** Validate the form contents programmatically */
|
|
1999
1999
|
validate(options?: {
|
|
2000
|
+
/** Set this to `true` to also show validation issues of fields that haven't been touched yet. */
|
|
2000
2001
|
includeUntouched?: boolean;
|
|
2002
|
+
/** Set this to `true` to only run the `preflight` validation. */
|
|
2003
|
+
preflightOnly?: boolean;
|
|
2001
2004
|
/** Perform validation as if the form was submitted by the given button. */
|
|
2002
2005
|
submitter?: HTMLButtonElement | HTMLInputElement;
|
|
2003
2006
|
}): Promise<void>;
|
|
@@ -3158,7 +3161,7 @@ declare module '$app/server' {
|
|
|
3158
3161
|
*
|
|
3159
3162
|
* @since 2.27
|
|
3160
3163
|
*/
|
|
3161
|
-
export function form<Schema extends StandardSchemaV1<RemoteFormInput, Record<string, any>>, Output>(validate: Schema, fn: (data: StandardSchemaV1.InferOutput<Schema>, invalid: import("@sveltejs/kit").Invalid<StandardSchemaV1.
|
|
3164
|
+
export function form<Schema extends StandardSchemaV1<RemoteFormInput, Record<string, any>>, Output>(validate: Schema, fn: (data: StandardSchemaV1.InferOutput<Schema>, invalid: import("@sveltejs/kit").Invalid<StandardSchemaV1.InferInput<Schema>>) => MaybePromise<Output>): RemoteForm<StandardSchemaV1.InferInput<Schema>, Output>;
|
|
3162
3165
|
/**
|
|
3163
3166
|
* Creates a remote prerender function. When called from the browser, the function will be invoked on the server via a `fetch` call.
|
|
3164
3167
|
*
|
package/types/index.d.ts.map
CHANGED
|
@@ -211,6 +211,6 @@
|
|
|
211
211
|
null,
|
|
212
212
|
null
|
|
213
213
|
],
|
|
214
|
-
"mappings": "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
|
|
214
|
+
"mappings": "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",
|
|
215
215
|
"ignoreList": []
|
|
216
216
|
}
|