claude-session-dashboard 0.4.5 → 0.5.0
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/client/assets/{_dashboard-Job6DOd1.js → _dashboard-ChSI7O-o.js} +1 -1
- package/dist/client/assets/{_sessionId-CIFXqjVa.js → _sessionId-DxfkocLt.js} +2 -2
- package/dist/client/assets/app-BAZLXX_G.css +1 -0
- package/dist/client/assets/createServerFn-DJjqV8Yc.js +1 -0
- package/dist/client/assets/index-BHwOAB5a.js +1 -0
- package/dist/client/assets/main-DMwMzWYr.js +69 -0
- package/dist/client/assets/{sessions.queries-ClgzoOt4.js → sessions.queries-D7WObk5d.js} +1 -1
- package/dist/client/assets/settings-BM0TBEkW.js +1 -0
- package/dist/client/assets/settings.types-BNSfIfFX.js +1 -0
- package/dist/client/assets/stats-wLUGXFpZ.js +4 -0
- package/dist/client/assets/useSessionCost-BPqnyONZ.js +37 -0
- package/dist/server/assets/{_dashboard-61fpMMMe.js → _dashboard-DZJZ9oYy.js} +7 -6
- package/dist/server/assets/{_sessionId-B_O50OfN.js → _sessionId-znGcd1Dj.js} +40 -11
- package/dist/server/assets/_tanstack-start-manifest_v-BNorjuP4.js +4 -0
- package/dist/server/assets/{app-info.api-CdaWsxHl.js → app-info.api-CrHplh0q.js} +31 -16
- package/dist/server/assets/{createServerRpc-Bd3B-Ah9.js → createServerRpc-D_-6bKnO.js} +1 -1
- package/dist/server/assets/{createSsrRpc-CVg2UDl0.js → createSsrRpc-OFLSk08e.js} +2 -3
- package/dist/server/assets/{index-BYcFI9Ho.js → index-BnvjnlZM.js} +27 -10
- package/dist/server/assets/{project-analytics.api-QnhRRs7T.js → project-analytics.api-6b5TIBNn.js} +10 -8
- package/dist/server/assets/{router-BvYNknMb.js → router-DAepjaOj.js} +6 -6
- package/dist/server/assets/{session-detail.api-8plxSeB0.js → session-detail.api-BQts3iQn.js} +38 -33
- package/dist/server/assets/{session-parser-DxLcS8VW.js → session-parser-DKZZMuh6.js} +122 -30
- package/dist/server/assets/{session-scanner-DRGzVO2T.js → session-scanner-CECpfGFh.js} +4 -4
- package/dist/server/assets/{sessions.api-DRmOjipJ.js → sessions.api-CQ-Lrk5S.js} +10 -8
- package/dist/server/assets/{sessions.queries-CvAnVbE8.js → sessions.queries-MfPgj6cK.js} +1 -1
- package/dist/server/assets/{settings-Ct2BZGxb.js → settings-DsLaw8yg.js} +11 -10
- package/dist/server/assets/{settings.api-C9L2GoIE.js → settings.api-Cq5KPUxN.js} +8 -7
- package/dist/server/assets/{settings.queries-BVEZA-1G.js → settings.queries-CMWxUDF-.js} +2 -2
- package/dist/server/assets/{settings.types-DntadCHo.js → settings.types-CphWe-HW.js} +10 -1
- package/dist/server/assets/{stats-CZEpvzmd.js → stats-DKbhSePW.js} +9 -9
- package/dist/server/assets/{stats.api-CH-wTCGE.js → stats.api-tIZqhk4B.js} +10 -8
- package/dist/server/assets/{useSessionCost-CyWBuljV.js → useSessionCost-iQEg4FRM.js} +2 -2
- package/dist/server/server.js +456 -817
- package/package.json +3 -2
- package/LICENSE +0 -21
- package/README.md +0 -194
- package/dist/client/assets/app-CkRVT69z.css +0 -1
- package/dist/client/assets/createServerFn-6SJrpRCO.js +0 -1
- package/dist/client/assets/index-DDr2smLW.js +0 -1
- package/dist/client/assets/main-B6FohBFQ.js +0 -69
- package/dist/client/assets/settings-DQD2EaIq.js +0 -1
- package/dist/client/assets/settings.types-LYd9Z8Y1.js +0 -1
- package/dist/client/assets/stats-CrWQ_y2R.js +0 -4
- package/dist/client/assets/useSessionCost-Drt0v6oj.js +0 -37
- package/dist/server/assets/_tanstack-start-manifest_v-Dva5sIpS.js +0 -4
package/dist/server/server.js
CHANGED
|
@@ -1,234 +1,284 @@
|
|
|
1
|
-
import { createMemoryHistory } from "@tanstack/history";
|
|
2
|
-
import { mergeHeaders } from "@tanstack/router-core/ssr/client";
|
|
3
|
-
import { parseRedirect, isRedirect, defaultSerovalPlugins, makeSerovalPlugin, rootRouteId, createRawStreamRPCPlugin, isNotFound, createSerializationAdapter, isResolvedRedirect, executeRewriteInput } from "@tanstack/router-core";
|
|
4
1
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
5
|
-
import { getNormalizedURL, getOrigin, attachRouterServerSsrUtils } from "@tanstack/router-core/ssr/server";
|
|
6
2
|
import { H3Event, toResponse } from "h3-v2";
|
|
3
|
+
import { rootRouteId, parseRedirect, isRedirect, defaultSerovalPlugins, makeSerovalPlugin, createRawStreamRPCPlugin, isNotFound, createSerializationAdapter, isResolvedRedirect, executeRewriteInput } from "@tanstack/router-core";
|
|
7
4
|
import invariant from "tiny-invariant";
|
|
8
5
|
import { toCrossJSONStream, fromJSON, toCrossJSONAsync } from "seroval";
|
|
6
|
+
import { createMemoryHistory } from "@tanstack/history";
|
|
7
|
+
import { mergeHeaders } from "@tanstack/router-core/ssr/client";
|
|
8
|
+
import { getNormalizedURL, getOrigin, attachRouterServerSsrUtils } from "@tanstack/router-core/ssr/server";
|
|
9
|
+
import "react";
|
|
10
|
+
import { RouterProvider } from "@tanstack/react-router";
|
|
9
11
|
import { jsx } from "react/jsx-runtime";
|
|
10
12
|
import { defineHandlerCallback, renderRouterToStream } from "@tanstack/react-router/ssr/server";
|
|
11
|
-
import { RouterProvider } from "@tanstack/react-router";
|
|
12
13
|
function StartServer(props) {
|
|
13
14
|
return /* @__PURE__ */ jsx(RouterProvider, { router: props.router });
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
);
|
|
28
|
-
const X_TSS_SERIALIZED = "x-tss-serialized";
|
|
29
|
-
const X_TSS_RAW_RESPONSE = "x-tss-raw";
|
|
30
|
-
const TSS_CONTENT_TYPE_FRAMED = "application/x-tss-framed";
|
|
31
|
-
const FrameType = {
|
|
32
|
-
/** Seroval JSON chunk (NDJSON line) */
|
|
33
|
-
JSON: 0,
|
|
34
|
-
/** Raw stream data chunk */
|
|
35
|
-
CHUNK: 1,
|
|
36
|
-
/** Raw stream end (EOF) */
|
|
37
|
-
END: 2,
|
|
38
|
-
/** Raw stream error */
|
|
39
|
-
ERROR: 3
|
|
40
|
-
};
|
|
41
|
-
const FRAME_HEADER_SIZE = 9;
|
|
42
|
-
const TSS_FRAMED_PROTOCOL_VERSION = 1;
|
|
43
|
-
const TSS_CONTENT_TYPE_FRAMED_VERSIONED = `${TSS_CONTENT_TYPE_FRAMED}; v=${TSS_FRAMED_PROTOCOL_VERSION}`;
|
|
44
|
-
const GLOBAL_STORAGE_KEY = /* @__PURE__ */ Symbol.for("tanstack-start:start-storage-context");
|
|
45
|
-
const globalObj$1 = globalThis;
|
|
46
|
-
if (!globalObj$1[GLOBAL_STORAGE_KEY]) {
|
|
47
|
-
globalObj$1[GLOBAL_STORAGE_KEY] = new AsyncLocalStorage();
|
|
16
|
+
var defaultStreamHandler = defineHandlerCallback(({ request, router, responseHeaders }) => renderRouterToStream({
|
|
17
|
+
request,
|
|
18
|
+
router,
|
|
19
|
+
responseHeaders,
|
|
20
|
+
children: /* @__PURE__ */ jsx(StartServer, { router })
|
|
21
|
+
}));
|
|
22
|
+
var GLOBAL_EVENT_STORAGE_KEY = /* @__PURE__ */ Symbol.for("tanstack-start:event-storage");
|
|
23
|
+
var globalObj$1 = globalThis;
|
|
24
|
+
if (!globalObj$1[GLOBAL_EVENT_STORAGE_KEY]) globalObj$1[GLOBAL_EVENT_STORAGE_KEY] = new AsyncLocalStorage();
|
|
25
|
+
var eventStorage = globalObj$1[GLOBAL_EVENT_STORAGE_KEY];
|
|
26
|
+
function isPromiseLike(value) {
|
|
27
|
+
return typeof value.then === "function";
|
|
48
28
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
return
|
|
29
|
+
function getSetCookieValues(headers) {
|
|
30
|
+
const headersWithSetCookie = headers;
|
|
31
|
+
if (typeof headersWithSetCookie.getSetCookie === "function") return headersWithSetCookie.getSetCookie();
|
|
32
|
+
const value = headers.get("set-cookie");
|
|
33
|
+
return value ? [value] : [];
|
|
52
34
|
}
|
|
53
|
-
function
|
|
54
|
-
|
|
55
|
-
|
|
35
|
+
function mergeEventResponseHeaders(response, event) {
|
|
36
|
+
if (response.ok) return;
|
|
37
|
+
const eventSetCookies = getSetCookieValues(event.res.headers);
|
|
38
|
+
if (eventSetCookies.length === 0) return;
|
|
39
|
+
const responseSetCookies = getSetCookieValues(response.headers);
|
|
40
|
+
response.headers.delete("set-cookie");
|
|
41
|
+
for (const cookie of responseSetCookies) response.headers.append("set-cookie", cookie);
|
|
42
|
+
for (const cookie of eventSetCookies) response.headers.append("set-cookie", cookie);
|
|
43
|
+
}
|
|
44
|
+
function attachResponseHeaders(value, event) {
|
|
45
|
+
if (isPromiseLike(value)) return value.then((resolved) => {
|
|
46
|
+
if (resolved instanceof Response) mergeEventResponseHeaders(resolved, event);
|
|
47
|
+
return resolved;
|
|
48
|
+
});
|
|
49
|
+
if (value instanceof Response) mergeEventResponseHeaders(value, event);
|
|
50
|
+
return value;
|
|
51
|
+
}
|
|
52
|
+
function requestHandler(handler) {
|
|
53
|
+
return (request, requestOpts) => {
|
|
54
|
+
const h3Event = new H3Event(request);
|
|
55
|
+
return toResponse(attachResponseHeaders(eventStorage.run({ h3Event }, () => handler(request, requestOpts)), h3Event), h3Event);
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function getH3Event() {
|
|
59
|
+
const event = eventStorage.getStore();
|
|
60
|
+
if (!event) throw new Error(`No StartEvent found in AsyncLocalStorage. Make sure you are using the function within the server runtime.`);
|
|
61
|
+
return event.h3Event;
|
|
62
|
+
}
|
|
63
|
+
function getResponse() {
|
|
64
|
+
return getH3Event().res;
|
|
65
|
+
}
|
|
66
|
+
var HEADERS = { TSS_SHELL: "X-TSS_SHELL" };
|
|
67
|
+
async function getStartManifest(matchedRoutes) {
|
|
68
|
+
const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-BNorjuP4.js");
|
|
69
|
+
const startManifest = tsrStartManifest();
|
|
70
|
+
const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
|
|
71
|
+
rootRoute.assets = rootRoute.assets || [];
|
|
72
|
+
let injectedHeadScripts;
|
|
73
|
+
return {
|
|
74
|
+
manifest: { routes: Object.fromEntries(Object.entries(startManifest.routes).flatMap(([k, v]) => {
|
|
75
|
+
const result = {};
|
|
76
|
+
let hasData = false;
|
|
77
|
+
if (v.preloads && v.preloads.length > 0) {
|
|
78
|
+
result["preloads"] = v.preloads;
|
|
79
|
+
hasData = true;
|
|
80
|
+
}
|
|
81
|
+
if (v.assets && v.assets.length > 0) {
|
|
82
|
+
result["assets"] = v.assets;
|
|
83
|
+
hasData = true;
|
|
84
|
+
}
|
|
85
|
+
if (!hasData) return [];
|
|
86
|
+
return [[k, result]];
|
|
87
|
+
})) },
|
|
88
|
+
clientEntry: startManifest.clientEntry,
|
|
89
|
+
injectedHeadScripts
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const manifest = { "39e65590d2bc41f653f54a9b6a9e0a72f185da275304c0a4a595d811cf185572": {
|
|
93
|
+
functionName: "getProjectAnalytics_createServerFn_handler",
|
|
94
|
+
importer: () => import("./assets/project-analytics.api-6b5TIBNn.js")
|
|
95
|
+
}, "44af69d3bfcf3ec46fffb3f297d2b12cd7fe4db36c654b8a322df34d549c6493": {
|
|
96
|
+
functionName: "getStats_createServerFn_handler",
|
|
97
|
+
importer: () => import("./assets/stats.api-tIZqhk4B.js")
|
|
98
|
+
}, "71794080473579a94431392ab409ebd02772f6a9f6a08386cadbb8c0d3cf804a": {
|
|
99
|
+
functionName: "getSessionDetail_createServerFn_handler",
|
|
100
|
+
importer: () => import("./assets/session-detail.api-BQts3iQn.js")
|
|
101
|
+
}, "72f81ef9e8fa751bab60a8bdabd7e77816e2a6723a5e6e26e03712c01b3a249c": {
|
|
102
|
+
functionName: "getSettings_createServerFn_handler",
|
|
103
|
+
importer: () => import("./assets/settings.api-Cq5KPUxN.js")
|
|
104
|
+
}, "7fe8c2b131c4fc81aa9a2570aec79640ff84603fe0060d13c24928b7329cb236": {
|
|
105
|
+
functionName: "saveSettings_createServerFn_handler",
|
|
106
|
+
importer: () => import("./assets/settings.api-Cq5KPUxN.js")
|
|
107
|
+
}, "04ac41a7e3e644815167d098c2d6c3375d00a72a11e5af0d37033ba771081ba9": {
|
|
108
|
+
functionName: "getAppInfo_createServerFn_handler",
|
|
109
|
+
importer: () => import("./assets/app-info.api-CrHplh0q.js")
|
|
110
|
+
}, "8fd6c4e5b4d5590acf1ec73da75f249978e8aced6dd2be23de06ade8431033be": {
|
|
111
|
+
functionName: "getSessionList_createServerFn_handler",
|
|
112
|
+
importer: () => import("./assets/sessions.api-CQ-Lrk5S.js")
|
|
113
|
+
}, "946cc550946f64ee7985dc35913a690eb13183d7ba83cffe398e424e697b4265": {
|
|
114
|
+
functionName: "getActiveSessionList_createServerFn_handler",
|
|
115
|
+
importer: () => import("./assets/sessions.api-CQ-Lrk5S.js")
|
|
116
|
+
}, "e574977967ea9b3387e72d70704b6ca87230e72becaf69f0b98cbc91c9cd1339": {
|
|
117
|
+
functionName: "getPaginatedSessions_createServerFn_handler",
|
|
118
|
+
importer: () => import("./assets/sessions.api-CQ-Lrk5S.js")
|
|
119
|
+
} };
|
|
120
|
+
async function getServerFnById(id) {
|
|
121
|
+
const serverFnInfo = manifest[id];
|
|
122
|
+
if (!serverFnInfo) {
|
|
123
|
+
throw new Error("Server function info not found for " + id);
|
|
124
|
+
}
|
|
125
|
+
const fnModule = await serverFnInfo.importer();
|
|
126
|
+
if (!fnModule) {
|
|
127
|
+
console.info("serverFnInfo", serverFnInfo);
|
|
128
|
+
throw new Error("Server function module not resolved for " + id);
|
|
129
|
+
}
|
|
130
|
+
const action = fnModule[serverFnInfo.functionName];
|
|
131
|
+
if (!action) {
|
|
132
|
+
console.info("serverFnInfo", serverFnInfo);
|
|
133
|
+
console.info("fnModule", fnModule);
|
|
56
134
|
throw new Error(
|
|
57
|
-
`
|
|
135
|
+
`Server function module export not resolved for serverFn ID: ${id}`
|
|
58
136
|
);
|
|
59
137
|
}
|
|
60
|
-
return
|
|
138
|
+
return action;
|
|
61
139
|
}
|
|
62
|
-
|
|
63
|
-
|
|
140
|
+
var TSS_FORMDATA_CONTEXT = "__TSS_CONTEXT";
|
|
141
|
+
var TSS_SERVER_FUNCTION = /* @__PURE__ */ Symbol.for("TSS_SERVER_FUNCTION");
|
|
142
|
+
var TSS_SERVER_FUNCTION_FACTORY = /* @__PURE__ */ Symbol.for("TSS_SERVER_FUNCTION_FACTORY");
|
|
143
|
+
var X_TSS_SERIALIZED = "x-tss-serialized";
|
|
144
|
+
var X_TSS_RAW_RESPONSE = "x-tss-raw";
|
|
145
|
+
var TSS_CONTENT_TYPE_FRAMED = "application/x-tss-framed";
|
|
146
|
+
var FrameType = {
|
|
147
|
+
JSON: 0,
|
|
148
|
+
CHUNK: 1,
|
|
149
|
+
END: 2,
|
|
150
|
+
ERROR: 3
|
|
151
|
+
};
|
|
152
|
+
var FRAME_HEADER_SIZE = 9;
|
|
153
|
+
var TSS_CONTENT_TYPE_FRAMED_VERSIONED = `${TSS_CONTENT_TYPE_FRAMED}; v=1`;
|
|
64
154
|
function isSafeKey(key) {
|
|
65
155
|
return key !== "__proto__" && key !== "constructor" && key !== "prototype";
|
|
66
156
|
}
|
|
67
157
|
function safeObjectMerge(target, source) {
|
|
68
158
|
const result = /* @__PURE__ */ Object.create(null);
|
|
69
159
|
if (target) {
|
|
70
|
-
for (const key of Object.keys(target))
|
|
71
|
-
if (isSafeKey(key)) result[key] = target[key];
|
|
72
|
-
}
|
|
160
|
+
for (const key of Object.keys(target)) if (isSafeKey(key)) result[key] = target[key];
|
|
73
161
|
}
|
|
74
162
|
if (source && typeof source === "object") {
|
|
75
|
-
for (const key of Object.keys(source))
|
|
76
|
-
if (isSafeKey(key)) result[key] = source[key];
|
|
77
|
-
}
|
|
163
|
+
for (const key of Object.keys(source)) if (isSafeKey(key)) result[key] = source[key];
|
|
78
164
|
}
|
|
79
165
|
return result;
|
|
80
166
|
}
|
|
81
167
|
function createNullProtoObject(source) {
|
|
82
168
|
if (!source) return /* @__PURE__ */ Object.create(null);
|
|
83
169
|
const obj = /* @__PURE__ */ Object.create(null);
|
|
84
|
-
for (const key of Object.keys(source))
|
|
85
|
-
if (isSafeKey(key)) obj[key] = source[key];
|
|
86
|
-
}
|
|
170
|
+
for (const key of Object.keys(source)) if (isSafeKey(key)) obj[key] = source[key];
|
|
87
171
|
return obj;
|
|
88
172
|
}
|
|
89
|
-
|
|
173
|
+
var GLOBAL_STORAGE_KEY = /* @__PURE__ */ Symbol.for("tanstack-start:start-storage-context");
|
|
174
|
+
var globalObj = globalThis;
|
|
175
|
+
if (!globalObj[GLOBAL_STORAGE_KEY]) globalObj[GLOBAL_STORAGE_KEY] = new AsyncLocalStorage();
|
|
176
|
+
var startStorage = globalObj[GLOBAL_STORAGE_KEY];
|
|
177
|
+
async function runWithStartContext(context, fn) {
|
|
178
|
+
return startStorage.run(context, fn);
|
|
179
|
+
}
|
|
180
|
+
function getStartContext(opts) {
|
|
181
|
+
const context = startStorage.getStore();
|
|
182
|
+
if (!context && opts?.throwIfNotFound !== false) throw new Error(`No Start context found in AsyncLocalStorage. Make sure you are using the function within the server runtime.`);
|
|
183
|
+
return context;
|
|
184
|
+
}
|
|
185
|
+
var getStartOptions = () => getStartContext().startOptions;
|
|
186
|
+
var getStartContextServerOnly = getStartContext;
|
|
187
|
+
var createServerFn = (options, __opts) => {
|
|
90
188
|
const resolvedOptions = __opts || options || {};
|
|
91
|
-
if (typeof resolvedOptions.method === "undefined")
|
|
92
|
-
resolvedOptions.method = "GET";
|
|
93
|
-
}
|
|
189
|
+
if (typeof resolvedOptions.method === "undefined") resolvedOptions.method = "GET";
|
|
94
190
|
const res = {
|
|
95
191
|
options: resolvedOptions,
|
|
96
192
|
middleware: (middleware) => {
|
|
97
193
|
const newMiddleware = [...resolvedOptions.middleware || []];
|
|
98
194
|
middleware.map((m) => {
|
|
99
195
|
if (TSS_SERVER_FUNCTION_FACTORY in m) {
|
|
100
|
-
if (m.options.middleware)
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
} else {
|
|
104
|
-
newMiddleware.push(m);
|
|
105
|
-
}
|
|
196
|
+
if (m.options.middleware) newMiddleware.push(...m.options.middleware);
|
|
197
|
+
} else newMiddleware.push(m);
|
|
106
198
|
});
|
|
107
|
-
const
|
|
199
|
+
const res2 = createServerFn(void 0, {
|
|
108
200
|
...resolvedOptions,
|
|
109
201
|
middleware: newMiddleware
|
|
110
|
-
};
|
|
111
|
-
const res2 = createServerFn(void 0, newOptions);
|
|
202
|
+
});
|
|
112
203
|
res2[TSS_SERVER_FUNCTION_FACTORY] = true;
|
|
113
204
|
return res2;
|
|
114
205
|
},
|
|
115
206
|
inputValidator: (inputValidator) => {
|
|
116
|
-
|
|
117
|
-
|
|
207
|
+
return createServerFn(void 0, {
|
|
208
|
+
...resolvedOptions,
|
|
209
|
+
inputValidator
|
|
210
|
+
});
|
|
118
211
|
},
|
|
119
212
|
handler: (...args) => {
|
|
120
213
|
const [extractedFn, serverFn] = args;
|
|
121
|
-
const newOptions = {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
214
|
+
const newOptions = {
|
|
215
|
+
...resolvedOptions,
|
|
216
|
+
extractedFn,
|
|
217
|
+
serverFn
|
|
218
|
+
};
|
|
219
|
+
const resolvedMiddleware = [...newOptions.middleware || [], serverFnBaseToMiddleware(newOptions)];
|
|
126
220
|
extractedFn.method = resolvedOptions.method;
|
|
127
|
-
return Object.assign(
|
|
128
|
-
|
|
129
|
-
const result = await executeMiddleware$1(resolvedMiddleware, "client", {
|
|
130
|
-
...extractedFn,
|
|
131
|
-
...newOptions,
|
|
132
|
-
data: opts?.data,
|
|
133
|
-
headers: opts?.headers,
|
|
134
|
-
signal: opts?.signal,
|
|
135
|
-
fetch: opts?.fetch,
|
|
136
|
-
context: createNullProtoObject()
|
|
137
|
-
});
|
|
138
|
-
const redirect = parseRedirect(result.error);
|
|
139
|
-
if (redirect) {
|
|
140
|
-
throw redirect;
|
|
141
|
-
}
|
|
142
|
-
if (result.error) throw result.error;
|
|
143
|
-
return result.result;
|
|
144
|
-
},
|
|
145
|
-
{
|
|
146
|
-
// This copies over the URL, function ID
|
|
221
|
+
return Object.assign(async (opts) => {
|
|
222
|
+
const result = await executeMiddleware$1(resolvedMiddleware, "client", {
|
|
147
223
|
...extractedFn,
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
result: d.result,
|
|
177
|
-
error: d.error,
|
|
178
|
-
context: d.sendContext
|
|
179
|
-
}));
|
|
180
|
-
return result;
|
|
181
|
-
}
|
|
224
|
+
...newOptions,
|
|
225
|
+
data: opts?.data,
|
|
226
|
+
headers: opts?.headers,
|
|
227
|
+
signal: opts?.signal,
|
|
228
|
+
fetch: opts?.fetch,
|
|
229
|
+
context: createNullProtoObject()
|
|
230
|
+
});
|
|
231
|
+
const redirect = parseRedirect(result.error);
|
|
232
|
+
if (redirect) throw redirect;
|
|
233
|
+
if (result.error) throw result.error;
|
|
234
|
+
return result.result;
|
|
235
|
+
}, {
|
|
236
|
+
...extractedFn,
|
|
237
|
+
method: resolvedOptions.method,
|
|
238
|
+
__executeServer: async (opts) => {
|
|
239
|
+
const startContext = getStartContextServerOnly();
|
|
240
|
+
const serverContextAfterGlobalMiddlewares = startContext.contextAfterGlobalMiddlewares;
|
|
241
|
+
return await executeMiddleware$1(resolvedMiddleware, "server", {
|
|
242
|
+
...extractedFn,
|
|
243
|
+
...opts,
|
|
244
|
+
serverFnMeta: extractedFn.serverFnMeta,
|
|
245
|
+
context: safeObjectMerge(serverContextAfterGlobalMiddlewares, opts.context),
|
|
246
|
+
request: startContext.request
|
|
247
|
+
}).then((d) => ({
|
|
248
|
+
result: d.result,
|
|
249
|
+
error: d.error,
|
|
250
|
+
context: d.sendContext
|
|
251
|
+
}));
|
|
182
252
|
}
|
|
183
|
-
);
|
|
253
|
+
});
|
|
184
254
|
}
|
|
185
255
|
};
|
|
186
256
|
const fun = (options2) => {
|
|
187
|
-
|
|
257
|
+
return createServerFn(void 0, {
|
|
188
258
|
...resolvedOptions,
|
|
189
259
|
...options2
|
|
190
|
-
};
|
|
191
|
-
return createServerFn(void 0, newOptions);
|
|
260
|
+
});
|
|
192
261
|
};
|
|
193
262
|
return Object.assign(fun, res);
|
|
194
263
|
};
|
|
195
264
|
async function executeMiddleware$1(middlewares, env, opts) {
|
|
196
|
-
|
|
197
|
-
let flattenedMiddlewares = flattenMiddlewares([
|
|
198
|
-
...globalMiddlewares,
|
|
199
|
-
...middlewares
|
|
200
|
-
]);
|
|
265
|
+
let flattenedMiddlewares = flattenMiddlewares([...getStartOptions()?.functionMiddleware || [], ...middlewares]);
|
|
201
266
|
if (env === "server") {
|
|
202
267
|
const startContext = getStartContextServerOnly({ throwIfNotFound: false });
|
|
203
|
-
if (startContext?.executedRequestMiddlewares)
|
|
204
|
-
flattenedMiddlewares = flattenedMiddlewares.filter(
|
|
205
|
-
(m) => !startContext.executedRequestMiddlewares.has(m)
|
|
206
|
-
);
|
|
207
|
-
}
|
|
268
|
+
if (startContext?.executedRequestMiddlewares) flattenedMiddlewares = flattenedMiddlewares.filter((m) => !startContext.executedRequestMiddlewares.has(m));
|
|
208
269
|
}
|
|
209
270
|
const callNextMiddleware = async (ctx) => {
|
|
210
271
|
const nextMiddleware = flattenedMiddlewares.shift();
|
|
211
|
-
if (!nextMiddleware)
|
|
212
|
-
return ctx;
|
|
213
|
-
}
|
|
272
|
+
if (!nextMiddleware) return ctx;
|
|
214
273
|
try {
|
|
215
|
-
if ("inputValidator" in nextMiddleware.options && nextMiddleware.options.inputValidator && env === "server")
|
|
216
|
-
ctx.data = await execValidator(
|
|
217
|
-
nextMiddleware.options.inputValidator,
|
|
218
|
-
ctx.data
|
|
219
|
-
);
|
|
220
|
-
}
|
|
274
|
+
if ("inputValidator" in nextMiddleware.options && nextMiddleware.options.inputValidator && env === "server") ctx.data = await execValidator(nextMiddleware.options.inputValidator, ctx.data);
|
|
221
275
|
let middlewareFn = void 0;
|
|
222
276
|
if (env === "client") {
|
|
223
|
-
if ("client" in nextMiddleware.options)
|
|
224
|
-
|
|
225
|
-
}
|
|
226
|
-
} else if ("server" in nextMiddleware.options) {
|
|
227
|
-
middlewareFn = nextMiddleware.options.server;
|
|
228
|
-
}
|
|
277
|
+
if ("client" in nextMiddleware.options) middlewareFn = nextMiddleware.options.client;
|
|
278
|
+
} else if ("server" in nextMiddleware.options) middlewareFn = nextMiddleware.options.server;
|
|
229
279
|
if (middlewareFn) {
|
|
230
280
|
const userNext = async (userCtx = {}) => {
|
|
231
|
-
const
|
|
281
|
+
const result2 = await callNextMiddleware({
|
|
232
282
|
...ctx,
|
|
233
283
|
...userCtx,
|
|
234
284
|
context: safeObjectMerge(ctx.context, userCtx.context),
|
|
@@ -238,34 +288,23 @@ async function executeMiddleware$1(middlewares, env, opts) {
|
|
|
238
288
|
fetch: ctx._callSiteFetch ?? userCtx.fetch ?? ctx.fetch,
|
|
239
289
|
result: userCtx.result !== void 0 ? userCtx.result : userCtx instanceof Response ? userCtx : ctx.result,
|
|
240
290
|
error: userCtx.error ?? ctx.error
|
|
241
|
-
};
|
|
242
|
-
|
|
243
|
-
if (result2.error) {
|
|
244
|
-
throw result2.error;
|
|
245
|
-
}
|
|
291
|
+
});
|
|
292
|
+
if (result2.error) throw result2.error;
|
|
246
293
|
return result2;
|
|
247
294
|
};
|
|
248
295
|
const result = await middlewareFn({
|
|
249
296
|
...ctx,
|
|
250
297
|
next: userNext
|
|
251
298
|
});
|
|
252
|
-
if (isRedirect(result)) {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
result
|
|
262
|
-
};
|
|
263
|
-
}
|
|
264
|
-
if (!result) {
|
|
265
|
-
throw new Error(
|
|
266
|
-
"User middleware returned undefined. You must call next() or return a result in your middlewares."
|
|
267
|
-
);
|
|
268
|
-
}
|
|
299
|
+
if (isRedirect(result)) return {
|
|
300
|
+
...ctx,
|
|
301
|
+
error: result
|
|
302
|
+
};
|
|
303
|
+
if (result instanceof Response) return {
|
|
304
|
+
...ctx,
|
|
305
|
+
result
|
|
306
|
+
};
|
|
307
|
+
if (!result) throw new Error("User middleware returned undefined. You must call next() or return a result in your middlewares.");
|
|
269
308
|
return result;
|
|
270
309
|
}
|
|
271
310
|
return callNextMiddleware(ctx);
|
|
@@ -288,15 +327,9 @@ function flattenMiddlewares(middlewares, maxDepth = 100) {
|
|
|
288
327
|
const seen = /* @__PURE__ */ new Set();
|
|
289
328
|
const flattened = [];
|
|
290
329
|
const recurse = (middleware, depth) => {
|
|
291
|
-
if (depth > maxDepth) {
|
|
292
|
-
throw new Error(
|
|
293
|
-
`Middleware nesting depth exceeded maximum of ${maxDepth}. Check for circular references.`
|
|
294
|
-
);
|
|
295
|
-
}
|
|
330
|
+
if (depth > maxDepth) throw new Error(`Middleware nesting depth exceeded maximum of ${maxDepth}. Check for circular references.`);
|
|
296
331
|
middleware.forEach((m) => {
|
|
297
|
-
if (m.options.middleware)
|
|
298
|
-
recurse(m.options.middleware, depth + 1);
|
|
299
|
-
}
|
|
332
|
+
if (m.options.middleware) recurse(m.options.middleware, depth + 1);
|
|
300
333
|
if (!seen.has(m)) {
|
|
301
334
|
seen.add(m);
|
|
302
335
|
flattened.push(m);
|
|
@@ -310,16 +343,11 @@ async function execValidator(validator, input) {
|
|
|
310
343
|
if (validator == null) return {};
|
|
311
344
|
if ("~standard" in validator) {
|
|
312
345
|
const result = await validator["~standard"].validate(input);
|
|
313
|
-
if (result.issues)
|
|
314
|
-
throw new Error(JSON.stringify(result.issues, void 0, 2));
|
|
346
|
+
if (result.issues) throw new Error(JSON.stringify(result.issues, void 0, 2));
|
|
315
347
|
return result.value;
|
|
316
348
|
}
|
|
317
|
-
if ("parse" in validator)
|
|
318
|
-
|
|
319
|
-
}
|
|
320
|
-
if (typeof validator === "function") {
|
|
321
|
-
return validator(input);
|
|
322
|
-
}
|
|
349
|
+
if ("parse" in validator) return validator.parse(input);
|
|
350
|
+
if (typeof validator === "function") return validator(input);
|
|
323
351
|
throw new Error("Invalid validator type!");
|
|
324
352
|
}
|
|
325
353
|
function serverFnBaseToMiddleware(options) {
|
|
@@ -330,12 +358,10 @@ function serverFnBaseToMiddleware(options) {
|
|
|
330
358
|
client: async ({ next, sendContext, fetch: fetch2, ...ctx }) => {
|
|
331
359
|
const payload = {
|
|
332
360
|
...ctx,
|
|
333
|
-
// switch the sendContext over to context
|
|
334
361
|
context: sendContext,
|
|
335
362
|
fetch: fetch2
|
|
336
363
|
};
|
|
337
|
-
|
|
338
|
-
return next(res);
|
|
364
|
+
return next(await options.extractedFn?.(payload));
|
|
339
365
|
},
|
|
340
366
|
server: async ({ next, ...ctx }) => {
|
|
341
367
|
const result = await options.serverFn?.(ctx);
|
|
@@ -348,118 +374,10 @@ function serverFnBaseToMiddleware(options) {
|
|
|
348
374
|
};
|
|
349
375
|
}
|
|
350
376
|
function getDefaultSerovalPlugins() {
|
|
351
|
-
|
|
352
|
-
const adapters = start?.serializationAdapters;
|
|
353
|
-
return [
|
|
354
|
-
...adapters?.map(makeSerovalPlugin) ?? [],
|
|
355
|
-
...defaultSerovalPlugins
|
|
356
|
-
];
|
|
357
|
-
}
|
|
358
|
-
const GLOBAL_EVENT_STORAGE_KEY = /* @__PURE__ */ Symbol.for("tanstack-start:event-storage");
|
|
359
|
-
const globalObj = globalThis;
|
|
360
|
-
if (!globalObj[GLOBAL_EVENT_STORAGE_KEY]) {
|
|
361
|
-
globalObj[GLOBAL_EVENT_STORAGE_KEY] = new AsyncLocalStorage();
|
|
362
|
-
}
|
|
363
|
-
const eventStorage = globalObj[GLOBAL_EVENT_STORAGE_KEY];
|
|
364
|
-
function isPromiseLike(value) {
|
|
365
|
-
return typeof value.then === "function";
|
|
366
|
-
}
|
|
367
|
-
function getSetCookieValues(headers) {
|
|
368
|
-
const headersWithSetCookie = headers;
|
|
369
|
-
if (typeof headersWithSetCookie.getSetCookie === "function") {
|
|
370
|
-
return headersWithSetCookie.getSetCookie();
|
|
371
|
-
}
|
|
372
|
-
const value = headers.get("set-cookie");
|
|
373
|
-
return value ? [value] : [];
|
|
374
|
-
}
|
|
375
|
-
function mergeEventResponseHeaders(response, event) {
|
|
376
|
-
if (response.ok) {
|
|
377
|
-
return;
|
|
378
|
-
}
|
|
379
|
-
const eventSetCookies = getSetCookieValues(event.res.headers);
|
|
380
|
-
if (eventSetCookies.length === 0) {
|
|
381
|
-
return;
|
|
382
|
-
}
|
|
383
|
-
const responseSetCookies = getSetCookieValues(response.headers);
|
|
384
|
-
response.headers.delete("set-cookie");
|
|
385
|
-
for (const cookie of responseSetCookies) {
|
|
386
|
-
response.headers.append("set-cookie", cookie);
|
|
387
|
-
}
|
|
388
|
-
for (const cookie of eventSetCookies) {
|
|
389
|
-
response.headers.append("set-cookie", cookie);
|
|
390
|
-
}
|
|
391
|
-
}
|
|
392
|
-
function attachResponseHeaders(value, event) {
|
|
393
|
-
if (isPromiseLike(value)) {
|
|
394
|
-
return value.then((resolved) => {
|
|
395
|
-
if (resolved instanceof Response) {
|
|
396
|
-
mergeEventResponseHeaders(resolved, event);
|
|
397
|
-
}
|
|
398
|
-
return resolved;
|
|
399
|
-
});
|
|
400
|
-
}
|
|
401
|
-
if (value instanceof Response) {
|
|
402
|
-
mergeEventResponseHeaders(value, event);
|
|
403
|
-
}
|
|
404
|
-
return value;
|
|
405
|
-
}
|
|
406
|
-
function requestHandler(handler) {
|
|
407
|
-
return (request, requestOpts) => {
|
|
408
|
-
const h3Event = new H3Event(request);
|
|
409
|
-
const response = eventStorage.run(
|
|
410
|
-
{ h3Event },
|
|
411
|
-
() => handler(request, requestOpts)
|
|
412
|
-
);
|
|
413
|
-
return toResponse(attachResponseHeaders(response, h3Event), h3Event);
|
|
414
|
-
};
|
|
415
|
-
}
|
|
416
|
-
function getH3Event() {
|
|
417
|
-
const event = eventStorage.getStore();
|
|
418
|
-
if (!event) {
|
|
419
|
-
throw new Error(
|
|
420
|
-
`No StartEvent found in AsyncLocalStorage. Make sure you are using the function within the server runtime.`
|
|
421
|
-
);
|
|
422
|
-
}
|
|
423
|
-
return event.h3Event;
|
|
424
|
-
}
|
|
425
|
-
function getResponse() {
|
|
426
|
-
const event = getH3Event();
|
|
427
|
-
return event.res;
|
|
428
|
-
}
|
|
429
|
-
async function getStartManifest(matchedRoutes) {
|
|
430
|
-
const { tsrStartManifest } = await import("./assets/_tanstack-start-manifest_v-Dva5sIpS.js");
|
|
431
|
-
const startManifest = tsrStartManifest();
|
|
432
|
-
const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
|
|
433
|
-
rootRoute.assets = rootRoute.assets || [];
|
|
434
|
-
let injectedHeadScripts;
|
|
435
|
-
const manifest2 = {
|
|
436
|
-
routes: Object.fromEntries(
|
|
437
|
-
Object.entries(startManifest.routes).flatMap(([k, v]) => {
|
|
438
|
-
const result = {};
|
|
439
|
-
let hasData = false;
|
|
440
|
-
if (v.preloads && v.preloads.length > 0) {
|
|
441
|
-
result["preloads"] = v.preloads;
|
|
442
|
-
hasData = true;
|
|
443
|
-
}
|
|
444
|
-
if (v.assets && v.assets.length > 0) {
|
|
445
|
-
result["assets"] = v.assets;
|
|
446
|
-
hasData = true;
|
|
447
|
-
}
|
|
448
|
-
if (!hasData) {
|
|
449
|
-
return [];
|
|
450
|
-
}
|
|
451
|
-
return [[k, result]];
|
|
452
|
-
})
|
|
453
|
-
)
|
|
454
|
-
};
|
|
455
|
-
return {
|
|
456
|
-
manifest: manifest2,
|
|
457
|
-
clientEntry: startManifest.clientEntry,
|
|
458
|
-
injectedHeadScripts
|
|
459
|
-
};
|
|
377
|
+
return [...getStartOptions()?.serializationAdapters?.map(makeSerovalPlugin) ?? [], ...defaultSerovalPlugins];
|
|
460
378
|
}
|
|
461
|
-
|
|
462
|
-
|
|
379
|
+
var textEncoder$1 = new TextEncoder();
|
|
380
|
+
var EMPTY_PAYLOAD = new Uint8Array(0);
|
|
463
381
|
function encodeFrame(type, streamId, payload) {
|
|
464
382
|
const frame = new Uint8Array(FRAME_HEADER_SIZE + payload.length);
|
|
465
383
|
frame[0] = type;
|
|
@@ -515,9 +433,7 @@ function createMultiplexedStream(jsonStream, rawStreams) {
|
|
|
515
433
|
};
|
|
516
434
|
const checkComplete = () => {
|
|
517
435
|
activePumps--;
|
|
518
|
-
if (activePumps === 0)
|
|
519
|
-
safeClose();
|
|
520
|
-
}
|
|
436
|
+
if (activePumps === 0) safeClose();
|
|
521
437
|
};
|
|
522
438
|
return new ReadableStream({
|
|
523
439
|
start(controller) {
|
|
@@ -567,117 +483,44 @@ function createMultiplexedStream(jsonStream, rawStreams) {
|
|
|
567
483
|
}
|
|
568
484
|
};
|
|
569
485
|
pumpJSON();
|
|
570
|
-
for (const [streamId, stream] of rawStreams)
|
|
571
|
-
pumpRawStream(streamId, stream);
|
|
572
|
-
}
|
|
486
|
+
for (const [streamId, stream] of rawStreams) pumpRawStream(streamId, stream);
|
|
573
487
|
},
|
|
574
488
|
cancel() {
|
|
575
489
|
cancelled = true;
|
|
576
490
|
controllerRef = null;
|
|
577
|
-
for (const cancelReader of cancelReaders)
|
|
578
|
-
cancelReader();
|
|
579
|
-
}
|
|
491
|
+
for (const cancelReader of cancelReaders) cancelReader();
|
|
580
492
|
cancelReaders.length = 0;
|
|
581
493
|
}
|
|
582
494
|
});
|
|
583
495
|
}
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
}, "39e65590d2bc41f653f54a9b6a9e0a72f185da275304c0a4a595d811cf185572": {
|
|
591
|
-
functionName: "getProjectAnalytics_createServerFn_handler",
|
|
592
|
-
importer: () => import("./assets/project-analytics.api-QnhRRs7T.js")
|
|
593
|
-
}, "04ac41a7e3e644815167d098c2d6c3375d00a72a11e5af0d37033ba771081ba9": {
|
|
594
|
-
functionName: "getAppInfo_createServerFn_handler",
|
|
595
|
-
importer: () => import("./assets/app-info.api-CdaWsxHl.js")
|
|
596
|
-
}, "72f81ef9e8fa751bab60a8bdabd7e77816e2a6723a5e6e26e03712c01b3a249c": {
|
|
597
|
-
functionName: "getSettings_createServerFn_handler",
|
|
598
|
-
importer: () => import("./assets/settings.api-C9L2GoIE.js")
|
|
599
|
-
}, "7fe8c2b131c4fc81aa9a2570aec79640ff84603fe0060d13c24928b7329cb236": {
|
|
600
|
-
functionName: "saveSettings_createServerFn_handler",
|
|
601
|
-
importer: () => import("./assets/settings.api-C9L2GoIE.js")
|
|
602
|
-
}, "8fd6c4e5b4d5590acf1ec73da75f249978e8aced6dd2be23de06ade8431033be": {
|
|
603
|
-
functionName: "getSessionList_createServerFn_handler",
|
|
604
|
-
importer: () => import("./assets/sessions.api-DRmOjipJ.js")
|
|
605
|
-
}, "946cc550946f64ee7985dc35913a690eb13183d7ba83cffe398e424e697b4265": {
|
|
606
|
-
functionName: "getActiveSessionList_createServerFn_handler",
|
|
607
|
-
importer: () => import("./assets/sessions.api-DRmOjipJ.js")
|
|
608
|
-
}, "e574977967ea9b3387e72d70704b6ca87230e72becaf69f0b98cbc91c9cd1339": {
|
|
609
|
-
functionName: "getPaginatedSessions_createServerFn_handler",
|
|
610
|
-
importer: () => import("./assets/sessions.api-DRmOjipJ.js")
|
|
611
|
-
} };
|
|
612
|
-
async function getServerFnById(id) {
|
|
613
|
-
const serverFnInfo = manifest[id];
|
|
614
|
-
if (!serverFnInfo) {
|
|
615
|
-
throw new Error("Server function info not found for " + id);
|
|
616
|
-
}
|
|
617
|
-
const fnModule = await serverFnInfo.importer();
|
|
618
|
-
if (!fnModule) {
|
|
619
|
-
console.info("serverFnInfo", serverFnInfo);
|
|
620
|
-
throw new Error("Server function module not resolved for " + id);
|
|
621
|
-
}
|
|
622
|
-
const action = fnModule[serverFnInfo.functionName];
|
|
623
|
-
if (!action) {
|
|
624
|
-
console.info("serverFnInfo", serverFnInfo);
|
|
625
|
-
console.info("fnModule", fnModule);
|
|
626
|
-
throw new Error(
|
|
627
|
-
`Server function module export not resolved for serverFn ID: ${id}`
|
|
628
|
-
);
|
|
629
|
-
}
|
|
630
|
-
return action;
|
|
631
|
-
}
|
|
632
|
-
let serovalPlugins = void 0;
|
|
633
|
-
const textEncoder = new TextEncoder();
|
|
634
|
-
const FORM_DATA_CONTENT_TYPES = [
|
|
635
|
-
"multipart/form-data",
|
|
636
|
-
"application/x-www-form-urlencoded"
|
|
637
|
-
];
|
|
638
|
-
const MAX_PAYLOAD_SIZE = 1e6;
|
|
639
|
-
const handleServerAction = async ({
|
|
640
|
-
request,
|
|
641
|
-
context,
|
|
642
|
-
serverFnId
|
|
643
|
-
}) => {
|
|
644
|
-
const method = request.method;
|
|
645
|
-
const methodUpper = method.toUpperCase();
|
|
496
|
+
var serovalPlugins = void 0;
|
|
497
|
+
var textEncoder = new TextEncoder();
|
|
498
|
+
var FORM_DATA_CONTENT_TYPES = ["multipart/form-data", "application/x-www-form-urlencoded"];
|
|
499
|
+
var MAX_PAYLOAD_SIZE = 1e6;
|
|
500
|
+
var handleServerAction = async ({ request, context, serverFnId }) => {
|
|
501
|
+
const methodUpper = request.method.toUpperCase();
|
|
646
502
|
const url = new URL(request.url);
|
|
647
503
|
const action = await getServerFnById(serverFnId);
|
|
648
|
-
if (action.method && methodUpper !== action.method) {
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
status: 405,
|
|
653
|
-
headers: {
|
|
654
|
-
Allow: action.method
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
);
|
|
658
|
-
}
|
|
504
|
+
if (action.method && methodUpper !== action.method) return new Response(`expected ${action.method} method. Got ${methodUpper}`, {
|
|
505
|
+
status: 405,
|
|
506
|
+
headers: { Allow: action.method }
|
|
507
|
+
});
|
|
659
508
|
const isServerFn = request.headers.get("x-tsr-serverFn") === "true";
|
|
660
|
-
if (!serovalPlugins)
|
|
661
|
-
serovalPlugins = getDefaultSerovalPlugins();
|
|
662
|
-
}
|
|
509
|
+
if (!serovalPlugins) serovalPlugins = getDefaultSerovalPlugins();
|
|
663
510
|
const contentType = request.headers.get("Content-Type");
|
|
664
511
|
function parsePayload(payload) {
|
|
665
|
-
|
|
666
|
-
return parsedPayload;
|
|
512
|
+
return fromJSON(payload, { plugins: serovalPlugins });
|
|
667
513
|
}
|
|
668
|
-
|
|
514
|
+
return await (async () => {
|
|
669
515
|
try {
|
|
670
516
|
let serializeResult = function(res2) {
|
|
671
517
|
let nonStreamingBody = void 0;
|
|
672
518
|
const alsResponse = getResponse();
|
|
673
519
|
if (res2 !== void 0) {
|
|
674
520
|
const rawStreams = /* @__PURE__ */ new Map();
|
|
675
|
-
const
|
|
676
|
-
(id, stream2)
|
|
677
|
-
|
|
678
|
-
}
|
|
679
|
-
);
|
|
680
|
-
const plugins = [rawStreamPlugin, ...serovalPlugins || []];
|
|
521
|
+
const plugins = [createRawStreamRPCPlugin((id, stream2) => {
|
|
522
|
+
rawStreams.set(id, stream2);
|
|
523
|
+
}), ...serovalPlugins || []];
|
|
681
524
|
let done = false;
|
|
682
525
|
const callbacks = {
|
|
683
526
|
onParse: (value) => {
|
|
@@ -703,41 +546,28 @@ const handleServerAction = async ({
|
|
|
703
546
|
callbacks.onError(error);
|
|
704
547
|
}
|
|
705
548
|
});
|
|
706
|
-
if (done && rawStreams.size === 0) {
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
714
|
-
[X_TSS_SERIALIZED]: "true"
|
|
715
|
-
}
|
|
716
|
-
}
|
|
717
|
-
);
|
|
718
|
-
}
|
|
549
|
+
if (done && rawStreams.size === 0) return new Response(nonStreamingBody ? JSON.stringify(nonStreamingBody) : void 0, {
|
|
550
|
+
status: alsResponse.status,
|
|
551
|
+
statusText: alsResponse.statusText,
|
|
552
|
+
headers: {
|
|
553
|
+
"Content-Type": "application/json",
|
|
554
|
+
[X_TSS_SERIALIZED]: "true"
|
|
555
|
+
}
|
|
556
|
+
});
|
|
719
557
|
if (rawStreams.size > 0) {
|
|
720
|
-
const
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
} catch {
|
|
729
|
-
}
|
|
730
|
-
};
|
|
731
|
-
callbacks.onError = (error) => controller.error(error);
|
|
732
|
-
if (nonStreamingBody !== void 0) {
|
|
733
|
-
callbacks.onParse(nonStreamingBody);
|
|
558
|
+
const multiplexedStream = createMultiplexedStream(new ReadableStream({ start(controller) {
|
|
559
|
+
callbacks.onParse = (value) => {
|
|
560
|
+
controller.enqueue(JSON.stringify(value) + "\n");
|
|
561
|
+
};
|
|
562
|
+
callbacks.onDone = () => {
|
|
563
|
+
try {
|
|
564
|
+
controller.close();
|
|
565
|
+
} catch {
|
|
734
566
|
}
|
|
735
|
-
}
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
rawStreams
|
|
740
|
-
);
|
|
567
|
+
};
|
|
568
|
+
callbacks.onError = (error) => controller.error(error);
|
|
569
|
+
if (nonStreamingBody !== void 0) callbacks.onParse(nonStreamingBody);
|
|
570
|
+
} }), rawStreams);
|
|
741
571
|
return new Response(multiplexedStream, {
|
|
742
572
|
status: alsResponse.status,
|
|
743
573
|
statusText: alsResponse.statusText,
|
|
@@ -747,24 +577,18 @@ const handleServerAction = async ({
|
|
|
747
577
|
}
|
|
748
578
|
});
|
|
749
579
|
}
|
|
750
|
-
const stream = new ReadableStream({
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
controller.close();
|
|
758
|
-
} catch (error) {
|
|
759
|
-
controller.error(error);
|
|
760
|
-
}
|
|
761
|
-
};
|
|
762
|
-
callbacks.onError = (error) => controller.error(error);
|
|
763
|
-
if (nonStreamingBody !== void 0) {
|
|
764
|
-
callbacks.onParse(nonStreamingBody);
|
|
580
|
+
const stream = new ReadableStream({ start(controller) {
|
|
581
|
+
callbacks.onParse = (value) => controller.enqueue(textEncoder.encode(JSON.stringify(value) + "\n"));
|
|
582
|
+
callbacks.onDone = () => {
|
|
583
|
+
try {
|
|
584
|
+
controller.close();
|
|
585
|
+
} catch (error) {
|
|
586
|
+
controller.error(error);
|
|
765
587
|
}
|
|
766
|
-
}
|
|
767
|
-
|
|
588
|
+
};
|
|
589
|
+
callbacks.onError = (error) => controller.error(error);
|
|
590
|
+
if (nonStreamingBody !== void 0) callbacks.onParse(nonStreamingBody);
|
|
591
|
+
} });
|
|
768
592
|
return new Response(stream, {
|
|
769
593
|
status: alsResponse.status,
|
|
770
594
|
statusText: alsResponse.statusText,
|
|
@@ -780,13 +604,8 @@ const handleServerAction = async ({
|
|
|
780
604
|
});
|
|
781
605
|
};
|
|
782
606
|
let res = await (async () => {
|
|
783
|
-
if (FORM_DATA_CONTENT_TYPES.some(
|
|
784
|
-
(
|
|
785
|
-
)) {
|
|
786
|
-
invariant(
|
|
787
|
-
methodUpper !== "GET",
|
|
788
|
-
"GET requests with FormData payloads are not supported"
|
|
789
|
-
);
|
|
607
|
+
if (FORM_DATA_CONTENT_TYPES.some((type) => contentType && contentType.includes(type))) {
|
|
608
|
+
invariant(methodUpper !== "GET", "GET requests with FormData payloads are not supported");
|
|
790
609
|
const formData = await request.formData();
|
|
791
610
|
const serializedContext = formData.get(TSS_FORMDATA_CONTEXT);
|
|
792
611
|
formData.delete(TSS_FORMDATA_CONTEXT);
|
|
@@ -795,82 +614,54 @@ const handleServerAction = async ({
|
|
|
795
614
|
data: formData,
|
|
796
615
|
method: methodUpper
|
|
797
616
|
};
|
|
798
|
-
if (typeof serializedContext === "string") {
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
});
|
|
804
|
-
if (typeof deserializedContext === "object" && deserializedContext) {
|
|
805
|
-
params.context = safeObjectMerge(
|
|
806
|
-
context,
|
|
807
|
-
deserializedContext
|
|
808
|
-
);
|
|
809
|
-
}
|
|
810
|
-
} catch (e) {
|
|
811
|
-
if (false) ;
|
|
812
|
-
}
|
|
617
|
+
if (typeof serializedContext === "string") try {
|
|
618
|
+
const deserializedContext = fromJSON(JSON.parse(serializedContext), { plugins: serovalPlugins });
|
|
619
|
+
if (typeof deserializedContext === "object" && deserializedContext) params.context = safeObjectMerge(context, deserializedContext);
|
|
620
|
+
} catch (e) {
|
|
621
|
+
if (false) ;
|
|
813
622
|
}
|
|
814
623
|
return await action(params);
|
|
815
624
|
}
|
|
816
625
|
if (methodUpper === "GET") {
|
|
817
626
|
const payloadParam = url.searchParams.get("payload");
|
|
818
|
-
if (payloadParam && payloadParam.length > MAX_PAYLOAD_SIZE)
|
|
819
|
-
throw new Error("Payload too large");
|
|
820
|
-
}
|
|
627
|
+
if (payloadParam && payloadParam.length > MAX_PAYLOAD_SIZE) throw new Error("Payload too large");
|
|
821
628
|
const payload2 = payloadParam ? parsePayload(JSON.parse(payloadParam)) : {};
|
|
822
629
|
payload2.context = safeObjectMerge(context, payload2.context);
|
|
823
630
|
payload2.method = methodUpper;
|
|
824
631
|
return await action(payload2);
|
|
825
632
|
}
|
|
826
633
|
let jsonPayload;
|
|
827
|
-
if (contentType?.includes("application/json"))
|
|
828
|
-
jsonPayload = await request.json();
|
|
829
|
-
}
|
|
634
|
+
if (contentType?.includes("application/json")) jsonPayload = await request.json();
|
|
830
635
|
const payload = jsonPayload ? parsePayload(jsonPayload) : {};
|
|
831
636
|
payload.context = safeObjectMerge(payload.context, context);
|
|
832
637
|
payload.method = methodUpper;
|
|
833
638
|
return await action(payload);
|
|
834
639
|
})();
|
|
835
640
|
const unwrapped = res.result || res.error;
|
|
836
|
-
if (isNotFound(res))
|
|
837
|
-
|
|
838
|
-
}
|
|
839
|
-
if (!isServerFn) {
|
|
840
|
-
return unwrapped;
|
|
841
|
-
}
|
|
641
|
+
if (isNotFound(res)) res = isNotFoundResponse(res);
|
|
642
|
+
if (!isServerFn) return unwrapped;
|
|
842
643
|
if (unwrapped instanceof Response) {
|
|
843
|
-
if (isRedirect(unwrapped))
|
|
844
|
-
return unwrapped;
|
|
845
|
-
}
|
|
644
|
+
if (isRedirect(unwrapped)) return unwrapped;
|
|
846
645
|
unwrapped.headers.set(X_TSS_RAW_RESPONSE, "true");
|
|
847
646
|
return unwrapped;
|
|
848
647
|
}
|
|
849
648
|
return serializeResult(res);
|
|
850
649
|
} catch (error) {
|
|
851
|
-
if (error instanceof Response)
|
|
852
|
-
|
|
853
|
-
}
|
|
854
|
-
if (isNotFound(error)) {
|
|
855
|
-
return isNotFoundResponse(error);
|
|
856
|
-
}
|
|
650
|
+
if (error instanceof Response) return error;
|
|
651
|
+
if (isNotFound(error)) return isNotFoundResponse(error);
|
|
857
652
|
console.info();
|
|
858
653
|
console.info("Server Fn Error!");
|
|
859
654
|
console.info();
|
|
860
655
|
console.error(error);
|
|
861
656
|
console.info();
|
|
862
|
-
const serializedError = JSON.stringify(
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
})
|
|
868
|
-
)
|
|
869
|
-
);
|
|
870
|
-
const response2 = getResponse();
|
|
657
|
+
const serializedError = JSON.stringify(await Promise.resolve(toCrossJSONAsync(error, {
|
|
658
|
+
refs: /* @__PURE__ */ new Map(),
|
|
659
|
+
plugins: serovalPlugins
|
|
660
|
+
})));
|
|
661
|
+
const response = getResponse();
|
|
871
662
|
return new Response(serializedError, {
|
|
872
|
-
status:
|
|
873
|
-
statusText:
|
|
663
|
+
status: response.status ?? 500,
|
|
664
|
+
statusText: response.statusText,
|
|
874
665
|
headers: {
|
|
875
666
|
"Content-Type": "application/json",
|
|
876
667
|
[X_TSS_SERIALIZED]: "true"
|
|
@@ -878,7 +669,6 @@ const handleServerAction = async ({
|
|
|
878
669
|
});
|
|
879
670
|
}
|
|
880
671
|
})();
|
|
881
|
-
return response;
|
|
882
672
|
};
|
|
883
673
|
function isNotFoundResponse(error) {
|
|
884
674
|
const { headers, ...rest } = error;
|
|
@@ -899,33 +689,25 @@ function resolveTransformConfig(transform) {
|
|
|
899
689
|
cache: true
|
|
900
690
|
};
|
|
901
691
|
}
|
|
902
|
-
if (typeof transform === "function") {
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
createTransform: transform.createTransform,
|
|
913
|
-
cache: transform.cache !== false
|
|
914
|
-
};
|
|
915
|
-
}
|
|
916
|
-
const transformFn = typeof transform.transform === "string" ? (({ url }) => `${transform.transform}${url}`) : transform.transform;
|
|
692
|
+
if (typeof transform === "function") return {
|
|
693
|
+
type: "transform",
|
|
694
|
+
transformFn: transform,
|
|
695
|
+
cache: true
|
|
696
|
+
};
|
|
697
|
+
if ("createTransform" in transform && transform.createTransform) return {
|
|
698
|
+
type: "createTransform",
|
|
699
|
+
createTransform: transform.createTransform,
|
|
700
|
+
cache: transform.cache !== false
|
|
701
|
+
};
|
|
917
702
|
return {
|
|
918
703
|
type: "transform",
|
|
919
|
-
transformFn,
|
|
704
|
+
transformFn: typeof transform.transform === "string" ? (({ url }) => `${transform.transform}${url}`) : transform.transform,
|
|
920
705
|
cache: transform.cache !== false
|
|
921
706
|
};
|
|
922
707
|
}
|
|
923
708
|
function buildClientEntryScriptTag(clientEntry, injectedHeadScripts) {
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
if (injectedHeadScripts) {
|
|
927
|
-
script = `${injectedHeadScripts};${script}`;
|
|
928
|
-
}
|
|
709
|
+
let script = `import(${JSON.stringify(clientEntry)})`;
|
|
710
|
+
if (injectedHeadScripts) script = `${injectedHeadScripts};${script}`;
|
|
929
711
|
return {
|
|
930
712
|
tag: "script",
|
|
931
713
|
attrs: {
|
|
@@ -939,66 +721,41 @@ function transformManifestUrls(source, transformFn, opts) {
|
|
|
939
721
|
return (async () => {
|
|
940
722
|
const manifest2 = opts?.clone ? structuredClone(source.manifest) : source.manifest;
|
|
941
723
|
for (const route of Object.values(manifest2.routes)) {
|
|
942
|
-
if (route.preloads) {
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
)
|
|
947
|
-
);
|
|
948
|
-
}
|
|
724
|
+
if (route.preloads) route.preloads = await Promise.all(route.preloads.map((url) => Promise.resolve(transformFn({
|
|
725
|
+
url,
|
|
726
|
+
type: "modulepreload"
|
|
727
|
+
}))));
|
|
949
728
|
if (route.assets) {
|
|
950
|
-
for (const asset of route.assets) {
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
url: asset.attrs.href,
|
|
955
|
-
type: "stylesheet"
|
|
956
|
-
})
|
|
957
|
-
);
|
|
958
|
-
}
|
|
959
|
-
}
|
|
729
|
+
for (const asset of route.assets) if (asset.tag === "link" && asset.attrs?.href) asset.attrs.href = await Promise.resolve(transformFn({
|
|
730
|
+
url: asset.attrs.href,
|
|
731
|
+
type: "stylesheet"
|
|
732
|
+
}));
|
|
960
733
|
}
|
|
961
734
|
}
|
|
962
|
-
const transformedClientEntry = await Promise.resolve(
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
})
|
|
967
|
-
);
|
|
735
|
+
const transformedClientEntry = await Promise.resolve(transformFn({
|
|
736
|
+
url: source.clientEntry,
|
|
737
|
+
type: "clientEntry"
|
|
738
|
+
}));
|
|
968
739
|
const rootRoute = manifest2.routes[rootRouteId];
|
|
969
740
|
if (rootRoute) {
|
|
970
741
|
rootRoute.assets = rootRoute.assets || [];
|
|
971
|
-
rootRoute.assets.push(
|
|
972
|
-
buildClientEntryScriptTag(
|
|
973
|
-
transformedClientEntry,
|
|
974
|
-
source.injectedHeadScripts
|
|
975
|
-
)
|
|
976
|
-
);
|
|
742
|
+
rootRoute.assets.push(buildClientEntryScriptTag(transformedClientEntry, source.injectedHeadScripts));
|
|
977
743
|
}
|
|
978
744
|
return manifest2;
|
|
979
745
|
})();
|
|
980
746
|
}
|
|
981
747
|
function buildManifestWithClientEntry(source) {
|
|
982
|
-
const scriptTag = buildClientEntryScriptTag(
|
|
983
|
-
source.clientEntry,
|
|
984
|
-
source.injectedHeadScripts
|
|
985
|
-
);
|
|
748
|
+
const scriptTag = buildClientEntryScriptTag(source.clientEntry, source.injectedHeadScripts);
|
|
986
749
|
const baseRootRoute = source.manifest.routes[rootRouteId];
|
|
987
|
-
|
|
750
|
+
return { routes: {
|
|
988
751
|
...source.manifest.routes,
|
|
989
|
-
...baseRootRoute ? {
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
} : {}
|
|
995
|
-
};
|
|
996
|
-
return { routes };
|
|
752
|
+
...baseRootRoute ? { [rootRouteId]: {
|
|
753
|
+
...baseRootRoute,
|
|
754
|
+
assets: [...baseRootRoute.assets || [], scriptTag]
|
|
755
|
+
} } : {}
|
|
756
|
+
} };
|
|
997
757
|
}
|
|
998
|
-
|
|
999
|
-
TSS_SHELL: "X-TSS_SHELL"
|
|
1000
|
-
};
|
|
1001
|
-
const ServerFunctionSerializationAdapter = createSerializationAdapter({
|
|
758
|
+
var ServerFunctionSerializationAdapter = createSerializationAdapter({
|
|
1002
759
|
key: "$TSS/serverfn",
|
|
1003
760
|
test: (v) => {
|
|
1004
761
|
if (typeof v !== "function") return false;
|
|
@@ -1008,42 +765,32 @@ const ServerFunctionSerializationAdapter = createSerializationAdapter({
|
|
|
1008
765
|
toSerializable: ({ serverFnMeta }) => ({ functionId: serverFnMeta.id }),
|
|
1009
766
|
fromSerializable: ({ functionId }) => {
|
|
1010
767
|
const fn = async (opts, signal) => {
|
|
1011
|
-
|
|
1012
|
-
const result = await serverFn(opts ?? {}, signal);
|
|
1013
|
-
return result.result;
|
|
768
|
+
return (await (await getServerFnById(functionId))(opts ?? {}, signal)).result;
|
|
1014
769
|
};
|
|
1015
770
|
return fn;
|
|
1016
771
|
}
|
|
1017
772
|
});
|
|
1018
773
|
function getStartResponseHeaders(opts) {
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
},
|
|
1023
|
-
...opts.router.state.matches.map((match) => {
|
|
1024
|
-
return match.headers;
|
|
1025
|
-
})
|
|
1026
|
-
);
|
|
1027
|
-
return headers;
|
|
774
|
+
return mergeHeaders({ "Content-Type": "text/html; charset=utf-8" }, ...opts.router.state.matches.map((match) => {
|
|
775
|
+
return match.headers;
|
|
776
|
+
}));
|
|
1028
777
|
}
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
778
|
+
var entriesPromise;
|
|
779
|
+
var baseManifestPromise;
|
|
780
|
+
var cachedFinalManifestPromise;
|
|
1032
781
|
async function loadEntries() {
|
|
1033
|
-
const routerEntry = await import("./assets/router-
|
|
1034
|
-
|
|
1035
|
-
|
|
782
|
+
const routerEntry = await import("./assets/router-DAepjaOj.js").then((n) => n.r);
|
|
783
|
+
return {
|
|
784
|
+
startEntry: await import("./assets/start-HYkvq4Ni.js"),
|
|
785
|
+
routerEntry
|
|
786
|
+
};
|
|
1036
787
|
}
|
|
1037
788
|
function getEntries() {
|
|
1038
|
-
if (!entriesPromise)
|
|
1039
|
-
entriesPromise = loadEntries();
|
|
1040
|
-
}
|
|
789
|
+
if (!entriesPromise) entriesPromise = loadEntries();
|
|
1041
790
|
return entriesPromise;
|
|
1042
791
|
}
|
|
1043
792
|
function getBaseManifest(matchedRoutes) {
|
|
1044
|
-
if (!baseManifestPromise)
|
|
1045
|
-
baseManifestPromise = getStartManifest();
|
|
1046
|
-
}
|
|
793
|
+
if (!baseManifestPromise) baseManifestPromise = getStartManifest();
|
|
1047
794
|
return baseManifestPromise;
|
|
1048
795
|
}
|
|
1049
796
|
async function resolveManifest(matchedRoutes, transformFn, cache) {
|
|
@@ -1052,19 +799,17 @@ async function resolveManifest(matchedRoutes, transformFn, cache) {
|
|
|
1052
799
|
return transformFn ? await transformManifestUrls(base, transformFn, { clone: !cache }) : buildManifestWithClientEntry(base);
|
|
1053
800
|
};
|
|
1054
801
|
if (!transformFn || cache) {
|
|
1055
|
-
if (!cachedFinalManifestPromise)
|
|
1056
|
-
cachedFinalManifestPromise = computeFinalManifest();
|
|
1057
|
-
}
|
|
802
|
+
if (!cachedFinalManifestPromise) cachedFinalManifestPromise = computeFinalManifest();
|
|
1058
803
|
return cachedFinalManifestPromise;
|
|
1059
804
|
}
|
|
1060
805
|
return computeFinalManifest();
|
|
1061
806
|
}
|
|
1062
|
-
|
|
1063
|
-
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
|
|
807
|
+
var ROUTER_BASEPATH = "/";
|
|
808
|
+
var SERVER_FN_BASE = "/_serverFn/";
|
|
809
|
+
var IS_PRERENDERING = process.env.TSS_PRERENDERING === "true";
|
|
810
|
+
var IS_SHELL_ENV = process.env.TSS_SHELL === "true";
|
|
811
|
+
var ERR_NO_RESPONSE = "Internal Server Error";
|
|
812
|
+
var ERR_NO_DEFER = "Internal Server Error";
|
|
1068
813
|
function throwRouteHandlerError() {
|
|
1069
814
|
throw new Error(ERR_NO_RESPONSE);
|
|
1070
815
|
}
|
|
@@ -1075,30 +820,25 @@ function isSpecialResponse(value) {
|
|
|
1075
820
|
return value instanceof Response || isRedirect(value);
|
|
1076
821
|
}
|
|
1077
822
|
function handleCtxResult(result) {
|
|
1078
|
-
if (isSpecialResponse(result)) {
|
|
1079
|
-
return { response: result };
|
|
1080
|
-
}
|
|
823
|
+
if (isSpecialResponse(result)) return { response: result };
|
|
1081
824
|
return result;
|
|
1082
825
|
}
|
|
1083
826
|
function executeMiddleware(middlewares, ctx) {
|
|
1084
827
|
let index = -1;
|
|
1085
828
|
const next = async (nextCtx) => {
|
|
1086
829
|
if (nextCtx) {
|
|
1087
|
-
if (nextCtx.context)
|
|
1088
|
-
|
|
1089
|
-
}
|
|
1090
|
-
for (const key of Object.keys(nextCtx)) {
|
|
1091
|
-
if (key !== "context") {
|
|
1092
|
-
ctx[key] = nextCtx[key];
|
|
1093
|
-
}
|
|
1094
|
-
}
|
|
830
|
+
if (nextCtx.context) ctx.context = safeObjectMerge(ctx.context, nextCtx.context);
|
|
831
|
+
for (const key of Object.keys(nextCtx)) if (key !== "context") ctx[key] = nextCtx[key];
|
|
1095
832
|
}
|
|
1096
833
|
index++;
|
|
1097
834
|
const middleware = middlewares[index];
|
|
1098
835
|
if (!middleware) return ctx;
|
|
1099
836
|
let result;
|
|
1100
837
|
try {
|
|
1101
|
-
result = await middleware({
|
|
838
|
+
result = await middleware({
|
|
839
|
+
...ctx,
|
|
840
|
+
next
|
|
841
|
+
});
|
|
1102
842
|
} catch (err) {
|
|
1103
843
|
if (isSpecialResponse(err)) {
|
|
1104
844
|
ctx.response = err;
|
|
@@ -1108,26 +848,21 @@ function executeMiddleware(middlewares, ctx) {
|
|
|
1108
848
|
}
|
|
1109
849
|
const normalized = handleCtxResult(result);
|
|
1110
850
|
if (normalized) {
|
|
1111
|
-
if (normalized.response !== void 0)
|
|
1112
|
-
|
|
1113
|
-
}
|
|
1114
|
-
if (normalized.context) {
|
|
1115
|
-
ctx.context = safeObjectMerge(ctx.context, normalized.context);
|
|
1116
|
-
}
|
|
851
|
+
if (normalized.response !== void 0) ctx.response = normalized.response;
|
|
852
|
+
if (normalized.context) ctx.context = safeObjectMerge(ctx.context, normalized.context);
|
|
1117
853
|
}
|
|
1118
854
|
return ctx;
|
|
1119
855
|
};
|
|
1120
856
|
return next();
|
|
1121
857
|
}
|
|
1122
858
|
function handlerToMiddleware(handler, mayDefer = false) {
|
|
1123
|
-
if (mayDefer)
|
|
1124
|
-
return handler;
|
|
1125
|
-
}
|
|
859
|
+
if (mayDefer) return handler;
|
|
1126
860
|
return async (ctx) => {
|
|
1127
|
-
const response = await handler({
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
}
|
|
861
|
+
const response = await handler({
|
|
862
|
+
...ctx,
|
|
863
|
+
next: throwIfMayNotDefer
|
|
864
|
+
});
|
|
865
|
+
if (!response) throwRouteHandlerError();
|
|
1131
866
|
return response;
|
|
1132
867
|
};
|
|
1133
868
|
}
|
|
@@ -1142,11 +877,7 @@ function createStartHandler(cbOrOptions) {
|
|
|
1142
877
|
if (!resolvedTransformConfig) return void 0;
|
|
1143
878
|
if (resolvedTransformConfig.type === "createTransform") {
|
|
1144
879
|
if (cache) {
|
|
1145
|
-
if (!cachedCreateTransformPromise)
|
|
1146
|
-
cachedCreateTransformPromise = Promise.resolve(
|
|
1147
|
-
resolvedTransformConfig.createTransform(opts)
|
|
1148
|
-
);
|
|
1149
|
-
}
|
|
880
|
+
if (!cachedCreateTransformPromise) cachedCreateTransformPromise = Promise.resolve(resolvedTransformConfig.createTransform(opts));
|
|
1150
881
|
return cachedCreateTransformPromise;
|
|
1151
882
|
}
|
|
1152
883
|
return resolvedTransformConfig.createTransform(opts);
|
|
@@ -1161,9 +892,7 @@ function createStartHandler(cbOrOptions) {
|
|
|
1161
892
|
})();
|
|
1162
893
|
cachedFinalManifestPromise = warmupPromise;
|
|
1163
894
|
warmupPromise.catch(() => {
|
|
1164
|
-
if (cachedFinalManifestPromise === warmupPromise)
|
|
1165
|
-
cachedFinalManifestPromise = void 0;
|
|
1166
|
-
}
|
|
895
|
+
if (cachedFinalManifestPromise === warmupPromise) cachedFinalManifestPromise = void 0;
|
|
1167
896
|
cachedCreateTransformPromise = void 0;
|
|
1168
897
|
});
|
|
1169
898
|
}
|
|
@@ -1174,98 +903,62 @@ function createStartHandler(cbOrOptions) {
|
|
|
1174
903
|
const { url, handledProtocolRelativeURL } = getNormalizedURL(request.url);
|
|
1175
904
|
const href = url.pathname + url.search + url.hash;
|
|
1176
905
|
const origin = getOrigin(request);
|
|
1177
|
-
if (handledProtocolRelativeURL)
|
|
1178
|
-
return Response.redirect(url, 308);
|
|
1179
|
-
}
|
|
906
|
+
if (handledProtocolRelativeURL) return Response.redirect(url, 308);
|
|
1180
907
|
const entries = await getEntries();
|
|
1181
908
|
const startOptions = await entries.startEntry.startInstance?.getOptions() || {};
|
|
1182
|
-
const serializationAdapters = [
|
|
1183
|
-
...startOptions.serializationAdapters || [],
|
|
1184
|
-
ServerFunctionSerializationAdapter
|
|
1185
|
-
];
|
|
909
|
+
const serializationAdapters = [...startOptions.serializationAdapters || [], ServerFunctionSerializationAdapter];
|
|
1186
910
|
const requestStartOptions = {
|
|
1187
911
|
...startOptions,
|
|
1188
912
|
serializationAdapters
|
|
1189
913
|
};
|
|
1190
914
|
const flattenedRequestMiddlewares = startOptions.requestMiddleware ? flattenMiddlewares(startOptions.requestMiddleware) : [];
|
|
1191
|
-
const executedRequestMiddlewares = new Set(
|
|
1192
|
-
flattenedRequestMiddlewares
|
|
1193
|
-
);
|
|
915
|
+
const executedRequestMiddlewares = new Set(flattenedRequestMiddlewares);
|
|
1194
916
|
const getRouter = async () => {
|
|
1195
917
|
if (router) return router;
|
|
1196
918
|
router = await entries.routerEntry.getRouter();
|
|
1197
919
|
let isShell = IS_SHELL_ENV;
|
|
1198
|
-
if (IS_PRERENDERING && !isShell)
|
|
1199
|
-
|
|
1200
|
-
}
|
|
1201
|
-
const history = createMemoryHistory({
|
|
1202
|
-
initialEntries: [href]
|
|
1203
|
-
});
|
|
920
|
+
if (IS_PRERENDERING && !isShell) isShell = request.headers.get(HEADERS.TSS_SHELL) === "true";
|
|
921
|
+
const history = createMemoryHistory({ initialEntries: [href] });
|
|
1204
922
|
router.update({
|
|
1205
923
|
history,
|
|
1206
924
|
isShell,
|
|
1207
925
|
isPrerendering: IS_PRERENDERING,
|
|
1208
926
|
origin: router.options.origin ?? origin,
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
serializationAdapters: [
|
|
1212
|
-
...requestStartOptions.serializationAdapters,
|
|
1213
|
-
...router.options.serializationAdapters || []
|
|
1214
|
-
]
|
|
1215
|
-
},
|
|
927
|
+
defaultSsr: requestStartOptions.defaultSsr,
|
|
928
|
+
serializationAdapters: [...requestStartOptions.serializationAdapters, ...router.options.serializationAdapters || []],
|
|
1216
929
|
basepath: ROUTER_BASEPATH
|
|
1217
930
|
});
|
|
1218
931
|
return router;
|
|
1219
932
|
};
|
|
1220
933
|
if (SERVER_FN_BASE && url.pathname.startsWith(SERVER_FN_BASE)) {
|
|
1221
934
|
const serverFnId = url.pathname.slice(SERVER_FN_BASE.length).split("/")[0];
|
|
1222
|
-
if (!serverFnId)
|
|
1223
|
-
throw new Error("Invalid server action param for serverFnId");
|
|
1224
|
-
}
|
|
935
|
+
if (!serverFnId) throw new Error("Invalid server action param for serverFnId");
|
|
1225
936
|
const serverFnHandler = async ({ context }) => {
|
|
1226
|
-
return runWithStartContext(
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
|
|
1231
|
-
|
|
1232
|
-
|
|
1233
|
-
|
|
1234
|
-
|
|
1235
|
-
|
|
1236
|
-
|
|
1237
|
-
serverFnId
|
|
1238
|
-
})
|
|
1239
|
-
);
|
|
937
|
+
return runWithStartContext({
|
|
938
|
+
getRouter,
|
|
939
|
+
startOptions: requestStartOptions,
|
|
940
|
+
contextAfterGlobalMiddlewares: context,
|
|
941
|
+
request,
|
|
942
|
+
executedRequestMiddlewares
|
|
943
|
+
}, () => handleServerAction({
|
|
944
|
+
request,
|
|
945
|
+
context: requestOpts?.context,
|
|
946
|
+
serverFnId
|
|
947
|
+
}));
|
|
1240
948
|
};
|
|
1241
|
-
|
|
1242
|
-
(d) => d.options.server
|
|
1243
|
-
);
|
|
1244
|
-
const ctx2 = await executeMiddleware([...middlewares2, serverFnHandler], {
|
|
949
|
+
return handleRedirectResponse((await executeMiddleware([...flattenedRequestMiddlewares.map((d) => d.options.server), serverFnHandler], {
|
|
1245
950
|
request,
|
|
1246
951
|
pathname: url.pathname,
|
|
1247
952
|
context: createNullProtoObject(requestOpts?.context)
|
|
1248
|
-
});
|
|
1249
|
-
return handleRedirectResponse(ctx2.response, request, getRouter);
|
|
953
|
+
})).response, request, getRouter);
|
|
1250
954
|
}
|
|
1251
955
|
const executeRouter = async (serverContext, matchedRoutes) => {
|
|
1252
|
-
const
|
|
1253
|
-
|
|
1254
|
-
const
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
);
|
|
1258
|
-
if (!isSupported) {
|
|
1259
|
-
return Response.json(
|
|
1260
|
-
{ error: "Only HTML requests are supported here" },
|
|
1261
|
-
{ status: 500 }
|
|
1262
|
-
);
|
|
1263
|
-
}
|
|
1264
|
-
const manifest2 = await resolveManifest(
|
|
1265
|
-
matchedRoutes,
|
|
1266
|
-
await getTransformFn({ warmup: false, request }),
|
|
1267
|
-
cache
|
|
1268
|
-
);
|
|
956
|
+
const acceptParts = (request.headers.get("Accept") || "*/*").split(",");
|
|
957
|
+
if (!["*/*", "text/html"].some((mimeType) => acceptParts.some((part) => part.trim().startsWith(mimeType)))) return Response.json({ error: "Only HTML requests are supported here" }, { status: 500 });
|
|
958
|
+
const manifest2 = await resolveManifest(matchedRoutes, await getTransformFn({
|
|
959
|
+
warmup: false,
|
|
960
|
+
request
|
|
961
|
+
}), cache);
|
|
1269
962
|
const routerInstance = await getRouter();
|
|
1270
963
|
attachRouterServerSsrUtils({
|
|
1271
964
|
router: routerInstance,
|
|
@@ -1273,13 +966,9 @@ function createStartHandler(cbOrOptions) {
|
|
|
1273
966
|
});
|
|
1274
967
|
routerInstance.update({ additionalContext: { serverContext } });
|
|
1275
968
|
await routerInstance.load();
|
|
1276
|
-
if (routerInstance.state.redirect)
|
|
1277
|
-
return routerInstance.state.redirect;
|
|
1278
|
-
}
|
|
969
|
+
if (routerInstance.state.redirect) return routerInstance.state.redirect;
|
|
1279
970
|
await routerInstance.serverSsr.dehydrate();
|
|
1280
|
-
const responseHeaders = getStartResponseHeaders({
|
|
1281
|
-
router: routerInstance
|
|
1282
|
-
});
|
|
971
|
+
const responseHeaders = getStartResponseHeaders({ router: routerInstance });
|
|
1283
972
|
cbWillCleanup = true;
|
|
1284
973
|
return cb({
|
|
1285
974
|
request,
|
|
@@ -1288,103 +977,66 @@ function createStartHandler(cbOrOptions) {
|
|
|
1288
977
|
});
|
|
1289
978
|
};
|
|
1290
979
|
const requestHandlerMiddleware = async ({ context }) => {
|
|
1291
|
-
return runWithStartContext(
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
if (err instanceof Response) {
|
|
1311
|
-
return err;
|
|
1312
|
-
}
|
|
1313
|
-
throw err;
|
|
1314
|
-
}
|
|
980
|
+
return runWithStartContext({
|
|
981
|
+
getRouter,
|
|
982
|
+
startOptions: requestStartOptions,
|
|
983
|
+
contextAfterGlobalMiddlewares: context,
|
|
984
|
+
request,
|
|
985
|
+
executedRequestMiddlewares
|
|
986
|
+
}, async () => {
|
|
987
|
+
try {
|
|
988
|
+
return await handleServerRoutes({
|
|
989
|
+
getRouter,
|
|
990
|
+
request,
|
|
991
|
+
url,
|
|
992
|
+
executeRouter,
|
|
993
|
+
context,
|
|
994
|
+
executedRequestMiddlewares
|
|
995
|
+
});
|
|
996
|
+
} catch (err) {
|
|
997
|
+
if (err instanceof Response) return err;
|
|
998
|
+
throw err;
|
|
1315
999
|
}
|
|
1316
|
-
);
|
|
1000
|
+
});
|
|
1317
1001
|
};
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
{
|
|
1324
|
-
request,
|
|
1325
|
-
pathname: url.pathname,
|
|
1326
|
-
context: createNullProtoObject(requestOpts?.context)
|
|
1327
|
-
}
|
|
1328
|
-
);
|
|
1329
|
-
return handleRedirectResponse(ctx.response, request, getRouter);
|
|
1002
|
+
return handleRedirectResponse((await executeMiddleware([...flattenedRequestMiddlewares.map((d) => d.options.server), requestHandlerMiddleware], {
|
|
1003
|
+
request,
|
|
1004
|
+
pathname: url.pathname,
|
|
1005
|
+
context: createNullProtoObject(requestOpts?.context)
|
|
1006
|
+
})).response, request, getRouter);
|
|
1330
1007
|
} finally {
|
|
1331
|
-
if (router && !cbWillCleanup)
|
|
1332
|
-
router.serverSsr?.cleanup();
|
|
1333
|
-
}
|
|
1008
|
+
if (router && !cbWillCleanup) router.serverSsr?.cleanup();
|
|
1334
1009
|
router = null;
|
|
1335
1010
|
}
|
|
1336
1011
|
};
|
|
1337
1012
|
return requestHandler(startRequestResolver);
|
|
1338
1013
|
}
|
|
1339
1014
|
async function handleRedirectResponse(response, request, getRouter) {
|
|
1340
|
-
if (!isRedirect(response))
|
|
1341
|
-
return response;
|
|
1342
|
-
}
|
|
1015
|
+
if (!isRedirect(response)) return response;
|
|
1343
1016
|
if (isResolvedRedirect(response)) {
|
|
1344
|
-
if (request.headers.get("x-tsr-serverFn") === "true") {
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
);
|
|
1349
|
-
}
|
|
1017
|
+
if (request.headers.get("x-tsr-serverFn") === "true") return Response.json({
|
|
1018
|
+
...response.options,
|
|
1019
|
+
isSerializedRedirect: true
|
|
1020
|
+
}, { headers: response.headers });
|
|
1350
1021
|
return response;
|
|
1351
1022
|
}
|
|
1352
1023
|
const opts = response.options;
|
|
1353
|
-
if (opts.to && typeof opts.to === "string" && !opts.to.startsWith("/")) {
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
)) {
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
).filter((d) => typeof opts[d] === "function").map((d) => `"${d}"`).join(", ")}`
|
|
1365
|
-
);
|
|
1366
|
-
}
|
|
1367
|
-
const router = await getRouter();
|
|
1368
|
-
const redirect = router.resolveRedirect(response);
|
|
1369
|
-
if (request.headers.get("x-tsr-serverFn") === "true") {
|
|
1370
|
-
return Response.json(
|
|
1371
|
-
{ ...response.options, isSerializedRedirect: true },
|
|
1372
|
-
{ headers: response.headers }
|
|
1373
|
-
);
|
|
1374
|
-
}
|
|
1024
|
+
if (opts.to && typeof opts.to === "string" && !opts.to.startsWith("/")) throw new Error(`Server side redirects must use absolute paths via the 'href' or 'to' options. The redirect() method's "to" property accepts an internal path only. Use the "href" property to provide an external URL. Received: ${JSON.stringify(opts)}`);
|
|
1025
|
+
if ([
|
|
1026
|
+
"params",
|
|
1027
|
+
"search",
|
|
1028
|
+
"hash"
|
|
1029
|
+
].some((d) => typeof opts[d] === "function")) throw new Error(`Server side redirects must use static search, params, and hash values and do not support functional values. Received functional values for: ${Object.keys(opts).filter((d) => typeof opts[d] === "function").map((d) => `"${d}"`).join(", ")}`);
|
|
1030
|
+
const redirect = (await getRouter()).resolveRedirect(response);
|
|
1031
|
+
if (request.headers.get("x-tsr-serverFn") === "true") return Response.json({
|
|
1032
|
+
...response.options,
|
|
1033
|
+
isSerializedRedirect: true
|
|
1034
|
+
}, { headers: response.headers });
|
|
1375
1035
|
return redirect;
|
|
1376
1036
|
}
|
|
1377
|
-
async function handleServerRoutes({
|
|
1378
|
-
getRouter,
|
|
1379
|
-
request,
|
|
1380
|
-
url,
|
|
1381
|
-
executeRouter,
|
|
1382
|
-
context,
|
|
1383
|
-
executedRequestMiddlewares
|
|
1384
|
-
}) {
|
|
1037
|
+
async function handleServerRoutes({ getRouter, request, url, executeRouter, context, executedRequestMiddlewares }) {
|
|
1385
1038
|
const router = await getRouter();
|
|
1386
|
-
const
|
|
1387
|
-
const pathname = rewrittenUrl.pathname;
|
|
1039
|
+
const pathname = executeRewriteInput(router.rewrite, url).pathname;
|
|
1388
1040
|
const { matchedRoutes, foundRoute, routeParams } = router.getMatchedRoutes(pathname);
|
|
1389
1041
|
const isExactMatch = foundRoute && routeParams["**"] === void 0;
|
|
1390
1042
|
const routeMiddlewares = [];
|
|
@@ -1392,45 +1044,32 @@ async function handleServerRoutes({
|
|
|
1392
1044
|
const serverMiddleware = route.options.server?.middleware;
|
|
1393
1045
|
if (serverMiddleware) {
|
|
1394
1046
|
const flattened = flattenMiddlewares(serverMiddleware);
|
|
1395
|
-
for (const m of flattened)
|
|
1396
|
-
if (!executedRequestMiddlewares.has(m)) {
|
|
1397
|
-
routeMiddlewares.push(m.options.server);
|
|
1398
|
-
}
|
|
1399
|
-
}
|
|
1047
|
+
for (const m of flattened) if (!executedRequestMiddlewares.has(m)) routeMiddlewares.push(m.options.server);
|
|
1400
1048
|
}
|
|
1401
1049
|
}
|
|
1402
1050
|
const server2 = foundRoute?.options.server;
|
|
1403
1051
|
if (server2?.handlers && isExactMatch) {
|
|
1404
1052
|
const handlers = typeof server2.handlers === "function" ? server2.handlers({ createHandlers: (d) => d }) : server2.handlers;
|
|
1405
|
-
const
|
|
1406
|
-
const handler = handlers[requestMethod] ?? handlers["ANY"];
|
|
1053
|
+
const handler = handlers[request.method.toUpperCase()] ?? handlers["ANY"];
|
|
1407
1054
|
if (handler) {
|
|
1408
1055
|
const mayDefer = !!foundRoute.options.component;
|
|
1409
|
-
if (typeof handler === "function")
|
|
1410
|
-
|
|
1411
|
-
} else {
|
|
1056
|
+
if (typeof handler === "function") routeMiddlewares.push(handlerToMiddleware(handler, mayDefer));
|
|
1057
|
+
else {
|
|
1412
1058
|
if (handler.middleware?.length) {
|
|
1413
1059
|
const handlerMiddlewares = flattenMiddlewares(handler.middleware);
|
|
1414
|
-
for (const m of handlerMiddlewares)
|
|
1415
|
-
routeMiddlewares.push(m.options.server);
|
|
1416
|
-
}
|
|
1417
|
-
}
|
|
1418
|
-
if (handler.handler) {
|
|
1419
|
-
routeMiddlewares.push(handlerToMiddleware(handler.handler, mayDefer));
|
|
1060
|
+
for (const m of handlerMiddlewares) routeMiddlewares.push(m.options.server);
|
|
1420
1061
|
}
|
|
1062
|
+
if (handler.handler) routeMiddlewares.push(handlerToMiddleware(handler.handler, mayDefer));
|
|
1421
1063
|
}
|
|
1422
1064
|
}
|
|
1423
1065
|
}
|
|
1424
|
-
routeMiddlewares.push(
|
|
1425
|
-
|
|
1426
|
-
);
|
|
1427
|
-
const ctx = await executeMiddleware(routeMiddlewares, {
|
|
1066
|
+
routeMiddlewares.push((ctx) => executeRouter(ctx.context, matchedRoutes));
|
|
1067
|
+
return (await executeMiddleware(routeMiddlewares, {
|
|
1428
1068
|
request,
|
|
1429
1069
|
context,
|
|
1430
1070
|
params: routeParams,
|
|
1431
1071
|
pathname
|
|
1432
|
-
});
|
|
1433
|
-
return ctx.response;
|
|
1072
|
+
})).response;
|
|
1434
1073
|
}
|
|
1435
1074
|
const fetch = createStartHandler(defaultStreamHandler);
|
|
1436
1075
|
function createServerEntry(entry) {
|