| 1 |
|
| 2 | import { DataWithResponseInit, RouterContextProvider } from "../router/utils.js";
|
| 3 | import { Equal, Func, IsAny } from "./utils.js";
|
| 4 | import { RouteModule } from "./route-module.js";
|
| 5 | import { unstable_SerializesTo } from "./serializes-to.js";
|
| 6 | import { Serializable } from "../server-runtime/single-fetch.js";
|
| 7 | import { ClientActionFunctionArgs, ClientLoaderFunctionArgs } from "../dom/ssr/routeModules.js";
|
| 8 |
|
| 9 |
|
| 10 | type Serialize<T> = T extends unstable_SerializesTo<infer To> ? To : T extends Serializable ? T : T extends ((...args: any[]) => unknown) ? undefined : T extends Promise<infer U> ? Promise<Serialize<U>> : T extends Map<infer K, infer V> ? Map<Serialize<K>, Serialize<V>> : T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<Serialize<K>, Serialize<V>> : T extends Set<infer U> ? Set<Serialize<U>> : T extends ReadonlySet<infer U> ? ReadonlySet<Serialize<U>> : T extends [] ? [] : T extends readonly [infer F, ...infer R] ? [Serialize<F>, ...Serialize<R>] : T extends Array<infer U> ? Array<Serialize<U>> : T extends readonly unknown[] ? readonly Serialize<T[number]>[] : T extends Record<any, any> ? { [K in keyof T]: Serialize<T[K]> } : undefined;
|
| 11 | type VoidToUndefined<T> = Equal<T, void> extends true ? undefined : T;
|
| 12 | type DataFrom<T> = IsAny<T> extends true ? undefined : T extends Func ? VoidToUndefined<Awaited<ReturnType<T>>> : undefined;
|
| 13 | type ClientData<T> = T extends Response ? never : T extends DataWithResponseInit<infer U> ? U : T;
|
| 14 | type ServerData<T> = T extends Response ? never : T extends DataWithResponseInit<infer U> ? Serialize<U> : Serialize<T>;
|
| 15 | type ServerDataFrom<T> = ServerData<DataFrom<T>>;
|
| 16 | type ClientDataFrom<T> = ClientData<DataFrom<T>>;
|
| 17 | type ClientDataFunctionArgs<Params> = {
|
| 18 | |
| 19 | |
| 20 | |
| 21 | |
| 22 |
|
| 23 | request: Request;
|
| 24 | |
| 25 | |
| 26 | |
| 27 | |
| 28 | |
| 29 | |
| 30 | |
| 31 |
|
| 32 | url: URL;
|
| 33 | |
| 34 | |
| 35 | |
| 36 | |
| 37 | |
| 38 | |
| 39 | |
| 40 | |
| 41 | |
| 42 | |
| 43 | |
| 44 | |
| 45 | |
| 46 |
|
| 47 | params: Params;
|
| 48 | |
| 49 | |
| 50 | |
| 51 |
|
| 52 | pattern: string;
|
| 53 | |
| 54 | |
| 55 | |
| 56 | |
| 57 |
|
| 58 | context: Readonly<RouterContextProvider>;
|
| 59 | };
|
| 60 | type ServerDataFunctionArgs<Params> = {
|
| 61 | request: Request;
|
| 62 | |
| 63 | |
| 64 | |
| 65 | |
| 66 | |
| 67 | |
| 68 | |
| 69 |
|
| 70 | url: URL;
|
| 71 | |
| 72 | |
| 73 | |
| 74 | |
| 75 | |
| 76 | |
| 77 | |
| 78 | |
| 79 | |
| 80 | |
| 81 | |
| 82 | |
| 83 | |
| 84 |
|
| 85 | params: Params;
|
| 86 | |
| 87 | |
| 88 | |
| 89 |
|
| 90 | pattern: string;
|
| 91 | |
| 92 | |
| 93 | |
| 94 | |
| 95 | |
| 96 |
|
| 97 | context: Readonly<RouterContextProvider>;
|
| 98 | };
|
| 99 | type SerializeFrom<T> = T extends ((...args: infer Args) => unknown) ? Args extends [ClientLoaderFunctionArgs | ClientActionFunctionArgs | ClientDataFunctionArgs<unknown>] ? ClientDataFrom<T> : ServerDataFrom<T> : T;
|
| 100 | type IsDefined<T> = Equal<T, undefined> extends true ? false : true;
|
| 101 | type IsHydrate<ClientLoader> = ClientLoader extends {
|
| 102 | hydrate: true;
|
| 103 | } ? true : ClientLoader extends {
|
| 104 | hydrate: false;
|
| 105 | } ? false : false;
|
| 106 | type GetLoaderData<T extends RouteModule> = _DataLoaderData<ServerDataFrom<T["loader"]>, ClientDataFrom<T["clientLoader"]>, IsHydrate<T["clientLoader"]>, T extends {
|
| 107 | HydrateFallback: Func;
|
| 108 | } ? true : false>;
|
| 109 | type _DataLoaderData<ServerLoaderData, ClientLoaderData, ClientLoaderHydrate extends boolean, HasHydrateFallback> = [HasHydrateFallback, ClientLoaderHydrate] extends [true, true] ? IsDefined<ClientLoaderData> extends true ? ClientLoaderData : undefined : [IsDefined<ClientLoaderData>, IsDefined<ServerLoaderData>] extends [true, true] ? ServerLoaderData | ClientLoaderData : IsDefined<ClientLoaderData> extends true ? ClientLoaderData : IsDefined<ServerLoaderData> extends true ? ServerLoaderData : undefined;
|
| 110 | type GetActionData<T extends RouteModule> = _DataActionData<ServerDataFrom<T["action"]>, ClientDataFrom<T["clientAction"]>>;
|
| 111 | type _DataActionData<ServerActionData, ClientActionData> = Awaited<[IsDefined<ServerActionData>, IsDefined<ClientActionData>] extends [true, true] ? ServerActionData | ClientActionData : IsDefined<ClientActionData> extends true ? ClientActionData : IsDefined<ServerActionData> extends true ? ServerActionData : undefined>;
|
| 112 |
|
| 113 | export { ClientDataFunctionArgs, GetActionData, GetLoaderData, SerializeFrom, ServerDataFrom, ServerDataFunctionArgs }; |
| \ | No newline at end of file |