@storybook/tanstack-react 0.0.0-pr-34403-sha-14169208 → 10.4.0-alpha.17

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.
@@ -7,6 +7,7 @@ var preview_exports = {};
7
7
  __export(preview_exports, {
8
8
  applyDecorators: () => applyDecorators,
9
9
  loaders: () => loaders,
10
+ optimizeDeps: () => optimizeDeps,
10
11
  parameters: () => parameters
11
12
  });
12
13
  import { applyDecorators as reactApplyDecorators } from "@storybook/react/entry-preview-docs";
@@ -18,9 +19,7 @@ import {
18
19
  createRootRoute,
19
20
  createRoute as createRoute2,
20
21
  createRouter,
21
- Route,
22
22
  RouterProvider,
23
- RootRoute as RootRoute2,
24
23
  interpolatePath,
25
24
  defaultStringifySearch
26
25
  } from "@tanstack/react-router";
@@ -99,13 +98,58 @@ function resolveStoryLeaf(tree, { path, boundRouteId }) {
99
98
  return firstChild || root;
100
99
  }
101
100
 
101
+ // src/routing/utils.ts
102
+ import { Route, RootRoute as RootRoute2 } from "@tanstack/react-router";
103
+ function isRoute(value) {
104
+ return value instanceof Route || value instanceof RootRoute2;
105
+ }
106
+
102
107
  // src/routing/decorator.tsx
103
108
  var StoryContext = React.createContext({ Story: () => null }), StoryFromContext = () => {
104
109
  let { Story } = React.useContext(StoryContext);
105
110
  return React.createElement(Story, null);
106
- };
107
- function isRoute(value) {
108
- return value instanceof Route || value instanceof RootRoute2;
111
+ }, tanstackRouteDecorator = (Story, context) => React.createElement(TanStackRouterStory, { Story, context });
112
+ function TanStackRouterStory({ Story, context }) {
113
+ let routerContext = context.parameters.tanstack?.router?.useRouterContext?.({
114
+ storyContext: context
115
+ }), router = React.useMemo(
116
+ () => createStoryRouter({ Story: StoryFromContext, context, routerContext }),
117
+ // eslint-disable-next-line react-hooks/exhaustive-deps
118
+ [context.id]
119
+ ), providerContext = React.useMemo(
120
+ () => ({
121
+ ...context.parameters.tanstack?.router?.context,
122
+ ...routerContext
123
+ }),
124
+ // eslint-disable-next-line react-hooks/exhaustive-deps
125
+ [context.id, routerContext]
126
+ );
127
+ return React.createElement(StoryContext.Provider, { value: { Story } }, React.createElement(RouterProvider, { router, context: providerContext }));
128
+ }
129
+ function createStoryRouter({
130
+ Story,
131
+ context,
132
+ routerContext
133
+ }) {
134
+ let routerParameters = context.parameters.tanstack?.router ?? {}, { tree, leaf } = resolveTree(Story, context), routeTree = tree.root, inferredPath = routerParameters?.path || leaf.fullPath || routeTree.children?.[0]?.fullPath || "/", resolvedPath = interpolatePath({
135
+ path: inferredPath,
136
+ params: routerParameters?.params ?? {}
137
+ }).interpolatedPath, search = routerParameters?.query ? defaultStringifySearch(routerParameters.query) : "";
138
+ search && (resolvedPath += search);
139
+ let history = createMemoryHistory({
140
+ initialEntries: [resolvedPath]
141
+ });
142
+ return history.replace(resolvedPath), createRouter({
143
+ routeTree,
144
+ history,
145
+ defaultNotFoundComponent(props) {
146
+ return React.createElement("div", null, "Route not found: ", props.routeId);
147
+ },
148
+ defaultErrorComponent({ error }) {
149
+ return React.createElement("div", null, "Story did something wrong : ", String(error));
150
+ },
151
+ context: routerContext
152
+ });
109
153
  }
110
154
  function injectStoryComponent(leaf, Story, overrides, leafId) {
111
155
  let userOverride = overrides?.[leafId];
@@ -141,55 +185,9 @@ function resolveTree(Story, context) {
141
185
  leaf: syntheticChild
142
186
  };
143
187
  }
144
- function createStoryRouter({
145
- Story,
146
- context,
147
- routerContext
148
- }) {
149
- let routerParameters = context.parameters.tanstack?.router ?? {}, { tree, leaf } = resolveTree(Story, context), routeTree = tree.root, inferredPath = routerParameters?.path || leaf.fullPath || routeTree.children?.[0]?.fullPath || "/", resolvedPath = interpolatePath({
150
- path: inferredPath,
151
- params: routerParameters?.params ?? {}
152
- }).interpolatedPath, search = routerParameters?.query ? defaultStringifySearch(routerParameters.query) : "";
153
- search && (resolvedPath += search);
154
- let history = createMemoryHistory({
155
- initialEntries: [resolvedPath]
156
- });
157
- return history.replace(resolvedPath), createRouter({
158
- routeTree,
159
- history,
160
- defaultNotFoundComponent(props) {
161
- return React.createElement("div", null, "Route not found: ", props.routeId);
162
- },
163
- defaultErrorComponent({ error }) {
164
- return React.createElement("div", null, "Story did something wrong : ", String(error));
165
- },
166
- context: routerContext
167
- });
168
- }
169
- var tanstackRouteDecorator = (Story, context) => React.createElement(TanStackRouterStory, { Story, context });
170
- function TanStackRouterStory({ Story, context }) {
171
- let routerContext = context.parameters.tanstack?.router?.useRouterContext?.({
172
- storyContext: context
173
- }), router = React.useMemo(
174
- () => createStoryRouter({ Story: StoryFromContext, context, routerContext }),
175
- // eslint-disable-next-line react-hooks/exhaustive-deps
176
- [context.id]
177
- ), providerContext = React.useMemo(
178
- () => ({
179
- ...context.parameters.tanstack?.router?.context,
180
- ...routerContext
181
- }),
182
- // eslint-disable-next-line react-hooks/exhaustive-deps
183
- [context.id, routerContext]
184
- );
185
- return React.createElement(StoryContext.Provider, { value: { Story } }, React.createElement(RouterProvider, { router, context: providerContext }));
186
- }
187
188
 
188
189
  // src/routing/loader.ts
189
- import { Route as Route2, RootRoute as RootRoute3 } from "@tanstack/react-router";
190
- function isRoute2(value) {
191
- return value instanceof Route2 || value instanceof RootRoute3;
192
- }
190
+ import { RootRoute as RootRoute3 } from "@tanstack/react-router";
193
191
  function getComponentFromRoute(route) {
194
192
  if (route.options?.component)
195
193
  return route.options.component;
@@ -197,30 +195,36 @@ function getComponentFromRoute(route) {
197
195
  return route.children?.[0]?.options?.component;
198
196
  }
199
197
  var routeComponentLoader = (context) => {
200
- let componentRoute = isRoute2(context.component) ? context.component : void 0, routerParameters = context.parameters.tanstack?.router ?? {}, resolvedRoute = (isRoute2(routerParameters.route) ? routerParameters.route : void 0) ?? componentRoute;
201
- if (resolvedRoute) {
198
+ let routerParameters = context.parameters.tanstack?.router ?? {}, parameterRoute = isRoute(routerParameters.route) ? routerParameters.route : void 0;
199
+ if (parameterRoute) {
202
200
  if (!context.component) {
203
- let component = getComponentFromRoute(resolvedRoute);
204
- component && (componentRoute || !context.component) && (context.component = component);
201
+ let component = getComponentFromRoute(parameterRoute);
202
+ component && !context.component && (context.component = component);
205
203
  }
206
- context.route || (context.route = resolvedRoute);
204
+ context.route || (context.route = parameterRoute);
207
205
  }
208
206
  };
209
207
 
210
208
  // src/preview.tsx
211
209
  var loaders = [routeComponentLoader], applyDecorators = (storyFn, allDecorators) => (
212
210
  // reorder decorators so `jsxDecorator` is innermost, and `tanstackRouteDecorator` is just outside it
211
+ // There is an issue if `tanstackRouteDecorator` is innermost. All stories crashes due to a bug with the jsxDecorator.
213
212
  reactApplyDecorators(storyFn, [
214
213
  tanstackRouteDecorator,
215
214
  ...allDecorators
216
215
  ])
217
216
  ), parameters = {
218
217
  tanstack: {}
219
- };
218
+ }, optimizeDeps = [
219
+ "@tanstack/react-devtools",
220
+ "@tanstack/react-query-devtools",
221
+ "@tanstack/react-router-devtools"
222
+ ];
220
223
 
221
224
  export {
222
225
  loaders,
223
226
  applyDecorators,
224
227
  parameters,
228
+ optimizeDeps,
225
229
  preview_exports
226
230
  };
@@ -3,6 +3,99 @@ import { createServerFn as createServerFn$1 } from '@tanstack/start-client-core'
3
3
  export * from '@tanstack/start-client-core';
4
4
  export * from '@tanstack/react-start';
5
5
 
6
+ type RequestOptions<TRegister = unknown> = {
7
+ context?: TRegister extends {
8
+ server: {
9
+ requestContext: infer TRequestContext;
10
+ };
11
+ } ? TRequestContext : unknown;
12
+ };
13
+ type MockRequestExecutor<TRegister = unknown> = (request: Request, opts?: RequestOptions<TRegister>) => Promise<unknown> | unknown;
14
+ type HandlerContext = {
15
+ request: Request;
16
+ responseHeaders: Headers;
17
+ router?: unknown;
18
+ context?: unknown;
19
+ requestContext?: unknown;
20
+ };
21
+ type HandlerCallback<TRouter = unknown> = (context: HandlerContext & {
22
+ router?: TRouter;
23
+ }) => Promise<unknown> | unknown;
24
+ type SessionConfig = Record<string, unknown>;
25
+ type MockSession<TSessionData extends Record<string, unknown> = Record<string, unknown>> = {
26
+ data: Partial<TSessionData>;
27
+ update: (update?: Partial<TSessionData> | ((prev: Partial<TSessionData>) => Partial<TSessionData>)) => Promise<MockSession<TSessionData>>;
28
+ save: () => Promise<void>;
29
+ clear: () => Promise<void>;
30
+ };
31
+ declare const HEADERS: {
32
+ readonly TSS_SHELL: "X-TSS_SHELL";
33
+ };
34
+ declare const VIRTUAL_MODULES: {
35
+ readonly startManifest: "tanstack-start-manifest:v";
36
+ readonly injectedHeadScripts: "tanstack-start-injected-head-scripts:v";
37
+ readonly serverFnResolver: "#tanstack-start-server-fn-resolver";
38
+ };
39
+ declare function StartServer(): null;
40
+ declare const defineHandlerCallback: <TRouter = unknown>(handler: HandlerCallback<TRouter>) => HandlerCallback<TRouter>;
41
+ declare const defaultStreamHandler: () => Promise<Response>;
42
+ declare const defaultRenderHandler: () => Promise<Response>;
43
+ declare const requestHandler: <TRegister = unknown>(handler: MockRequestExecutor<TRegister>) => (request: Request, requestOpts?: RequestOptions<TRegister>) => Promise<Response>;
44
+ declare const createRequestHandler: <TRegister = unknown>(handler: MockRequestExecutor<TRegister>) => (request: Request, requestOpts?: RequestOptions<TRegister> | undefined) => Promise<Response>;
45
+ declare const createStartHandler: <TRegister = unknown>(cbOrOptions: HandlerCallback | {
46
+ handler?: HandlerCallback;
47
+ }) => (request: Request, requestOpts?: RequestOptions<TRegister> | undefined) => Promise<Response>;
48
+ declare const attachRouterServerSsrUtils: <TRouter>(router: TRouter) => TRouter;
49
+ declare const transformReadableStreamWithRouter: <TReadableStream>(stream: TReadableStream) => TReadableStream;
50
+ declare const transformPipeableStreamWithRouter: <TPipeableStream>(stream: TPipeableStream) => TPipeableStream;
51
+ declare const getRequest: () => Request;
52
+ declare const getRequestHeaders: () => Headers;
53
+ declare const getRequestHeader: (name: string) => string | undefined;
54
+ declare const getRequestIP: (opts?: {
55
+ xForwardedFor?: boolean;
56
+ }) => string | undefined;
57
+ declare const getRequestHost: (opts?: {
58
+ xForwardedHost?: boolean;
59
+ }) => string;
60
+ declare const getRequestUrl: (opts?: {
61
+ xForwardedHost?: boolean;
62
+ xForwardedProto?: boolean;
63
+ }) => URL;
64
+ declare const getRequestProtocol: (opts?: {
65
+ xForwardedProto?: boolean;
66
+ }) => string;
67
+ declare const setResponseHeaders: (headers: HeadersInit) => void;
68
+ declare const getResponseHeaders: () => Headers;
69
+ declare const getResponseHeader: (name: string) => string | undefined;
70
+ declare const setResponseHeader: (name: string, value: string | Array<string>) => void;
71
+ declare const removeResponseHeader: (name: string) => void;
72
+ declare const clearResponseHeaders: (headerNames?: Array<string>) => void;
73
+ declare const getResponseStatus: () => number;
74
+ declare const setResponseStatus: (code?: number, text?: string) => void;
75
+ declare const getCookies: () => {
76
+ [k: string]: string;
77
+ };
78
+ declare const getCookie: (name: string) => string | undefined;
79
+ declare const setCookie: (name: string, value: string, options?: Record<string, unknown>) => void;
80
+ declare const deleteCookie: (name: string, options?: Record<string, unknown>) => void;
81
+ declare const useSession: <TSessionData extends Record<string, unknown> = Record<string, unknown>>(_config: SessionConfig) => Promise<MockSession<TSessionData>>;
82
+ declare const getSession: <TSessionData extends Record<string, unknown> = Record<string, unknown>>(_config: SessionConfig) => Promise<MockSession<TSessionData>>;
83
+ declare const updateSession: <TSessionData extends Record<string, unknown> = Record<string, unknown>>(_config: SessionConfig, update?: Partial<TSessionData> | ((prev: Partial<TSessionData>) => Partial<TSessionData>)) => Promise<MockSession<TSessionData>>;
84
+ declare const sealSession: (_config: SessionConfig) => Promise<string>;
85
+ declare const unsealSession: (_config: SessionConfig, sealed: string) => Promise<any>;
86
+ declare const clearSession: (_config: Partial<SessionConfig>) => Promise<void>;
87
+ declare const getResponse: () => {
88
+ status: number | undefined;
89
+ statusText: string | undefined;
90
+ readonly headers: Headers;
91
+ };
92
+ declare const getValidatedQuery: (schema: {
93
+ parse?: (value: Record<string, string>) => unknown;
94
+ safeParse?: (value: Record<string, string>) => unknown;
95
+ ["~standard"]?: {
96
+ validate?: (value: Record<string, string>) => Promise<unknown> | unknown;
97
+ };
98
+ }) => Promise<unknown>;
6
99
  declare function useServerFn<T extends (...args: Array<any>) => Promise<any>>(serverFn: T): (...args: Parameters<T>) => ReturnType<T>;
7
100
  declare const createServerFn: typeof createServerFn$1;
8
101
  declare const Link: ({ to, children, ...props }: {
@@ -17,9 +110,6 @@ declare const Navigate: ({ to }: {
17
110
  }) => null;
18
111
  declare const notFound: () => never;
19
112
  declare const createStart: () => {};
20
- declare const setCookie: (name: string, value: string) => void;
21
- declare const getCookie: (name: string) => string | undefined;
22
- declare const deleteCookie: (name: string) => void;
23
113
  declare const clearCookieStore: () => void;
24
114
  declare const fetchHandler: () => Promise<Response>;
25
115
 
@@ -27,4 +117,4 @@ declare const _default: {
27
117
  fetch: () => Promise<Response>;
28
118
  };
29
119
 
30
- export { Link, Navigate, clearCookieStore, createServerFn, createStart, _default as default, deleteCookie, fetchHandler as fetch, getCookie, notFound, setCookie, useServerFn };
120
+ export { HEADERS, Link, Navigate, StartServer, VIRTUAL_MODULES, attachRouterServerSsrUtils, clearCookieStore, clearResponseHeaders, clearSession, createRequestHandler, createServerFn, createStart, createStartHandler, _default as default, defaultRenderHandler, defaultStreamHandler, defineHandlerCallback, deleteCookie, fetchHandler as fetch, getCookie, getCookies, getRequest, getRequestHeader, getRequestHeaders, getRequestHost, getRequestIP, getRequestProtocol, getRequestUrl, getResponse, getResponseHeader, getResponseHeaders, getResponseStatus, getSession, getValidatedQuery, notFound, removeResponseHeader, requestHandler, sealSession, setCookie, setResponseHeader, setResponseHeaders, setResponseStatus, transformPipeableStreamWithRouter, transformReadableStreamWithRouter, unsealSession, updateSession, useServerFn, useSession };
@@ -8,6 +8,252 @@ import React from "react";
8
8
  import { fn } from "storybook/test";
9
9
  export * from "@tanstack/start-client-core";
10
10
  export * from "@tanstack/react-start";
11
+ var START_SERVER_STATE_SYMBOL = Symbol.for("storybook.tanstack-react.start-server.state"), browserGlobals = globalThis, HEADERS = {
12
+ TSS_SHELL: "X-TSS_SHELL"
13
+ }, VIRTUAL_MODULES = {
14
+ startManifest: "tanstack-start-manifest:v",
15
+ injectedHeadScripts: "tanstack-start-injected-head-scripts:v",
16
+ serverFnResolver: "#tanstack-start-server-fn-resolver"
17
+ };
18
+ function createNamedMock(name, implementation) {
19
+ return fn(implementation).mockName(`@tanstack/react-start/server::${name}`);
20
+ }
21
+ function createDefaultRequest() {
22
+ return new Request("http://localhost/");
23
+ }
24
+ function parseCookieHeader(cookieHeader) {
25
+ let cookies = /* @__PURE__ */ new Map();
26
+ if (!cookieHeader)
27
+ return cookies;
28
+ for (let segment of cookieHeader.split(";")) {
29
+ let [rawName, ...rawValue] = segment.trim().split("=");
30
+ rawName && cookies.set(rawName, decodeURIComponent(rawValue.join("=")));
31
+ }
32
+ return cookies;
33
+ }
34
+ function serializeCookie(name, value, options) {
35
+ let parts = [`${name}=${encodeURIComponent(value)}`];
36
+ return typeof options?.path == "string" && parts.push(`Path=${options.path}`), typeof options?.domain == "string" && parts.push(`Domain=${options.domain}`), typeof options?.maxAge == "number" && parts.push(`Max-Age=${options.maxAge}`), options?.expires instanceof Date && parts.push(`Expires=${options.expires.toUTCString()}`), options?.httpOnly && parts.push("HttpOnly"), options?.secure && parts.push("Secure"), typeof options?.sameSite == "string" && parts.push(`SameSite=${options.sameSite}`), parts.join("; ");
37
+ }
38
+ function createMockState(request = createDefaultRequest()) {
39
+ return {
40
+ request,
41
+ responseHeaders: new Headers(),
42
+ responseStatus: void 0,
43
+ cookies: parseCookieHeader(request.headers.get("cookie")),
44
+ sessionData: {}
45
+ };
46
+ }
47
+ function getState() {
48
+ let existingState = browserGlobals[START_SERVER_STATE_SYMBOL];
49
+ if (existingState)
50
+ return existingState;
51
+ let nextState = createMockState();
52
+ return browserGlobals[START_SERVER_STATE_SYMBOL] = nextState, nextState;
53
+ }
54
+ async function withRequestState(request, run) {
55
+ let previousState = browserGlobals[START_SERVER_STATE_SYMBOL];
56
+ browserGlobals[START_SERVER_STATE_SYMBOL] = createMockState(request);
57
+ try {
58
+ return await run();
59
+ } finally {
60
+ previousState ? browserGlobals[START_SERVER_STATE_SYMBOL] = previousState : delete browserGlobals[START_SERVER_STATE_SYMBOL];
61
+ }
62
+ }
63
+ function mergeResponseState(response) {
64
+ let state = getState(), headers = new Headers(response.headers);
65
+ return state.responseHeaders.forEach((value, key) => {
66
+ if (key.toLowerCase() === "set-cookie") {
67
+ headers.append(key, value);
68
+ return;
69
+ }
70
+ headers.set(key, value);
71
+ }), new Response(response.body, {
72
+ status: state.responseStatus?.code ?? response.status,
73
+ statusText: state.responseStatus?.text ?? response.statusText,
74
+ headers
75
+ });
76
+ }
77
+ function toResponse(result) {
78
+ return result instanceof Response ? mergeResponseState(result) : result == null ? mergeResponseState(new Response(null)) : mergeResponseState(typeof result == "string" ? new Response(result) : new Response(JSON.stringify(result), {
79
+ headers: { "content-type": "application/json" }
80
+ }));
81
+ }
82
+ function getSessionRecord() {
83
+ let state = getState();
84
+ return {
85
+ data: state.sessionData,
86
+ update: async (update) => {
87
+ let nextValue = typeof update == "function" ? update(state.sessionData) : update;
88
+ return state.sessionData = {
89
+ ...state.sessionData,
90
+ ...nextValue
91
+ }, getSessionRecord();
92
+ },
93
+ save: async () => {
94
+ },
95
+ clear: async () => {
96
+ state.sessionData = {};
97
+ }
98
+ };
99
+ }
100
+ function StartServer() {
101
+ return null;
102
+ }
103
+ var defineHandlerCallback = createNamedMock(
104
+ "defineHandlerCallback",
105
+ (handler) => handler
106
+ ), defaultStreamHandler = createNamedMock(
107
+ "defaultStreamHandler",
108
+ async () => new Response("Storybook Mock", { status: 200 })
109
+ ), defaultRenderHandler = createNamedMock(
110
+ "defaultRenderHandler",
111
+ async () => new Response("Storybook Mock", { status: 200 })
112
+ ), requestHandler = createNamedMock(
113
+ "requestHandler",
114
+ (handler) => async (request, requestOpts) => withRequestState(request, async () => toResponse(await handler(request, requestOpts)))
115
+ ), createRequestHandler = createNamedMock(
116
+ "createRequestHandler",
117
+ (handler) => requestHandler(handler)
118
+ ), createStartHandler = createNamedMock(
119
+ "createStartHandler",
120
+ (cbOrOptions) => {
121
+ let handler = typeof cbOrOptions == "function" ? cbOrOptions : cbOrOptions?.handler;
122
+ return requestHandler(async (request, requestOpts) => handler ? handler({
123
+ request,
124
+ responseHeaders: getState().responseHeaders,
125
+ router: browserGlobals.__TSR_ROUTER__,
126
+ context: requestOpts?.context,
127
+ requestContext: requestOpts?.context
128
+ }) : new Response("Storybook Mock", { status: 200 }));
129
+ }
130
+ ), attachRouterServerSsrUtils = createNamedMock(
131
+ "attachRouterServerSsrUtils",
132
+ (router) => router
133
+ ), transformReadableStreamWithRouter = createNamedMock(
134
+ "transformReadableStreamWithRouter",
135
+ (stream) => stream
136
+ ), transformPipeableStreamWithRouter = createNamedMock(
137
+ "transformPipeableStreamWithRouter",
138
+ (stream) => stream
139
+ ), getRequest = createNamedMock("getRequest", () => getState().request), getRequestHeaders = createNamedMock(
140
+ "getRequestHeaders",
141
+ () => getState().request.headers
142
+ ), getRequestHeader = createNamedMock("getRequestHeader", (name) => getState().request.headers.get(name) ?? void 0), getRequestIP = createNamedMock(
143
+ "getRequestIP",
144
+ (opts) => {
145
+ if (opts?.xForwardedFor)
146
+ return getRequestHeader("x-forwarded-for")?.split(",")[0]?.trim();
147
+ }
148
+ ), getRequestHost = createNamedMock(
149
+ "getRequestHost",
150
+ (opts) => (opts?.xForwardedHost ? getRequestHeader("x-forwarded-host") : getRequestHeader("host")) ?? new URL(getState().request.url).host ?? "localhost"
151
+ ), getRequestUrl = createNamedMock(
152
+ "getRequestUrl",
153
+ (opts) => {
154
+ let url = new URL(getState().request.url), forwardedHost = opts?.xForwardedHost ? getRequestHeader("x-forwarded-host") : void 0, forwardedProto = opts?.xForwardedProto === !1 ? void 0 : getRequestHeader("x-forwarded-proto");
155
+ return forwardedHost && (url.host = forwardedHost), forwardedProto && (url.protocol = `${forwardedProto}:`), url;
156
+ }
157
+ ), getRequestProtocol = createNamedMock(
158
+ "getRequestProtocol",
159
+ (opts) => {
160
+ let forwardedProto = opts?.xForwardedProto === !1 ? void 0 : getRequestHeader("x-forwarded-proto");
161
+ return forwardedProto || getRequestUrl().protocol.replace(/:$/, "") || "http";
162
+ }
163
+ ), setResponseHeaders = createNamedMock("setResponseHeaders", (headers) => {
164
+ getState().responseHeaders = new Headers(headers);
165
+ }), getResponseHeaders = createNamedMock(
166
+ "getResponseHeaders",
167
+ () => getState().responseHeaders
168
+ ), getResponseHeader = createNamedMock("getResponseHeader", (name) => getState().responseHeaders.get(name) ?? void 0), setResponseHeader = createNamedMock(
169
+ "setResponseHeader",
170
+ (name, value) => {
171
+ let headers = getState().responseHeaders;
172
+ if (headers.delete(name), Array.isArray(value)) {
173
+ value.forEach((entry) => headers.append(name, entry));
174
+ return;
175
+ }
176
+ headers.set(name, value);
177
+ }
178
+ ), removeResponseHeader = createNamedMock("removeResponseHeader", (name) => {
179
+ getState().responseHeaders.delete(name);
180
+ }), clearResponseHeaders = createNamedMock(
181
+ "clearResponseHeaders",
182
+ (headerNames) => {
183
+ if (!headerNames?.length) {
184
+ getState().responseHeaders = new Headers();
185
+ return;
186
+ }
187
+ headerNames.forEach((name) => getState().responseHeaders.delete(name));
188
+ }
189
+ ), getResponseStatus = createNamedMock("getResponseStatus", () => getState().responseStatus?.code ?? 200), setResponseStatus = createNamedMock(
190
+ "setResponseStatus",
191
+ (code, text) => {
192
+ getState().responseStatus = {
193
+ code,
194
+ text
195
+ };
196
+ }
197
+ ), getCookies = createNamedMock("getCookies", () => Object.fromEntries(getState().cookies)), getCookie = createNamedMock("getCookie", (name) => getState().cookies.get(name)), setCookie = createNamedMock(
198
+ "setCookie",
199
+ (name, value, options) => {
200
+ let state = getState();
201
+ state.cookies.set(name, value), state.responseHeaders.append("set-cookie", serializeCookie(name, value, options));
202
+ }
203
+ ), deleteCookie = createNamedMock(
204
+ "deleteCookie",
205
+ (name, options) => {
206
+ let state = getState();
207
+ state.cookies.delete(name), state.responseHeaders.append(
208
+ "set-cookie",
209
+ serializeCookie(name, "", {
210
+ ...options,
211
+ maxAge: 0
212
+ })
213
+ );
214
+ }
215
+ ), useSession = createNamedMock(
216
+ "useSession",
217
+ async (_config) => getSessionRecord()
218
+ ), getSession = createNamedMock(
219
+ "getSession",
220
+ async (_config) => getSessionRecord()
221
+ ), updateSession = createNamedMock(
222
+ "updateSession",
223
+ async (_config, update) => getSessionRecord().update(update)
224
+ ), sealSession = createNamedMock("sealSession", async (_config) => JSON.stringify(getState().sessionData)), unsealSession = createNamedMock(
225
+ "unsealSession",
226
+ async (_config, sealed) => {
227
+ try {
228
+ return JSON.parse(sealed);
229
+ } catch {
230
+ return {};
231
+ }
232
+ }
233
+ ), clearSession = createNamedMock(
234
+ "clearSession",
235
+ async (_config) => {
236
+ getState().sessionData = {};
237
+ }
238
+ ), getResponse = createNamedMock("getResponse", () => ({
239
+ status: getState().responseStatus?.code,
240
+ statusText: getState().responseStatus?.text,
241
+ get headers() {
242
+ return getState().responseHeaders;
243
+ }
244
+ })), getValidatedQuery = createNamedMock(
245
+ "getValidatedQuery",
246
+ async (schema) => {
247
+ let query = Object.fromEntries(getRequestUrl().searchParams.entries());
248
+ if (typeof schema?.parse == "function")
249
+ return schema.parse(query);
250
+ if (typeof schema?.safeParse == "function") {
251
+ let result = await schema.safeParse(query);
252
+ return result && typeof result == "object" && "data" in result ? result.data : result;
253
+ }
254
+ return typeof schema?.["~standard"]?.validate == "function" ? schema["~standard"].validate(query) : query;
255
+ }
256
+ );
11
257
  function useServerFn(serverFn) {
12
258
  return React.useCallback(
13
259
  (...args) => serverFn(...args),
@@ -32,25 +278,57 @@ var createServerFn = (options) => {
32
278
  onNavigate({ to });
33
279
  }, [to]), null), notFound = () => {
34
280
  throw new Error("Not found");
35
- }, createStart = () => ({}), cookieStore = /* @__PURE__ */ new Map(), setCookie = (name, value) => {
36
- cookieStore.set(name, value);
37
- }, getCookie = (name) => cookieStore.get(name), deleteCookie = (name) => {
38
- cookieStore.delete(name);
39
- }, clearCookieStore = () => {
40
- cookieStore.clear();
281
+ }, createStart = () => ({}), clientCookieStore = /* @__PURE__ */ new Map(), clearCookieStore = () => {
282
+ clientCookieStore.clear();
41
283
  }, fetchHandler = async () => new Response("Storybook Mock", { status: 200 });
42
284
  var start_default = { fetch: fetchHandler };
43
285
  export {
286
+ HEADERS,
44
287
  Link,
45
288
  Navigate,
289
+ StartServer,
290
+ VIRTUAL_MODULES,
291
+ attachRouterServerSsrUtils,
46
292
  clearCookieStore,
293
+ clearResponseHeaders,
294
+ clearSession,
295
+ createRequestHandler,
47
296
  createServerFn,
48
297
  createStart,
298
+ createStartHandler,
49
299
  start_default as default,
300
+ defaultRenderHandler,
301
+ defaultStreamHandler,
302
+ defineHandlerCallback,
50
303
  deleteCookie,
51
304
  fetchHandler as fetch,
52
305
  getCookie,
306
+ getCookies,
307
+ getRequest,
308
+ getRequestHeader,
309
+ getRequestHeaders,
310
+ getRequestHost,
311
+ getRequestIP,
312
+ getRequestProtocol,
313
+ getRequestUrl,
314
+ getResponse,
315
+ getResponseHeader,
316
+ getResponseHeaders,
317
+ getResponseStatus,
318
+ getSession,
319
+ getValidatedQuery,
53
320
  notFound,
321
+ removeResponseHeader,
322
+ requestHandler,
323
+ sealSession,
54
324
  setCookie,
55
- useServerFn
325
+ setResponseHeader,
326
+ setResponseHeaders,
327
+ setResponseStatus,
328
+ transformPipeableStreamWithRouter,
329
+ transformReadableStreamWithRouter,
330
+ unsealSession,
331
+ updateSession,
332
+ useServerFn,
333
+ useSession
56
334
  };
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  preview_exports
3
- } from "./_browser-chunks/chunk-SXO3DKIN.js";
3
+ } from "./_browser-chunks/chunk-73EPJ7AY.js";
4
4
  import "./_browser-chunks/chunk-4BE7D4DS.js";
5
5
 
6
6
  // src/index.ts
@@ -1,15 +1,14 @@
1
- import CJS_COMPAT_NODE_URL_a8cudokul7s from 'node:url';
2
- import CJS_COMPAT_NODE_PATH_a8cudokul7s from 'node:path';
3
- import CJS_COMPAT_NODE_MODULE_a8cudokul7s from "node:module";
1
+ import CJS_COMPAT_NODE_URL_fmhd7e5wemi from 'node:url';
2
+ import CJS_COMPAT_NODE_PATH_fmhd7e5wemi from 'node:path';
3
+ import CJS_COMPAT_NODE_MODULE_fmhd7e5wemi from "node:module";
4
4
 
5
- var __filename = CJS_COMPAT_NODE_URL_a8cudokul7s.fileURLToPath(import.meta.url);
6
- var __dirname = CJS_COMPAT_NODE_PATH_a8cudokul7s.dirname(__filename);
7
- var require = CJS_COMPAT_NODE_MODULE_a8cudokul7s.createRequire(import.meta.url);
5
+ var __filename = CJS_COMPAT_NODE_URL_fmhd7e5wemi.fileURLToPath(import.meta.url);
6
+ var __dirname = CJS_COMPAT_NODE_PATH_fmhd7e5wemi.dirname(__filename);
7
+ var require = CJS_COMPAT_NODE_MODULE_fmhd7e5wemi.createRequire(import.meta.url);
8
8
 
9
9
  // ------------------------------------------------------------
10
10
  // end of CJS compatibility banner, injected by Storybook's esbuild configuration
11
11
  // ------------------------------------------------------------
12
- import "../_node-chunks/chunk-CUC3UGKZ.js";
13
12
 
14
13
  // src/node/index.ts
15
14
  function defineMain(config) {