| 1 |
|
| 2 | import { Location } from "../router/history.js";
|
| 3 | import { DataStrategyResult, MiddlewareNextFunction } from "../router/utils.js";
|
| 4 | import { LinkDescriptor } from "../router/links.js";
|
| 5 | import { Func, Pretty } from "./utils.js";
|
| 6 | import { RouteModule } from "./route-module.js";
|
| 7 | import { ClientDataFunctionArgs, GetLoaderData, ServerDataFrom, ServerDataFunctionArgs } from "./route-data.js";
|
| 8 | import { MetaDescriptor } from "../dom/ssr/routeModules.js";
|
| 9 |
|
| 10 |
|
| 11 | type MaybePromise<T> = T | Promise<T>;
|
| 12 | type Props = {
|
| 13 | params: unknown;
|
| 14 | loaderData: unknown;
|
| 15 | actionData: unknown;
|
| 16 | };
|
| 17 | type RouteInfo = Props & {
|
| 18 | module: RouteModule;
|
| 19 | matches: Array<MatchInfo>;
|
| 20 | };
|
| 21 | type MatchInfo = {
|
| 22 | id: string;
|
| 23 | module: RouteModule;
|
| 24 | };
|
| 25 | type MetaMatch<T extends MatchInfo> = Pretty<{
|
| 26 | id: T["id"];
|
| 27 | params: Record<string, string | undefined>;
|
| 28 | pathname: string;
|
| 29 | meta: MetaDescriptor[];
|
| 30 | loaderData: GetLoaderData<T["module"]>;
|
| 31 | handle?: unknown;
|
| 32 | error?: unknown;
|
| 33 | }>;
|
| 34 | type MetaMatches<T extends Array<MatchInfo>> = T extends [infer F extends MatchInfo, ...infer R extends Array<MatchInfo>] ? [MetaMatch<F>, ...MetaMatches<R>] : Array<MetaMatch<MatchInfo> | undefined>;
|
| 35 | type HasErrorBoundary<T extends RouteInfo> = T["module"] extends {
|
| 36 | ErrorBoundary: Func;
|
| 37 | } ? true : false;
|
| 38 | type CreateMetaArgs<T extends RouteInfo> = {
|
| 39 | location: Location;
|
| 40 | params: T["params"];
|
| 41 | loaderData: T["loaderData"] | (HasErrorBoundary<T> extends true ? undefined : never);
|
| 42 | error?: unknown;
|
| 43 | matches: MetaMatches<T["matches"]>;
|
| 44 | };
|
| 45 | type MetaDescriptors = MetaDescriptor[];
|
| 46 | type HeadersArgs = {
|
| 47 | loaderHeaders: Headers;
|
| 48 | parentHeaders: Headers;
|
| 49 | actionHeaders: Headers;
|
| 50 | errorHeaders: Headers | undefined;
|
| 51 | };
|
| 52 | type CreateServerMiddlewareFunction<T extends RouteInfo> = (args: ServerDataFunctionArgs<T["params"]>, next: MiddlewareNextFunction<Response>) => MaybePromise<Response | void>;
|
| 53 | type CreateClientMiddlewareFunction<T extends RouteInfo> = (args: ClientDataFunctionArgs<T["params"]>, next: MiddlewareNextFunction<Record<string, DataStrategyResult>>) => MaybePromise<Record<string, DataStrategyResult> | void>;
|
| 54 | type CreateServerLoaderArgs<T extends RouteInfo> = ServerDataFunctionArgs<T["params"]>;
|
| 55 | type CreateClientLoaderArgs<T extends RouteInfo> = ClientDataFunctionArgs<T["params"]> & {
|
| 56 | serverLoader: () => Promise<ServerDataFrom<T["module"]["loader"]>>;
|
| 57 | };
|
| 58 | type CreateServerActionArgs<T extends RouteInfo> = ServerDataFunctionArgs<T["params"]>;
|
| 59 | type CreateClientActionArgs<T extends RouteInfo> = ClientDataFunctionArgs<T["params"]> & {
|
| 60 | serverAction: () => Promise<ServerDataFrom<T["module"]["action"]>>;
|
| 61 | };
|
| 62 | type CreateHydrateFallbackProps<T extends RouteInfo, RSCEnabled extends boolean> = {
|
| 63 | params: T["params"];
|
| 64 | } & (RSCEnabled extends true ? {
|
| 65 | loaderData?: ServerDataFrom<T["module"]["loader"]>;
|
| 66 | actionData?: ServerDataFrom<T["module"]["action"]>;
|
| 67 | } : {
|
| 68 | loaderData?: T["loaderData"];
|
| 69 | actionData?: T["actionData"];
|
| 70 | });
|
| 71 | type Match<T extends MatchInfo> = Pretty<{
|
| 72 | id: T["id"];
|
| 73 | params: Record<string, string | undefined>;
|
| 74 | pathname: string;
|
| 75 | loaderData: GetLoaderData<T["module"]>;
|
| 76 | handle: unknown;
|
| 77 | }>;
|
| 78 | type Matches<T extends Array<MatchInfo>> = T extends [infer F extends MatchInfo, ...infer R extends Array<MatchInfo>] ? [Match<F>, ...Matches<R>] : Array<Match<MatchInfo> | undefined>;
|
| 79 | type CreateComponentProps<T extends RouteInfo, RSCEnabled extends boolean> = {
|
| 80 | |
| 81 | |
| 82 | |
| 83 | |
| 84 | |
| 85 | |
| 86 | |
| 87 | |
| 88 | |
| 89 | |
| 90 | |
| 91 | |
| 92 | |
| 93 |
|
| 94 | params: T["params"];
|
| 95 | matches: Matches<T["matches"]>;
|
| 96 | } & (RSCEnabled extends true ? {
|
| 97 | loaderData: ServerDataFrom<T["module"]["loader"]>;
|
| 98 | actionData?: ServerDataFrom<T["module"]["action"]>;
|
| 99 | } : {
|
| 100 | loaderData: T["loaderData"];
|
| 101 | actionData?: T["actionData"];
|
| 102 | });
|
| 103 | type CreateErrorBoundaryProps<T extends RouteInfo, RSCEnabled extends boolean> = {
|
| 104 | |
| 105 | |
| 106 | |
| 107 | |
| 108 | |
| 109 | |
| 110 | |
| 111 | |
| 112 | |
| 113 | |
| 114 | |
| 115 | |
| 116 | |
| 117 |
|
| 118 | params: T["params"];
|
| 119 | error: unknown;
|
| 120 | } & (RSCEnabled extends true ? {
|
| 121 | loaderData?: ServerDataFrom<T["module"]["loader"]>;
|
| 122 | actionData?: ServerDataFrom<T["module"]["action"]>;
|
| 123 | } : {
|
| 124 | loaderData?: T["loaderData"];
|
| 125 | actionData?: T["actionData"];
|
| 126 | });
|
| 127 | type GetAnnotations<Info extends RouteInfo> = {
|
| 128 | LinkDescriptors: LinkDescriptor[];
|
| 129 | LinksFunction: () => LinkDescriptor[];
|
| 130 | MetaArgs: CreateMetaArgs<Info>;
|
| 131 | MetaDescriptors: MetaDescriptors;
|
| 132 | MetaFunction: (args: CreateMetaArgs<Info>) => MetaDescriptors;
|
| 133 | HeadersArgs: HeadersArgs;
|
| 134 | HeadersFunction: (args: HeadersArgs) => Headers | HeadersInit;
|
| 135 | MiddlewareFunction: CreateServerMiddlewareFunction<Info>;
|
| 136 | ClientMiddlewareFunction: CreateClientMiddlewareFunction<Info>;
|
| 137 | LoaderArgs: CreateServerLoaderArgs<Info>;
|
| 138 | ClientLoaderArgs: CreateClientLoaderArgs<Info>;
|
| 139 | ActionArgs: CreateServerActionArgs<Info>;
|
| 140 | ClientActionArgs: CreateClientActionArgs<Info>;
|
| 141 | HydrateFallbackProps: CreateHydrateFallbackProps<Info, false>;
|
| 142 | ServerHydrateFallbackProps: CreateHydrateFallbackProps<Info, true>;
|
| 143 | ComponentProps: CreateComponentProps<Info, false>;
|
| 144 | ServerComponentProps: CreateComponentProps<Info, true>;
|
| 145 | ErrorBoundaryProps: CreateErrorBoundaryProps<Info, false>;
|
| 146 | ServerErrorBoundaryProps: CreateErrorBoundaryProps<Info, true>;
|
| 147 | };
|
| 148 |
|
| 149 | export { GetAnnotations }; |
| \ | No newline at end of file |