diff --git a/packages/svelte/src/internal/shared/types.d.ts b/packages/svelte/src/internal/shared/types.d.ts index 1bcdd36f97..8365b529f9 100644 --- a/packages/svelte/src/internal/shared/types.d.ts +++ b/packages/svelte/src/internal/shared/types.d.ts @@ -11,10 +11,19 @@ export type Snapshot = ReturnType>; export type MaybePromise = T | Promise; +/** Decode a value. The value will be whatever the evaluated JavaScript emitted by the corresponding {@link Encode} function evaluates to. */ export type Decode = (value: any) => T; +/** Encode a value as a string. The string should be _valid JavaScript code_ -- for example, the output of `devalue`'s `uneval` function. */ export type Encode = (value: T) => string; +/** + * Custom encode and decode options. This must be used in combination with an environment variable to enable treeshaking, eg: + * ```ts + * import { BROWSER } from 'esm-env'; + * const transport: Transport = BROWSER ? { decode: myDecodeFunction } : { encode: myEncodeFunction }; + * ``` + */ export type Transport = | { encode: Encode; @@ -25,28 +34,25 @@ export type Transport = decode: Decode; }; +/** Make the result of a function hydratable. This means it will be serialized on the server and available synchronously during hydration on the client. */ export type Hydratable = { - (key: string, fn: () => T, options?: { transport?: Transport }): T; + ( + /** + * A key to identify this hydratable value. Each hydratable value must have a unique key. + * If writing a library that utilizes `hydratable`, prefix your keys with your library name to prevent naming collisions. + */ + key: string, + /** + * A function that returns the value to be hydrated. On the server, this value will be stashed and serialized. + * On the client during hydration, the value will be used synchronously instead of invoking the function. + */ + fn: () => T, + options?: { transport?: Transport } + ): T; + /** Get a hydratable value from the server-rendered store. If used after hydration, will always return `undefined`. Only works on the client. */ get: (key: string, options?: { decode?: Decode }) => T | undefined; + /** Check if a hydratable value exists in the server-rendered store. */ has: (key: string) => boolean; + /** Set a hydratable value. Only works on the server during `render`. */ set: (key: string, value: T, options?: { encode?: Encode }) => void; }; - -export type Resource = { - then: Promise>['then']; - catch: Promise>['catch']; - finally: Promise>['finally']; - refresh: () => Promise; - set: (value: Awaited) => void; - loading: boolean; - error: any; -} & ( - | { - ready: false; - current: undefined; - } - | { - ready: true; - current: Awaited; - } -);