@tanstack/start-client-core 1.152.0 → 1.153.1
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/dist/esm/client-rpc/createClientRpc.js +3 -1
- package/dist/esm/client-rpc/createClientRpc.js.map +1 -1
- package/dist/esm/createStart.d.ts +20 -0
- package/dist/esm/createStart.js.map +1 -1
- package/dist/esm/index.d.ts +1 -1
- package/package.json +3 -3
- package/src/client-rpc/createClientRpc.ts +3 -1
- package/src/createStart.ts +20 -0
- package/src/index.tsx +1 -0
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { TSS_SERVER_FUNCTION } from "../constants.js";
|
|
2
|
+
import { getStartOptions } from "../getStartOptions.js";
|
|
2
3
|
import { serverFnFetcher } from "./serverFnFetcher.js";
|
|
3
4
|
function createClientRpc(functionId) {
|
|
4
5
|
const url = process.env.TSS_SERVER_FN_BASE + functionId;
|
|
5
6
|
const serverFnMeta = { id: functionId };
|
|
6
7
|
const clientFn = (...args) => {
|
|
7
|
-
|
|
8
|
+
const startFetch = getStartOptions()?.serverFns?.fetch;
|
|
9
|
+
return serverFnFetcher(url, args, startFetch ?? fetch);
|
|
8
10
|
};
|
|
9
11
|
return Object.assign(clientFn, {
|
|
10
12
|
url,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createClientRpc.js","sources":["../../../src/client-rpc/createClientRpc.ts"],"sourcesContent":["import { TSS_SERVER_FUNCTION } from '../constants'\nimport { serverFnFetcher } from './serverFnFetcher'\nimport type { ClientFnMeta } from '../constants'\n\nexport function createClientRpc(functionId: string) {\n const url = process.env.TSS_SERVER_FN_BASE + functionId\n const serverFnMeta: ClientFnMeta = { id: functionId }\n\n const clientFn = (...args: Array<any>) => {\n return serverFnFetcher(url, args, fetch)\n }\n\n return Object.assign(clientFn, {\n url,\n serverFnMeta,\n [TSS_SERVER_FUNCTION]: true,\n })\n}\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"createClientRpc.js","sources":["../../../src/client-rpc/createClientRpc.ts"],"sourcesContent":["import { TSS_SERVER_FUNCTION } from '../constants'\nimport { getStartOptions } from '../getStartOptions'\nimport { serverFnFetcher } from './serverFnFetcher'\nimport type { ClientFnMeta } from '../constants'\n\nexport function createClientRpc(functionId: string) {\n const url = process.env.TSS_SERVER_FN_BASE + functionId\n const serverFnMeta: ClientFnMeta = { id: functionId }\n\n const clientFn = (...args: Array<any>) => {\n const startFetch = getStartOptions()?.serverFns?.fetch\n return serverFnFetcher(url, args, startFetch ?? fetch)\n }\n\n return Object.assign(clientFn, {\n url,\n serverFnMeta,\n [TSS_SERVER_FUNCTION]: true,\n })\n}\n"],"names":[],"mappings":";;;AAKO,SAAS,gBAAgB,YAAoB;AAClD,QAAM,MAAM,QAAQ,IAAI,qBAAqB;AAC7C,QAAM,eAA6B,EAAE,IAAI,WAAA;AAEzC,QAAM,WAAW,IAAI,SAAqB;AACxC,UAAM,aAAa,mBAAmB,WAAW;AACjD,WAAO,gBAAgB,KAAK,MAAM,cAAc,KAAK;AAAA,EACvD;AAEA,SAAO,OAAO,OAAO,UAAU;AAAA,IAC7B;AAAA,IACA;AAAA,IACA,CAAC,mBAAmB,GAAG;AAAA,EAAA,CACxB;AACH;"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { TSS_SERVER_FUNCTION } from './constants.js';
|
|
2
2
|
import { AnyFunctionMiddleware, AnyRequestMiddleware, CreateMiddlewareFn } from './createMiddleware.js';
|
|
3
|
+
import { CustomFetch } from './createServerFn.js';
|
|
3
4
|
import { AnySerializationAdapter, Register, SSROption } from '@tanstack/router-core';
|
|
4
5
|
export interface StartInstanceOptions<in out TSerializationAdapters, in out TDefaultSsr, in out TRequestMiddlewares, in out TFunctionMiddlewares> {
|
|
5
6
|
'~types': StartInstanceTypes<TSerializationAdapters, TDefaultSsr, TRequestMiddlewares, TFunctionMiddlewares>;
|
|
@@ -7,6 +8,25 @@ export interface StartInstanceOptions<in out TSerializationAdapters, in out TDef
|
|
|
7
8
|
defaultSsr?: TDefaultSsr;
|
|
8
9
|
requestMiddleware?: TRequestMiddlewares;
|
|
9
10
|
functionMiddleware?: TFunctionMiddlewares;
|
|
11
|
+
/**
|
|
12
|
+
* Configuration options for server functions.
|
|
13
|
+
*/
|
|
14
|
+
serverFns?: {
|
|
15
|
+
/**
|
|
16
|
+
* A custom fetch implementation to use for all server function calls.
|
|
17
|
+
* This can be overridden by middleware or at the call site.
|
|
18
|
+
*
|
|
19
|
+
* Precedence (highest to lowest):
|
|
20
|
+
* 1. Call site: `serverFn({ fetch: customFetch })`
|
|
21
|
+
* 2. Later middleware: Last middleware in chain that provides `fetch`
|
|
22
|
+
* 3. Earlier middleware: First middleware in chain that provides `fetch`
|
|
23
|
+
* 4. createStart: `createStart({ serverFns: { fetch: customFetch } })`
|
|
24
|
+
* 5. Default: Global `fetch` function
|
|
25
|
+
*
|
|
26
|
+
* @note Only applies on the client side. During SSR, server functions are called directly.
|
|
27
|
+
*/
|
|
28
|
+
fetch?: CustomFetch;
|
|
29
|
+
};
|
|
10
30
|
}
|
|
11
31
|
export interface StartInstance<in out TSerializationAdapters, in out TDefaultSsr, in out TRequestMiddlewares, in out TFunctionMiddlewares> {
|
|
12
32
|
getOptions: () => Promise<StartInstanceOptions<TSerializationAdapters, TDefaultSsr, TRequestMiddlewares, TFunctionMiddlewares>> | StartInstanceOptions<TSerializationAdapters, TDefaultSsr, TRequestMiddlewares, TFunctionMiddlewares>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createStart.js","sources":["../../src/createStart.ts"],"sourcesContent":["import { createMiddleware } from './createMiddleware'\nimport type { TSS_SERVER_FUNCTION } from './constants'\nimport type {\n AnyFunctionMiddleware,\n AnyRequestMiddleware,\n CreateMiddlewareFn,\n} from './createMiddleware'\nimport type {\n AnySerializationAdapter,\n Register,\n SSROption,\n} from '@tanstack/router-core'\n\nexport interface StartInstanceOptions<\n in out TSerializationAdapters,\n in out TDefaultSsr,\n in out TRequestMiddlewares,\n in out TFunctionMiddlewares,\n> {\n '~types': StartInstanceTypes<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n >\n serializationAdapters?: TSerializationAdapters\n defaultSsr?: TDefaultSsr\n requestMiddleware?: TRequestMiddlewares\n functionMiddleware?: TFunctionMiddlewares\n}\n\nexport interface StartInstance<\n in out TSerializationAdapters,\n in out TDefaultSsr,\n in out TRequestMiddlewares,\n in out TFunctionMiddlewares,\n> {\n getOptions: () =>\n | Promise<\n StartInstanceOptions<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n >\n >\n | StartInstanceOptions<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n >\n createMiddleware: CreateMiddlewareFn<Register>\n}\n\nexport interface StartInstanceTypes<\n in out TSerializationAdapters,\n in out TDefaultSsr,\n in out TRequestMiddlewares,\n in out TFunctionMiddlewares,\n> {\n serializationAdapters: TSerializationAdapters\n defaultSsr: TDefaultSsr\n requestMiddleware: TRequestMiddlewares\n functionMiddleware: TFunctionMiddlewares\n}\n\nfunction dedupeSerializationAdapters(\n deduped: Set<AnySerializationAdapter>,\n serializationAdapters: Array<AnySerializationAdapter>,\n): void {\n for (let i = 0, len = serializationAdapters.length; i < len; i++) {\n const current = serializationAdapters[i]!\n if (!deduped.has(current)) {\n deduped.add(current)\n if (current.extends) {\n dedupeSerializationAdapters(deduped, current.extends)\n }\n }\n }\n}\n\nexport const createStart = <\n const TSerializationAdapters extends ReadonlyArray<AnySerializationAdapter> =\n [],\n TDefaultSsr extends SSROption = SSROption,\n const TRequestMiddlewares extends ReadonlyArray<AnyRequestMiddleware> = [],\n const TFunctionMiddlewares extends ReadonlyArray<AnyFunctionMiddleware> = [],\n>(\n getOptions: () =>\n | Promise<\n Omit<\n StartInstanceOptions<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n >,\n '~types'\n >\n >\n | Omit<\n StartInstanceOptions<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n >,\n '~types'\n >,\n): StartInstance<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n> => {\n return {\n getOptions: async () => {\n const options = await getOptions()\n if (options.serializationAdapters) {\n const deduped = new Set<AnySerializationAdapter>()\n dedupeSerializationAdapters(\n deduped,\n options.serializationAdapters as unknown as Array<AnySerializationAdapter>,\n )\n options.serializationAdapters = Array.from(deduped) as any\n }\n return options\n },\n createMiddleware: createMiddleware as any,\n } as StartInstance<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n >\n}\n\nexport type AnyStartInstance = StartInstance<any, any, any, any>\nexport type AnyStartInstanceOptions = StartInstanceOptions<any, any, any, any>\n\ndeclare module '@tanstack/router-core' {\n interface SerializableExtensions {\n serverFn: { [TSS_SERVER_FUNCTION]: true }\n }\n}\n"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"createStart.js","sources":["../../src/createStart.ts"],"sourcesContent":["import { createMiddleware } from './createMiddleware'\nimport type { TSS_SERVER_FUNCTION } from './constants'\nimport type {\n AnyFunctionMiddleware,\n AnyRequestMiddleware,\n CreateMiddlewareFn,\n} from './createMiddleware'\nimport type { CustomFetch } from './createServerFn'\nimport type {\n AnySerializationAdapter,\n Register,\n SSROption,\n} from '@tanstack/router-core'\n\nexport interface StartInstanceOptions<\n in out TSerializationAdapters,\n in out TDefaultSsr,\n in out TRequestMiddlewares,\n in out TFunctionMiddlewares,\n> {\n '~types': StartInstanceTypes<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n >\n serializationAdapters?: TSerializationAdapters\n defaultSsr?: TDefaultSsr\n requestMiddleware?: TRequestMiddlewares\n functionMiddleware?: TFunctionMiddlewares\n /**\n * Configuration options for server functions.\n */\n serverFns?: {\n /**\n * A custom fetch implementation to use for all server function calls.\n * This can be overridden by middleware or at the call site.\n *\n * Precedence (highest to lowest):\n * 1. Call site: `serverFn({ fetch: customFetch })`\n * 2. Later middleware: Last middleware in chain that provides `fetch`\n * 3. Earlier middleware: First middleware in chain that provides `fetch`\n * 4. createStart: `createStart({ serverFns: { fetch: customFetch } })`\n * 5. Default: Global `fetch` function\n *\n * @note Only applies on the client side. During SSR, server functions are called directly.\n */\n fetch?: CustomFetch\n }\n}\n\nexport interface StartInstance<\n in out TSerializationAdapters,\n in out TDefaultSsr,\n in out TRequestMiddlewares,\n in out TFunctionMiddlewares,\n> {\n getOptions: () =>\n | Promise<\n StartInstanceOptions<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n >\n >\n | StartInstanceOptions<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n >\n createMiddleware: CreateMiddlewareFn<Register>\n}\n\nexport interface StartInstanceTypes<\n in out TSerializationAdapters,\n in out TDefaultSsr,\n in out TRequestMiddlewares,\n in out TFunctionMiddlewares,\n> {\n serializationAdapters: TSerializationAdapters\n defaultSsr: TDefaultSsr\n requestMiddleware: TRequestMiddlewares\n functionMiddleware: TFunctionMiddlewares\n}\n\nfunction dedupeSerializationAdapters(\n deduped: Set<AnySerializationAdapter>,\n serializationAdapters: Array<AnySerializationAdapter>,\n): void {\n for (let i = 0, len = serializationAdapters.length; i < len; i++) {\n const current = serializationAdapters[i]!\n if (!deduped.has(current)) {\n deduped.add(current)\n if (current.extends) {\n dedupeSerializationAdapters(deduped, current.extends)\n }\n }\n }\n}\n\nexport const createStart = <\n const TSerializationAdapters extends ReadonlyArray<AnySerializationAdapter> =\n [],\n TDefaultSsr extends SSROption = SSROption,\n const TRequestMiddlewares extends ReadonlyArray<AnyRequestMiddleware> = [],\n const TFunctionMiddlewares extends ReadonlyArray<AnyFunctionMiddleware> = [],\n>(\n getOptions: () =>\n | Promise<\n Omit<\n StartInstanceOptions<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n >,\n '~types'\n >\n >\n | Omit<\n StartInstanceOptions<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n >,\n '~types'\n >,\n): StartInstance<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n> => {\n return {\n getOptions: async () => {\n const options = await getOptions()\n if (options.serializationAdapters) {\n const deduped = new Set<AnySerializationAdapter>()\n dedupeSerializationAdapters(\n deduped,\n options.serializationAdapters as unknown as Array<AnySerializationAdapter>,\n )\n options.serializationAdapters = Array.from(deduped) as any\n }\n return options\n },\n createMiddleware: createMiddleware as any,\n } as StartInstance<\n TSerializationAdapters,\n TDefaultSsr,\n TRequestMiddlewares,\n TFunctionMiddlewares\n >\n}\n\nexport type AnyStartInstance = StartInstance<any, any, any, any>\nexport type AnyStartInstanceOptions = StartInstanceOptions<any, any, any, any>\n\ndeclare module '@tanstack/router-core' {\n interface SerializableExtensions {\n serverFn: { [TSS_SERVER_FUNCTION]: true }\n }\n}\n"],"names":[],"mappings":";AAuFA,SAAS,4BACP,SACA,uBACM;AACN,WAAS,IAAI,GAAG,MAAM,sBAAsB,QAAQ,IAAI,KAAK,KAAK;AAChE,UAAM,UAAU,sBAAsB,CAAC;AACvC,QAAI,CAAC,QAAQ,IAAI,OAAO,GAAG;AACzB,cAAQ,IAAI,OAAO;AACnB,UAAI,QAAQ,SAAS;AACnB,oCAA4B,SAAS,QAAQ,OAAO;AAAA,MACtD;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,cAAc,CAOzB,eA0BG;AACH,SAAO;AAAA,IACL,YAAY,YAAY;AACtB,YAAM,UAAU,MAAM,WAAA;AACtB,UAAI,QAAQ,uBAAuB;AACjC,cAAM,8BAAc,IAAA;AACpB;AAAA,UACE;AAAA,UACA,QAAQ;AAAA,QAAA;AAEV,gBAAQ,wBAAwB,MAAM,KAAK,OAAO;AAAA,MACpD;AACA,aAAO;AAAA,IACT;AAAA,IACA;AAAA,EAAA;AAOJ;"}
|
package/dist/esm/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export type { FrameType as FrameTypeValue, ClientFnMeta, ServerFnMeta, } from '.
|
|
|
12
12
|
export type * from './serverRoute.js';
|
|
13
13
|
export type * from './startEntry.js';
|
|
14
14
|
export { createStart } from './createStart.js';
|
|
15
|
-
export type { AnyStartInstance, AnyStartInstanceOptions, StartInstance, } from './createStart.js';
|
|
15
|
+
export type { AnyStartInstance, AnyStartInstanceOptions, StartInstance, StartInstanceOptions, } from './createStart.js';
|
|
16
16
|
export type { Register } from '@tanstack/router-core';
|
|
17
17
|
export { getRouterInstance } from './getRouterInstance.js';
|
|
18
18
|
export { getDefaultSerovalPlugins } from './getDefaultSerovalPlugins.js';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/start-client-core",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.153.1",
|
|
4
4
|
"description": "Modern and scalable routing for React applications",
|
|
5
5
|
"author": "Tanner Linsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -66,9 +66,9 @@
|
|
|
66
66
|
"seroval": "^1.4.1",
|
|
67
67
|
"tiny-invariant": "^1.3.3",
|
|
68
68
|
"tiny-warning": "^1.0.3",
|
|
69
|
-
"@tanstack/router-core": "1.
|
|
69
|
+
"@tanstack/router-core": "1.153.1",
|
|
70
70
|
"@tanstack/start-fn-stubs": "1.151.3",
|
|
71
|
-
"@tanstack/start-storage-context": "1.
|
|
71
|
+
"@tanstack/start-storage-context": "1.153.1"
|
|
72
72
|
},
|
|
73
73
|
"scripts": {
|
|
74
74
|
"clean": "rimraf ./dist && rimraf ./coverage",
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TSS_SERVER_FUNCTION } from '../constants'
|
|
2
|
+
import { getStartOptions } from '../getStartOptions'
|
|
2
3
|
import { serverFnFetcher } from './serverFnFetcher'
|
|
3
4
|
import type { ClientFnMeta } from '../constants'
|
|
4
5
|
|
|
@@ -7,7 +8,8 @@ export function createClientRpc(functionId: string) {
|
|
|
7
8
|
const serverFnMeta: ClientFnMeta = { id: functionId }
|
|
8
9
|
|
|
9
10
|
const clientFn = (...args: Array<any>) => {
|
|
10
|
-
|
|
11
|
+
const startFetch = getStartOptions()?.serverFns?.fetch
|
|
12
|
+
return serverFnFetcher(url, args, startFetch ?? fetch)
|
|
11
13
|
}
|
|
12
14
|
|
|
13
15
|
return Object.assign(clientFn, {
|
package/src/createStart.ts
CHANGED
|
@@ -5,6 +5,7 @@ import type {
|
|
|
5
5
|
AnyRequestMiddleware,
|
|
6
6
|
CreateMiddlewareFn,
|
|
7
7
|
} from './createMiddleware'
|
|
8
|
+
import type { CustomFetch } from './createServerFn'
|
|
8
9
|
import type {
|
|
9
10
|
AnySerializationAdapter,
|
|
10
11
|
Register,
|
|
@@ -27,6 +28,25 @@ export interface StartInstanceOptions<
|
|
|
27
28
|
defaultSsr?: TDefaultSsr
|
|
28
29
|
requestMiddleware?: TRequestMiddlewares
|
|
29
30
|
functionMiddleware?: TFunctionMiddlewares
|
|
31
|
+
/**
|
|
32
|
+
* Configuration options for server functions.
|
|
33
|
+
*/
|
|
34
|
+
serverFns?: {
|
|
35
|
+
/**
|
|
36
|
+
* A custom fetch implementation to use for all server function calls.
|
|
37
|
+
* This can be overridden by middleware or at the call site.
|
|
38
|
+
*
|
|
39
|
+
* Precedence (highest to lowest):
|
|
40
|
+
* 1. Call site: `serverFn({ fetch: customFetch })`
|
|
41
|
+
* 2. Later middleware: Last middleware in chain that provides `fetch`
|
|
42
|
+
* 3. Earlier middleware: First middleware in chain that provides `fetch`
|
|
43
|
+
* 4. createStart: `createStart({ serverFns: { fetch: customFetch } })`
|
|
44
|
+
* 5. Default: Global `fetch` function
|
|
45
|
+
*
|
|
46
|
+
* @note Only applies on the client side. During SSR, server functions are called directly.
|
|
47
|
+
*/
|
|
48
|
+
fetch?: CustomFetch
|
|
49
|
+
}
|
|
30
50
|
}
|
|
31
51
|
|
|
32
52
|
export interface StartInstance<
|