createServerData$
createServerData$
allows you to manage async data fetching always on the server.
tsx
const dataconst data: Resource<never[] | undefined>
= createServerData$(alias) createServerData$<never[], true>(fetcher: RouteDataFetcher<true, never[]>, options?: RouteDataOptions<undefined, true> | undefined): Resource<never[] | undefined> (+1 overload)
import createServerData$
(getStudentsfunction getStudents(): never[]
);
tsx
const dataconst data: Resource<never[] | undefined>
= createServerData$(alias) createServerData$<never[], true>(fetcher: RouteDataFetcher<true, never[]>, options?: RouteDataOptions<undefined, true> | undefined): Resource<never[] | undefined> (+1 overload)
import createServerData$
(getStudentsfunction getStudents(): never[]
);
Usage
Fetching data from a Database
createServerData$
is a primitive for managing async data fetching that always runs on the server. It is a light wrapper over createRouteData
that leverages server$
functions to ensure the fetcher always runs on the server. This allows you to access things only available on the server like databases.
tsx
import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData(): Resource<void | undefined>
() { return createServerData$(alias) createServerData$<void, true>(fetcher: RouteDataFetcher<true, void>, options?: RouteDataOptions<undefined, true> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
(() => prismaconst prisma: {
students: {
findMany(): void;
};
}
.students(property) students: {
findMany(): void;
}
.findMany(method) findMany(): void
()); }
tsx
import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData(): Resource<void | undefined>
() { return createServerData$(alias) createServerData$<void, true>(fetcher: RouteDataFetcher<true, void>, options?: RouteDataOptions<undefined, true> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
(() => prismaconst prisma: {
students: {
findMany(): void;
};
}
.students(property) students: {
findMany(): void;
}
.findMany(method) findMany(): void
()); }
Fetching data with a key
Often though we want to be able to set a key for our routeData both to act as a parameter and to allow easy invalidation. The fetcher function is not reactive, so you must use this option if you wish the route data to update. It is also the only way to pass parameters to fetcher function for createServerData$
as only variables at top-level scope or passed in can be accessed in server$
functions.
tsx
import { RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
} from "solid-start"; import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData({ params }: RouteDataArgs): Resource<void | undefined>
({ params(parameter) params: RouteParams<any>
}: RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
) { return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( ([, id]) => prismaconst prisma: {
students: {
findUnique(p: {
where: {
id: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
id: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
id: string;
};
}): void
({ where(property) where: {
id: string;
}
: { id } }), { key(property) key?: RouteDataSource<string[]>
: () => ["students", params(parameter) params: RouteParams<any>
.id] } );
}
tsx
import { RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
} from "solid-start"; import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData({ params }: RouteDataArgs): Resource<void | undefined>
({ params(parameter) params: RouteParams<any>
}: RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
) { return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( ([, id]) => prismaconst prisma: {
students: {
findUnique(p: {
where: {
id: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
id: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
id: string;
};
}): void
({ where(property) where: {
id: string;
}
: { id } }), { key(property) key?: RouteDataSource<string[]>
: () => ["students", params(parameter) params: RouteParams<any>
.id] } );
}
Accessing the Event
The event object has information like the request
, clientAddress
, and locals
on it.
tsx
import { RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
} from "solid-start"; import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
, redirectA redirect response. Sets the status code and the `Location` header.
Defaults to "302 Found".
(alias) function redirect(url: string, init?: number | ResponseInit): Response
import redirect
} from "solid-start/server";
export function routeDatafunction routeData({ params }: RouteDataArgs): Resource<void | undefined>
({ params(parameter) params: RouteParams<any>
}: RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
) { return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( async ([, id], { request(parameter) request: Request
}) => { if (!isLoggedInfunction isLoggedIn(req: Request): boolean
(request(parameter) request: Request
)) { throw redirectA redirect response. Sets the status code and the `Location` header.
Defaults to "302 Found".
(alias) redirect(url: string, init?: number | ResponseInit): Response
import redirect
("/login"); }
return prismaconst prisma: {
students: {
findUnique(p: {
where: {
id: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
id: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
id: string;
};
}): void
({ where(property) where: {
id: string;
}
: { id } }) },
{ key(property) key?: RouteDataSource<string[]>
: () => ["students", params(parameter) params: RouteParams<any>
.id] } );
}
tsx
import { RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
} from "solid-start"; import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
, redirectA redirect response. Sets the status code and the `Location` header.
Defaults to "302 Found".
(alias) function redirect(url: string, init?: number | ResponseInit): Response
import redirect
} from "solid-start/server";
export function routeDatafunction routeData({ params }: RouteDataArgs): Resource<void | undefined>
({ params(parameter) params: RouteParams<any>
}: RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
) { return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( async ([, id], { request(parameter) request: Request
}) => { if (!isLoggedInfunction isLoggedIn(req: Request): boolean
(request(parameter) request: Request
)) { throw redirectA redirect response. Sets the status code and the `Location` header.
Defaults to "302 Found".
(alias) redirect(url: string, init?: number | ResponseInit): Response
import redirect
("/login"); }
return prismaconst prisma: {
students: {
findUnique(p: {
where: {
id: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
id: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
id: string;
};
}): void
({ where(property) where: {
id: string;
}
: { id } }) },
{ key(property) key?: RouteDataSource<string[]>
: () => ["students", params(parameter) params: RouteParams<any>
.id] } );
}
Reference
See createRouteData for full API reference.
There are a few constraints that must be met for createServerData$
to work correctly:
Serializing
All values passed in the key
must be JSON serializable. When the fetcher function is called from the client, the key is sent to the server and used to look up the data. If the key is not serializable, it will not be sent properly to the server.
That means, that you shouldn't pass in functions or accessors like signals. You should call the accessors in the key
function itself. Since key
is a function it will make things reactive and call the fetcher with actual values instead of accessors. The fetcher function is not reactive, so reading from signals does not subscribe to them.
The data returned from the fetcher function must also be JSON serializable object or a Response
object.
tsx
import { RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
} from "solid-start"; import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData({ params }: RouteDataArgs): Resource<void | undefined>
({ params(parameter) params: RouteParams<any>
}: RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
) { return createServerData$(alias) createServerData$<void, (() => string)[]>(fetcher: RouteDataFetcher<(() => string)[], void>, options?: RouteDataOptions<undefined, (() => string)[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( ([id(parameter) id: () => string
]) => prismaconst prisma: {
students: {
findUnique(p: {
where: {
id: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
id: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
id: string;
};
}): void
({ where(property) where: {
id: string;
}
: { id: id(parameter) id: () => string
() } }), { key(property) key?: RouteDataSource<(() => string)[]>
: () => [() => params(parameter) params: RouteParams<any>
.id] } // cant pass a function, not serializable );
}
tsx
import { RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
} from "solid-start"; import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData({ params }: RouteDataArgs): Resource<void | undefined>
({ params(parameter) params: RouteParams<any>
}: RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
) { return createServerData$(alias) createServerData$<void, (() => string)[]>(fetcher: RouteDataFetcher<(() => string)[], void>, options?: RouteDataOptions<undefined, (() => string)[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( ([id(parameter) id: () => string
]) => prismaconst prisma: {
students: {
findUnique(p: {
where: {
id: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
id: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
id: string;
};
}): void
({ where(property) where: {
id: string;
}
: { id: id(parameter) id: () => string
() } }), { key(property) key?: RouteDataSource<(() => string)[]>
: () => [() => params(parameter) params: RouteParams<any>
.id] } // cant pass a function, not serializable );
}
tsx
import { RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
} from "solid-start"; import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData({ params }: RouteDataArgs): Resource<void | undefined>
({ params(parameter) params: RouteParams<any>
}: RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
) { return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( ([id]) => prismaconst prisma: {
students: {
findUnique(p: {
where: {
id: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
id: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
id: string;
};
}): void
({ where(property) where: {
id: string;
}
: { id } }), { key(property) key?: RouteDataSource<string[]>
: () => [params(parameter) params: RouteParams<any>
.id] } // read the reactive value in the key function );
}
tsx
import { RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
} from "solid-start"; import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData({ params }: RouteDataArgs): Resource<void | undefined>
({ params(parameter) params: RouteParams<any>
}: RouteDataArgs(alias) type RouteDataArgs<T extends "$" = "$"> = {
data: StartRoutes[T]["data"];
params: RouteParams<StartRoutes[T]["params"]>;
location: Location;
navigate: Navigator;
}
import RouteDataArgs
) { return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( ([id]) => prismaconst prisma: {
students: {
findUnique(p: {
where: {
id: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
id: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
id: string;
};
}): void
({ where(property) where: {
id: string;
}
: { id } }), { key(property) key?: RouteDataSource<string[]>
: () => [params(parameter) params: RouteParams<any>
.id] } // read the reactive value in the key function );
}
Hoisting
The fetcher function must not access anything in its surrounding scope/closure. Since the function is run in an isolated environment, we hoist it out from wherever it's declared to the top of the file. It only has access to variables defined at the module level and the arguments passed in. Nothing else. This is why you must pass in any variables you need to access in the fetcher function as arguments, not just the reactive ones.
tsx
import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData(): Resource<void | undefined>
() { let house = 'gryffindor'; // can't use this inside the fetcher function return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( () => prismaconst prisma: {
students: {
findUnique(p: {
where: {
house: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
house: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
house: string;
};
}): void
({ where(property) where: {
house: string;
}
: { house } }), { key(property) key?: RouteDataSource<string[]>
: () => ["students"] } );
}
tsx
import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData(): Resource<void | undefined>
() { let house = 'gryffindor'; // can't use this inside the fetcher function return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( () => prismaconst prisma: {
students: {
findUnique(p: {
where: {
house: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
house: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
house: string;
};
}): void
({ where(property) where: {
house: string;
}
: { house } }), { key(property) key?: RouteDataSource<string[]>
: () => ["students"] } );
}
tsx
import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData(): Resource<void | undefined>
() { return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( () => {
let house = 'gryffindor'; // if you can, just declare it inside the function return prismaconst prisma: {
students: {
findUnique(p: {
where: {
house: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
house: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
house: string;
};
}): void
({ where(property) where: {
house: string;
}
: { house } }); },
{ key(property) key?: RouteDataSource<string[]>
: () => ["students"] } );
}
tsx
import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData(): Resource<void | undefined>
() { return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( () => {
let house = 'gryffindor'; // if you can, just declare it inside the function return prismaconst prisma: {
students: {
findUnique(p: {
where: {
house: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
house: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
house: string;
};
}): void
({ where(property) where: {
house: string;
}
: { house } }); },
{ key(property) key?: RouteDataSource<string[]>
: () => ["students"] } );
}
tsx
import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
let house = 'gryffindor'; // see if it can be extracted to module scope
export function routeDatafunction routeData(): Resource<void | undefined>
() { return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( () => {
return prismaconst prisma: {
students: {
findUnique(p: {
where: {
house: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
house: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
house: string;
};
}): void
({ where(property) where: {
house: string;
}
: { house } }); },
{ key(property) key?: RouteDataSource<string[]>
: () => ["students"] } );
}
tsx
import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
let house = 'gryffindor'; // see if it can be extracted to module scope
export function routeDatafunction routeData(): Resource<void | undefined>
() { return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( () => {
return prismaconst prisma: {
students: {
findUnique(p: {
where: {
house: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
house: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
house: string;
};
}): void
({ where(property) where: {
house: string;
}
: { house } }); },
{ key(property) key?: RouteDataSource<string[]>
: () => ["students"] } );
}
tsx
import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData(): Resource<void | undefined>
() { let house = 'gryffindor'; return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( ([, house(parameter) house: string
]) => { return prismaconst prisma: {
students: {
findUnique(p: {
where: {
house: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
house: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
house: string;
};
}): void
({ where(property) where: {
house: string;
}
: { house } }); },
{ key(property) key?: RouteDataSource<string[]>
: () => ["students", house] } // pass in to the function using the key );
}
tsx
import { createServerData$(alias) const createServerData$: {
<T, S = true>(fetcher: RouteDataFetcher<S, T>, options?: RouteDataOptions<undefined, S> | undefined): Resource<T | undefined>;
<T, S = true>(fetcher: RouteDataFetcher<...>, options: RouteDataOptions<...>): Resource<...>;
}
import createServerData$
} from "solid-start/server";
export function routeDatafunction routeData(): Resource<void | undefined>
() { let house = 'gryffindor'; return createServerData$(alias) createServerData$<void, string[]>(fetcher: RouteDataFetcher<string[], void>, options?: RouteDataOptions<undefined, string[]> | undefined): Resource<void | undefined> (+1 overload)
import createServerData$
( ([, house(parameter) house: string
]) => { return prismaconst prisma: {
students: {
findUnique(p: {
where: {
house: string;
};
}): void;
};
}
.students(property) students: {
findUnique(p: {
where: {
house: string;
};
}): void;
}
.findUnique(method) findUnique(p: {
where: {
house: string;
};
}): void
({ where(property) where: {
house: string;
}
: { house } }); },
{ key(property) key?: RouteDataSource<string[]>
: () => ["students", house] } // pass in to the function using the key );
}
Reference
Refer to createRouteData for API reference.
Note: createServerData$
does not work when application is configured to ssr: false