```js // @noErrors import { isValidationError } from '@sveltejs/kit/remote'; ``` ## isValidationError
Available since 2.47.3
Checks whether this is a validation error thrown by [`invalid`](/docs/kit/@sveltejs-kit#invalid).
```dts function isValidationError( e: unknown ): e is import('@sveltejs/kit/remote').ValidationError; ```
## InvalidField A function and proxy object used to imperatively create validation errors in form handlers. Access properties to create field-specific issues: `issue.fieldName('message')`. The type structure mirrors the input data structure for type-safe field access. Call `invalid(issue.foo(...), issue.nested.bar(...))` to throw a validation error.
```dts type InvalidField = WillRecurseIndefinitely extends true ? Record : NonNullable extends | string | number | boolean | File ? (message: string) => StandardSchemaV1.Issue : NonNullable extends Array ? { [K in number]: InvalidField; } & ((message: string) => StandardSchemaV1.Issue) : NonNullable extends RemoteFormInput ? { [K in keyof T]-?: InvalidField; } & (( message: string ) => StandardSchemaV1.Issue) : Record; ```
## LiveQueryRequestedResult
```dts type LiveQueryRequestedResult = Iterable< LiveRequestedEntry > & AsyncIterable> & { /** * Call `reconnect` on all live queries selected by this `requested` invocation. * This is identical to: * ```ts * import { requested } from '$app/server'; * * for await (const { query } of requested(liveQuery, ...)) { * void query.reconnect(); * } * ``` */ reconnectAll: () => Promise; }; ```
## LiveRequestedEntry A single entry yielded by [`requested`](/docs/kit/$app-server#requested) when called with a `query.live`. `arg` is the validated argument; `query` is a `RemoteLiveQuery` bound to the client's original cache key, so `reconnect()` targets the correct client subscription.
```dts type LiveRequestedEntry = { arg: Validated; query: RemoteLiveQuery; }; ```
## QueryRequestedResult
```dts type QueryRequestedResult = Iterable< RequestedEntry > & AsyncIterable> & { /** * Call `refresh` on all queries selected by this `requested` invocation. * This is identical to: * ```ts * import { requested } from '$app/server'; * * for await (const { query } of requested(getPost, ...)) { * void query.refresh(); * } * ``` */ refreshAll: () => Promise; }; ```
## RemoteCommand The type of a remote `command` function. See [Remote functions](/docs/kit/remote-functions#command) for full documentation.
```dts type RemoteCommand = { ( arg: undefined extends Input ? Input | void : Input ): Promise & { updates( ...updates: RemoteQueryUpdate[] ): Promise; }; /** The number of pending command executions */ get pending(): number; }; ```
## RemoteForm The type of a remote `form` function. See [Remote functions](/docs/kit/remote-functions#form) for full documentation.
```dts type RemoteForm< Input extends RemoteFormInput | void, Output > = { /** Attachment that sets up an event handler that intercepts the form submission on the client to prevent a full page reload */ [attachment: symbol]: (node: HTMLFormElement) => void; method: 'POST'; /** The URL to send the form to. */ action: string; /** The `
` element this instance is currently attached to, if any. */ get element(): HTMLFormElement | null; /** Submit the currently attached form programmatically. */ submit(): Promise & { updates: ( ...updates: RemoteQueryUpdate[] ) => Promise; }; /** Use the `enhance` method to influence what happens when the form is submitted. */ enhance( callback: RemoteFormEnhanceCallback ): { method: 'POST'; action: string; [attachment: symbol]: (node: HTMLFormElement) => void; }; /** * Create an instance of the form for the given `id`. * The `id` is stringified and used for deduplication to potentially reuse existing instances. * Useful when you have multiple forms that use the same remote form action, for example in a loop. * ```svelte * {#each todos as todo} * {const todoForm = updateTodo.for(todo.id)} * * {#if todoForm.result?.invalid}

Invalid data

{/if} * ... * * {/each} * ``` */ for( id: ExtractId ): Omit, 'for'>; /** Preflight checks */ preflight( schema: StandardSchemaV1 ): RemoteForm; /** Validate the form contents programmatically */ validate(options?: { /** * Set this to `true` to also show validation issues of fields that haven't yet been * edited and blurred. This option is ignored for forms that have previously been * submitted, in which case all fields are always subject to validation * (unless the form is reset, at which point it is treated as pristine) */ all?: boolean; /** Set this to `true` to only run the `preflight` validation. */ preflightOnly?: boolean; }): Promise; /** The result of the form submission */ get result(): Output | undefined; /** The number of pending submissions */ get pending(): number; /** True if the form has been submitted at least once, and hasn't been reset since */ get submitted(): boolean; /** Access form fields using object notation */ fields: RemoteFormFieldsRoot; }; ```
## RemoteFormEnhanceCallback The callback passed to a remote form's `enhance` method. See [Remote functions](/docs/kit/remote-functions#form) for full documentation.
```dts type RemoteFormEnhanceCallback< Input extends RemoteFormInput | void = RemoteFormInput | void, Output = any > = ( form: RemoteFormEnhanceInstance ) => MaybePromise; ```
## RemoteFormEnhanceInstance The form instance as received inside an `enhance` callback. See [Remote functions](/docs/kit/remote-functions#form) for full documentation.
```dts type RemoteFormEnhanceInstance< Input extends RemoteFormInput | void = RemoteFormInput | void, Output = any > = Omit< RemoteForm, 'enhance' | 'element' > & { readonly element: HTMLFormElement; }; ```
## RemoteFormField Form field accessor type that provides name(), value(), and issues() methods
```dts type RemoteFormField = RemoteFormFieldMethods & { /** * Returns an object that can be spread onto an input element with the correct type attribute, * aria-invalid attribute if the field is invalid, and appropriate value/checked property getters/setters. * @example * ```svelte * * * * ``` */ as>( ...args: AsArgs ): InputElementProps; }; ```
## RemoteFormFieldType
```dts type RemoteFormFieldType = { [K in keyof InputTypeMap]: T extends InputTypeMap[K] ? K : never; }[keyof InputTypeMap]; ```
## RemoteFormFieldValue
```dts type RemoteFormFieldValue = | string | string[] | number | boolean | File | File[]; ```
## RemoteFormFields Recursive type to build form fields structure with proxy access
```dts type RemoteFormFields = WillRecurseIndefinitely extends true ? RecursiveFormFields : NonNullable extends | string | number | boolean | File ? RemoteFormField> : // [NonNullable] is used to prevent distributing over union while still allowing // nullable wrappers (e.g. `string[] | undefined` from a schema with `.default([])`) // to be treated as arrays; only the last condition should distribute over unions [NonNullable] extends [string[] | File[]] ? RemoteFormField> & { [K in number]: RemoteFormField< NonNullable[number] >; } : [NonNullable] extends [Array] ? RemoteFormFieldContainer> & { [K in number]: RemoteFormFields; } : RemoteFormFieldContainer & { [K in KeysOfUnion]-?: RemoteFormFields< ValueOfUnionKey >; }; ```
## RemoteFormInput
```dts interface RemoteFormInput {/*…*/} ```
```dts [key: string]: MaybeArray | undefined; ```
## RemoteFormIssue
```dts interface RemoteFormIssue {/*…*/} ```
```dts message: string; ```
```dts path: Array; ```
## RemoteLiveQuery
```dts type RemoteLiveQuery = RemoteResource & AsyncIterable & { /** `true` if the live stream is currently connected. */ readonly connected: boolean; /** `true` once the current live stream iterator is done. */ readonly done: boolean; /** Reconnects the live stream immediately. */ reconnect(): Promise; }; ```
## RemoteLiveQueryFunction The type of a remote `query.live` function. See [Remote functions](/docs/kit/remote-functions#query.live) for full documentation. The optional `Validated` generic parameter represents the argument type *after* the query's schema has validated and (optionally) transformed it, and matches the type yielded by [`requested`](/docs/kit/$app-server#requested).
```dts type RemoteLiveQueryFunction< Input, Output, _Validated = Input > = ( arg: undefined extends Input ? Input | void : Input ) => RemoteLiveQuery; ```
## RemotePrerenderFunction The type of a remote `prerender` function. See [Remote functions](/docs/kit/remote-functions#prerender) for full documentation.
```dts type RemotePrerenderFunction = ( arg: undefined extends Input ? Input | void : Input ) => RemoteResource; ```
## RemoteQuery
```dts type RemoteQuery = RemoteResource & { /** * On the client, this function will update the value of the query without re-fetching it. * * On the server, this can be called in the context of a `command` or `form` and the specified data will accompany the action response back to the client. * This prevents SvelteKit needing to refresh all queries on the page in a second server round-trip. */ set(value: T): void; /** * On the client, this function will re-fetch the query from the server. * * On the server, this can be called in the context of a `command` or `form` and the refreshed data will accompany the action response back to the client. * This prevents SvelteKit needing to refresh all queries on the page in a second server round-trip. */ refresh(): Promise; /** * Temporarily override a query's value during a [single-flight mutation](https://svelte.dev/docs/kit/remote-functions#Single-flight-mutations) to provide optimistic updates. * * ```svelte * * *
{ * await form.submit().updates( * todos.withOverride((todos) => [...todos, { text: form.fields.text.value() }]) * ); * })}> * * *
* ``` */ withOverride( update: (current: T) => T ): RemoteQueryOverride; }; ```
## RemoteQueryFunction The return value of a remote `query` function. See [Remote functions](/docs/kit/remote-functions#query) for full documentation. The optional `Validated` generic parameter represents the argument type *after* the query's schema has validated and (optionally) transformed it — this is the type the query's implementation function receives on the server, and the type yielded by [`requested`](/docs/kit/$app-server#requested). For queries declared with [Standard Schema](https://standardschema.dev/) it differs from `Input` when the schema contains a transform (e.g. `v.pipe(v.number(), v.transform(String))` has `Input = number` but `Validated = string`). For `'unchecked'` validators and queries without arguments it defaults to `Input`.
```dts type RemoteQueryFunction< Input, Output, _Validated = Input > = ( arg: undefined extends Input ? Input | void : Input ) => RemoteQuery; ```
## RemoteQueryOverride
```dts type RemoteQueryOverride = () => void; ```
## RemoteQueryUpdate
```dts type RemoteQueryUpdate = | RemoteQuery | RemoteLiveQuery | RemoteQueryFunction | RemoteLiveQueryFunction | RemoteQueryOverride; ```
## RemoteResource
```dts type RemoteResource = Promise & { /** The error in case the query fails. */ get error(): App.Error | undefined; /** `true` before the first result is available and during refreshes */ get loading(): boolean; } & ( | { /** The current value of the query. Undefined until `ready` is `true` */ get current(): undefined; ready: false; } | { /** The current value of the query. Undefined until `ready` is `true` */ get current(): T; ready: true; } ); ```
## RequestedEntry A single entry yielded by [`requested`](/docs/kit/$app-server#requested) when called with a regular `query`. `arg` is the validated argument (the input *after* the query's schema validated and transformed it, if applicable); `query` is a `RemoteQuery` bound to the client's original cache key, so `refresh()` / `set()` will update the correct client entry.
```dts type RequestedEntry = { arg: Validated; query: RemoteQuery; }; ```
## RequestedResult
```dts type RequestedResult = | QueryRequestedResult | LiveQueryRequestedResult; ```
## ValidationError A validation error thrown by `invalid`.
```dts interface ValidationError {/*…*/} ```
```dts issues: StandardSchemaV1.Issue[]; ```
The validation issues