@tanstack/solid-start-client 1.120.5 → 1.121.0-alpha.3

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.
package/README.md CHANGED
@@ -1,33 +1,9 @@
1
- > 🤫 we're cooking up something special!
2
-
3
1
  <img src="https://static.scarf.sh/a.png?x-pxid=d988eb79-b0fc-4a2b-8514-6a1ab932d188" />
4
2
 
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!
3
+ # TanStack Solid Start - Client
10
4
 
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/solid-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/solid-router" target="\_parent">
18
- <img alt="" src="https://badgen.net/bundlephobia/minzip/@tanstack/solid-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>
5
+ This package is not meant to be used directly. It is a dependency of [`@tanstack/solid-start`](https://www.npmjs.com/package/@tanstack/solid-start).
30
6
 
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)
7
+ TanStack Solid Start is a fullstack-framework made for SSR, Streaming, Server Functions, API Routes, bundling and more powered by [TanStack Router](https://tanstack.com/router).
32
8
 
33
- ## Visit [tanstack.com/router](https://tanstack.com/router) for docs, guides, API and more!
9
+ Head over to [tanstack.com/start](https://tanstack.com/start) for more information about getting started.
@@ -1,14 +1,5 @@
1
- export { mergeHeaders } from '@tanstack/start-client-core';
2
- export { startSerializer } from '@tanstack/start-client-core';
3
- export { type DehydratedRouter, type ClientExtractedBaseEntry, type StartSsrGlobal, type ClientExtractedEntry, type SsrMatch, type ClientExtractedPromise, type ClientExtractedStream, type ResolvePromiseState, } from '@tanstack/start-client-core';
4
- export { createIsomorphicFn, type IsomorphicFn, type ServerOnlyFn, type ClientOnlyFn, type IsomorphicFnBase, } from '@tanstack/start-client-core';
5
- export { createServerFn } from '@tanstack/start-client-core';
6
- export { type ServerFn as FetchFn, type ServerFnCtx as FetchFnCtx, type CompiledFetcherFnOptions, type CompiledFetcherFn, type Fetcher, type RscStream, type FetcherData, type FetcherBaseOptions, type ServerFn, type ServerFnCtx, type ServerFnResponseType, } from '@tanstack/start-client-core';
7
- export { type JsonResponse } from '@tanstack/start-client-core';
8
- export { createMiddleware, type IntersectAllValidatorInputs, type IntersectAllValidatorOutputs, type MiddlewareServerFn, type AnyMiddleware, type MiddlewareOptions, type MiddlewareWithTypes, type MiddlewareValidator, type MiddlewareServer, type MiddlewareAfterClient, type MiddlewareAfterMiddleware, type MiddlewareAfterServer, type Middleware, type MiddlewareClientFnOptions, type MiddlewareClientFnResult, type MiddlewareClientNextFn, type ClientResultWithContext, type AssignAllClientContextBeforeNext, type AssignAllMiddleware, type AssignAllServerContext, type MiddlewareAfterValidator, type MiddlewareClientFn, type MiddlewareServerFnResult, type MiddlewareClient, type MiddlewareServerFnOptions, type MiddlewareServerNextFn, type ServerResultWithContext, } from '@tanstack/start-client-core';
9
- export { registerGlobalMiddleware, globalMiddleware, } from '@tanstack/start-client-core';
10
- export { serverOnly, clientOnly } from '@tanstack/start-client-core';
11
- export { json } from '@tanstack/start-client-core';
1
+ export { mergeHeaders, startSerializer, createIsomorphicFn, createServerFn, createMiddleware, registerGlobalMiddleware, globalMiddleware, serverOnly, clientOnly, json, } from '@tanstack/start-client-core';
2
+ export { type DehydratedRouter, type ClientExtractedBaseEntry, type StartSsrGlobal, type ClientExtractedEntry, type SsrMatch, type ClientExtractedPromise, type ClientExtractedStream, type ResolvePromiseState, type IsomorphicFn, type ServerOnlyFn, type ClientOnlyFn, type IsomorphicFnBase, type ServerFn as FetchFn, type ServerFnCtx as FetchFnCtx, type CompiledFetcherFnOptions, type CompiledFetcherFn, type Fetcher, type RscStream, type FetcherData, type FetcherBaseOptions, type ServerFn, type ServerFnCtx, type ServerFnResponseType, type JsonResponse, type IntersectAllValidatorInputs, type IntersectAllValidatorOutputs, type FunctionMiddlewareServerFn, type AnyFunctionMiddleware, type FunctionMiddlewareOptions, type FunctionMiddlewareWithTypes, type FunctionMiddlewareValidator, type FunctionMiddlewareServer, type FunctionMiddlewareAfterClient, type FunctionMiddlewareAfterServer, type FunctionMiddleware, type FunctionMiddlewareClientFnOptions, type FunctionMiddlewareClientFnResult, type FunctionMiddlewareClientNextFn, type FunctionClientResultWithContext, type AssignAllClientContextBeforeNext, type AssignAllMiddleware, type AssignAllServerContext, type FunctionMiddlewareAfterValidator, type FunctionMiddlewareClientFn, type FunctionMiddlewareServerFnResult, type FunctionMiddlewareClient, type FunctionMiddlewareServerFnOptions, type FunctionMiddlewareServerNextFn, type FunctionServerResultWithContext, } from '@tanstack/start-client-core';
12
3
  export { Meta } from './Meta.cjs';
13
4
  export { Scripts } from './Scripts.cjs';
14
5
  export { StartClient } from './StartClient.cjs';
@@ -1 +1 @@
1
- {"version":3,"file":"renderRSC.cjs","sources":["../../src/renderRSC.tsx"],"sourcesContent":["// TODO: RSCs\n// // @ts-expect-error\n// import * as reactDom from '@vinxi/react-server-dom/client'\n// import { isValidElement } from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport type * as Solid from 'solid-js'\n\nexport function renderRsc(input: any): Solid.JSX.Element {\n // TODO: isValidElement\n // if (isValidElement(input)) {\n // return input\n // }\n\n if (typeof input === 'object' && !input.state) {\n input.state = {\n status: 'pending',\n promise: Promise.resolve()\n .then(() => {\n let element\n\n // We're in node\n // TODO: RSCs\n // if (reactDom.createFromNodeStream) {\n // const stream = await import('node:stream')\n\n // let body: any = input\n\n // // Unwrap the response\n // if (input instanceof Response) {\n // body = input.body\n // }\n\n // // Convert ReadableStream to NodeJS stream.Readable\n // if (body instanceof ReadableStream) {\n // body = stream.Readable.fromWeb(body as any)\n // }\n\n // if (stream.Readable.isReadable(body)) {\n // // body = copyStreamToRaw(body)\n // } else if (input.text) {\n // // create a readable stream by awaiting the text method\n // body = new stream.Readable({\n // async read() {\n // input.text().then((value: any) => {\n // this.push(value)\n // this.push(null)\n // })\n // },\n // })\n // } else {\n // console.error('input', input)\n // throw new Error('Unexpected rsc input type 👆')\n // }\n\n // element = await reactDom.createFromNodeStream(body)\n // } else {\n // // We're in the browser\n // if (input.body instanceof ReadableStream) {\n // input = input.body\n // }\n\n // if (input instanceof ReadableStream) {\n // element = await reactDom.createFromReadableStream(input)\n // }\n\n // if (input instanceof Response) {\n // // copy to the response body to cache the raw data\n // element = await reactDom.createFromFetch(input)\n // }\n // }\n\n // return element\n\n invariant(false, 'renderRSC() is coming soon!')\n })\n .then((element) => {\n input.state.value = element\n input.state.status = 'success'\n })\n .catch((err) => {\n input.state.status = 'error'\n input.state.error = err\n }),\n }\n }\n\n if (input.state.status === 'pending') {\n throw input.state.promise\n }\n\n return input.state.value\n}\n"],"names":["renderRsc","input","state","status","promise","Promise","resolve","then","invariant","element","value","catch","err","error"],"mappings":";;;AAOO,SAASA,UAAUC,OAA+B;AAMvD,MAAI,OAAOA,UAAU,YAAY,CAACA,MAAMC,OAAO;AAC7CD,UAAMC,QAAQ;AAAA,MACZC,QAAQ;AAAA,MACRC,SAASC,QAAQC,QAAQ,EACtBC,KAAK,MAAM;AAwDVC,kBAAU,OAAO,6BAA6B;AAAA,MAAA,CAC/C,EACAD,KAAME,CAAY,YAAA;AACjBR,cAAMC,MAAMQ,QAAQD;AACpBR,cAAMC,MAAMC,SAAS;AAAA,MAAA,CACtB,EACAQ,MAAOC,CAAQ,QAAA;AACdX,cAAMC,MAAMC,SAAS;AACrBF,cAAMC,MAAMW,QAAQD;AAAAA,MACrB,CAAA;AAAA,IACL;AAAA,EAAA;AAGEX,MAAAA,MAAMC,MAAMC,WAAW,WAAW;AACpC,UAAMF,MAAMC,MAAME;AAAAA,EAAAA;AAGpB,SAAOH,MAAMC,MAAMQ;AACrB;;"}
1
+ {"version":3,"file":"renderRSC.cjs","sources":["../../src/renderRSC.tsx"],"sourcesContent":["// TODO: RSCs\n// // @ts-expect-error\n// import * as reactDom from 'react-server-dom/client'\n// import { isValidElement } from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport type * as Solid from 'solid-js'\n\nexport function renderRsc(input: any): Solid.JSX.Element {\n // TODO: isValidElement\n // if (isValidElement(input)) {\n // return input\n // }\n\n if (typeof input === 'object' && !input.state) {\n input.state = {\n status: 'pending',\n promise: Promise.resolve()\n .then(() => {\n let element\n\n // We're in node\n // TODO: RSCs\n // if (reactDom.createFromNodeStream) {\n // const stream = await import('node:stream')\n\n // let body: any = input\n\n // // Unwrap the response\n // if (input instanceof Response) {\n // body = input.body\n // }\n\n // // Convert ReadableStream to NodeJS stream.Readable\n // if (body instanceof ReadableStream) {\n // body = stream.Readable.fromWeb(body as any)\n // }\n\n // if (stream.Readable.isReadable(body)) {\n // // body = copyStreamToRaw(body)\n // } else if (input.text) {\n // // create a readable stream by awaiting the text method\n // body = new stream.Readable({\n // async read() {\n // input.text().then((value: any) => {\n // this.push(value)\n // this.push(null)\n // })\n // },\n // })\n // } else {\n // console.error('input', input)\n // throw new Error('Unexpected rsc input type 👆')\n // }\n\n // element = await reactDom.createFromNodeStream(body)\n // } else {\n // // We're in the browser\n // if (input.body instanceof ReadableStream) {\n // input = input.body\n // }\n\n // if (input instanceof ReadableStream) {\n // element = await reactDom.createFromReadableStream(input)\n // }\n\n // if (input instanceof Response) {\n // // copy to the response body to cache the raw data\n // element = await reactDom.createFromFetch(input)\n // }\n // }\n\n // return element\n\n invariant(false, 'renderRSC() is coming soon!')\n })\n .then((element) => {\n input.state.value = element\n input.state.status = 'success'\n })\n .catch((err) => {\n input.state.status = 'error'\n input.state.error = err\n }),\n }\n }\n\n if (input.state.status === 'pending') {\n throw input.state.promise\n }\n\n return input.state.value\n}\n"],"names":["renderRsc","input","state","status","promise","Promise","resolve","then","invariant","element","value","catch","err","error"],"mappings":";;;AAOO,SAASA,UAAUC,OAA+B;AAMvD,MAAI,OAAOA,UAAU,YAAY,CAACA,MAAMC,OAAO;AAC7CD,UAAMC,QAAQ;AAAA,MACZC,QAAQ;AAAA,MACRC,SAASC,QAAQC,QAAQ,EACtBC,KAAK,MAAM;AAwDVC,kBAAU,OAAO,6BAA6B;AAAA,MAAA,CAC/C,EACAD,KAAME,CAAY,YAAA;AACjBR,cAAMC,MAAMQ,QAAQD;AACpBR,cAAMC,MAAMC,SAAS;AAAA,MAAA,CACtB,EACAQ,MAAOC,CAAQ,QAAA;AACdX,cAAMC,MAAMC,SAAS;AACrBF,cAAMC,MAAMW,QAAQD;AAAAA,MACrB,CAAA;AAAA,IACL;AAAA,EAAA;AAGEX,MAAAA,MAAMC,MAAMC,WAAW,WAAW;AACpC,UAAMF,MAAMC,MAAME;AAAAA,EAAAA;AAGpB,SAAOH,MAAMC,MAAMQ;AACrB;;"}
@@ -13,11 +13,8 @@ function useServerFn(serverFn) {
13
13
  return res;
14
14
  } catch (err) {
15
15
  if (routerCore.isRedirect(err)) {
16
- const resolvedRedirect = router.resolveRedirect({
17
- ...err,
18
- _fromLocation: router.state.location
19
- });
20
- return router.navigate(resolvedRedirect);
16
+ err.options._fromLocation = router.state.location;
17
+ return router.navigate(router.resolveRedirect(err).options);
21
18
  }
22
19
  throw err;
23
20
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useServerFn.cjs","sources":["../../src/useServerFn.ts"],"sourcesContent":["import { isRedirect } from '@tanstack/router-core'\nimport { useRouter } from '@tanstack/solid-router'\n\nexport function useServerFn<T extends (...deps: Array<any>) => Promise<any>>(\n serverFn: T,\n): (...args: Parameters<T>) => ReturnType<T> {\n const router = useRouter()\n\n return (async (...args: Array<any>) => {\n try {\n const res = await serverFn(...args)\n\n if (isRedirect(res)) {\n throw res\n }\n\n return res\n } catch (err) {\n if (isRedirect(err)) {\n const resolvedRedirect = router.resolveRedirect({\n ...err,\n _fromLocation: router.state.location,\n })\n\n return router.navigate(resolvedRedirect)\n }\n\n throw err\n }\n }) as any\n}\n"],"names":["useRouter","isRedirect"],"mappings":";;;;AAGO,SAAS,YACd,UAC2C;AAC3C,QAAM,SAASA,YAAAA,UAAU;AAEzB,SAAQ,UAAU,SAAqB;AACjC,QAAA;AACF,YAAM,MAAM,MAAM,SAAS,GAAG,IAAI;AAE9B,UAAAC,WAAAA,WAAW,GAAG,GAAG;AACb,cAAA;AAAA,MAAA;AAGD,aAAA;AAAA,aACA,KAAK;AACR,UAAAA,WAAAA,WAAW,GAAG,GAAG;AACb,cAAA,mBAAmB,OAAO,gBAAgB;AAAA,UAC9C,GAAG;AAAA,UACH,eAAe,OAAO,MAAM;AAAA,QAAA,CAC7B;AAEM,eAAA,OAAO,SAAS,gBAAgB;AAAA,MAAA;AAGnC,YAAA;AAAA,IAAA;AAAA,EAEV;AACF;;"}
1
+ {"version":3,"file":"useServerFn.cjs","sources":["../../src/useServerFn.ts"],"sourcesContent":["import { isRedirect } from '@tanstack/router-core'\nimport { useRouter } from '@tanstack/solid-router'\n\nexport function useServerFn<T extends (...deps: Array<any>) => Promise<any>>(\n serverFn: T,\n): (...args: Parameters<T>) => ReturnType<T> {\n const router = useRouter()\n\n return (async (...args: Array<any>) => {\n try {\n const res = await serverFn(...args)\n\n if (isRedirect(res)) {\n throw res\n }\n\n return res\n } catch (err) {\n if (isRedirect(err)) {\n err.options._fromLocation = router.state.location\n return router.navigate(router.resolveRedirect(err).options)\n }\n\n throw err\n }\n }) as any\n}\n"],"names":["useRouter","isRedirect"],"mappings":";;;;AAGO,SAAS,YACd,UAC2C;AAC3C,QAAM,SAASA,YAAAA,UAAU;AAEzB,SAAQ,UAAU,SAAqB;AACjC,QAAA;AACF,YAAM,MAAM,MAAM,SAAS,GAAG,IAAI;AAE9B,UAAAC,WAAAA,WAAW,GAAG,GAAG;AACb,cAAA;AAAA,MAAA;AAGD,aAAA;AAAA,aACA,KAAK;AACR,UAAAA,WAAAA,WAAW,GAAG,GAAG;AACf,YAAA,QAAQ,gBAAgB,OAAO,MAAM;AACzC,eAAO,OAAO,SAAS,OAAO,gBAAgB,GAAG,EAAE,OAAO;AAAA,MAAA;AAGtD,YAAA;AAAA,IAAA;AAAA,EAEV;AACF;;"}
@@ -1,14 +1,5 @@
1
- export { mergeHeaders } from '@tanstack/start-client-core';
2
- export { startSerializer } from '@tanstack/start-client-core';
3
- export { type DehydratedRouter, type ClientExtractedBaseEntry, type StartSsrGlobal, type ClientExtractedEntry, type SsrMatch, type ClientExtractedPromise, type ClientExtractedStream, type ResolvePromiseState, } from '@tanstack/start-client-core';
4
- export { createIsomorphicFn, type IsomorphicFn, type ServerOnlyFn, type ClientOnlyFn, type IsomorphicFnBase, } from '@tanstack/start-client-core';
5
- export { createServerFn } from '@tanstack/start-client-core';
6
- export { type ServerFn as FetchFn, type ServerFnCtx as FetchFnCtx, type CompiledFetcherFnOptions, type CompiledFetcherFn, type Fetcher, type RscStream, type FetcherData, type FetcherBaseOptions, type ServerFn, type ServerFnCtx, type ServerFnResponseType, } from '@tanstack/start-client-core';
7
- export { type JsonResponse } from '@tanstack/start-client-core';
8
- export { createMiddleware, type IntersectAllValidatorInputs, type IntersectAllValidatorOutputs, type MiddlewareServerFn, type AnyMiddleware, type MiddlewareOptions, type MiddlewareWithTypes, type MiddlewareValidator, type MiddlewareServer, type MiddlewareAfterClient, type MiddlewareAfterMiddleware, type MiddlewareAfterServer, type Middleware, type MiddlewareClientFnOptions, type MiddlewareClientFnResult, type MiddlewareClientNextFn, type ClientResultWithContext, type AssignAllClientContextBeforeNext, type AssignAllMiddleware, type AssignAllServerContext, type MiddlewareAfterValidator, type MiddlewareClientFn, type MiddlewareServerFnResult, type MiddlewareClient, type MiddlewareServerFnOptions, type MiddlewareServerNextFn, type ServerResultWithContext, } from '@tanstack/start-client-core';
9
- export { registerGlobalMiddleware, globalMiddleware, } from '@tanstack/start-client-core';
10
- export { serverOnly, clientOnly } from '@tanstack/start-client-core';
11
- export { json } from '@tanstack/start-client-core';
1
+ export { mergeHeaders, startSerializer, createIsomorphicFn, createServerFn, createMiddleware, registerGlobalMiddleware, globalMiddleware, serverOnly, clientOnly, json, } from '@tanstack/start-client-core';
2
+ export { type DehydratedRouter, type ClientExtractedBaseEntry, type StartSsrGlobal, type ClientExtractedEntry, type SsrMatch, type ClientExtractedPromise, type ClientExtractedStream, type ResolvePromiseState, type IsomorphicFn, type ServerOnlyFn, type ClientOnlyFn, type IsomorphicFnBase, type ServerFn as FetchFn, type ServerFnCtx as FetchFnCtx, type CompiledFetcherFnOptions, type CompiledFetcherFn, type Fetcher, type RscStream, type FetcherData, type FetcherBaseOptions, type ServerFn, type ServerFnCtx, type ServerFnResponseType, type JsonResponse, type IntersectAllValidatorInputs, type IntersectAllValidatorOutputs, type FunctionMiddlewareServerFn, type AnyFunctionMiddleware, type FunctionMiddlewareOptions, type FunctionMiddlewareWithTypes, type FunctionMiddlewareValidator, type FunctionMiddlewareServer, type FunctionMiddlewareAfterClient, type FunctionMiddlewareAfterServer, type FunctionMiddleware, type FunctionMiddlewareClientFnOptions, type FunctionMiddlewareClientFnResult, type FunctionMiddlewareClientNextFn, type FunctionClientResultWithContext, type AssignAllClientContextBeforeNext, type AssignAllMiddleware, type AssignAllServerContext, type FunctionMiddlewareAfterValidator, type FunctionMiddlewareClientFn, type FunctionMiddlewareServerFnResult, type FunctionMiddlewareClient, type FunctionMiddlewareServerFnOptions, type FunctionMiddlewareServerNextFn, type FunctionServerResultWithContext, } from '@tanstack/start-client-core';
12
3
  export { Meta } from './Meta.js';
13
4
  export { Scripts } from './Scripts.js';
14
5
  export { StartClient } from './StartClient.js';
@@ -1 +1 @@
1
- {"version":3,"file":"renderRSC.js","sources":["../../src/renderRSC.tsx"],"sourcesContent":["// TODO: RSCs\n// // @ts-expect-error\n// import * as reactDom from '@vinxi/react-server-dom/client'\n// import { isValidElement } from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport type * as Solid from 'solid-js'\n\nexport function renderRsc(input: any): Solid.JSX.Element {\n // TODO: isValidElement\n // if (isValidElement(input)) {\n // return input\n // }\n\n if (typeof input === 'object' && !input.state) {\n input.state = {\n status: 'pending',\n promise: Promise.resolve()\n .then(() => {\n let element\n\n // We're in node\n // TODO: RSCs\n // if (reactDom.createFromNodeStream) {\n // const stream = await import('node:stream')\n\n // let body: any = input\n\n // // Unwrap the response\n // if (input instanceof Response) {\n // body = input.body\n // }\n\n // // Convert ReadableStream to NodeJS stream.Readable\n // if (body instanceof ReadableStream) {\n // body = stream.Readable.fromWeb(body as any)\n // }\n\n // if (stream.Readable.isReadable(body)) {\n // // body = copyStreamToRaw(body)\n // } else if (input.text) {\n // // create a readable stream by awaiting the text method\n // body = new stream.Readable({\n // async read() {\n // input.text().then((value: any) => {\n // this.push(value)\n // this.push(null)\n // })\n // },\n // })\n // } else {\n // console.error('input', input)\n // throw new Error('Unexpected rsc input type 👆')\n // }\n\n // element = await reactDom.createFromNodeStream(body)\n // } else {\n // // We're in the browser\n // if (input.body instanceof ReadableStream) {\n // input = input.body\n // }\n\n // if (input instanceof ReadableStream) {\n // element = await reactDom.createFromReadableStream(input)\n // }\n\n // if (input instanceof Response) {\n // // copy to the response body to cache the raw data\n // element = await reactDom.createFromFetch(input)\n // }\n // }\n\n // return element\n\n invariant(false, 'renderRSC() is coming soon!')\n })\n .then((element) => {\n input.state.value = element\n input.state.status = 'success'\n })\n .catch((err) => {\n input.state.status = 'error'\n input.state.error = err\n }),\n }\n }\n\n if (input.state.status === 'pending') {\n throw input.state.promise\n }\n\n return input.state.value\n}\n"],"names":["renderRsc","input","state","status","promise","Promise","resolve","then","invariant","element","value","catch","err","error"],"mappings":";AAOO,SAASA,UAAUC,OAA+B;AAMvD,MAAI,OAAOA,UAAU,YAAY,CAACA,MAAMC,OAAO;AAC7CD,UAAMC,QAAQ;AAAA,MACZC,QAAQ;AAAA,MACRC,SAASC,QAAQC,QAAQ,EACtBC,KAAK,MAAM;AAwDVC,kBAAU,OAAO,6BAA6B;AAAA,MAAA,CAC/C,EACAD,KAAME,CAAY,YAAA;AACjBR,cAAMC,MAAMQ,QAAQD;AACpBR,cAAMC,MAAMC,SAAS;AAAA,MAAA,CACtB,EACAQ,MAAOC,CAAQ,QAAA;AACdX,cAAMC,MAAMC,SAAS;AACrBF,cAAMC,MAAMW,QAAQD;AAAAA,MACrB,CAAA;AAAA,IACL;AAAA,EAAA;AAGEX,MAAAA,MAAMC,MAAMC,WAAW,WAAW;AACpC,UAAMF,MAAMC,MAAME;AAAAA,EAAAA;AAGpB,SAAOH,MAAMC,MAAMQ;AACrB;"}
1
+ {"version":3,"file":"renderRSC.js","sources":["../../src/renderRSC.tsx"],"sourcesContent":["// TODO: RSCs\n// // @ts-expect-error\n// import * as reactDom from 'react-server-dom/client'\n// import { isValidElement } from 'solid-js'\nimport invariant from 'tiny-invariant'\nimport type * as Solid from 'solid-js'\n\nexport function renderRsc(input: any): Solid.JSX.Element {\n // TODO: isValidElement\n // if (isValidElement(input)) {\n // return input\n // }\n\n if (typeof input === 'object' && !input.state) {\n input.state = {\n status: 'pending',\n promise: Promise.resolve()\n .then(() => {\n let element\n\n // We're in node\n // TODO: RSCs\n // if (reactDom.createFromNodeStream) {\n // const stream = await import('node:stream')\n\n // let body: any = input\n\n // // Unwrap the response\n // if (input instanceof Response) {\n // body = input.body\n // }\n\n // // Convert ReadableStream to NodeJS stream.Readable\n // if (body instanceof ReadableStream) {\n // body = stream.Readable.fromWeb(body as any)\n // }\n\n // if (stream.Readable.isReadable(body)) {\n // // body = copyStreamToRaw(body)\n // } else if (input.text) {\n // // create a readable stream by awaiting the text method\n // body = new stream.Readable({\n // async read() {\n // input.text().then((value: any) => {\n // this.push(value)\n // this.push(null)\n // })\n // },\n // })\n // } else {\n // console.error('input', input)\n // throw new Error('Unexpected rsc input type 👆')\n // }\n\n // element = await reactDom.createFromNodeStream(body)\n // } else {\n // // We're in the browser\n // if (input.body instanceof ReadableStream) {\n // input = input.body\n // }\n\n // if (input instanceof ReadableStream) {\n // element = await reactDom.createFromReadableStream(input)\n // }\n\n // if (input instanceof Response) {\n // // copy to the response body to cache the raw data\n // element = await reactDom.createFromFetch(input)\n // }\n // }\n\n // return element\n\n invariant(false, 'renderRSC() is coming soon!')\n })\n .then((element) => {\n input.state.value = element\n input.state.status = 'success'\n })\n .catch((err) => {\n input.state.status = 'error'\n input.state.error = err\n }),\n }\n }\n\n if (input.state.status === 'pending') {\n throw input.state.promise\n }\n\n return input.state.value\n}\n"],"names":["renderRsc","input","state","status","promise","Promise","resolve","then","invariant","element","value","catch","err","error"],"mappings":";AAOO,SAASA,UAAUC,OAA+B;AAMvD,MAAI,OAAOA,UAAU,YAAY,CAACA,MAAMC,OAAO;AAC7CD,UAAMC,QAAQ;AAAA,MACZC,QAAQ;AAAA,MACRC,SAASC,QAAQC,QAAQ,EACtBC,KAAK,MAAM;AAwDVC,kBAAU,OAAO,6BAA6B;AAAA,MAAA,CAC/C,EACAD,KAAME,CAAY,YAAA;AACjBR,cAAMC,MAAMQ,QAAQD;AACpBR,cAAMC,MAAMC,SAAS;AAAA,MAAA,CACtB,EACAQ,MAAOC,CAAQ,QAAA;AACdX,cAAMC,MAAMC,SAAS;AACrBF,cAAMC,MAAMW,QAAQD;AAAAA,MACrB,CAAA;AAAA,IACL;AAAA,EAAA;AAGEX,MAAAA,MAAMC,MAAMC,WAAW,WAAW;AACpC,UAAMF,MAAMC,MAAME;AAAAA,EAAAA;AAGpB,SAAOH,MAAMC,MAAMQ;AACrB;"}
@@ -11,11 +11,8 @@ function useServerFn(serverFn) {
11
11
  return res;
12
12
  } catch (err) {
13
13
  if (isRedirect(err)) {
14
- const resolvedRedirect = router.resolveRedirect({
15
- ...err,
16
- _fromLocation: router.state.location
17
- });
18
- return router.navigate(resolvedRedirect);
14
+ err.options._fromLocation = router.state.location;
15
+ return router.navigate(router.resolveRedirect(err).options);
19
16
  }
20
17
  throw err;
21
18
  }
@@ -1 +1 @@
1
- {"version":3,"file":"useServerFn.js","sources":["../../src/useServerFn.ts"],"sourcesContent":["import { isRedirect } from '@tanstack/router-core'\nimport { useRouter } from '@tanstack/solid-router'\n\nexport function useServerFn<T extends (...deps: Array<any>) => Promise<any>>(\n serverFn: T,\n): (...args: Parameters<T>) => ReturnType<T> {\n const router = useRouter()\n\n return (async (...args: Array<any>) => {\n try {\n const res = await serverFn(...args)\n\n if (isRedirect(res)) {\n throw res\n }\n\n return res\n } catch (err) {\n if (isRedirect(err)) {\n const resolvedRedirect = router.resolveRedirect({\n ...err,\n _fromLocation: router.state.location,\n })\n\n return router.navigate(resolvedRedirect)\n }\n\n throw err\n }\n }) as any\n}\n"],"names":[],"mappings":";;AAGO,SAAS,YACd,UAC2C;AAC3C,QAAM,SAAS,UAAU;AAEzB,SAAQ,UAAU,SAAqB;AACjC,QAAA;AACF,YAAM,MAAM,MAAM,SAAS,GAAG,IAAI;AAE9B,UAAA,WAAW,GAAG,GAAG;AACb,cAAA;AAAA,MAAA;AAGD,aAAA;AAAA,aACA,KAAK;AACR,UAAA,WAAW,GAAG,GAAG;AACb,cAAA,mBAAmB,OAAO,gBAAgB;AAAA,UAC9C,GAAG;AAAA,UACH,eAAe,OAAO,MAAM;AAAA,QAAA,CAC7B;AAEM,eAAA,OAAO,SAAS,gBAAgB;AAAA,MAAA;AAGnC,YAAA;AAAA,IAAA;AAAA,EAEV;AACF;"}
1
+ {"version":3,"file":"useServerFn.js","sources":["../../src/useServerFn.ts"],"sourcesContent":["import { isRedirect } from '@tanstack/router-core'\nimport { useRouter } from '@tanstack/solid-router'\n\nexport function useServerFn<T extends (...deps: Array<any>) => Promise<any>>(\n serverFn: T,\n): (...args: Parameters<T>) => ReturnType<T> {\n const router = useRouter()\n\n return (async (...args: Array<any>) => {\n try {\n const res = await serverFn(...args)\n\n if (isRedirect(res)) {\n throw res\n }\n\n return res\n } catch (err) {\n if (isRedirect(err)) {\n err.options._fromLocation = router.state.location\n return router.navigate(router.resolveRedirect(err).options)\n }\n\n throw err\n }\n }) as any\n}\n"],"names":[],"mappings":";;AAGO,SAAS,YACd,UAC2C;AAC3C,QAAM,SAAS,UAAU;AAEzB,SAAQ,UAAU,SAAqB;AACjC,QAAA;AACF,YAAM,MAAM,MAAM,SAAS,GAAG,IAAI;AAE9B,UAAA,WAAW,GAAG,GAAG;AACb,cAAA;AAAA,MAAA;AAGD,aAAA;AAAA,aACA,KAAK;AACR,UAAA,WAAW,GAAG,GAAG;AACf,YAAA,QAAQ,gBAAgB,OAAO,MAAM;AACzC,eAAO,OAAO,SAAS,OAAO,gBAAgB,GAAG,EAAE,OAAO;AAAA,MAAA;AAGtD,YAAA;AAAA,IAAA;AAAA,EAEV;AACF;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tanstack/solid-start-client",
3
- "version": "1.120.5",
3
+ "version": "1.121.0-alpha.3",
4
4
  "description": "Modern and scalable routing for Solid applications",
5
5
  "author": "Tanner Linsley",
6
6
  "license": "MIT",
@@ -51,10 +51,9 @@
51
51
  "jsesc": "^3.1.0",
52
52
  "tiny-invariant": "^1.3.3",
53
53
  "tiny-warning": "^1.0.3",
54
- "vinxi": "^0.5.3",
55
- "@tanstack/solid-router": "^1.120.5",
56
- "@tanstack/start-client-core": "^1.120.5",
57
- "@tanstack/router-core": "^1.120.5"
54
+ "@tanstack/solid-router": "^1.121.0-alpha.3",
55
+ "@tanstack/router-core": "^1.121.0-alpha.3",
56
+ "@tanstack/start-client-core": "^1.121.0-alpha.3"
58
57
  },
59
58
  "devDependencies": {
60
59
  "@solidjs/testing-library": "^0.8.10",
package/src/index.tsx CHANGED
@@ -1,6 +1,15 @@
1
- /// <reference types="vinxi/types/client" />
2
- export { mergeHeaders } from '@tanstack/start-client-core'
3
- export { startSerializer } from '@tanstack/start-client-core'
1
+ export {
2
+ mergeHeaders,
3
+ startSerializer,
4
+ createIsomorphicFn,
5
+ createServerFn,
6
+ createMiddleware,
7
+ registerGlobalMiddleware,
8
+ globalMiddleware,
9
+ serverOnly,
10
+ clientOnly,
11
+ json,
12
+ } from '@tanstack/start-client-core'
4
13
  export {
5
14
  type DehydratedRouter,
6
15
  type ClientExtractedBaseEntry,
@@ -10,16 +19,10 @@ export {
10
19
  type ClientExtractedPromise,
11
20
  type ClientExtractedStream,
12
21
  type ResolvePromiseState,
13
- } from '@tanstack/start-client-core'
14
- export {
15
- createIsomorphicFn,
16
22
  type IsomorphicFn,
17
23
  type ServerOnlyFn,
18
24
  type ClientOnlyFn,
19
25
  type IsomorphicFnBase,
20
- } from '@tanstack/start-client-core'
21
- export { createServerFn } from '@tanstack/start-client-core'
22
- export {
23
26
  type ServerFn as FetchFn,
24
27
  type ServerFnCtx as FetchFnCtx,
25
28
  type CompiledFetcherFnOptions,
@@ -31,43 +34,33 @@ export {
31
34
  type ServerFn,
32
35
  type ServerFnCtx,
33
36
  type ServerFnResponseType,
34
- } from '@tanstack/start-client-core'
35
- export { type JsonResponse } from '@tanstack/start-client-core'
36
- export {
37
- createMiddleware,
37
+ type JsonResponse,
38
38
  type IntersectAllValidatorInputs,
39
39
  type IntersectAllValidatorOutputs,
40
- type MiddlewareServerFn,
41
- type AnyMiddleware,
42
- type MiddlewareOptions,
43
- type MiddlewareWithTypes,
44
- type MiddlewareValidator,
45
- type MiddlewareServer,
46
- type MiddlewareAfterClient,
47
- type MiddlewareAfterMiddleware,
48
- type MiddlewareAfterServer,
49
- type Middleware,
50
- type MiddlewareClientFnOptions,
51
- type MiddlewareClientFnResult,
52
- type MiddlewareClientNextFn,
53
- type ClientResultWithContext,
40
+ type FunctionMiddlewareServerFn,
41
+ type AnyFunctionMiddleware,
42
+ type FunctionMiddlewareOptions,
43
+ type FunctionMiddlewareWithTypes,
44
+ type FunctionMiddlewareValidator,
45
+ type FunctionMiddlewareServer,
46
+ type FunctionMiddlewareAfterClient,
47
+ type FunctionMiddlewareAfterServer,
48
+ type FunctionMiddleware,
49
+ type FunctionMiddlewareClientFnOptions,
50
+ type FunctionMiddlewareClientFnResult,
51
+ type FunctionMiddlewareClientNextFn,
52
+ type FunctionClientResultWithContext,
54
53
  type AssignAllClientContextBeforeNext,
55
54
  type AssignAllMiddleware,
56
55
  type AssignAllServerContext,
57
- type MiddlewareAfterValidator,
58
- type MiddlewareClientFn,
59
- type MiddlewareServerFnResult,
60
- type MiddlewareClient,
61
- type MiddlewareServerFnOptions,
62
- type MiddlewareServerNextFn,
63
- type ServerResultWithContext,
64
- } from '@tanstack/start-client-core'
65
- export {
66
- registerGlobalMiddleware,
67
- globalMiddleware,
56
+ type FunctionMiddlewareAfterValidator,
57
+ type FunctionMiddlewareClientFn,
58
+ type FunctionMiddlewareServerFnResult,
59
+ type FunctionMiddlewareClient,
60
+ type FunctionMiddlewareServerFnOptions,
61
+ type FunctionMiddlewareServerNextFn,
62
+ type FunctionServerResultWithContext,
68
63
  } from '@tanstack/start-client-core'
69
- export { serverOnly, clientOnly } from '@tanstack/start-client-core'
70
- export { json } from '@tanstack/start-client-core'
71
64
  export { Meta } from './Meta'
72
65
  export { Scripts } from './Scripts'
73
66
  export { StartClient } from './StartClient'
package/src/renderRSC.tsx CHANGED
@@ -1,6 +1,6 @@
1
1
  // TODO: RSCs
2
2
  // // @ts-expect-error
3
- // import * as reactDom from '@vinxi/react-server-dom/client'
3
+ // import * as reactDom from 'react-server-dom/client'
4
4
  // import { isValidElement } from 'solid-js'
5
5
  import invariant from 'tiny-invariant'
6
6
  import type * as Solid from 'solid-js'
@@ -17,12 +17,8 @@ export function useServerFn<T extends (...deps: Array<any>) => Promise<any>>(
17
17
  return res
18
18
  } catch (err) {
19
19
  if (isRedirect(err)) {
20
- const resolvedRedirect = router.resolveRedirect({
21
- ...err,
22
- _fromLocation: router.state.location,
23
- })
24
-
25
- return router.navigate(resolvedRedirect)
20
+ err.options._fromLocation = router.state.location
21
+ return router.navigate(router.resolveRedirect(err).options)
26
22
  }
27
23
 
28
24
  throw err
File without changes
File without changes
File without changes