UNPKG

4.1 kBTypeScriptView Raw
1
2import { FormEncType, HTMLFormMethod, LoaderFunctionArgs, RouterContextProvider } from "./utils.js";
3//#region lib/router/instrumentation.d.ts
4type ServerInstrumentation = {
5 handler?: InstrumentRequestHandlerFunction;
6 route?: InstrumentRouteFunction;
7};
8type ClientInstrumentation = {
9 router?: InstrumentRouterFunction;
10 route?: InstrumentRouteFunction;
11};
12type InstrumentRequestHandlerFunction = (handler: InstrumentableRequestHandler) => void;
13type InstrumentRouterFunction = (router: InstrumentableRouter) => void;
14type InstrumentRouteFunction = (route: InstrumentableRoute) => void;
15/**
16 * Route metadata available after React Router has matched an instrumented
17 * request, navigation, or fetcher call.
18 */
19type InstrumentationResultMeta = {
20 url: LoaderFunctionArgs["url"];
21 pattern: string;
22 params: LoaderFunctionArgs["params"];
23};
24/**
25 * Result returned by route-level instrumented handler calls, such as
26 * instrumented loaders, actions, middleware, and lazy route functions.
27 */
28type InstrumentationHandlerResult = {
29 status: "success";
30 error: undefined;
31} | {
32 status: "error";
33 error: Error;
34};
35/**
36 * Result returned by client-side router instrumented navigation and fetcher
37 * calls.
38 */
39type InstrumentationClientRouterResult = InstrumentationHandlerResult & {
40 meta: InstrumentationResultMeta | undefined;
41};
42/**
43 * Result returned by server request handler instrumentation.
44 */
45type InstrumentationServerHandlerResult = InstrumentationHandlerResult & {
46 statusCode: number;
47 meta: InstrumentationResultMeta | undefined;
48};
49type InstrumentFunction<T, TInnerResult = InstrumentationHandlerResult> = (handler: () => Promise<TInnerResult>, info: T) => Promise<void>;
50type ReadonlyRequest = {
51 method: string;
52 url: string;
53 headers: Pick<Headers, "get">;
54};
55type ReadonlyContext = Pick<RouterContextProvider, "get">;
56type InstrumentableRoute = {
57 id: string;
58 index: boolean | undefined;
59 path: string | undefined;
60 instrument(instrumentations: RouteInstrumentations): void;
61};
62type RouteInstrumentations = {
63 lazy?: InstrumentFunction<RouteLazyInstrumentationInfo>;
64 "lazy.loader"?: InstrumentFunction<RouteLazyInstrumentationInfo>;
65 "lazy.action"?: InstrumentFunction<RouteLazyInstrumentationInfo>;
66 "lazy.middleware"?: InstrumentFunction<RouteLazyInstrumentationInfo>;
67 middleware?: InstrumentFunction<RouteHandlerInstrumentationInfo>;
68 loader?: InstrumentFunction<RouteHandlerInstrumentationInfo>;
69 action?: InstrumentFunction<RouteHandlerInstrumentationInfo>;
70};
71type RouteLazyInstrumentationInfo = undefined;
72type RouteHandlerInstrumentationInfo = Readonly<Omit<LoaderFunctionArgs, "request" | "context"> & {
73 request: ReadonlyRequest;
74 context: ReadonlyContext;
75}>;
76type InstrumentableRouter = {
77 instrument(instrumentations: RouterInstrumentations): void;
78};
79type RouterInstrumentations = {
80 navigate?: InstrumentFunction<RouterNavigationInstrumentationInfo, InstrumentationClientRouterResult>;
81 fetch?: InstrumentFunction<RouterFetchInstrumentationInfo, InstrumentationClientRouterResult>;
82};
83type RouterNavigationInstrumentationInfo = Readonly<{
84 to: string | number;
85 currentUrl: string;
86 formMethod?: HTMLFormMethod;
87 formEncType?: FormEncType;
88 formData?: FormData;
89 body?: any;
90}>;
91type RouterFetchInstrumentationInfo = Readonly<{
92 href: string;
93 currentUrl: string;
94 fetcherKey: string;
95 formMethod?: HTMLFormMethod;
96 formEncType?: FormEncType;
97 formData?: FormData;
98 body?: any;
99}>;
100type InstrumentableRequestHandler = {
101 instrument(instrumentations: RequestHandlerInstrumentations): void;
102};
103type RequestHandlerInstrumentations = {
104 request?: InstrumentFunction<RequestHandlerInstrumentationInfo, InstrumentationServerHandlerResult>;
105};
106type RequestHandlerInstrumentationInfo = Readonly<{
107 request: ReadonlyRequest;
108 context: ReadonlyContext | undefined;
109}>;
110//#endregion
111export { ClientInstrumentation, InstrumentRequestHandlerFunction, InstrumentRouteFunction, InstrumentRouterFunction, InstrumentationClientRouterResult, InstrumentationHandlerResult, InstrumentationServerHandlerResult, ServerInstrumentation };
\No newline at end of file