@tanstack/react-start-client 1.111.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +33 -0
  3. package/dist/cjs/Meta.cjs +14 -0
  4. package/dist/cjs/Meta.cjs.map +1 -0
  5. package/dist/cjs/Meta.d.cts +1 -0
  6. package/dist/cjs/Scripts.cjs +12 -0
  7. package/dist/cjs/Scripts.cjs.map +1 -0
  8. package/dist/cjs/Scripts.d.cts +1 -0
  9. package/dist/cjs/StartClient.cjs +24 -0
  10. package/dist/cjs/StartClient.cjs.map +1 -0
  11. package/dist/cjs/StartClient.d.cts +4 -0
  12. package/dist/cjs/createIsomorphicFn.cjs +7 -0
  13. package/dist/cjs/createIsomorphicFn.cjs.map +1 -0
  14. package/dist/cjs/createIsomorphicFn.d.cts +12 -0
  15. package/dist/cjs/createMiddleware.cjs +34 -0
  16. package/dist/cjs/createMiddleware.cjs.map +1 -0
  17. package/dist/cjs/createMiddleware.d.cts +129 -0
  18. package/dist/cjs/createServerFn.cjs +369 -0
  19. package/dist/cjs/createServerFn.cjs.map +1 -0
  20. package/dist/cjs/createServerFn.d.cts +137 -0
  21. package/dist/cjs/envOnly.cjs +7 -0
  22. package/dist/cjs/envOnly.cjs.map +1 -0
  23. package/dist/cjs/envOnly.d.cts +4 -0
  24. package/dist/cjs/headers.cjs +30 -0
  25. package/dist/cjs/headers.cjs.map +1 -0
  26. package/dist/cjs/headers.d.cts +5 -0
  27. package/dist/cjs/index.cjs +31 -0
  28. package/dist/cjs/index.cjs.map +1 -0
  29. package/dist/cjs/index.d.cts +14 -0
  30. package/dist/cjs/json.cjs +14 -0
  31. package/dist/cjs/json.cjs.map +1 -0
  32. package/dist/cjs/json.d.cts +2 -0
  33. package/dist/cjs/registerGlobalMiddleware.cjs +9 -0
  34. package/dist/cjs/registerGlobalMiddleware.cjs.map +1 -0
  35. package/dist/cjs/registerGlobalMiddleware.d.cts +5 -0
  36. package/dist/cjs/renderRSC.cjs +29 -0
  37. package/dist/cjs/renderRSC.cjs.map +1 -0
  38. package/dist/cjs/renderRSC.d.cts +2 -0
  39. package/dist/cjs/routesManifest.d.cts +0 -0
  40. package/dist/cjs/serializer.cjs +152 -0
  41. package/dist/cjs/serializer.cjs.map +1 -0
  42. package/dist/cjs/serializer.d.cts +2 -0
  43. package/dist/cjs/ssr-client.cjs +114 -0
  44. package/dist/cjs/ssr-client.cjs.map +1 -0
  45. package/dist/cjs/ssr-client.d.cts +65 -0
  46. package/dist/cjs/tests/createIsomorphicFn.test-d.d.cts +1 -0
  47. package/dist/cjs/tests/createServerFn.test-d.d.cts +1 -0
  48. package/dist/cjs/tests/createServerMiddleware.test-d.d.cts +1 -0
  49. package/dist/cjs/tests/envOnly.test-d.d.cts +1 -0
  50. package/dist/cjs/tests/json.test.d.cts +1 -0
  51. package/dist/cjs/tests/transformer.test.d.cts +1 -0
  52. package/dist/cjs/useServerFn.cjs +26 -0
  53. package/dist/cjs/useServerFn.cjs.map +1 -0
  54. package/dist/cjs/useServerFn.d.cts +1 -0
  55. package/dist/esm/Meta.d.ts +1 -0
  56. package/dist/esm/Meta.js +14 -0
  57. package/dist/esm/Meta.js.map +1 -0
  58. package/dist/esm/Scripts.d.ts +1 -0
  59. package/dist/esm/Scripts.js +12 -0
  60. package/dist/esm/Scripts.js.map +1 -0
  61. package/dist/esm/StartClient.d.ts +4 -0
  62. package/dist/esm/StartClient.js +24 -0
  63. package/dist/esm/StartClient.js.map +1 -0
  64. package/dist/esm/createIsomorphicFn.d.ts +12 -0
  65. package/dist/esm/createIsomorphicFn.js +7 -0
  66. package/dist/esm/createIsomorphicFn.js.map +1 -0
  67. package/dist/esm/createMiddleware.d.ts +129 -0
  68. package/dist/esm/createMiddleware.js +34 -0
  69. package/dist/esm/createMiddleware.js.map +1 -0
  70. package/dist/esm/createServerFn.d.ts +137 -0
  71. package/dist/esm/createServerFn.js +347 -0
  72. package/dist/esm/createServerFn.js.map +1 -0
  73. package/dist/esm/envOnly.d.ts +4 -0
  74. package/dist/esm/envOnly.js +7 -0
  75. package/dist/esm/envOnly.js.map +1 -0
  76. package/dist/esm/headers.d.ts +5 -0
  77. package/dist/esm/headers.js +30 -0
  78. package/dist/esm/headers.js.map +1 -0
  79. package/dist/esm/index.d.ts +14 -0
  80. package/dist/esm/index.js +31 -0
  81. package/dist/esm/index.js.map +1 -0
  82. package/dist/esm/json.d.ts +2 -0
  83. package/dist/esm/json.js +14 -0
  84. package/dist/esm/json.js.map +1 -0
  85. package/dist/esm/registerGlobalMiddleware.d.ts +5 -0
  86. package/dist/esm/registerGlobalMiddleware.js +9 -0
  87. package/dist/esm/registerGlobalMiddleware.js.map +1 -0
  88. package/dist/esm/renderRSC.d.ts +2 -0
  89. package/dist/esm/renderRSC.js +29 -0
  90. package/dist/esm/renderRSC.js.map +1 -0
  91. package/dist/esm/routesManifest.d.ts +0 -0
  92. package/dist/esm/serializer.d.ts +2 -0
  93. package/dist/esm/serializer.js +152 -0
  94. package/dist/esm/serializer.js.map +1 -0
  95. package/dist/esm/ssr-client.d.ts +65 -0
  96. package/dist/esm/ssr-client.js +114 -0
  97. package/dist/esm/ssr-client.js.map +1 -0
  98. package/dist/esm/tests/createIsomorphicFn.test-d.d.ts +1 -0
  99. package/dist/esm/tests/createServerFn.test-d.d.ts +1 -0
  100. package/dist/esm/tests/createServerMiddleware.test-d.d.ts +1 -0
  101. package/dist/esm/tests/envOnly.test-d.d.ts +1 -0
  102. package/dist/esm/tests/json.test.d.ts +1 -0
  103. package/dist/esm/tests/transformer.test.d.ts +1 -0
  104. package/dist/esm/useServerFn.d.ts +1 -0
  105. package/dist/esm/useServerFn.js +26 -0
  106. package/dist/esm/useServerFn.js.map +1 -0
  107. package/package.json +68 -0
  108. package/src/Meta.tsx +10 -0
  109. package/src/Scripts.tsx +8 -0
  110. package/src/StartClient.tsx +21 -0
  111. package/src/createIsomorphicFn.ts +36 -0
  112. package/src/createMiddleware.ts +517 -0
  113. package/src/createServerFn.ts +790 -0
  114. package/src/envOnly.ts +9 -0
  115. package/src/headers.ts +50 -0
  116. package/src/index.tsx +74 -0
  117. package/src/json.ts +15 -0
  118. package/src/registerGlobalMiddleware.ts +9 -0
  119. package/src/renderRSC.tsx +91 -0
  120. package/src/routesManifest.ts +0 -0
  121. package/src/serializer.ts +177 -0
  122. package/src/ssr-client.tsx +221 -0
  123. package/src/tests/createIsomorphicFn.test-d.ts +72 -0
  124. package/src/tests/createServerFn.test-d.tsx +390 -0
  125. package/src/tests/createServerMiddleware.test-d.ts +611 -0
  126. package/src/tests/envOnly.test-d.ts +34 -0
  127. package/src/tests/json.test.ts +37 -0
  128. package/src/tests/transformer.test.tsx +147 -0
  129. package/src/useServerFn.ts +30 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StartClient.js","sources":["../../src/StartClient.tsx"],"sourcesContent":["import { Await, RouterProvider } from '@tanstack/react-router'\nimport { hydrate } from './ssr-client'\nimport type { AnyRouter } from '@tanstack/react-router'\n\nlet hydrationPromise: Promise<void | Array<Array<void>>> | undefined\n\nexport function StartClient(props: { router: AnyRouter }) {\n if (!hydrationPromise) {\n if (!props.router.state.matches.length) {\n hydrationPromise = hydrate(props.router)\n } else {\n hydrationPromise = Promise.resolve()\n }\n }\n return (\n <Await\n promise={hydrationPromise}\n children={() => <RouterProvider router={props.router} />}\n />\n )\n}\n"],"names":[],"mappings":";;;AAIA,IAAI;AAEG,SAAS,YAAY,OAA8B;AACxD,MAAI,CAAC,kBAAkB;AACrB,QAAI,CAAC,MAAM,OAAO,MAAM,QAAQ,QAAQ;AACnB,yBAAA,QAAQ,MAAM,MAAM;AAAA,IAAA,OAClC;AACL,yBAAmB,QAAQ,QAAQ;AAAA,IAAA;AAAA,EACrC;AAGA,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,UAAU,MAAM,oBAAC,gBAAe,EAAA,QAAQ,MAAM,OAAQ,CAAA;AAAA,IAAA;AAAA,EACxD;AAEJ;"}
@@ -0,0 +1,12 @@
1
+ export type IsomorphicFn<TArgs extends Array<any> = [], TServer = undefined, TClient = undefined> = (...args: TArgs) => TServer | TClient;
2
+ export interface ServerOnlyFn<TArgs extends Array<any>, TServer> extends IsomorphicFn<TArgs, TServer> {
3
+ client: <TClient>(clientImpl: (...args: TArgs) => TClient) => IsomorphicFn<TArgs, TServer, TClient>;
4
+ }
5
+ export interface ClientOnlyFn<TArgs extends Array<any>, TClient> extends IsomorphicFn<TArgs, undefined, TClient> {
6
+ server: <TServer>(serverImpl: (...args: TArgs) => TServer) => IsomorphicFn<TArgs, TServer, TClient>;
7
+ }
8
+ export interface IsomorphicFnBase extends IsomorphicFn {
9
+ server: <TArgs extends Array<any>, TServer>(serverImpl: (...args: TArgs) => TServer) => ServerOnlyFn<TArgs, TServer>;
10
+ client: <TArgs extends Array<any>, TClient>(clientImpl: (...args: TArgs) => TClient) => ClientOnlyFn<TArgs, TClient>;
11
+ }
12
+ export declare function createIsomorphicFn(): IsomorphicFnBase;
@@ -0,0 +1,7 @@
1
+ function createIsomorphicFn() {
2
+ return null;
3
+ }
4
+ export {
5
+ createIsomorphicFn
6
+ };
7
+ //# sourceMappingURL=createIsomorphicFn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createIsomorphicFn.js","sources":["../../src/createIsomorphicFn.ts"],"sourcesContent":["// a function that can have different implementations on the client and server.\n// implementations not provided will default to a no-op function.\n\nexport type IsomorphicFn<\n TArgs extends Array<any> = [],\n TServer = undefined,\n TClient = undefined,\n> = (...args: TArgs) => TServer | TClient\n\nexport interface ServerOnlyFn<TArgs extends Array<any>, TServer>\n extends IsomorphicFn<TArgs, TServer> {\n client: <TClient>(\n clientImpl: (...args: TArgs) => TClient,\n ) => IsomorphicFn<TArgs, TServer, TClient>\n}\n\nexport interface ClientOnlyFn<TArgs extends Array<any>, TClient>\n extends IsomorphicFn<TArgs, undefined, TClient> {\n server: <TServer>(\n serverImpl: (...args: TArgs) => TServer,\n ) => IsomorphicFn<TArgs, TServer, TClient>\n}\n\nexport interface IsomorphicFnBase extends IsomorphicFn {\n server: <TArgs extends Array<any>, TServer>(\n serverImpl: (...args: TArgs) => TServer,\n ) => ServerOnlyFn<TArgs, TServer>\n client: <TArgs extends Array<any>, TClient>(\n clientImpl: (...args: TArgs) => TClient,\n ) => ClientOnlyFn<TArgs, TClient>\n}\n\n// this is a dummy function, it will be replaced by the transformer\nexport function createIsomorphicFn(): IsomorphicFnBase {\n return null!\n}\n"],"names":[],"mappings":"AAiCO,SAAS,qBAAuC;AAC9C,SAAA;AACT;"}
@@ -0,0 +1,129 @@
1
+ import { ConstrainValidator, Method, ServerFnTypeOrTypeFn } from './createServerFn.js';
2
+ import { Assign, Constrain, Expand, IntersectAssign, ResolveValidatorInput, ResolveValidatorOutput, SerializerStringify } from '@tanstack/router-core';
3
+ export type AssignAllMiddleware<TMiddlewares, TType extends keyof AnyMiddleware['_types'], TAcc = undefined> = TMiddlewares extends readonly [
4
+ infer TMiddleware extends AnyMiddleware,
5
+ ...infer TRest
6
+ ] ? AssignAllMiddleware<TRest, TType, Assign<TAcc, TMiddleware['_types'][TType]>> : TAcc;
7
+ /**
8
+ * Recursively resolve the client context type produced by a sequence of middleware
9
+ */
10
+ export type AssignAllClientContextBeforeNext<TMiddlewares, TClientContext = undefined> = unknown extends TClientContext ? TClientContext : Assign<AssignAllMiddleware<TMiddlewares, 'allClientContextBeforeNext'>, TClientContext>;
11
+ export type AssignAllClientSendContext<TMiddlewares, TSendContext = undefined> = unknown extends TSendContext ? TSendContext : Assign<AssignAllMiddleware<TMiddlewares, 'allClientSendContext'>, TSendContext>;
12
+ export type AssignAllClientContextAfterNext<TMiddlewares, TClientContext = undefined, TSendContext = undefined> = unknown extends TClientContext ? Assign<TClientContext, TSendContext> : Assign<AssignAllMiddleware<TMiddlewares, 'allClientContextAfterNext'>, Assign<TClientContext, TSendContext>>;
13
+ /**
14
+ * Recursively resolve the server context type produced by a sequence of middleware
15
+ */
16
+ export type AssignAllServerContext<TMiddlewares, TSendContext = undefined, TServerContext = undefined> = unknown extends TSendContext ? Assign<TSendContext, TServerContext> : Assign<AssignAllMiddleware<TMiddlewares, 'allServerContext'>, Assign<TSendContext, TServerContext>>;
17
+ export type AssignAllServerSendContext<TMiddlewares, TSendContext = undefined> = unknown extends TSendContext ? TSendContext : Assign<AssignAllMiddleware<TMiddlewares, 'allServerSendContext'>, TSendContext>;
18
+ export type IntersectAllMiddleware<TMiddlewares, TType extends keyof AnyMiddleware['_types'], TAcc = undefined> = TMiddlewares extends readonly [
19
+ infer TMiddleware extends AnyMiddleware,
20
+ ...infer TRest
21
+ ] ? IntersectAllMiddleware<TRest, TType, IntersectAssign<TAcc, TMiddleware['_types'][TType]>> : TAcc;
22
+ /**
23
+ * Recursively resolve the input type produced by a sequence of middleware
24
+ */
25
+ export type IntersectAllValidatorInputs<TMiddlewares, TValidator> = unknown extends TValidator ? TValidator : IntersectAssign<IntersectAllMiddleware<TMiddlewares, 'allInput'>, TValidator extends undefined ? undefined : ResolveValidatorInput<TValidator>>;
26
+ /**
27
+ * Recursively merge the output type produced by a sequence of middleware
28
+ */
29
+ export type IntersectAllValidatorOutputs<TMiddlewares, TValidator> = unknown extends TValidator ? TValidator : IntersectAssign<IntersectAllMiddleware<TMiddlewares, 'allOutput'>, TValidator extends undefined ? undefined : ResolveValidatorOutput<TValidator>>;
30
+ export interface MiddlewareOptions<in out TMiddlewares, in out TValidator, in out TServerContext, in out TClientContext> {
31
+ validateClient?: boolean;
32
+ middleware?: TMiddlewares;
33
+ validator?: ConstrainValidator<TValidator>;
34
+ client?: MiddlewareClientFn<TMiddlewares, TValidator, TServerContext, TClientContext>;
35
+ server?: MiddlewareServerFn<TMiddlewares, TValidator, TServerContext, unknown, unknown>;
36
+ }
37
+ export type MiddlewareServerNextFn<TMiddlewares, TServerSendContext> = <TNewServerContext = undefined, TSendContext = undefined>(ctx?: {
38
+ context?: TNewServerContext;
39
+ sendContext?: SerializerStringify<TSendContext>;
40
+ }) => Promise<ServerResultWithContext<TMiddlewares, TServerSendContext, TNewServerContext, TSendContext>>;
41
+ export interface MiddlewareServerFnOptions<in out TMiddlewares, in out TValidator, in out TServerSendContext> {
42
+ data: Expand<IntersectAllValidatorOutputs<TMiddlewares, TValidator>>;
43
+ context: Expand<AssignAllServerContext<TMiddlewares, TServerSendContext>>;
44
+ next: MiddlewareServerNextFn<TMiddlewares, TServerSendContext>;
45
+ method: Method;
46
+ filename: string;
47
+ functionId: string;
48
+ signal: AbortSignal;
49
+ }
50
+ export type MiddlewareServerFn<TMiddlewares, TValidator, TServerSendContext, TNewServerContext, TSendContext> = (options: MiddlewareServerFnOptions<TMiddlewares, TValidator, TServerSendContext>) => MiddlewareServerFnResult<TMiddlewares, TServerSendContext, TNewServerContext, TSendContext>;
51
+ export type MiddlewareServerFnResult<TMiddlewares, TServerSendContext, TServerContext, TSendContext> = Promise<ServerResultWithContext<TMiddlewares, TServerSendContext, TServerContext, TSendContext>> | ServerResultWithContext<TMiddlewares, TServerSendContext, TServerContext, TSendContext>;
52
+ export type MiddlewareClientNextFn<TMiddlewares> = <TSendContext = undefined, TNewClientContext = undefined>(ctx?: {
53
+ context?: TNewClientContext;
54
+ sendContext?: SerializerStringify<TSendContext>;
55
+ headers?: HeadersInit;
56
+ }) => Promise<ClientResultWithContext<TMiddlewares, TSendContext, TNewClientContext>>;
57
+ export interface MiddlewareClientFnOptions<in out TMiddlewares, in out TValidator> {
58
+ data: Expand<IntersectAllValidatorInputs<TMiddlewares, TValidator>>;
59
+ context: Expand<AssignAllClientContextBeforeNext<TMiddlewares>>;
60
+ sendContext: Expand<AssignAllServerSendContext<TMiddlewares>>;
61
+ method: Method;
62
+ signal: AbortSignal;
63
+ next: MiddlewareClientNextFn<TMiddlewares>;
64
+ filename: string;
65
+ functionId: string;
66
+ type: ServerFnTypeOrTypeFn<Method, TMiddlewares, TValidator>;
67
+ }
68
+ export type MiddlewareClientFn<TMiddlewares, TValidator, TSendContext, TClientContext> = (options: MiddlewareClientFnOptions<TMiddlewares, TValidator>) => MiddlewareClientFnResult<TMiddlewares, TSendContext, TClientContext>;
69
+ export type MiddlewareClientFnResult<TMiddlewares, TSendContext, TClientContext> = Promise<ClientResultWithContext<TMiddlewares, TSendContext, TClientContext>> | ClientResultWithContext<TMiddlewares, TSendContext, TClientContext>;
70
+ export type ServerResultWithContext<in out TMiddlewares, in out TServerSendContext, in out TServerContext, in out TSendContext> = {
71
+ 'use functions must return the result of next()': true;
72
+ _types: {
73
+ context: TServerContext;
74
+ sendContext: TSendContext;
75
+ };
76
+ context: Expand<AssignAllServerContext<TMiddlewares, TServerSendContext, TServerContext>>;
77
+ sendContext: Expand<AssignAllClientSendContext<TMiddlewares, TSendContext>>;
78
+ };
79
+ export type ClientResultWithContext<in out TMiddlewares, in out TSendContext, in out TClientContext> = {
80
+ 'use functions must return the result of next()': true;
81
+ context: Expand<AssignAllClientContextAfterNext<TMiddlewares, TClientContext>>;
82
+ sendContext: Expand<AssignAllServerSendContext<TMiddlewares, TSendContext>>;
83
+ headers: HeadersInit;
84
+ };
85
+ export type AnyMiddleware = MiddlewareWithTypes<any, any, any, any, any, any>;
86
+ export interface MiddlewareTypes<in out TMiddlewares, in out TValidator, in out TServerContext, in out TServerSendContext, in out TClientContext, in out TClientSendContext> {
87
+ middlewares: TMiddlewares;
88
+ input: ResolveValidatorInput<TValidator>;
89
+ allInput: IntersectAllValidatorInputs<TMiddlewares, TValidator>;
90
+ output: ResolveValidatorOutput<TValidator>;
91
+ allOutput: IntersectAllValidatorOutputs<TMiddlewares, TValidator>;
92
+ clientContext: TClientContext;
93
+ allClientContextBeforeNext: AssignAllClientContextBeforeNext<TMiddlewares, TClientContext>;
94
+ allClientContextAfterNext: AssignAllClientContextAfterNext<TMiddlewares, TClientContext, TClientSendContext>;
95
+ serverContext: TServerContext;
96
+ serverSendContext: TServerSendContext;
97
+ allServerSendContext: AssignAllServerSendContext<TMiddlewares, TServerSendContext>;
98
+ allServerContext: AssignAllServerContext<TMiddlewares, TServerSendContext, TServerContext>;
99
+ clientSendContext: TClientSendContext;
100
+ allClientSendContext: AssignAllClientSendContext<TMiddlewares, TClientSendContext>;
101
+ validator: TValidator;
102
+ }
103
+ export interface MiddlewareWithTypes<TMiddlewares, TValidator, TServerContext, TServerSendContext, TClientContext, TClientSendContext> {
104
+ _types: MiddlewareTypes<TMiddlewares, TValidator, TServerContext, TServerSendContext, TClientContext, TClientSendContext>;
105
+ options: MiddlewareOptions<TMiddlewares, TValidator, TServerContext, TClientContext>;
106
+ }
107
+ export interface MiddlewareAfterValidator<TMiddlewares, TValidator> extends MiddlewareWithTypes<TMiddlewares, TValidator, undefined, undefined, undefined, undefined>, MiddlewareServer<TMiddlewares, TValidator, undefined, undefined>, MiddlewareClient<TMiddlewares, TValidator> {
108
+ }
109
+ export interface MiddlewareValidator<TMiddlewares> {
110
+ validator: <TNewValidator>(input: ConstrainValidator<TNewValidator>) => MiddlewareAfterValidator<TMiddlewares, TNewValidator>;
111
+ }
112
+ export interface MiddlewareAfterServer<TMiddlewares, TValidator, TServerContext, TServerSendContext, TClientContext, TClientSendContext> extends MiddlewareWithTypes<TMiddlewares, TValidator, TServerContext, TServerSendContext, TClientContext, TClientSendContext> {
113
+ }
114
+ export interface MiddlewareServer<TMiddlewares, TValidator, TServerSendContext, TClientContext> {
115
+ server: <TNewServerContext = undefined, TSendContext = undefined>(server: MiddlewareServerFn<TMiddlewares, TValidator, TServerSendContext, TNewServerContext, TSendContext>) => MiddlewareAfterServer<TMiddlewares, TValidator, TNewServerContext, TServerSendContext, TClientContext, TSendContext>;
116
+ }
117
+ export interface MiddlewareAfterClient<TMiddlewares, TValidator, TServerSendContext, TClientContext> extends MiddlewareWithTypes<TMiddlewares, TValidator, undefined, TServerSendContext, TClientContext, undefined>, MiddlewareServer<TMiddlewares, TValidator, TServerSendContext, TClientContext> {
118
+ }
119
+ export interface MiddlewareClient<TMiddlewares, TValidator> {
120
+ client: <TSendServerContext = undefined, TNewClientContext = undefined>(client: MiddlewareClientFn<TMiddlewares, TValidator, TSendServerContext, TNewClientContext>) => MiddlewareAfterClient<TMiddlewares, TValidator, TSendServerContext, TNewClientContext>;
121
+ }
122
+ export interface MiddlewareAfterMiddleware<TMiddlewares> extends MiddlewareWithTypes<TMiddlewares, undefined, undefined, undefined, undefined, undefined>, MiddlewareServer<TMiddlewares, undefined, undefined, undefined>, MiddlewareClient<TMiddlewares, undefined>, MiddlewareValidator<TMiddlewares> {
123
+ }
124
+ export interface Middleware extends MiddlewareAfterMiddleware<unknown> {
125
+ middleware: <const TNewMiddlewares = undefined>(middlewares: Constrain<TNewMiddlewares, ReadonlyArray<AnyMiddleware>>) => MiddlewareAfterMiddleware<TNewMiddlewares>;
126
+ }
127
+ export declare function createMiddleware(options?: {
128
+ validateClient?: boolean;
129
+ }, __opts?: MiddlewareOptions<unknown, undefined, undefined, undefined>): Middleware;
@@ -0,0 +1,34 @@
1
+ function createMiddleware(options, __opts) {
2
+ const resolvedOptions = __opts || (options || {});
3
+ return {
4
+ options: resolvedOptions,
5
+ middleware: (middleware) => {
6
+ return createMiddleware(
7
+ void 0,
8
+ Object.assign(resolvedOptions, { middleware })
9
+ );
10
+ },
11
+ validator: (validator) => {
12
+ return createMiddleware(
13
+ void 0,
14
+ Object.assign(resolvedOptions, { validator })
15
+ );
16
+ },
17
+ client: (client) => {
18
+ return createMiddleware(
19
+ void 0,
20
+ Object.assign(resolvedOptions, { client })
21
+ );
22
+ },
23
+ server: (server) => {
24
+ return createMiddleware(
25
+ void 0,
26
+ Object.assign(resolvedOptions, { server })
27
+ );
28
+ }
29
+ };
30
+ }
31
+ export {
32
+ createMiddleware
33
+ };
34
+ //# sourceMappingURL=createMiddleware.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createMiddleware.js","sources":["../../src/createMiddleware.ts"],"sourcesContent":["import type {\n ConstrainValidator,\n Method,\n ServerFnTypeOrTypeFn,\n} from './createServerFn'\nimport type {\n Assign,\n Constrain,\n Expand,\n IntersectAssign,\n ResolveValidatorInput,\n ResolveValidatorOutput,\n SerializerStringify,\n} from '@tanstack/router-core'\n\nexport type AssignAllMiddleware<\n TMiddlewares,\n TType extends keyof AnyMiddleware['_types'],\n TAcc = undefined,\n> = TMiddlewares extends readonly [\n infer TMiddleware extends AnyMiddleware,\n ...infer TRest,\n]\n ? AssignAllMiddleware<\n TRest,\n TType,\n Assign<TAcc, TMiddleware['_types'][TType]>\n >\n : TAcc\n\n/**\n * Recursively resolve the client context type produced by a sequence of middleware\n */\nexport type AssignAllClientContextBeforeNext<\n TMiddlewares,\n TClientContext = undefined,\n> = unknown extends TClientContext\n ? TClientContext\n : Assign<\n AssignAllMiddleware<TMiddlewares, 'allClientContextBeforeNext'>,\n TClientContext\n >\n\nexport type AssignAllClientSendContext<\n TMiddlewares,\n TSendContext = undefined,\n> = unknown extends TSendContext\n ? TSendContext\n : Assign<\n AssignAllMiddleware<TMiddlewares, 'allClientSendContext'>,\n TSendContext\n >\n\nexport type AssignAllClientContextAfterNext<\n TMiddlewares,\n TClientContext = undefined,\n TSendContext = undefined,\n> = unknown extends TClientContext\n ? Assign<TClientContext, TSendContext>\n : Assign<\n AssignAllMiddleware<TMiddlewares, 'allClientContextAfterNext'>,\n Assign<TClientContext, TSendContext>\n >\n\n/**\n * Recursively resolve the server context type produced by a sequence of middleware\n */\nexport type AssignAllServerContext<\n TMiddlewares,\n TSendContext = undefined,\n TServerContext = undefined,\n> = unknown extends TSendContext\n ? Assign<TSendContext, TServerContext>\n : Assign<\n AssignAllMiddleware<TMiddlewares, 'allServerContext'>,\n Assign<TSendContext, TServerContext>\n >\n\nexport type AssignAllServerSendContext<\n TMiddlewares,\n TSendContext = undefined,\n> = unknown extends TSendContext\n ? TSendContext\n : Assign<\n AssignAllMiddleware<TMiddlewares, 'allServerSendContext'>,\n TSendContext\n >\n\nexport type IntersectAllMiddleware<\n TMiddlewares,\n TType extends keyof AnyMiddleware['_types'],\n TAcc = undefined,\n> = TMiddlewares extends readonly [\n infer TMiddleware extends AnyMiddleware,\n ...infer TRest,\n]\n ? IntersectAllMiddleware<\n TRest,\n TType,\n IntersectAssign<TAcc, TMiddleware['_types'][TType]>\n >\n : TAcc\n\n/**\n * Recursively resolve the input type produced by a sequence of middleware\n */\nexport type IntersectAllValidatorInputs<TMiddlewares, TValidator> =\n unknown extends TValidator\n ? TValidator\n : IntersectAssign<\n IntersectAllMiddleware<TMiddlewares, 'allInput'>,\n TValidator extends undefined\n ? undefined\n : ResolveValidatorInput<TValidator>\n >\n/**\n * Recursively merge the output type produced by a sequence of middleware\n */\nexport type IntersectAllValidatorOutputs<TMiddlewares, TValidator> =\n unknown extends TValidator\n ? TValidator\n : IntersectAssign<\n IntersectAllMiddleware<TMiddlewares, 'allOutput'>,\n TValidator extends undefined\n ? undefined\n : ResolveValidatorOutput<TValidator>\n >\n\nexport interface MiddlewareOptions<\n in out TMiddlewares,\n in out TValidator,\n in out TServerContext,\n in out TClientContext,\n> {\n validateClient?: boolean\n middleware?: TMiddlewares\n validator?: ConstrainValidator<TValidator>\n client?: MiddlewareClientFn<\n TMiddlewares,\n TValidator,\n TServerContext,\n TClientContext\n >\n server?: MiddlewareServerFn<\n TMiddlewares,\n TValidator,\n TServerContext,\n unknown,\n unknown\n >\n}\n\nexport type MiddlewareServerNextFn<TMiddlewares, TServerSendContext> = <\n TNewServerContext = undefined,\n TSendContext = undefined,\n>(ctx?: {\n context?: TNewServerContext\n sendContext?: SerializerStringify<TSendContext>\n}) => Promise<\n ServerResultWithContext<\n TMiddlewares,\n TServerSendContext,\n TNewServerContext,\n TSendContext\n >\n>\n\nexport interface MiddlewareServerFnOptions<\n in out TMiddlewares,\n in out TValidator,\n in out TServerSendContext,\n> {\n data: Expand<IntersectAllValidatorOutputs<TMiddlewares, TValidator>>\n context: Expand<AssignAllServerContext<TMiddlewares, TServerSendContext>>\n next: MiddlewareServerNextFn<TMiddlewares, TServerSendContext>\n method: Method\n filename: string\n functionId: string\n signal: AbortSignal\n}\n\nexport type MiddlewareServerFn<\n TMiddlewares,\n TValidator,\n TServerSendContext,\n TNewServerContext,\n TSendContext,\n> = (\n options: MiddlewareServerFnOptions<\n TMiddlewares,\n TValidator,\n TServerSendContext\n >,\n) => MiddlewareServerFnResult<\n TMiddlewares,\n TServerSendContext,\n TNewServerContext,\n TSendContext\n>\n\nexport type MiddlewareServerFnResult<\n TMiddlewares,\n TServerSendContext,\n TServerContext,\n TSendContext,\n> =\n | Promise<\n ServerResultWithContext<\n TMiddlewares,\n TServerSendContext,\n TServerContext,\n TSendContext\n >\n >\n | ServerResultWithContext<\n TMiddlewares,\n TServerSendContext,\n TServerContext,\n TSendContext\n >\n\nexport type MiddlewareClientNextFn<TMiddlewares> = <\n TSendContext = undefined,\n TNewClientContext = undefined,\n>(ctx?: {\n context?: TNewClientContext\n sendContext?: SerializerStringify<TSendContext>\n headers?: HeadersInit\n}) => Promise<\n ClientResultWithContext<TMiddlewares, TSendContext, TNewClientContext>\n>\n\nexport interface MiddlewareClientFnOptions<\n in out TMiddlewares,\n in out TValidator,\n> {\n data: Expand<IntersectAllValidatorInputs<TMiddlewares, TValidator>>\n context: Expand<AssignAllClientContextBeforeNext<TMiddlewares>>\n sendContext: Expand<AssignAllServerSendContext<TMiddlewares>>\n method: Method\n signal: AbortSignal\n next: MiddlewareClientNextFn<TMiddlewares>\n filename: string\n functionId: string\n type: ServerFnTypeOrTypeFn<Method, TMiddlewares, TValidator>\n}\n\nexport type MiddlewareClientFn<\n TMiddlewares,\n TValidator,\n TSendContext,\n TClientContext,\n> = (\n options: MiddlewareClientFnOptions<TMiddlewares, TValidator>,\n) => MiddlewareClientFnResult<TMiddlewares, TSendContext, TClientContext>\n\nexport type MiddlewareClientFnResult<\n TMiddlewares,\n TSendContext,\n TClientContext,\n> =\n | Promise<ClientResultWithContext<TMiddlewares, TSendContext, TClientContext>>\n | ClientResultWithContext<TMiddlewares, TSendContext, TClientContext>\n\nexport type ServerResultWithContext<\n in out TMiddlewares,\n in out TServerSendContext,\n in out TServerContext,\n in out TSendContext,\n> = {\n 'use functions must return the result of next()': true\n _types: {\n context: TServerContext\n sendContext: TSendContext\n }\n context: Expand<\n AssignAllServerContext<TMiddlewares, TServerSendContext, TServerContext>\n >\n sendContext: Expand<AssignAllClientSendContext<TMiddlewares, TSendContext>>\n}\n\nexport type ClientResultWithContext<\n in out TMiddlewares,\n in out TSendContext,\n in out TClientContext,\n> = {\n 'use functions must return the result of next()': true\n context: Expand<AssignAllClientContextAfterNext<TMiddlewares, TClientContext>>\n sendContext: Expand<AssignAllServerSendContext<TMiddlewares, TSendContext>>\n headers: HeadersInit\n}\n\nexport type AnyMiddleware = MiddlewareWithTypes<any, any, any, any, any, any>\n\nexport interface MiddlewareTypes<\n in out TMiddlewares,\n in out TValidator,\n in out TServerContext,\n in out TServerSendContext,\n in out TClientContext,\n in out TClientSendContext,\n> {\n middlewares: TMiddlewares\n input: ResolveValidatorInput<TValidator>\n allInput: IntersectAllValidatorInputs<TMiddlewares, TValidator>\n output: ResolveValidatorOutput<TValidator>\n allOutput: IntersectAllValidatorOutputs<TMiddlewares, TValidator>\n clientContext: TClientContext\n allClientContextBeforeNext: AssignAllClientContextBeforeNext<\n TMiddlewares,\n TClientContext\n >\n allClientContextAfterNext: AssignAllClientContextAfterNext<\n TMiddlewares,\n TClientContext,\n TClientSendContext\n >\n serverContext: TServerContext\n serverSendContext: TServerSendContext\n allServerSendContext: AssignAllServerSendContext<\n TMiddlewares,\n TServerSendContext\n >\n allServerContext: AssignAllServerContext<\n TMiddlewares,\n TServerSendContext,\n TServerContext\n >\n clientSendContext: TClientSendContext\n allClientSendContext: AssignAllClientSendContext<\n TMiddlewares,\n TClientSendContext\n >\n validator: TValidator\n}\n\nexport interface MiddlewareWithTypes<\n TMiddlewares,\n TValidator,\n TServerContext,\n TServerSendContext,\n TClientContext,\n TClientSendContext,\n> {\n _types: MiddlewareTypes<\n TMiddlewares,\n TValidator,\n TServerContext,\n TServerSendContext,\n TClientContext,\n TClientSendContext\n >\n options: MiddlewareOptions<\n TMiddlewares,\n TValidator,\n TServerContext,\n TClientContext\n >\n}\n\nexport interface MiddlewareAfterValidator<TMiddlewares, TValidator>\n extends MiddlewareWithTypes<\n TMiddlewares,\n TValidator,\n undefined,\n undefined,\n undefined,\n undefined\n >,\n MiddlewareServer<TMiddlewares, TValidator, undefined, undefined>,\n MiddlewareClient<TMiddlewares, TValidator> {}\n\nexport interface MiddlewareValidator<TMiddlewares> {\n validator: <TNewValidator>(\n input: ConstrainValidator<TNewValidator>,\n ) => MiddlewareAfterValidator<TMiddlewares, TNewValidator>\n}\n\nexport interface MiddlewareAfterServer<\n TMiddlewares,\n TValidator,\n TServerContext,\n TServerSendContext,\n TClientContext,\n TClientSendContext,\n> extends MiddlewareWithTypes<\n TMiddlewares,\n TValidator,\n TServerContext,\n TServerSendContext,\n TClientContext,\n TClientSendContext\n > {}\n\nexport interface MiddlewareServer<\n TMiddlewares,\n TValidator,\n TServerSendContext,\n TClientContext,\n> {\n server: <TNewServerContext = undefined, TSendContext = undefined>(\n server: MiddlewareServerFn<\n TMiddlewares,\n TValidator,\n TServerSendContext,\n TNewServerContext,\n TSendContext\n >,\n ) => MiddlewareAfterServer<\n TMiddlewares,\n TValidator,\n TNewServerContext,\n TServerSendContext,\n TClientContext,\n TSendContext\n >\n}\n\nexport interface MiddlewareAfterClient<\n TMiddlewares,\n TValidator,\n TServerSendContext,\n TClientContext,\n> extends MiddlewareWithTypes<\n TMiddlewares,\n TValidator,\n undefined,\n TServerSendContext,\n TClientContext,\n undefined\n >,\n MiddlewareServer<\n TMiddlewares,\n TValidator,\n TServerSendContext,\n TClientContext\n > {}\n\nexport interface MiddlewareClient<TMiddlewares, TValidator> {\n client: <TSendServerContext = undefined, TNewClientContext = undefined>(\n client: MiddlewareClientFn<\n TMiddlewares,\n TValidator,\n TSendServerContext,\n TNewClientContext\n >,\n ) => MiddlewareAfterClient<\n TMiddlewares,\n TValidator,\n TSendServerContext,\n TNewClientContext\n >\n}\n\nexport interface MiddlewareAfterMiddleware<TMiddlewares>\n extends MiddlewareWithTypes<\n TMiddlewares,\n undefined,\n undefined,\n undefined,\n undefined,\n undefined\n >,\n MiddlewareServer<TMiddlewares, undefined, undefined, undefined>,\n MiddlewareClient<TMiddlewares, undefined>,\n MiddlewareValidator<TMiddlewares> {}\n\nexport interface Middleware extends MiddlewareAfterMiddleware<unknown> {\n middleware: <const TNewMiddlewares = undefined>(\n middlewares: Constrain<TNewMiddlewares, ReadonlyArray<AnyMiddleware>>,\n ) => MiddlewareAfterMiddleware<TNewMiddlewares>\n}\n\nexport function createMiddleware(\n options?: {\n validateClient?: boolean\n },\n __opts?: MiddlewareOptions<unknown, undefined, undefined, undefined>,\n): Middleware {\n // const resolvedOptions = (__opts || options) as MiddlewareOptions<\n const resolvedOptions =\n __opts ||\n ((options || {}) as MiddlewareOptions<\n unknown,\n undefined,\n undefined,\n undefined\n >)\n\n return {\n options: resolvedOptions as any,\n middleware: (middleware: any) => {\n return createMiddleware(\n undefined,\n Object.assign(resolvedOptions, { middleware }),\n ) as any\n },\n validator: (validator: any) => {\n return createMiddleware(\n undefined,\n Object.assign(resolvedOptions, { validator }),\n ) as any\n },\n client: (client: any) => {\n return createMiddleware(\n undefined,\n Object.assign(resolvedOptions, { client }),\n ) as any\n },\n server: (server: any) => {\n return createMiddleware(\n undefined,\n Object.assign(resolvedOptions, { server }),\n ) as any\n },\n } as unknown as Middleware\n}\n"],"names":[],"mappings":"AAydgB,SAAA,iBACd,SAGA,QACY;AAEN,QAAA,kBACJ,WACE,WAAW;AAOR,SAAA;AAAA,IACL,SAAS;AAAA,IACT,YAAY,CAAC,eAAoB;AACxB,aAAA;AAAA,QACL;AAAA,QACA,OAAO,OAAO,iBAAiB,EAAE,WAAY,CAAA;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,WAAW,CAAC,cAAmB;AACtB,aAAA;AAAA,QACL;AAAA,QACA,OAAO,OAAO,iBAAiB,EAAE,UAAW,CAAA;AAAA,MAC9C;AAAA,IACF;AAAA,IACA,QAAQ,CAAC,WAAgB;AAChB,aAAA;AAAA,QACL;AAAA,QACA,OAAO,OAAO,iBAAiB,EAAE,OAAQ,CAAA;AAAA,MAC3C;AAAA,IACF;AAAA,IACA,QAAQ,CAAC,WAAgB;AAChB,aAAA;AAAA,QACL;AAAA,QACA,OAAO,OAAO,iBAAiB,EAAE,OAAQ,CAAA;AAAA,MAC3C;AAAA,IAAA;AAAA,EAEJ;AACF;"}
@@ -0,0 +1,137 @@
1
+ import { AnyValidator, Constrain, Expand, ResolveValidatorInput, SerializerParse, SerializerStringify, SerializerStringifyBy, Validator } from '@tanstack/router-core';
2
+ import { AnyMiddleware, AssignAllClientSendContext, AssignAllServerContext, IntersectAllValidatorInputs, IntersectAllValidatorOutputs } from './createMiddleware.js';
3
+ export interface JsonResponse<TData> extends Response {
4
+ json: () => Promise<TData>;
5
+ }
6
+ export type CompiledFetcherFnOptions = {
7
+ method: Method;
8
+ data: unknown;
9
+ headers?: HeadersInit;
10
+ signal?: AbortSignal;
11
+ context?: any;
12
+ };
13
+ export type Fetcher<TMiddlewares, TValidator, TResponse> = undefined extends IntersectAllValidatorInputs<TMiddlewares, TValidator> ? OptionalFetcher<TMiddlewares, TValidator, TResponse> : RequiredFetcher<TMiddlewares, TValidator, TResponse>;
14
+ export interface FetcherBase {
15
+ url: string;
16
+ __executeServer: (opts: {
17
+ method: Method;
18
+ data: unknown;
19
+ headers?: HeadersInit;
20
+ context?: any;
21
+ signal: AbortSignal;
22
+ }) => Promise<unknown>;
23
+ }
24
+ export type FetchResult<TMiddlewares, TResponse, TFullResponse extends boolean> = false extends TFullResponse ? Promise<FetcherData<TResponse>> : Promise<FullFetcherData<TMiddlewares, TResponse>>;
25
+ export interface OptionalFetcher<TMiddlewares, TValidator, TResponse> extends FetcherBase {
26
+ <TFullResponse extends boolean>(options?: OptionalFetcherDataOptions<TMiddlewares, TValidator, TFullResponse>): FetchResult<TMiddlewares, TResponse, TFullResponse>;
27
+ }
28
+ export interface RequiredFetcher<TMiddlewares, TValidator, TResponse> extends FetcherBase {
29
+ <TFullResponse extends boolean>(opts: RequiredFetcherDataOptions<TMiddlewares, TValidator, TFullResponse>): FetchResult<TMiddlewares, TResponse, TFullResponse>;
30
+ }
31
+ export type FetcherBaseOptions<TFullResponse extends boolean = false> = {
32
+ headers?: HeadersInit;
33
+ type?: ServerFnType;
34
+ signal?: AbortSignal;
35
+ fullResponse?: TFullResponse;
36
+ };
37
+ export type ServerFnType = 'static' | 'dynamic';
38
+ export interface OptionalFetcherDataOptions<TMiddlewares, TValidator, TFullResponse extends boolean> extends FetcherBaseOptions<TFullResponse> {
39
+ data?: Expand<IntersectAllValidatorInputs<TMiddlewares, TValidator>>;
40
+ }
41
+ export interface RequiredFetcherDataOptions<TMiddlewares, TValidator, TFullResponse extends boolean> extends FetcherBaseOptions<TFullResponse> {
42
+ data: Expand<IntersectAllValidatorInputs<TMiddlewares, TValidator>>;
43
+ }
44
+ export interface FullFetcherData<TMiddlewares, TResponse> {
45
+ error: unknown;
46
+ result: FetcherData<TResponse>;
47
+ context: AssignAllClientSendContext<TMiddlewares>;
48
+ }
49
+ export type FetcherData<TResponse> = TResponse extends JsonResponse<any> ? SerializerParse<ReturnType<TResponse['json']>> : SerializerParse<TResponse>;
50
+ export type RscStream<T> = {
51
+ __cacheState: T;
52
+ };
53
+ export type Method = 'GET' | 'POST';
54
+ export type ServerFn<TMethod, TMiddlewares, TValidator, TResponse> = (ctx: ServerFnCtx<TMethod, TMiddlewares, TValidator>) => Promise<SerializerStringify<TResponse>> | SerializerStringify<TResponse>;
55
+ export interface ServerFnCtx<TMethod, TMiddlewares, TValidator> {
56
+ method: TMethod;
57
+ data: Expand<IntersectAllValidatorOutputs<TMiddlewares, TValidator>>;
58
+ context: Expand<AssignAllServerContext<TMiddlewares>>;
59
+ signal: AbortSignal;
60
+ }
61
+ export type CompiledFetcherFn<TResponse> = {
62
+ (opts: CompiledFetcherFnOptions & ServerFnBaseOptions<Method>): Promise<TResponse>;
63
+ url: string;
64
+ };
65
+ type ServerFnBaseOptions<TMethod extends Method = 'GET', TResponse = unknown, TMiddlewares = unknown, TInput = unknown> = {
66
+ method: TMethod;
67
+ validateClient?: boolean;
68
+ middleware?: Constrain<TMiddlewares, ReadonlyArray<AnyMiddleware>>;
69
+ validator?: ConstrainValidator<TInput>;
70
+ extractedFn?: CompiledFetcherFn<TResponse>;
71
+ serverFn?: ServerFn<TMethod, TMiddlewares, TInput, TResponse>;
72
+ functionId: string;
73
+ type: ServerFnTypeOrTypeFn<TMethod, TMiddlewares, AnyValidator>;
74
+ };
75
+ export type ValidatorSerializerStringify<TValidator> = Validator<SerializerStringifyBy<ResolveValidatorInput<TValidator>, Date | undefined | FormData>, any>;
76
+ export type ConstrainValidator<TValidator> = unknown extends TValidator ? TValidator : Constrain<TValidator, ValidatorSerializerStringify<TValidator>>;
77
+ export interface ServerFnMiddleware<TMethod extends Method, TValidator> {
78
+ middleware: <const TNewMiddlewares = undefined>(middlewares: Constrain<TNewMiddlewares, ReadonlyArray<AnyMiddleware>>) => ServerFnAfterMiddleware<TMethod, TNewMiddlewares, TValidator>;
79
+ }
80
+ export interface ServerFnAfterMiddleware<TMethod extends Method, TMiddlewares, TValidator> extends ServerFnValidator<TMethod, TMiddlewares>, ServerFnTyper<TMethod, TMiddlewares, TValidator>, ServerFnHandler<TMethod, TMiddlewares, TValidator> {
81
+ }
82
+ export type ValidatorFn<TMethod extends Method, TMiddlewares> = <TValidator>(validator: ConstrainValidator<TValidator>) => ServerFnAfterValidator<TMethod, TMiddlewares, TValidator>;
83
+ export interface ServerFnValidator<TMethod extends Method, TMiddlewares> {
84
+ validator: ValidatorFn<TMethod, TMiddlewares>;
85
+ }
86
+ export interface ServerFnAfterValidator<TMethod extends Method, TMiddlewares, TValidator> extends ServerFnMiddleware<TMethod, TValidator>, ServerFnTyper<TMethod, TMiddlewares, TValidator>, ServerFnHandler<TMethod, TMiddlewares, TValidator> {
87
+ }
88
+ export interface ServerFnTyper<TMethod extends Method, TMiddlewares, TValidator> {
89
+ type: (typer: ServerFnTypeOrTypeFn<TMethod, TMiddlewares, TValidator>) => ServerFnAfterTyper<TMethod, TMiddlewares, TValidator>;
90
+ }
91
+ export type ServerFnTypeOrTypeFn<TMethod extends Method, TMiddlewares, TValidator> = ServerFnType | ((ctx: ServerFnCtx<TMethod, TMiddlewares, TValidator>) => ServerFnType);
92
+ export interface ServerFnAfterTyper<TMethod extends Method, TMiddlewares, TValidator> extends ServerFnHandler<TMethod, TMiddlewares, TValidator> {
93
+ }
94
+ export interface ServerFnHandler<TMethod extends Method, TMiddlewares, TValidator> {
95
+ handler: <TNewResponse>(fn?: ServerFn<TMethod, TMiddlewares, TValidator, TNewResponse>) => Fetcher<TMiddlewares, TValidator, TNewResponse>;
96
+ }
97
+ export interface ServerFnBuilder<TMethod extends Method = 'GET'> extends ServerFnMiddleware<TMethod, undefined>, ServerFnValidator<TMethod, undefined>, ServerFnTyper<TMethod, undefined, undefined>, ServerFnHandler<TMethod, undefined, undefined> {
98
+ options: ServerFnBaseOptions<TMethod, unknown, undefined, undefined>;
99
+ }
100
+ type StaticCachedResult = {
101
+ ctx?: {
102
+ result: any;
103
+ context: any;
104
+ };
105
+ error?: any;
106
+ };
107
+ export type ServerFnStaticCache = {
108
+ getItem: (ctx: MiddlewareResult) => StaticCachedResult | Promise<StaticCachedResult | undefined>;
109
+ setItem: (ctx: MiddlewareResult, response: StaticCachedResult) => Promise<void>;
110
+ fetchItem: (ctx: MiddlewareResult) => StaticCachedResult | Promise<StaticCachedResult | undefined>;
111
+ };
112
+ export declare function setServerFnStaticCache(cache?: ServerFnStaticCache | (() => ServerFnStaticCache | undefined)): () => void;
113
+ export declare function createServerFnStaticCache(serverFnStaticCache: ServerFnStaticCache): ServerFnStaticCache;
114
+ export declare function createServerFn<TMethod extends Method, TResponse = unknown, TMiddlewares = undefined, TValidator = undefined>(options?: {
115
+ method?: TMethod;
116
+ type?: ServerFnType;
117
+ }, __opts?: ServerFnBaseOptions<TMethod, TResponse, TMiddlewares, TValidator>): ServerFnBuilder<TMethod>;
118
+ export type MiddlewareOptions = {
119
+ method: Method;
120
+ data: any;
121
+ headers?: HeadersInit;
122
+ signal?: AbortSignal;
123
+ sendContext?: any;
124
+ context?: any;
125
+ type: ServerFnTypeOrTypeFn<any, any, any>;
126
+ functionId: string;
127
+ };
128
+ export type MiddlewareResult = MiddlewareOptions & {
129
+ result?: unknown;
130
+ error?: unknown;
131
+ type: ServerFnTypeOrTypeFn<any, any, any>;
132
+ };
133
+ export type NextFn = (ctx: MiddlewareResult) => Promise<MiddlewareResult>;
134
+ export type MiddlewareFn = (ctx: MiddlewareOptions & {
135
+ next: NextFn;
136
+ }) => Promise<MiddlewareResult>;
137
+ export {};