@sveltejs/kit 2.37.1 → 2.38.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 +1 -1
- package/src/exports/internal/remote-functions.js +8 -2
- package/src/runtime/app/server/remote/query.js +146 -0
- package/src/runtime/client/remote-functions/index.js +1 -1
- package/src/runtime/client/remote-functions/query.svelte.js +95 -1
- package/src/runtime/server/remote.js +46 -1
- package/src/types/internal.d.ts +10 -0
- package/src/version.js +1 -1
- package/types/index.d.ts +18 -0
- package/types/index.d.ts.map +1 -1
package/package.json
CHANGED
|
@@ -10,9 +10,15 @@ export function validate_remote_functions(module, file) {
|
|
|
10
10
|
}
|
|
11
11
|
|
|
12
12
|
for (const name in module) {
|
|
13
|
-
const type = module[name]?.__?.type;
|
|
13
|
+
const type = /** @type {import('types').RemoteInfo['type']} */ (module[name]?.__?.type);
|
|
14
14
|
|
|
15
|
-
if (
|
|
15
|
+
if (
|
|
16
|
+
type !== 'form' &&
|
|
17
|
+
type !== 'command' &&
|
|
18
|
+
type !== 'query' &&
|
|
19
|
+
type !== 'query_batch' &&
|
|
20
|
+
type !== 'prerender'
|
|
21
|
+
) {
|
|
16
22
|
throw new Error(
|
|
17
23
|
`\`${name}\` exported from ${file} is invalid — all exports from this file must be remote functions`
|
|
18
24
|
);
|
|
@@ -122,3 +122,149 @@ export function query(validate_or_fn, maybe_fn) {
|
|
|
122
122
|
|
|
123
123
|
return wrapper;
|
|
124
124
|
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Creates a batch query function that collects multiple calls and executes them in a single request
|
|
128
|
+
*
|
|
129
|
+
* See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query.batch) for full documentation.
|
|
130
|
+
*
|
|
131
|
+
* @template Input
|
|
132
|
+
* @template Output
|
|
133
|
+
* @overload
|
|
134
|
+
* @param {'unchecked'} validate
|
|
135
|
+
* @param {(args: Input[]) => MaybePromise<(arg: Input, idx: number) => Output>} fn
|
|
136
|
+
* @returns {RemoteQueryFunction<Input, Output>}
|
|
137
|
+
* @since 2.35
|
|
138
|
+
*/
|
|
139
|
+
/**
|
|
140
|
+
* Creates a batch query function that collects multiple calls and executes them in a single request
|
|
141
|
+
*
|
|
142
|
+
* See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query.batch) for full documentation.
|
|
143
|
+
*
|
|
144
|
+
* @template {StandardSchemaV1} Schema
|
|
145
|
+
* @template Output
|
|
146
|
+
* @overload
|
|
147
|
+
* @param {Schema} schema
|
|
148
|
+
* @param {(args: StandardSchemaV1.InferOutput<Schema>[]) => MaybePromise<(arg: StandardSchemaV1.InferOutput<Schema>, idx: number) => Output>} fn
|
|
149
|
+
* @returns {RemoteQueryFunction<StandardSchemaV1.InferInput<Schema>, Output>}
|
|
150
|
+
* @since 2.35
|
|
151
|
+
*/
|
|
152
|
+
/**
|
|
153
|
+
* @template Input
|
|
154
|
+
* @template Output
|
|
155
|
+
* @param {any} validate_or_fn
|
|
156
|
+
* @param {(args?: Input[]) => MaybePromise<(arg: Input, idx: number) => Output>} [maybe_fn]
|
|
157
|
+
* @returns {RemoteQueryFunction<Input, Output>}
|
|
158
|
+
* @since 2.35
|
|
159
|
+
*/
|
|
160
|
+
/*@__NO_SIDE_EFFECTS__*/
|
|
161
|
+
function batch(validate_or_fn, maybe_fn) {
|
|
162
|
+
/** @type {(args?: Input[]) => (arg: Input, idx: number) => Output} */
|
|
163
|
+
const fn = maybe_fn ?? validate_or_fn;
|
|
164
|
+
|
|
165
|
+
/** @type {(arg?: any) => MaybePromise<Input>} */
|
|
166
|
+
const validate = create_validator(validate_or_fn, maybe_fn);
|
|
167
|
+
|
|
168
|
+
/** @type {RemoteInfo & { type: 'query_batch' }} */
|
|
169
|
+
const __ = {
|
|
170
|
+
type: 'query_batch',
|
|
171
|
+
id: '',
|
|
172
|
+
name: '',
|
|
173
|
+
run: (args) => {
|
|
174
|
+
const { event, state } = get_request_store();
|
|
175
|
+
|
|
176
|
+
return run_remote_function(
|
|
177
|
+
event,
|
|
178
|
+
state,
|
|
179
|
+
false,
|
|
180
|
+
args,
|
|
181
|
+
(array) => Promise.all(array.map(validate)),
|
|
182
|
+
fn
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
/** @type {{ args: any[], resolvers: Array<{resolve: (value: any) => void, reject: (error: any) => void}> }} */
|
|
188
|
+
let batching = { args: [], resolvers: [] };
|
|
189
|
+
|
|
190
|
+
/** @type {RemoteQueryFunction<Input, Output> & { __: RemoteInfo }} */
|
|
191
|
+
const wrapper = (arg) => {
|
|
192
|
+
if (prerendering) {
|
|
193
|
+
throw new Error(
|
|
194
|
+
`Cannot call query.batch '${__.name}' while prerendering, as prerendered pages need static data. Use 'prerender' from $app/server instead`
|
|
195
|
+
);
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
const { event, state } = get_request_store();
|
|
199
|
+
|
|
200
|
+
/** @type {Promise<any> & Partial<RemoteQuery<any>>} */
|
|
201
|
+
const promise = get_response(__.id, arg, state, () => {
|
|
202
|
+
// Collect all the calls to the same query in the same macrotask,
|
|
203
|
+
// then execute them as one backend request.
|
|
204
|
+
return new Promise((resolve, reject) => {
|
|
205
|
+
// We don't need to deduplicate args here, because get_response already caches/reuses identical calls
|
|
206
|
+
batching.args.push(arg);
|
|
207
|
+
batching.resolvers.push({ resolve, reject });
|
|
208
|
+
|
|
209
|
+
if (batching.args.length > 1) return;
|
|
210
|
+
|
|
211
|
+
setTimeout(async () => {
|
|
212
|
+
const batched = batching;
|
|
213
|
+
batching = { args: [], resolvers: [] };
|
|
214
|
+
|
|
215
|
+
try {
|
|
216
|
+
const get_result = await run_remote_function(
|
|
217
|
+
event,
|
|
218
|
+
state,
|
|
219
|
+
false,
|
|
220
|
+
batched.args,
|
|
221
|
+
(array) => Promise.all(array.map(validate)),
|
|
222
|
+
fn
|
|
223
|
+
);
|
|
224
|
+
|
|
225
|
+
for (let i = 0; i < batched.resolvers.length; i++) {
|
|
226
|
+
try {
|
|
227
|
+
batched.resolvers[i].resolve(get_result(batched.args[i], i));
|
|
228
|
+
} catch (error) {
|
|
229
|
+
batched.resolvers[i].reject(error);
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
} catch (error) {
|
|
233
|
+
for (const resolver of batched.resolvers) {
|
|
234
|
+
resolver.reject(error);
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}, 0);
|
|
238
|
+
});
|
|
239
|
+
});
|
|
240
|
+
|
|
241
|
+
promise.catch(() => {});
|
|
242
|
+
|
|
243
|
+
promise.refresh = async () => {
|
|
244
|
+
const { state } = get_request_store();
|
|
245
|
+
const refreshes = state.refreshes;
|
|
246
|
+
|
|
247
|
+
if (!refreshes) {
|
|
248
|
+
throw new Error(
|
|
249
|
+
`Cannot call refresh on query.batch '${__.name}' because it is not executed in the context of a command/form remote function`
|
|
250
|
+
);
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
const cache_key = create_remote_cache_key(__.id, stringify_remote_arg(arg, state.transport));
|
|
254
|
+
refreshes[cache_key] = await /** @type {Promise<any>} */ (promise);
|
|
255
|
+
};
|
|
256
|
+
|
|
257
|
+
promise.withOverride = () => {
|
|
258
|
+
throw new Error(`Cannot call '${__.name}.withOverride()' on the server`);
|
|
259
|
+
};
|
|
260
|
+
|
|
261
|
+
return /** @type {RemoteQuery<Output>} */ (promise);
|
|
262
|
+
};
|
|
263
|
+
|
|
264
|
+
Object.defineProperty(wrapper, '__', { value: __ });
|
|
265
|
+
|
|
266
|
+
return wrapper;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// Add batch as a property to the query function
|
|
270
|
+
Object.defineProperty(query, 'batch', { value: batch, enumerable: true });
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
/** @import { RemoteQueryFunction } from '@sveltejs/kit' */
|
|
2
|
+
/** @import { RemoteFunctionResponse } from 'types' */
|
|
2
3
|
import { app_dir, base } from '__sveltekit/paths';
|
|
3
|
-
import { remote_responses, started } from '../client.js';
|
|
4
|
+
import { app, goto, remote_responses, started } from '../client.js';
|
|
4
5
|
import { tick } from 'svelte';
|
|
5
6
|
import { create_remote_function, remote_request } from './shared.svelte.js';
|
|
7
|
+
import * as devalue from 'devalue';
|
|
8
|
+
import { HttpError, Redirect } from '@sveltejs/kit/internal';
|
|
6
9
|
|
|
7
10
|
/**
|
|
8
11
|
* @param {string} id
|
|
@@ -25,6 +28,97 @@ export function query(id) {
|
|
|
25
28
|
});
|
|
26
29
|
}
|
|
27
30
|
|
|
31
|
+
/**
|
|
32
|
+
* @param {string} id
|
|
33
|
+
* @returns {(arg: any) => Query<any>}
|
|
34
|
+
*/
|
|
35
|
+
export function query_batch(id) {
|
|
36
|
+
/** @type {Map<string, Array<{resolve: (value: any) => void, reject: (error: any) => void}>>} */
|
|
37
|
+
let batching = new Map();
|
|
38
|
+
|
|
39
|
+
return create_remote_function(id, (cache_key, payload) => {
|
|
40
|
+
return new Query(cache_key, () => {
|
|
41
|
+
if (!started) {
|
|
42
|
+
const result = remote_responses[cache_key];
|
|
43
|
+
if (result) {
|
|
44
|
+
return result;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// Collect all the calls to the same query in the same macrotask,
|
|
49
|
+
// then execute them as one backend request.
|
|
50
|
+
return new Promise((resolve, reject) => {
|
|
51
|
+
// create_remote_function caches identical calls, but in case a refresh to the same query is called multiple times this function
|
|
52
|
+
// is invoked multiple times with the same payload, so we need to deduplicate here
|
|
53
|
+
const entry = batching.get(payload) ?? [];
|
|
54
|
+
entry.push({ resolve, reject });
|
|
55
|
+
batching.set(payload, entry);
|
|
56
|
+
|
|
57
|
+
if (batching.size > 1) return;
|
|
58
|
+
|
|
59
|
+
// Wait for the next macrotask - don't use microtask as Svelte runtime uses these to collect changes and flush them,
|
|
60
|
+
// and flushes could reveal more queries that should be batched.
|
|
61
|
+
setTimeout(async () => {
|
|
62
|
+
const batched = batching;
|
|
63
|
+
batching = new Map();
|
|
64
|
+
|
|
65
|
+
try {
|
|
66
|
+
const response = await fetch(`${base}/${app_dir}/remote/${id}`, {
|
|
67
|
+
method: 'POST',
|
|
68
|
+
body: JSON.stringify({
|
|
69
|
+
payloads: Array.from(batched.keys())
|
|
70
|
+
}),
|
|
71
|
+
headers: {
|
|
72
|
+
'Content-Type': 'application/json'
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
if (!response.ok) {
|
|
77
|
+
throw new Error('Failed to execute batch query');
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const result = /** @type {RemoteFunctionResponse} */ (await response.json());
|
|
81
|
+
if (result.type === 'error') {
|
|
82
|
+
throw new HttpError(result.status ?? 500, result.error);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
if (result.type === 'redirect') {
|
|
86
|
+
// TODO double-check this
|
|
87
|
+
await goto(result.location);
|
|
88
|
+
await new Promise((r) => setTimeout(r, 100));
|
|
89
|
+
throw new Redirect(307, result.location);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
const results = devalue.parse(result.result, app.decoders);
|
|
93
|
+
|
|
94
|
+
// Resolve individual queries
|
|
95
|
+
// Maps guarantee insertion order so we can do it like this
|
|
96
|
+
let i = 0;
|
|
97
|
+
|
|
98
|
+
for (const resolvers of batched.values()) {
|
|
99
|
+
for (const { resolve, reject } of resolvers) {
|
|
100
|
+
if (results[i].type === 'error') {
|
|
101
|
+
reject(new HttpError(results[i].status, results[i].error));
|
|
102
|
+
} else {
|
|
103
|
+
resolve(results[i].data);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
i++;
|
|
107
|
+
}
|
|
108
|
+
} catch (error) {
|
|
109
|
+
// Reject all queries in the batch
|
|
110
|
+
for (const resolver of batched.values()) {
|
|
111
|
+
for (const { reject } of resolver) {
|
|
112
|
+
reject(error);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}, 0);
|
|
117
|
+
});
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
|
|
28
122
|
/**
|
|
29
123
|
* @template T
|
|
30
124
|
* @implements {Partial<Promise<T>>}
|
|
@@ -60,12 +60,57 @@ async function handle_remote_call_internal(event, state, options, manifest, id)
|
|
|
60
60
|
let form_client_refreshes;
|
|
61
61
|
|
|
62
62
|
try {
|
|
63
|
+
if (info.type === 'query_batch') {
|
|
64
|
+
if (event.request.method !== 'POST') {
|
|
65
|
+
throw new SvelteKitError(
|
|
66
|
+
405,
|
|
67
|
+
'Method Not Allowed',
|
|
68
|
+
`\`query.batch\` functions must be invoked via POST request, not ${event.request.method}`
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** @type {{ payloads: string[] }} */
|
|
73
|
+
const { payloads } = await event.request.json();
|
|
74
|
+
|
|
75
|
+
const args = payloads.map((payload) => parse_remote_arg(payload, transport));
|
|
76
|
+
const get_result = await with_request_store({ event, state }, () => info.run(args));
|
|
77
|
+
const results = await Promise.all(
|
|
78
|
+
args.map(async (arg, i) => {
|
|
79
|
+
try {
|
|
80
|
+
return { type: 'result', data: get_result(arg, i) };
|
|
81
|
+
} catch (error) {
|
|
82
|
+
return {
|
|
83
|
+
type: 'error',
|
|
84
|
+
error: await handle_error_and_jsonify(event, state, options, error),
|
|
85
|
+
status:
|
|
86
|
+
error instanceof HttpError || error instanceof SvelteKitError ? error.status : 500
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
})
|
|
90
|
+
);
|
|
91
|
+
|
|
92
|
+
return json(
|
|
93
|
+
/** @type {RemoteFunctionResponse} */ ({
|
|
94
|
+
type: 'result',
|
|
95
|
+
result: stringify(results, transport)
|
|
96
|
+
})
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
63
100
|
if (info.type === 'form') {
|
|
101
|
+
if (event.request.method !== 'POST') {
|
|
102
|
+
throw new SvelteKitError(
|
|
103
|
+
405,
|
|
104
|
+
'Method Not Allowed',
|
|
105
|
+
`\`form\` functions must be invoked via POST request, not ${event.request.method}`
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
|
|
64
109
|
if (!is_form_content_type(event.request)) {
|
|
65
110
|
throw new SvelteKitError(
|
|
66
111
|
415,
|
|
67
112
|
'Unsupported Media Type',
|
|
68
|
-
|
|
113
|
+
`\`form\` functions expect form-encoded data — received ${event.request.headers.get(
|
|
69
114
|
'content-type'
|
|
70
115
|
)}`
|
|
71
116
|
);
|
package/src/types/internal.d.ts
CHANGED
|
@@ -553,6 +553,16 @@ export type RemoteInfo =
|
|
|
553
553
|
id: string;
|
|
554
554
|
name: string;
|
|
555
555
|
}
|
|
556
|
+
| {
|
|
557
|
+
/**
|
|
558
|
+
* Corresponds to the name of the client-side exports (that's why we use underscores and not dots)
|
|
559
|
+
*/
|
|
560
|
+
type: 'query_batch';
|
|
561
|
+
id: string;
|
|
562
|
+
name: string;
|
|
563
|
+
/** Direct access to the function without batching etc logic, for remote functions called from the client */
|
|
564
|
+
run: (args: any[]) => Promise<(arg: any, idx: number) => any>;
|
|
565
|
+
}
|
|
556
566
|
| {
|
|
557
567
|
type: 'form';
|
|
558
568
|
id: string;
|
package/src/version.js
CHANGED
package/types/index.d.ts
CHANGED
|
@@ -2922,6 +2922,24 @@ declare module '$app/server' {
|
|
|
2922
2922
|
* @since 2.27
|
|
2923
2923
|
*/
|
|
2924
2924
|
export function query<Schema extends StandardSchemaV1, Output>(schema: Schema, fn: (arg: StandardSchemaV1.InferOutput<Schema>) => MaybePromise<Output>): RemoteQueryFunction<StandardSchemaV1.InferInput<Schema>, Output>;
|
|
2925
|
+
export namespace query {
|
|
2926
|
+
/**
|
|
2927
|
+
* Creates a batch query function that collects multiple calls and executes them in a single request
|
|
2928
|
+
*
|
|
2929
|
+
* See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query.batch) for full documentation.
|
|
2930
|
+
*
|
|
2931
|
+
* @since 2.35
|
|
2932
|
+
*/
|
|
2933
|
+
function batch<Input, Output>(validate: "unchecked", fn: (args: Input[]) => MaybePromise<(arg: Input, idx: number) => Output>): RemoteQueryFunction<Input, Output>;
|
|
2934
|
+
/**
|
|
2935
|
+
* Creates a batch query function that collects multiple calls and executes them in a single request
|
|
2936
|
+
*
|
|
2937
|
+
* See [Remote functions](https://svelte.dev/docs/kit/remote-functions#query.batch) for full documentation.
|
|
2938
|
+
*
|
|
2939
|
+
* @since 2.35
|
|
2940
|
+
*/
|
|
2941
|
+
function batch<Schema extends StandardSchemaV1, Output>(schema: Schema, fn: (args: StandardSchemaV1.InferOutput<Schema>[]) => MaybePromise<(arg: StandardSchemaV1.InferOutput<Schema>, idx: number) => Output>): RemoteQueryFunction<StandardSchemaV1.InferInput<Schema>, Output>;
|
|
2942
|
+
}
|
|
2925
2943
|
type RemotePrerenderInputsGenerator<Input = any> = () => MaybePromise<Input[]>;
|
|
2926
2944
|
type MaybePromise<T> = T | Promise<T>;
|
|
2927
2945
|
|
package/types/index.d.ts.map
CHANGED
|
@@ -187,6 +187,6 @@
|
|
|
187
187
|
null,
|
|
188
188
|
null
|
|
189
189
|
],
|
|
190
|
-
"mappings": "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
|
|
190
|
+
"mappings": "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",
|
|
191
191
|
"ignoreList": []
|
|
192
192
|
}
|