@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
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021-present Tanner Linsley
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,33 @@
1
+ > 🤫 we're cooking up something special!
2
+
3
+ <img src="https://static.scarf.sh/a.png?x-pxid=d988eb79-b0fc-4a2b-8514-6a1ab932d188" />
4
+
5
+ # TanStack Start
6
+
7
+ ![TanStack Router Header](https://github.com/tanstack/router/raw/main/media/header.png)
8
+
9
+ 🤖 Type-safe router w/ built-in caching & URL state management for React!
10
+
11
+ <a href="https://twitter.com/intent/tweet?button_hashtag=TanStack" target="\_parent">
12
+ <img alt="#TanStack" src="https://img.shields.io/twitter/url?color=%2308a0e9&label=%23TanStack&style=social&url=https%3A%2F%2Ftwitter.com%2Fintent%2Ftweet%3Fbutton_hashtag%3DTanStack">
13
+ </a><a href="https://discord.com/invite/WrRKjPJ" target="\_parent">
14
+ <img alt="" src="https://img.shields.io/badge/Discord-TanStack-%235865F2" />
15
+ </a><a href="https://npmjs.com/package/@tanstack/react-router" target="\_parent">
16
+ <img alt="" src="https://img.shields.io/npm/dm/@tanstack/router.svg" />
17
+ </a><a href="https://bundlephobia.com/result?p=@tanstack/react-router" target="\_parent">
18
+ <img alt="" src="https://badgen.net/bundlephobia/minzip/@tanstack/react-router" />
19
+ </a><a href="#badge">
20
+ <img alt="semantic-release" src="https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg">
21
+ </a><a href="https://github.com/tanstack/router/discussions">
22
+ <img alt="Join the discussion on Github" src="https://img.shields.io/badge/Github%20Discussions%20%26%20Support-Chat%20now!-blue" />
23
+ </a><a href="https://bestofjs.org/projects/router"><img alt="Best of JS" src="https://img.shields.io/endpoint?url=https://bestofjs-serverless.now.sh/api/project-badge?fullName=tanstack%2Frouter%26since=daily" /></a><a href="https://github.com/tanstack/router" target="\_parent">
24
+ <img alt="" src="https://img.shields.io/github/stars/tanstack/router.svg?style=social&label=Star" />
25
+ </a><a href="https://twitter.com/tan_stack" target="\_parent">
26
+ <img alt="" src="https://img.shields.io/twitter/follow/tan_stack.svg?style=social&label=Follow @TanStack" />
27
+ </a><a href="https://twitter.com/tannerlinsley" target="\_parent">
28
+ <img alt="" src="https://img.shields.io/twitter/follow/tannerlinsley.svg?style=social&label=Follow @TannerLinsley" />
29
+ </a>
30
+
31
+ Enjoy this library? Try the entire [TanStack](https://tanstack.com)! [React Query](https://github.com/tannerlinsley/react-query), [React Table](https://github.com/tanstack/react-table), [React Charts](https://github.com/tannerlinsley/react-charts), [React Virtual](https://github.com/tannerlinsley/react-virtual)
32
+
33
+ ## Visit [tanstack.com/router](https://tanstack.com/router) for docs, guides, API and more!
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const reactRouter = require("@tanstack/react-router");
5
+ const Meta = () => {
6
+ if (process.env.NODE_ENV === "development") {
7
+ console.warn(
8
+ "The Meta component is deprecated. Use `HeadContent` from `@tanstack/react-router` instead."
9
+ );
10
+ }
11
+ return /* @__PURE__ */ jsxRuntime.jsx(reactRouter.HeadContent, {});
12
+ };
13
+ exports.Meta = Meta;
14
+ //# sourceMappingURL=Meta.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Meta.cjs","sources":["../../src/Meta.tsx"],"sourcesContent":["import { HeadContent } from '@tanstack/react-router'\n\nexport const Meta = () => {\n if (process.env.NODE_ENV === 'development') {\n console.warn(\n 'The Meta component is deprecated. Use `HeadContent` from `@tanstack/react-router` instead.',\n )\n }\n return <HeadContent />\n}\n"],"names":["HeadContent"],"mappings":";;;;AAEO,MAAM,OAAO,MAAM;AACpB,MAAA,QAAQ,IAAI,aAAa,eAAe;AAClC,YAAA;AAAA,MACN;AAAA,IACF;AAAA,EAAA;AAEF,wCAAQA,YAAY,aAAA,EAAA;AACtB;;"}
@@ -0,0 +1 @@
1
+ export declare const Meta: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const reactRouter = require("@tanstack/react-router");
5
+ const Scripts = () => {
6
+ if (process.env.NODE_ENV === "development") {
7
+ console.warn("The Scripts component was moved to `@tanstack/react-router`");
8
+ }
9
+ return /* @__PURE__ */ jsxRuntime.jsx(reactRouter.Scripts, {});
10
+ };
11
+ exports.Scripts = Scripts;
12
+ //# sourceMappingURL=Scripts.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Scripts.cjs","sources":["../../src/Scripts.tsx"],"sourcesContent":["import { Scripts as RouterScripts } from '@tanstack/react-router'\n\nexport const Scripts = () => {\n if (process.env.NODE_ENV === 'development') {\n console.warn('The Scripts component was moved to `@tanstack/react-router`')\n }\n return <RouterScripts />\n}\n"],"names":["RouterScripts"],"mappings":";;;;AAEO,MAAM,UAAU,MAAM;AACvB,MAAA,QAAQ,IAAI,aAAa,eAAe;AAC1C,YAAQ,KAAK,6DAA6D;AAAA,EAAA;AAE5E,wCAAQA,YAAc,SAAA,EAAA;AACxB;;"}
@@ -0,0 +1 @@
1
+ export declare const Scripts: () => import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const reactRouter = require("@tanstack/react-router");
5
+ const ssrClient = require("./ssr-client.cjs");
6
+ let hydrationPromise;
7
+ function StartClient(props) {
8
+ if (!hydrationPromise) {
9
+ if (!props.router.state.matches.length) {
10
+ hydrationPromise = ssrClient.hydrate(props.router);
11
+ } else {
12
+ hydrationPromise = Promise.resolve();
13
+ }
14
+ }
15
+ return /* @__PURE__ */ jsxRuntime.jsx(
16
+ reactRouter.Await,
17
+ {
18
+ promise: hydrationPromise,
19
+ children: () => /* @__PURE__ */ jsxRuntime.jsx(reactRouter.RouterProvider, { router: props.router })
20
+ }
21
+ );
22
+ }
23
+ exports.StartClient = StartClient;
24
+ //# sourceMappingURL=StartClient.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StartClient.cjs","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":["hydrate","jsx","Await","RouterProvider"],"mappings":";;;;;AAIA,IAAI;AAEG,SAAS,YAAY,OAA8B;AACxD,MAAI,CAAC,kBAAkB;AACrB,QAAI,CAAC,MAAM,OAAO,MAAM,QAAQ,QAAQ;AACnB,yBAAAA,UAAAA,QAAQ,MAAM,MAAM;AAAA,IAAA,OAClC;AACL,yBAAmB,QAAQ,QAAQ;AAAA,IAAA;AAAA,EACrC;AAGA,SAAAC,2BAAA;AAAA,IAACC,YAAA;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,UAAU,MAAMD,2BAAAA,IAACE,YAAAA,gBAAe,EAAA,QAAQ,MAAM,OAAQ,CAAA;AAAA,IAAA;AAAA,EACxD;AAEJ;;"}
@@ -0,0 +1,4 @@
1
+ import { AnyRouter } from '@tanstack/react-router';
2
+ export declare function StartClient(props: {
3
+ router: AnyRouter;
4
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function createIsomorphicFn() {
4
+ return null;
5
+ }
6
+ exports.createIsomorphicFn = createIsomorphicFn;
7
+ //# sourceMappingURL=createIsomorphicFn.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createIsomorphicFn.cjs","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,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,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ function createMiddleware(options, __opts) {
4
+ const resolvedOptions = __opts || (options || {});
5
+ return {
6
+ options: resolvedOptions,
7
+ middleware: (middleware) => {
8
+ return createMiddleware(
9
+ void 0,
10
+ Object.assign(resolvedOptions, { middleware })
11
+ );
12
+ },
13
+ validator: (validator) => {
14
+ return createMiddleware(
15
+ void 0,
16
+ Object.assign(resolvedOptions, { validator })
17
+ );
18
+ },
19
+ client: (client) => {
20
+ return createMiddleware(
21
+ void 0,
22
+ Object.assign(resolvedOptions, { client })
23
+ );
24
+ },
25
+ server: (server) => {
26
+ return createMiddleware(
27
+ void 0,
28
+ Object.assign(resolvedOptions, { server })
29
+ );
30
+ }
31
+ };
32
+ }
33
+ exports.createMiddleware = createMiddleware;
34
+ //# sourceMappingURL=createMiddleware.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createMiddleware.cjs","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,129 @@
1
+ import { ConstrainValidator, Method, ServerFnTypeOrTypeFn } from './createServerFn.cjs';
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;