convex-cms 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/admin-dist/nitro.json +15 -0
- package/admin-dist/public/assets/CmsEmptyState-CRswfTzk.js +5 -0
- package/admin-dist/public/assets/CmsPageHeader-CirpXndm.js +1 -0
- package/admin-dist/public/assets/CmsStatusBadge-CbEUpQu-.js +1 -0
- package/admin-dist/public/assets/CmsToolbar-BI2nZOXp.js +1 -0
- package/admin-dist/public/assets/ContentEntryEditor-CBeCyK_m.js +4 -0
- package/admin-dist/public/assets/ErrorState-BIVaWmom.js +1 -0
- package/admin-dist/public/assets/TaxonomyFilter-ChaY6Y_x.js +1 -0
- package/admin-dist/public/assets/_contentTypeId-DQ8k_Rvw.js +1 -0
- package/admin-dist/public/assets/_entryId-CKU_glsK.js +1 -0
- package/admin-dist/public/assets/alert-BXjTqrwQ.js +1 -0
- package/admin-dist/public/assets/badge-hvUOzpVZ.js +1 -0
- package/admin-dist/public/assets/circle-check-big-CF_pR17r.js +1 -0
- package/admin-dist/public/assets/command-DU82cJlt.js +1 -0
- package/admin-dist/public/assets/content-_LXl3pp7.js +1 -0
- package/admin-dist/public/assets/content-types-KjxaXGxY.js +2 -0
- package/admin-dist/public/assets/globals-CS6BZ0zp.css +1 -0
- package/admin-dist/public/assets/index-DNGIZHL-.js +1 -0
- package/admin-dist/public/assets/label-KNtpL71g.js +1 -0
- package/admin-dist/public/assets/link-2-Bw2aI4V4.js +1 -0
- package/admin-dist/public/assets/list-sYepHjt_.js +1 -0
- package/admin-dist/public/assets/main-CKj5yfEi.js +97 -0
- package/admin-dist/public/assets/media-Bkrkffm7.js +1 -0
- package/admin-dist/public/assets/new._contentTypeId-C3LstjNs.js +1 -0
- package/admin-dist/public/assets/plus-DUn8v_Xf.js +1 -0
- package/admin-dist/public/assets/rotate-ccw-DJEoHcRI.js +1 -0
- package/admin-dist/public/assets/scroll-area-DfIlT0in.js +1 -0
- package/admin-dist/public/assets/search-MuAUDJKR.js +1 -0
- package/admin-dist/public/assets/select-BD29IXCI.js +1 -0
- package/admin-dist/public/assets/settings-DmMyn_6A.js +1 -0
- package/admin-dist/public/assets/switch-h3Rrnl5i.js +1 -0
- package/admin-dist/public/assets/tabs-imc8h-Dp.js +1 -0
- package/admin-dist/public/assets/taxonomies-dAsrT65H.js +1 -0
- package/admin-dist/public/assets/textarea-BTy7nwzR.js +1 -0
- package/admin-dist/public/assets/trash-SAWKZZHv.js +1 -0
- package/admin-dist/public/assets/triangle-alert-E52Vfeuh.js +1 -0
- package/admin-dist/public/assets/useBreadcrumbLabel-BECBMCzM.js +1 -0
- package/admin-dist/public/assets/usePermissions-Basjs9BT.js +1 -0
- package/admin-dist/public/favicon.ico +0 -0
- package/admin-dist/server/_chunks/_libs/@date-fns/tz.mjs +217 -0
- package/admin-dist/server/_chunks/_libs/@floating-ui/core.mjs +719 -0
- package/admin-dist/server/_chunks/_libs/@floating-ui/dom.mjs +622 -0
- package/admin-dist/server/_chunks/_libs/@floating-ui/react-dom.mjs +292 -0
- package/admin-dist/server/_chunks/_libs/@floating-ui/utils.mjs +320 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/number.mjs +6 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/primitive.mjs +11 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-arrow.mjs +23 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-avatar.mjs +119 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-checkbox.mjs +270 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-collection.mjs +69 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-compose-refs.mjs +39 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-context.mjs +137 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-dialog.mjs +325 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-direction.mjs +9 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-dismissable-layer.mjs +210 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-dropdown-menu.mjs +253 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-focus-guards.mjs +29 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-focus-scope.mjs +206 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-id.mjs +14 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-label.mjs +23 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-menu.mjs +812 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-popover.mjs +300 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-popper.mjs +286 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-portal.mjs +16 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-presence.mjs +128 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-primitive.mjs +141 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-roving-focus.mjs +224 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-scroll-area.mjs +721 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-select.mjs +1163 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-separator.mjs +28 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-slot.mjs +601 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-switch.mjs +152 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-tabs.mjs +189 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-callback-ref.mjs +11 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-controllable-state.mjs +69 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-effect-event.mjs +1 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-escape-keydown.mjs +17 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-is-hydrated.mjs +15 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-layout-effect.mjs +6 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-previous.mjs +14 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-use-size.mjs +39 -0
- package/admin-dist/server/_chunks/_libs/@radix-ui/react-visually-hidden.mjs +33 -0
- package/admin-dist/server/_chunks/_libs/@tanstack/history.mjs +409 -0
- package/admin-dist/server/_chunks/_libs/@tanstack/react-router.mjs +1711 -0
- package/admin-dist/server/_chunks/_libs/@tanstack/react-store.mjs +56 -0
- package/admin-dist/server/_chunks/_libs/@tanstack/router-core.mjs +4829 -0
- package/admin-dist/server/_chunks/_libs/@tanstack/store.mjs +134 -0
- package/admin-dist/server/_chunks/_libs/react-dom.mjs +10781 -0
- package/admin-dist/server/_chunks/_libs/react.mjs +513 -0
- package/admin-dist/server/_libs/aria-hidden.mjs +122 -0
- package/admin-dist/server/_libs/class-variance-authority.mjs +44 -0
- package/admin-dist/server/_libs/clsx.mjs +16 -0
- package/admin-dist/server/_libs/cmdk.mjs +315 -0
- package/admin-dist/server/_libs/convex.mjs +4841 -0
- package/admin-dist/server/_libs/cookie-es.mjs +58 -0
- package/admin-dist/server/_libs/croner.mjs +1 -0
- package/admin-dist/server/_libs/crossws.mjs +1 -0
- package/admin-dist/server/_libs/date-fns.mjs +1716 -0
- package/admin-dist/server/_libs/detect-node-es.mjs +1 -0
- package/admin-dist/server/_libs/get-nonce.mjs +9 -0
- package/admin-dist/server/_libs/h3-v2.mjs +277 -0
- package/admin-dist/server/_libs/h3.mjs +401 -0
- package/admin-dist/server/_libs/hookable.mjs +1 -0
- package/admin-dist/server/_libs/isbot.mjs +20 -0
- package/admin-dist/server/_libs/lucide-react.mjs +850 -0
- package/admin-dist/server/_libs/ohash.mjs +1 -0
- package/admin-dist/server/_libs/react-day-picker.mjs +2201 -0
- package/admin-dist/server/_libs/react-remove-scroll-bar.mjs +82 -0
- package/admin-dist/server/_libs/react-remove-scroll.mjs +328 -0
- package/admin-dist/server/_libs/react-style-singleton.mjs +69 -0
- package/admin-dist/server/_libs/rou3.mjs +8 -0
- package/admin-dist/server/_libs/seroval-plugins.mjs +58 -0
- package/admin-dist/server/_libs/seroval.mjs +1765 -0
- package/admin-dist/server/_libs/srvx.mjs +719 -0
- package/admin-dist/server/_libs/tailwind-merge.mjs +3010 -0
- package/admin-dist/server/_libs/tiny-invariant.mjs +12 -0
- package/admin-dist/server/_libs/tiny-warning.mjs +5 -0
- package/admin-dist/server/_libs/tslib.mjs +39 -0
- package/admin-dist/server/_libs/ufo.mjs +54 -0
- package/admin-dist/server/_libs/unctx.mjs +1 -0
- package/admin-dist/server/_libs/unstorage.mjs +1 -0
- package/admin-dist/server/_libs/use-callback-ref.mjs +66 -0
- package/admin-dist/server/_libs/use-sidecar.mjs +106 -0
- package/admin-dist/server/_libs/use-sync-external-store.mjs +139 -0
- package/admin-dist/server/_libs/zod.mjs +4223 -0
- package/admin-dist/server/_ssr/CmsEmptyState-DU7-7-mV.mjs +290 -0
- package/admin-dist/server/_ssr/CmsPageHeader-CseW0AHm.mjs +24 -0
- package/admin-dist/server/_ssr/CmsStatusBadge-B_pi4KCp.mjs +127 -0
- package/admin-dist/server/_ssr/CmsToolbar-X75ex6ek.mjs +49 -0
- package/admin-dist/server/_ssr/ContentEntryEditor-CepusRsA.mjs +3720 -0
- package/admin-dist/server/_ssr/ErrorState-cI-bKLez.mjs +89 -0
- package/admin-dist/server/_ssr/TaxonomyFilter-Bwrq0-cz.mjs +188 -0
- package/admin-dist/server/_ssr/_contentTypeId-BqYKEcLr.mjs +379 -0
- package/admin-dist/server/_ssr/_entryId-CRfnqeDf.mjs +161 -0
- package/admin-dist/server/_ssr/_tanstack-start-manifest_v-BwDlABVk.mjs +4 -0
- package/admin-dist/server/_ssr/alert-CVt45UUP.mjs +92 -0
- package/admin-dist/server/_ssr/badge-6BsP37vG.mjs +125 -0
- package/admin-dist/server/_ssr/command-fy8epIKf.mjs +128 -0
- package/admin-dist/server/_ssr/config.server-D7JHDcDv.mjs +117 -0
- package/admin-dist/server/_ssr/content-B5RhL7uW.mjs +532 -0
- package/admin-dist/server/_ssr/content-types-BIOqCQYN.mjs +1166 -0
- package/admin-dist/server/_ssr/index-DHSHDPt1.mjs +193 -0
- package/admin-dist/server/_ssr/index.mjs +1275 -0
- package/admin-dist/server/_ssr/label-C8Dko1j7.mjs +22 -0
- package/admin-dist/server/_ssr/media-CSx3XttC.mjs +1832 -0
- package/admin-dist/server/_ssr/new._contentTypeId-DzanEZQM.mjs +144 -0
- package/admin-dist/server/_ssr/router-DDWcF-kt.mjs +1556 -0
- package/admin-dist/server/_ssr/scroll-area-bjPYwhXN.mjs +59 -0
- package/admin-dist/server/_ssr/select-BUhDDf4T.mjs +142 -0
- package/admin-dist/server/_ssr/settings-DAsxnw2q.mjs +348 -0
- package/admin-dist/server/_ssr/start-HYkvq4Ni.mjs +4 -0
- package/admin-dist/server/_ssr/switch-BgyRtQ1Z.mjs +31 -0
- package/admin-dist/server/_ssr/tabs-DzMdRB1A.mjs +628 -0
- package/admin-dist/server/_ssr/taxonomies-C8j8g5Q5.mjs +915 -0
- package/admin-dist/server/_ssr/textarea-9jNeYJSc.mjs +18 -0
- package/admin-dist/server/_ssr/trash-DYMxwhZB.mjs +291 -0
- package/admin-dist/server/_ssr/useBreadcrumbLabel-FNSAr2Ha.mjs +16 -0
- package/admin-dist/server/_ssr/usePermissions-BJGGahrJ.mjs +68 -0
- package/admin-dist/server/favicon.ico +0 -0
- package/admin-dist/server/index.mjs +627 -0
- package/dist/cli/index.js +0 -0
- package/dist/client/admin-config.d.ts +0 -1
- package/dist/client/admin-config.d.ts.map +1 -1
- package/dist/client/admin-config.js +0 -1
- package/dist/client/admin-config.js.map +1 -1
- package/dist/client/adminApi.d.ts.map +1 -1
- package/dist/client/agentTools.d.ts +1237 -135
- package/dist/client/agentTools.d.ts.map +1 -1
- package/dist/client/agentTools.js +33 -9
- package/dist/client/agentTools.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/component/_generated/component.d.ts +9 -0
- package/dist/component/_generated/component.d.ts.map +1 -1
- package/dist/component/mediaAssets.d.ts +35 -0
- package/dist/component/mediaAssets.d.ts.map +1 -1
- package/dist/component/mediaAssets.js +81 -0
- package/dist/component/mediaAssets.js.map +1 -1
- package/dist/test.d.ts.map +1 -1
- package/dist/test.js +2 -1
- package/dist/test.js.map +1 -1
- package/package.json +9 -5
- package/dist/component/auditLog.d.ts +0 -410
- package/dist/component/auditLog.d.ts.map +0 -1
- package/dist/component/auditLog.js +0 -607
- package/dist/component/auditLog.js.map +0 -1
- package/dist/component/types.d.ts +0 -4
- package/dist/component/types.d.ts.map +0 -1
- package/dist/component/types.js +0 -2
- package/dist/component/types.js.map +0 -1
- package/src/cli/commands/admin.ts +0 -104
- package/src/cli/index.ts +0 -21
- package/src/cli/utils/detectConvexUrl.ts +0 -54
- package/src/cli/utils/openBrowser.ts +0 -16
- package/src/client/admin-config.ts +0 -138
- package/src/client/adminApi.ts +0 -942
- package/src/client/agentTools.ts +0 -1311
- package/src/client/argTypes.ts +0 -316
- package/src/client/field-types.ts +0 -187
- package/src/client/index.ts +0 -1301
- package/src/client/queryBuilder.ts +0 -1100
- package/src/client/schema/codegen.ts +0 -500
- package/src/client/schema/defineContentType.ts +0 -501
- package/src/client/schema/index.ts +0 -169
- package/src/client/schema/schemaDrift.ts +0 -574
- package/src/client/schema/typedClient.ts +0 -688
- package/src/client/schema/types.ts +0 -666
- package/src/client/types.ts +0 -723
- package/src/client/workflows.ts +0 -141
- package/src/client/wrapper.ts +0 -4304
- package/src/component/_generated/api.ts +0 -140
- package/src/component/_generated/component.ts +0 -5029
- package/src/component/_generated/dataModel.ts +0 -60
- package/src/component/_generated/server.ts +0 -156
- package/src/component/authorization.ts +0 -647
- package/src/component/authorizationHooks.ts +0 -668
- package/src/component/bulkOperations.ts +0 -687
- package/src/component/contentEntries.ts +0 -1976
- package/src/component/contentEntryMutations.ts +0 -1223
- package/src/component/contentEntryValidation.ts +0 -707
- package/src/component/contentLock.ts +0 -550
- package/src/component/contentTypeMigration.ts +0 -1064
- package/src/component/contentTypeMutations.ts +0 -969
- package/src/component/contentTypes.ts +0 -346
- package/src/component/convex.config.ts +0 -44
- package/src/component/documentTypes.ts +0 -240
- package/src/component/eventEmitter.ts +0 -485
- package/src/component/exportImport.ts +0 -1169
- package/src/component/index.ts +0 -491
- package/src/component/lib/deepReferenceResolver.ts +0 -999
- package/src/component/lib/errors.ts +0 -816
- package/src/component/lib/index.ts +0 -145
- package/src/component/lib/mediaReferenceResolver.ts +0 -495
- package/src/component/lib/metadataExtractor.ts +0 -792
- package/src/component/lib/mutationAuth.ts +0 -199
- package/src/component/lib/queries.ts +0 -79
- package/src/component/lib/ragContentChunker.ts +0 -1371
- package/src/component/lib/referenceResolver.ts +0 -430
- package/src/component/lib/slugGenerator.ts +0 -262
- package/src/component/lib/slugUniqueness.ts +0 -333
- package/src/component/lib/softDelete.ts +0 -44
- package/src/component/localeFallbackChain.ts +0 -673
- package/src/component/localeFields.ts +0 -896
- package/src/component/mediaAssetMutations.ts +0 -725
- package/src/component/mediaAssets.ts +0 -932
- package/src/component/mediaFolderMutations.ts +0 -1046
- package/src/component/mediaUploadMutations.ts +0 -224
- package/src/component/mediaVariantMutations.ts +0 -900
- package/src/component/mediaVariants.ts +0 -793
- package/src/component/ragContentIndexer.ts +0 -1067
- package/src/component/rateLimitHooks.ts +0 -572
- package/src/component/roles.ts +0 -1360
- package/src/component/scheduledPublish.ts +0 -358
- package/src/component/schema.ts +0 -617
- package/src/component/taxonomies.ts +0 -949
- package/src/component/taxonomyMutations.ts +0 -1210
- package/src/component/trash.ts +0 -724
- package/src/component/userContext.ts +0 -898
- package/src/component/validation.ts +0 -1388
- package/src/component/validators.ts +0 -949
- package/src/component/versionMutations.ts +0 -392
- package/src/component/webhookTrigger.ts +0 -1922
- package/src/react/index.ts +0 -898
- package/src/test.ts +0 -1580
|
@@ -0,0 +1,1275 @@
|
|
|
1
|
+
import { a as createMemoryHistory } from "../_chunks/_libs/@tanstack/history.mjs";
|
|
2
|
+
import { w as parseRedirect, x as mergeHeaders, f as isRedirect, y as getNormalizedURL, z as getOrigin, A as attachRouterServerSsrUtils, C as createSerializationAdapter, D as createRawStreamRPCPlugin, i as isNotFound, E as isResolvedRedirect, F as executeRewriteInput, G as defaultSerovalPlugins, H as makeSerovalPlugin, b as rootRouteId, I as defineHandlerCallback } from "../_chunks/_libs/@tanstack/router-core.mjs";
|
|
3
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
4
|
+
import { H as H3Event, t as toResponse } from "../_libs/h3-v2.mjs";
|
|
5
|
+
import { i as invariant } from "../_libs/tiny-invariant.mjs";
|
|
6
|
+
import { a as au, I as Iu, o as ou } from "../_libs/seroval.mjs";
|
|
7
|
+
import { j as jsxRuntimeExports } from "../_chunks/_libs/react.mjs";
|
|
8
|
+
import { r as renderRouterToStream, R as RouterProvider } from "../_chunks/_libs/@tanstack/react-router.mjs";
|
|
9
|
+
import "../_libs/cookie-es.mjs";
|
|
10
|
+
import "../_chunks/_libs/@tanstack/store.mjs";
|
|
11
|
+
import "../_libs/seroval-plugins.mjs";
|
|
12
|
+
import "node:stream/web";
|
|
13
|
+
import "node:stream";
|
|
14
|
+
import "../_libs/rou3.mjs";
|
|
15
|
+
import "../_libs/srvx.mjs";
|
|
16
|
+
import "node:http";
|
|
17
|
+
import "node:https";
|
|
18
|
+
import "node:http2";
|
|
19
|
+
import "../_libs/tiny-warning.mjs";
|
|
20
|
+
import "../_chunks/_libs/react-dom.mjs";
|
|
21
|
+
import "util";
|
|
22
|
+
import "crypto";
|
|
23
|
+
import "async_hooks";
|
|
24
|
+
import "stream";
|
|
25
|
+
import "../_libs/isbot.mjs";
|
|
26
|
+
import "../_chunks/_libs/@tanstack/react-store.mjs";
|
|
27
|
+
import "../_libs/use-sync-external-store.mjs";
|
|
28
|
+
function StartServer(props) {
|
|
29
|
+
return /* @__PURE__ */ jsxRuntimeExports.jsx(RouterProvider, { router: props.router });
|
|
30
|
+
}
|
|
31
|
+
const defaultStreamHandler = defineHandlerCallback(
|
|
32
|
+
({ request, router, responseHeaders }) => renderRouterToStream({
|
|
33
|
+
request,
|
|
34
|
+
router,
|
|
35
|
+
responseHeaders,
|
|
36
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(StartServer, { router })
|
|
37
|
+
})
|
|
38
|
+
);
|
|
39
|
+
const TSS_FORMDATA_CONTEXT = "__TSS_CONTEXT";
|
|
40
|
+
const TSS_SERVER_FUNCTION = /* @__PURE__ */ Symbol.for("TSS_SERVER_FUNCTION");
|
|
41
|
+
const TSS_SERVER_FUNCTION_FACTORY = /* @__PURE__ */ Symbol.for(
|
|
42
|
+
"TSS_SERVER_FUNCTION_FACTORY"
|
|
43
|
+
);
|
|
44
|
+
const X_TSS_SERIALIZED = "x-tss-serialized";
|
|
45
|
+
const X_TSS_RAW_RESPONSE = "x-tss-raw";
|
|
46
|
+
const TSS_CONTENT_TYPE_FRAMED = "application/x-tss-framed";
|
|
47
|
+
const FrameType = {
|
|
48
|
+
/** Seroval JSON chunk (NDJSON line) */
|
|
49
|
+
JSON: 0,
|
|
50
|
+
/** Raw stream data chunk */
|
|
51
|
+
CHUNK: 1,
|
|
52
|
+
/** Raw stream end (EOF) */
|
|
53
|
+
END: 2,
|
|
54
|
+
/** Raw stream error */
|
|
55
|
+
ERROR: 3
|
|
56
|
+
};
|
|
57
|
+
const FRAME_HEADER_SIZE = 9;
|
|
58
|
+
const TSS_FRAMED_PROTOCOL_VERSION = 1;
|
|
59
|
+
const TSS_CONTENT_TYPE_FRAMED_VERSIONED = `${TSS_CONTENT_TYPE_FRAMED}; v=${TSS_FRAMED_PROTOCOL_VERSION}`;
|
|
60
|
+
const GLOBAL_STORAGE_KEY = /* @__PURE__ */ Symbol.for("tanstack-start:start-storage-context");
|
|
61
|
+
const globalObj$1 = globalThis;
|
|
62
|
+
if (!globalObj$1[GLOBAL_STORAGE_KEY]) {
|
|
63
|
+
globalObj$1[GLOBAL_STORAGE_KEY] = new AsyncLocalStorage();
|
|
64
|
+
}
|
|
65
|
+
const startStorage = globalObj$1[GLOBAL_STORAGE_KEY];
|
|
66
|
+
async function runWithStartContext(context, fn) {
|
|
67
|
+
return startStorage.run(context, fn);
|
|
68
|
+
}
|
|
69
|
+
function getStartContext(opts) {
|
|
70
|
+
const context = startStorage.getStore();
|
|
71
|
+
if (!context && opts?.throwIfNotFound !== false) {
|
|
72
|
+
throw new Error(
|
|
73
|
+
`No Start context found in AsyncLocalStorage. Make sure you are using the function within the server runtime.`
|
|
74
|
+
);
|
|
75
|
+
}
|
|
76
|
+
return context;
|
|
77
|
+
}
|
|
78
|
+
const getStartOptions = () => getStartContext().startOptions;
|
|
79
|
+
const getStartContextServerOnly = getStartContext;
|
|
80
|
+
function isSafeKey(key) {
|
|
81
|
+
return key !== "__proto__" && key !== "constructor" && key !== "prototype";
|
|
82
|
+
}
|
|
83
|
+
function safeObjectMerge(target, source) {
|
|
84
|
+
const result = /* @__PURE__ */ Object.create(null);
|
|
85
|
+
if (target) {
|
|
86
|
+
for (const key of Object.keys(target)) {
|
|
87
|
+
if (isSafeKey(key)) result[key] = target[key];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (source && typeof source === "object") {
|
|
91
|
+
for (const key of Object.keys(source)) {
|
|
92
|
+
if (isSafeKey(key)) result[key] = source[key];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
function createNullProtoObject(source) {
|
|
98
|
+
if (!source) return /* @__PURE__ */ Object.create(null);
|
|
99
|
+
const obj = /* @__PURE__ */ Object.create(null);
|
|
100
|
+
for (const key of Object.keys(source)) {
|
|
101
|
+
if (isSafeKey(key)) obj[key] = source[key];
|
|
102
|
+
}
|
|
103
|
+
return obj;
|
|
104
|
+
}
|
|
105
|
+
const createServerFn = (options, __opts) => {
|
|
106
|
+
const resolvedOptions = __opts || options || {};
|
|
107
|
+
if (typeof resolvedOptions.method === "undefined") {
|
|
108
|
+
resolvedOptions.method = "GET";
|
|
109
|
+
}
|
|
110
|
+
const res = {
|
|
111
|
+
options: resolvedOptions,
|
|
112
|
+
middleware: (middleware) => {
|
|
113
|
+
const newMiddleware = [...resolvedOptions.middleware || []];
|
|
114
|
+
middleware.map((m) => {
|
|
115
|
+
if (TSS_SERVER_FUNCTION_FACTORY in m) {
|
|
116
|
+
if (m.options.middleware) {
|
|
117
|
+
newMiddleware.push(...m.options.middleware);
|
|
118
|
+
}
|
|
119
|
+
} else {
|
|
120
|
+
newMiddleware.push(m);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
const newOptions = {
|
|
124
|
+
...resolvedOptions,
|
|
125
|
+
middleware: newMiddleware
|
|
126
|
+
};
|
|
127
|
+
const res2 = createServerFn(void 0, newOptions);
|
|
128
|
+
res2[TSS_SERVER_FUNCTION_FACTORY] = true;
|
|
129
|
+
return res2;
|
|
130
|
+
},
|
|
131
|
+
inputValidator: (inputValidator) => {
|
|
132
|
+
const newOptions = { ...resolvedOptions, inputValidator };
|
|
133
|
+
return createServerFn(void 0, newOptions);
|
|
134
|
+
},
|
|
135
|
+
handler: (...args) => {
|
|
136
|
+
const [extractedFn, serverFn] = args;
|
|
137
|
+
const newOptions = { ...resolvedOptions, extractedFn, serverFn };
|
|
138
|
+
const resolvedMiddleware = [
|
|
139
|
+
...newOptions.middleware || [],
|
|
140
|
+
serverFnBaseToMiddleware(newOptions)
|
|
141
|
+
];
|
|
142
|
+
return Object.assign(
|
|
143
|
+
async (opts) => {
|
|
144
|
+
const result = await executeMiddleware$1(resolvedMiddleware, "client", {
|
|
145
|
+
...extractedFn,
|
|
146
|
+
...newOptions,
|
|
147
|
+
data: opts?.data,
|
|
148
|
+
headers: opts?.headers,
|
|
149
|
+
signal: opts?.signal,
|
|
150
|
+
fetch: opts?.fetch,
|
|
151
|
+
context: createNullProtoObject()
|
|
152
|
+
});
|
|
153
|
+
const redirect = parseRedirect(result.error);
|
|
154
|
+
if (redirect) {
|
|
155
|
+
throw redirect;
|
|
156
|
+
}
|
|
157
|
+
if (result.error) throw result.error;
|
|
158
|
+
return result.result;
|
|
159
|
+
},
|
|
160
|
+
{
|
|
161
|
+
// This copies over the URL, function ID
|
|
162
|
+
...extractedFn,
|
|
163
|
+
// The extracted function on the server-side calls
|
|
164
|
+
// this function
|
|
165
|
+
__executeServer: async (opts, signal) => {
|
|
166
|
+
const startContext = getStartContextServerOnly();
|
|
167
|
+
const serverContextAfterGlobalMiddlewares = startContext.contextAfterGlobalMiddlewares;
|
|
168
|
+
const ctx = {
|
|
169
|
+
...extractedFn,
|
|
170
|
+
...opts,
|
|
171
|
+
// Ensure we use the full serverFnMeta from the provider file's extractedFn
|
|
172
|
+
// (which has id, name, filename) rather than the partial one from SSR/client
|
|
173
|
+
// callers (which only has id)
|
|
174
|
+
serverFnMeta: extractedFn.serverFnMeta,
|
|
175
|
+
// Use safeObjectMerge for opts.context which comes from client
|
|
176
|
+
context: safeObjectMerge(
|
|
177
|
+
serverContextAfterGlobalMiddlewares,
|
|
178
|
+
opts.context
|
|
179
|
+
),
|
|
180
|
+
signal,
|
|
181
|
+
request: startContext.request
|
|
182
|
+
};
|
|
183
|
+
const result = await executeMiddleware$1(
|
|
184
|
+
resolvedMiddleware,
|
|
185
|
+
"server",
|
|
186
|
+
ctx
|
|
187
|
+
).then((d) => ({
|
|
188
|
+
// Only send the result and sendContext back to the client
|
|
189
|
+
result: d.result,
|
|
190
|
+
error: d.error,
|
|
191
|
+
context: d.sendContext
|
|
192
|
+
}));
|
|
193
|
+
return result;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
};
|
|
199
|
+
const fun = (options2) => {
|
|
200
|
+
const newOptions = {
|
|
201
|
+
...resolvedOptions,
|
|
202
|
+
...options2
|
|
203
|
+
};
|
|
204
|
+
return createServerFn(void 0, newOptions);
|
|
205
|
+
};
|
|
206
|
+
return Object.assign(fun, res);
|
|
207
|
+
};
|
|
208
|
+
async function executeMiddleware$1(middlewares, env, opts) {
|
|
209
|
+
const globalMiddlewares = getStartOptions()?.functionMiddleware || [];
|
|
210
|
+
let flattenedMiddlewares = flattenMiddlewares([
|
|
211
|
+
...globalMiddlewares,
|
|
212
|
+
...middlewares
|
|
213
|
+
]);
|
|
214
|
+
if (env === "server") {
|
|
215
|
+
const startContext = getStartContextServerOnly({ throwIfNotFound: false });
|
|
216
|
+
if (startContext?.executedRequestMiddlewares) {
|
|
217
|
+
flattenedMiddlewares = flattenedMiddlewares.filter(
|
|
218
|
+
(m) => !startContext.executedRequestMiddlewares.has(m)
|
|
219
|
+
);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
const callNextMiddleware = async (ctx) => {
|
|
223
|
+
const nextMiddleware = flattenedMiddlewares.shift();
|
|
224
|
+
if (!nextMiddleware) {
|
|
225
|
+
return ctx;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
if ("inputValidator" in nextMiddleware.options && nextMiddleware.options.inputValidator && env === "server") {
|
|
229
|
+
ctx.data = await execValidator(
|
|
230
|
+
nextMiddleware.options.inputValidator,
|
|
231
|
+
ctx.data
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
let middlewareFn = void 0;
|
|
235
|
+
if (env === "client") {
|
|
236
|
+
if ("client" in nextMiddleware.options) {
|
|
237
|
+
middlewareFn = nextMiddleware.options.client;
|
|
238
|
+
}
|
|
239
|
+
} else if ("server" in nextMiddleware.options) {
|
|
240
|
+
middlewareFn = nextMiddleware.options.server;
|
|
241
|
+
}
|
|
242
|
+
if (middlewareFn) {
|
|
243
|
+
const userNext = async (userCtx = {}) => {
|
|
244
|
+
const nextCtx = {
|
|
245
|
+
...ctx,
|
|
246
|
+
...userCtx,
|
|
247
|
+
context: safeObjectMerge(ctx.context, userCtx.context),
|
|
248
|
+
sendContext: safeObjectMerge(ctx.sendContext, userCtx.sendContext),
|
|
249
|
+
headers: mergeHeaders(ctx.headers, userCtx.headers),
|
|
250
|
+
_callSiteFetch: ctx._callSiteFetch,
|
|
251
|
+
fetch: ctx._callSiteFetch ?? userCtx.fetch ?? ctx.fetch,
|
|
252
|
+
result: userCtx.result !== void 0 ? userCtx.result : userCtx instanceof Response ? userCtx : ctx.result,
|
|
253
|
+
error: userCtx.error ?? ctx.error
|
|
254
|
+
};
|
|
255
|
+
const result2 = await callNextMiddleware(nextCtx);
|
|
256
|
+
if (result2.error) {
|
|
257
|
+
throw result2.error;
|
|
258
|
+
}
|
|
259
|
+
return result2;
|
|
260
|
+
};
|
|
261
|
+
const result = await middlewareFn({
|
|
262
|
+
...ctx,
|
|
263
|
+
next: userNext
|
|
264
|
+
});
|
|
265
|
+
if (isRedirect(result)) {
|
|
266
|
+
return {
|
|
267
|
+
...ctx,
|
|
268
|
+
error: result
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
if (result instanceof Response) {
|
|
272
|
+
return {
|
|
273
|
+
...ctx,
|
|
274
|
+
result
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
if (!result) {
|
|
278
|
+
throw new Error(
|
|
279
|
+
"User middleware returned undefined. You must call next() or return a result in your middlewares."
|
|
280
|
+
);
|
|
281
|
+
}
|
|
282
|
+
return result;
|
|
283
|
+
}
|
|
284
|
+
return callNextMiddleware(ctx);
|
|
285
|
+
} catch (error) {
|
|
286
|
+
return {
|
|
287
|
+
...ctx,
|
|
288
|
+
error
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
};
|
|
292
|
+
return callNextMiddleware({
|
|
293
|
+
...opts,
|
|
294
|
+
headers: opts.headers || {},
|
|
295
|
+
sendContext: opts.sendContext || {},
|
|
296
|
+
context: opts.context || createNullProtoObject(),
|
|
297
|
+
_callSiteFetch: opts.fetch
|
|
298
|
+
});
|
|
299
|
+
}
|
|
300
|
+
function flattenMiddlewares(middlewares, maxDepth = 100) {
|
|
301
|
+
const seen = /* @__PURE__ */ new Set();
|
|
302
|
+
const flattened = [];
|
|
303
|
+
const recurse = (middleware, depth) => {
|
|
304
|
+
if (depth > maxDepth) {
|
|
305
|
+
throw new Error(
|
|
306
|
+
`Middleware nesting depth exceeded maximum of ${maxDepth}. Check for circular references.`
|
|
307
|
+
);
|
|
308
|
+
}
|
|
309
|
+
middleware.forEach((m) => {
|
|
310
|
+
if (m.options.middleware) {
|
|
311
|
+
recurse(m.options.middleware, depth + 1);
|
|
312
|
+
}
|
|
313
|
+
if (!seen.has(m)) {
|
|
314
|
+
seen.add(m);
|
|
315
|
+
flattened.push(m);
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
};
|
|
319
|
+
recurse(middlewares, 0);
|
|
320
|
+
return flattened;
|
|
321
|
+
}
|
|
322
|
+
async function execValidator(validator, input) {
|
|
323
|
+
if (validator == null) return {};
|
|
324
|
+
if ("~standard" in validator) {
|
|
325
|
+
const result = await validator["~standard"].validate(input);
|
|
326
|
+
if (result.issues)
|
|
327
|
+
throw new Error(JSON.stringify(result.issues, void 0, 2));
|
|
328
|
+
return result.value;
|
|
329
|
+
}
|
|
330
|
+
if ("parse" in validator) {
|
|
331
|
+
return validator.parse(input);
|
|
332
|
+
}
|
|
333
|
+
if (typeof validator === "function") {
|
|
334
|
+
return validator(input);
|
|
335
|
+
}
|
|
336
|
+
throw new Error("Invalid validator type!");
|
|
337
|
+
}
|
|
338
|
+
function serverFnBaseToMiddleware(options) {
|
|
339
|
+
return {
|
|
340
|
+
"~types": void 0,
|
|
341
|
+
options: {
|
|
342
|
+
inputValidator: options.inputValidator,
|
|
343
|
+
client: async ({ next, sendContext, fetch: fetch2, ...ctx }) => {
|
|
344
|
+
const payload = {
|
|
345
|
+
...ctx,
|
|
346
|
+
// switch the sendContext over to context
|
|
347
|
+
context: sendContext,
|
|
348
|
+
fetch: fetch2
|
|
349
|
+
};
|
|
350
|
+
const res = await options.extractedFn?.(payload);
|
|
351
|
+
return next(res);
|
|
352
|
+
},
|
|
353
|
+
server: async ({ next, ...ctx }) => {
|
|
354
|
+
const result = await options.serverFn?.(ctx);
|
|
355
|
+
return next({
|
|
356
|
+
...ctx,
|
|
357
|
+
result
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
};
|
|
362
|
+
}
|
|
363
|
+
function getDefaultSerovalPlugins() {
|
|
364
|
+
const start = getStartOptions();
|
|
365
|
+
const adapters = start?.serializationAdapters;
|
|
366
|
+
return [
|
|
367
|
+
...adapters?.map(makeSerovalPlugin) ?? [],
|
|
368
|
+
...defaultSerovalPlugins
|
|
369
|
+
];
|
|
370
|
+
}
|
|
371
|
+
const GLOBAL_EVENT_STORAGE_KEY = /* @__PURE__ */ Symbol.for("tanstack-start:event-storage");
|
|
372
|
+
const globalObj = globalThis;
|
|
373
|
+
if (!globalObj[GLOBAL_EVENT_STORAGE_KEY]) {
|
|
374
|
+
globalObj[GLOBAL_EVENT_STORAGE_KEY] = new AsyncLocalStorage();
|
|
375
|
+
}
|
|
376
|
+
const eventStorage = globalObj[GLOBAL_EVENT_STORAGE_KEY];
|
|
377
|
+
function isPromiseLike(value) {
|
|
378
|
+
return typeof value.then === "function";
|
|
379
|
+
}
|
|
380
|
+
function getSetCookieValues(headers) {
|
|
381
|
+
const headersWithSetCookie = headers;
|
|
382
|
+
if (typeof headersWithSetCookie.getSetCookie === "function") {
|
|
383
|
+
return headersWithSetCookie.getSetCookie();
|
|
384
|
+
}
|
|
385
|
+
const value = headers.get("set-cookie");
|
|
386
|
+
return value ? [value] : [];
|
|
387
|
+
}
|
|
388
|
+
function mergeEventResponseHeaders(response, event) {
|
|
389
|
+
if (response.ok) {
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
const eventSetCookies = getSetCookieValues(event.res.headers);
|
|
393
|
+
if (eventSetCookies.length === 0) {
|
|
394
|
+
return;
|
|
395
|
+
}
|
|
396
|
+
const responseSetCookies = getSetCookieValues(response.headers);
|
|
397
|
+
response.headers.delete("set-cookie");
|
|
398
|
+
for (const cookie of responseSetCookies) {
|
|
399
|
+
response.headers.append("set-cookie", cookie);
|
|
400
|
+
}
|
|
401
|
+
for (const cookie of eventSetCookies) {
|
|
402
|
+
response.headers.append("set-cookie", cookie);
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
function attachResponseHeaders(value, event) {
|
|
406
|
+
if (isPromiseLike(value)) {
|
|
407
|
+
return value.then((resolved) => {
|
|
408
|
+
if (resolved instanceof Response) {
|
|
409
|
+
mergeEventResponseHeaders(resolved, event);
|
|
410
|
+
}
|
|
411
|
+
return resolved;
|
|
412
|
+
});
|
|
413
|
+
}
|
|
414
|
+
if (value instanceof Response) {
|
|
415
|
+
mergeEventResponseHeaders(value, event);
|
|
416
|
+
}
|
|
417
|
+
return value;
|
|
418
|
+
}
|
|
419
|
+
function requestHandler(handler) {
|
|
420
|
+
return (request, requestOpts) => {
|
|
421
|
+
const h3Event = new H3Event(request);
|
|
422
|
+
const response = eventStorage.run(
|
|
423
|
+
{ h3Event },
|
|
424
|
+
() => handler(request, requestOpts)
|
|
425
|
+
);
|
|
426
|
+
return toResponse(attachResponseHeaders(response, h3Event), h3Event);
|
|
427
|
+
};
|
|
428
|
+
}
|
|
429
|
+
function getH3Event() {
|
|
430
|
+
const event = eventStorage.getStore();
|
|
431
|
+
if (!event) {
|
|
432
|
+
throw new Error(
|
|
433
|
+
`No StartEvent found in AsyncLocalStorage. Make sure you are using the function within the server runtime.`
|
|
434
|
+
);
|
|
435
|
+
}
|
|
436
|
+
return event.h3Event;
|
|
437
|
+
}
|
|
438
|
+
function getResponse() {
|
|
439
|
+
const event = getH3Event();
|
|
440
|
+
return event.res;
|
|
441
|
+
}
|
|
442
|
+
async function getStartManifest(matchedRoutes) {
|
|
443
|
+
const { tsrStartManifest } = await import("./_tanstack-start-manifest_v-BwDlABVk.mjs");
|
|
444
|
+
const startManifest = tsrStartManifest();
|
|
445
|
+
const rootRoute = startManifest.routes[rootRouteId] = startManifest.routes[rootRouteId] || {};
|
|
446
|
+
rootRoute.assets = rootRoute.assets || [];
|
|
447
|
+
let script = `import('${startManifest.clientEntry}')`;
|
|
448
|
+
rootRoute.assets.push({
|
|
449
|
+
tag: "script",
|
|
450
|
+
attrs: {
|
|
451
|
+
type: "module",
|
|
452
|
+
async: true
|
|
453
|
+
},
|
|
454
|
+
children: script
|
|
455
|
+
});
|
|
456
|
+
const manifest2 = {
|
|
457
|
+
routes: Object.fromEntries(
|
|
458
|
+
Object.entries(startManifest.routes).flatMap(([k, v]) => {
|
|
459
|
+
const result = {};
|
|
460
|
+
let hasData = false;
|
|
461
|
+
if (v.preloads && v.preloads.length > 0) {
|
|
462
|
+
result["preloads"] = v.preloads;
|
|
463
|
+
hasData = true;
|
|
464
|
+
}
|
|
465
|
+
if (v.assets && v.assets.length > 0) {
|
|
466
|
+
result["assets"] = v.assets;
|
|
467
|
+
hasData = true;
|
|
468
|
+
}
|
|
469
|
+
if (!hasData) {
|
|
470
|
+
return [];
|
|
471
|
+
}
|
|
472
|
+
return [[k, result]];
|
|
473
|
+
})
|
|
474
|
+
)
|
|
475
|
+
};
|
|
476
|
+
return manifest2;
|
|
477
|
+
}
|
|
478
|
+
const textEncoder$1 = new TextEncoder();
|
|
479
|
+
const EMPTY_PAYLOAD = new Uint8Array(0);
|
|
480
|
+
function encodeFrame(type, streamId, payload) {
|
|
481
|
+
const frame = new Uint8Array(FRAME_HEADER_SIZE + payload.length);
|
|
482
|
+
frame[0] = type;
|
|
483
|
+
frame[1] = streamId >>> 24 & 255;
|
|
484
|
+
frame[2] = streamId >>> 16 & 255;
|
|
485
|
+
frame[3] = streamId >>> 8 & 255;
|
|
486
|
+
frame[4] = streamId & 255;
|
|
487
|
+
frame[5] = payload.length >>> 24 & 255;
|
|
488
|
+
frame[6] = payload.length >>> 16 & 255;
|
|
489
|
+
frame[7] = payload.length >>> 8 & 255;
|
|
490
|
+
frame[8] = payload.length & 255;
|
|
491
|
+
frame.set(payload, FRAME_HEADER_SIZE);
|
|
492
|
+
return frame;
|
|
493
|
+
}
|
|
494
|
+
function encodeJSONFrame(json) {
|
|
495
|
+
return encodeFrame(FrameType.JSON, 0, textEncoder$1.encode(json));
|
|
496
|
+
}
|
|
497
|
+
function encodeChunkFrame(streamId, chunk) {
|
|
498
|
+
return encodeFrame(FrameType.CHUNK, streamId, chunk);
|
|
499
|
+
}
|
|
500
|
+
function encodeEndFrame(streamId) {
|
|
501
|
+
return encodeFrame(FrameType.END, streamId, EMPTY_PAYLOAD);
|
|
502
|
+
}
|
|
503
|
+
function encodeErrorFrame(streamId, error) {
|
|
504
|
+
const message = error instanceof Error ? error.message : String(error ?? "Unknown error");
|
|
505
|
+
return encodeFrame(FrameType.ERROR, streamId, textEncoder$1.encode(message));
|
|
506
|
+
}
|
|
507
|
+
function createMultiplexedStream(jsonStream, rawStreams) {
|
|
508
|
+
let activePumps = 1 + rawStreams.size;
|
|
509
|
+
let controllerRef = null;
|
|
510
|
+
let cancelled = false;
|
|
511
|
+
const cancelReaders = [];
|
|
512
|
+
const safeEnqueue = (chunk) => {
|
|
513
|
+
if (cancelled || !controllerRef) return;
|
|
514
|
+
try {
|
|
515
|
+
controllerRef.enqueue(chunk);
|
|
516
|
+
} catch {
|
|
517
|
+
}
|
|
518
|
+
};
|
|
519
|
+
const safeError = (err) => {
|
|
520
|
+
if (cancelled || !controllerRef) return;
|
|
521
|
+
try {
|
|
522
|
+
controllerRef.error(err);
|
|
523
|
+
} catch {
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
const safeClose = () => {
|
|
527
|
+
if (cancelled || !controllerRef) return;
|
|
528
|
+
try {
|
|
529
|
+
controllerRef.close();
|
|
530
|
+
} catch {
|
|
531
|
+
}
|
|
532
|
+
};
|
|
533
|
+
const checkComplete = () => {
|
|
534
|
+
activePumps--;
|
|
535
|
+
if (activePumps === 0) {
|
|
536
|
+
safeClose();
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
return new ReadableStream({
|
|
540
|
+
start(controller) {
|
|
541
|
+
controllerRef = controller;
|
|
542
|
+
cancelReaders.length = 0;
|
|
543
|
+
const pumpJSON = async () => {
|
|
544
|
+
const reader = jsonStream.getReader();
|
|
545
|
+
cancelReaders.push(() => {
|
|
546
|
+
reader.cancel().catch(() => {
|
|
547
|
+
});
|
|
548
|
+
});
|
|
549
|
+
try {
|
|
550
|
+
while (true) {
|
|
551
|
+
const { done, value } = await reader.read();
|
|
552
|
+
if (cancelled) break;
|
|
553
|
+
if (done) break;
|
|
554
|
+
safeEnqueue(encodeJSONFrame(value));
|
|
555
|
+
}
|
|
556
|
+
} catch (error) {
|
|
557
|
+
safeError(error);
|
|
558
|
+
} finally {
|
|
559
|
+
reader.releaseLock();
|
|
560
|
+
checkComplete();
|
|
561
|
+
}
|
|
562
|
+
};
|
|
563
|
+
const pumpRawStream = async (streamId, stream) => {
|
|
564
|
+
const reader = stream.getReader();
|
|
565
|
+
cancelReaders.push(() => {
|
|
566
|
+
reader.cancel().catch(() => {
|
|
567
|
+
});
|
|
568
|
+
});
|
|
569
|
+
try {
|
|
570
|
+
while (true) {
|
|
571
|
+
const { done, value } = await reader.read();
|
|
572
|
+
if (cancelled) break;
|
|
573
|
+
if (done) {
|
|
574
|
+
safeEnqueue(encodeEndFrame(streamId));
|
|
575
|
+
break;
|
|
576
|
+
}
|
|
577
|
+
safeEnqueue(encodeChunkFrame(streamId, value));
|
|
578
|
+
}
|
|
579
|
+
} catch (error) {
|
|
580
|
+
safeEnqueue(encodeErrorFrame(streamId, error));
|
|
581
|
+
} finally {
|
|
582
|
+
reader.releaseLock();
|
|
583
|
+
checkComplete();
|
|
584
|
+
}
|
|
585
|
+
};
|
|
586
|
+
pumpJSON();
|
|
587
|
+
for (const [streamId, stream] of rawStreams) {
|
|
588
|
+
pumpRawStream(streamId, stream);
|
|
589
|
+
}
|
|
590
|
+
},
|
|
591
|
+
cancel() {
|
|
592
|
+
cancelled = true;
|
|
593
|
+
controllerRef = null;
|
|
594
|
+
for (const cancelReader of cancelReaders) {
|
|
595
|
+
cancelReader();
|
|
596
|
+
}
|
|
597
|
+
cancelReaders.length = 0;
|
|
598
|
+
}
|
|
599
|
+
});
|
|
600
|
+
}
|
|
601
|
+
const manifest = { "dff4e5b7f7b29b6a323200a2df0a5335d739cf583e83c9e514598af6b5ade819": {
|
|
602
|
+
functionName: "getServerConfig_createServerFn_handler",
|
|
603
|
+
importer: () => import("./config.server-D7JHDcDv.mjs")
|
|
604
|
+
} };
|
|
605
|
+
async function getServerFnById(id) {
|
|
606
|
+
const serverFnInfo = manifest[id];
|
|
607
|
+
if (!serverFnInfo) {
|
|
608
|
+
throw new Error("Server function info not found for " + id);
|
|
609
|
+
}
|
|
610
|
+
const fnModule = await serverFnInfo.importer();
|
|
611
|
+
if (!fnModule) {
|
|
612
|
+
console.info("serverFnInfo", serverFnInfo);
|
|
613
|
+
throw new Error("Server function module not resolved for " + id);
|
|
614
|
+
}
|
|
615
|
+
const action = fnModule[serverFnInfo.functionName];
|
|
616
|
+
if (!action) {
|
|
617
|
+
console.info("serverFnInfo", serverFnInfo);
|
|
618
|
+
console.info("fnModule", fnModule);
|
|
619
|
+
throw new Error(
|
|
620
|
+
`Server function module export not resolved for serverFn ID: ${id}`
|
|
621
|
+
);
|
|
622
|
+
}
|
|
623
|
+
return action;
|
|
624
|
+
}
|
|
625
|
+
let serovalPlugins = void 0;
|
|
626
|
+
const textEncoder = new TextEncoder();
|
|
627
|
+
const FORM_DATA_CONTENT_TYPES = [
|
|
628
|
+
"multipart/form-data",
|
|
629
|
+
"application/x-www-form-urlencoded"
|
|
630
|
+
];
|
|
631
|
+
const MAX_PAYLOAD_SIZE = 1e6;
|
|
632
|
+
const handleServerAction = async ({
|
|
633
|
+
request,
|
|
634
|
+
context,
|
|
635
|
+
serverFnId
|
|
636
|
+
}) => {
|
|
637
|
+
const controller = new AbortController();
|
|
638
|
+
const signal = controller.signal;
|
|
639
|
+
const abort = () => controller.abort();
|
|
640
|
+
request.signal.addEventListener("abort", abort);
|
|
641
|
+
const method = request.method;
|
|
642
|
+
const methodUpper = method.toUpperCase();
|
|
643
|
+
const methodLower = method.toLowerCase();
|
|
644
|
+
const url = new URL(request.url);
|
|
645
|
+
const action = await getServerFnById(serverFnId);
|
|
646
|
+
const isServerFn = request.headers.get("x-tsr-serverFn") === "true";
|
|
647
|
+
if (!serovalPlugins) {
|
|
648
|
+
serovalPlugins = getDefaultSerovalPlugins();
|
|
649
|
+
}
|
|
650
|
+
const contentType = request.headers.get("Content-Type");
|
|
651
|
+
function parsePayload(payload) {
|
|
652
|
+
const parsedPayload = Iu(payload, { plugins: serovalPlugins });
|
|
653
|
+
return parsedPayload;
|
|
654
|
+
}
|
|
655
|
+
const response = await (async () => {
|
|
656
|
+
try {
|
|
657
|
+
let serializeResult = function(res2) {
|
|
658
|
+
let nonStreamingBody = void 0;
|
|
659
|
+
const alsResponse = getResponse();
|
|
660
|
+
if (res2 !== void 0) {
|
|
661
|
+
const rawStreams = /* @__PURE__ */ new Map();
|
|
662
|
+
const rawStreamPlugin = createRawStreamRPCPlugin(
|
|
663
|
+
(id, stream2) => {
|
|
664
|
+
rawStreams.set(id, stream2);
|
|
665
|
+
}
|
|
666
|
+
);
|
|
667
|
+
const plugins = [rawStreamPlugin, ...serovalPlugins || []];
|
|
668
|
+
let done = false;
|
|
669
|
+
const callbacks = {
|
|
670
|
+
onParse: (value) => {
|
|
671
|
+
nonStreamingBody = value;
|
|
672
|
+
},
|
|
673
|
+
onDone: () => {
|
|
674
|
+
done = true;
|
|
675
|
+
},
|
|
676
|
+
onError: (error) => {
|
|
677
|
+
throw error;
|
|
678
|
+
}
|
|
679
|
+
};
|
|
680
|
+
au(res2, {
|
|
681
|
+
refs: /* @__PURE__ */ new Map(),
|
|
682
|
+
plugins,
|
|
683
|
+
onParse(value) {
|
|
684
|
+
callbacks.onParse(value);
|
|
685
|
+
},
|
|
686
|
+
onDone() {
|
|
687
|
+
callbacks.onDone();
|
|
688
|
+
},
|
|
689
|
+
onError: (error) => {
|
|
690
|
+
callbacks.onError(error);
|
|
691
|
+
}
|
|
692
|
+
});
|
|
693
|
+
if (done && rawStreams.size === 0) {
|
|
694
|
+
return new Response(
|
|
695
|
+
nonStreamingBody ? JSON.stringify(nonStreamingBody) : void 0,
|
|
696
|
+
{
|
|
697
|
+
status: alsResponse.status,
|
|
698
|
+
statusText: alsResponse.statusText,
|
|
699
|
+
headers: {
|
|
700
|
+
"Content-Type": "application/json",
|
|
701
|
+
[X_TSS_SERIALIZED]: "true"
|
|
702
|
+
}
|
|
703
|
+
}
|
|
704
|
+
);
|
|
705
|
+
}
|
|
706
|
+
if (rawStreams.size > 0) {
|
|
707
|
+
const jsonStream = new ReadableStream({
|
|
708
|
+
start(controller2) {
|
|
709
|
+
callbacks.onParse = (value) => {
|
|
710
|
+
controller2.enqueue(JSON.stringify(value) + "\n");
|
|
711
|
+
};
|
|
712
|
+
callbacks.onDone = () => {
|
|
713
|
+
try {
|
|
714
|
+
controller2.close();
|
|
715
|
+
} catch {
|
|
716
|
+
}
|
|
717
|
+
};
|
|
718
|
+
callbacks.onError = (error) => controller2.error(error);
|
|
719
|
+
if (nonStreamingBody !== void 0) {
|
|
720
|
+
callbacks.onParse(nonStreamingBody);
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
});
|
|
724
|
+
const multiplexedStream = createMultiplexedStream(
|
|
725
|
+
jsonStream,
|
|
726
|
+
rawStreams
|
|
727
|
+
);
|
|
728
|
+
return new Response(multiplexedStream, {
|
|
729
|
+
status: alsResponse.status,
|
|
730
|
+
statusText: alsResponse.statusText,
|
|
731
|
+
headers: {
|
|
732
|
+
"Content-Type": TSS_CONTENT_TYPE_FRAMED_VERSIONED,
|
|
733
|
+
[X_TSS_SERIALIZED]: "true"
|
|
734
|
+
}
|
|
735
|
+
});
|
|
736
|
+
}
|
|
737
|
+
const stream = new ReadableStream({
|
|
738
|
+
start(controller2) {
|
|
739
|
+
callbacks.onParse = (value) => controller2.enqueue(
|
|
740
|
+
textEncoder.encode(JSON.stringify(value) + "\n")
|
|
741
|
+
);
|
|
742
|
+
callbacks.onDone = () => {
|
|
743
|
+
try {
|
|
744
|
+
controller2.close();
|
|
745
|
+
} catch (error) {
|
|
746
|
+
controller2.error(error);
|
|
747
|
+
}
|
|
748
|
+
};
|
|
749
|
+
callbacks.onError = (error) => controller2.error(error);
|
|
750
|
+
if (nonStreamingBody !== void 0) {
|
|
751
|
+
callbacks.onParse(nonStreamingBody);
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
});
|
|
755
|
+
return new Response(stream, {
|
|
756
|
+
status: alsResponse.status,
|
|
757
|
+
statusText: alsResponse.statusText,
|
|
758
|
+
headers: {
|
|
759
|
+
"Content-Type": "application/x-ndjson",
|
|
760
|
+
[X_TSS_SERIALIZED]: "true"
|
|
761
|
+
}
|
|
762
|
+
});
|
|
763
|
+
}
|
|
764
|
+
return new Response(void 0, {
|
|
765
|
+
status: alsResponse.status,
|
|
766
|
+
statusText: alsResponse.statusText
|
|
767
|
+
});
|
|
768
|
+
};
|
|
769
|
+
let res = await (async () => {
|
|
770
|
+
if (FORM_DATA_CONTENT_TYPES.some(
|
|
771
|
+
(type) => contentType && contentType.includes(type)
|
|
772
|
+
)) {
|
|
773
|
+
invariant(
|
|
774
|
+
methodLower !== "get",
|
|
775
|
+
"GET requests with FormData payloads are not supported"
|
|
776
|
+
);
|
|
777
|
+
const formData = await request.formData();
|
|
778
|
+
const serializedContext = formData.get(TSS_FORMDATA_CONTEXT);
|
|
779
|
+
formData.delete(TSS_FORMDATA_CONTEXT);
|
|
780
|
+
const params = {
|
|
781
|
+
context,
|
|
782
|
+
data: formData,
|
|
783
|
+
method: methodUpper
|
|
784
|
+
};
|
|
785
|
+
if (typeof serializedContext === "string") {
|
|
786
|
+
try {
|
|
787
|
+
const parsedContext = JSON.parse(serializedContext);
|
|
788
|
+
const deserializedContext = Iu(parsedContext, {
|
|
789
|
+
plugins: serovalPlugins
|
|
790
|
+
});
|
|
791
|
+
if (typeof deserializedContext === "object" && deserializedContext) {
|
|
792
|
+
params.context = safeObjectMerge(
|
|
793
|
+
context,
|
|
794
|
+
deserializedContext
|
|
795
|
+
);
|
|
796
|
+
}
|
|
797
|
+
} catch (e) {
|
|
798
|
+
if (false) ;
|
|
799
|
+
}
|
|
800
|
+
}
|
|
801
|
+
return await action(params, signal);
|
|
802
|
+
}
|
|
803
|
+
if (methodLower === "get") {
|
|
804
|
+
const payloadParam = url.searchParams.get("payload");
|
|
805
|
+
if (payloadParam && payloadParam.length > MAX_PAYLOAD_SIZE) {
|
|
806
|
+
throw new Error("Payload too large");
|
|
807
|
+
}
|
|
808
|
+
const payload2 = payloadParam ? parsePayload(JSON.parse(payloadParam)) : {};
|
|
809
|
+
payload2.context = safeObjectMerge(context, payload2.context);
|
|
810
|
+
payload2.method = methodUpper;
|
|
811
|
+
return await action(payload2, signal);
|
|
812
|
+
}
|
|
813
|
+
if (methodLower !== "post") {
|
|
814
|
+
throw new Error("expected POST method");
|
|
815
|
+
}
|
|
816
|
+
let jsonPayload;
|
|
817
|
+
if (contentType?.includes("application/json")) {
|
|
818
|
+
jsonPayload = await request.json();
|
|
819
|
+
}
|
|
820
|
+
const payload = jsonPayload ? parsePayload(jsonPayload) : {};
|
|
821
|
+
payload.context = safeObjectMerge(payload.context, context);
|
|
822
|
+
payload.method = methodUpper;
|
|
823
|
+
return await action(payload, signal);
|
|
824
|
+
})();
|
|
825
|
+
const unwrapped = res.result || res.error;
|
|
826
|
+
if (isNotFound(res)) {
|
|
827
|
+
res = isNotFoundResponse(res);
|
|
828
|
+
}
|
|
829
|
+
if (!isServerFn) {
|
|
830
|
+
return unwrapped;
|
|
831
|
+
}
|
|
832
|
+
if (unwrapped instanceof Response) {
|
|
833
|
+
if (isRedirect(unwrapped)) {
|
|
834
|
+
return unwrapped;
|
|
835
|
+
}
|
|
836
|
+
unwrapped.headers.set(X_TSS_RAW_RESPONSE, "true");
|
|
837
|
+
return unwrapped;
|
|
838
|
+
}
|
|
839
|
+
return serializeResult(res);
|
|
840
|
+
} catch (error) {
|
|
841
|
+
if (error instanceof Response) {
|
|
842
|
+
return error;
|
|
843
|
+
}
|
|
844
|
+
if (isNotFound(error)) {
|
|
845
|
+
return isNotFoundResponse(error);
|
|
846
|
+
}
|
|
847
|
+
console.info();
|
|
848
|
+
console.info("Server Fn Error!");
|
|
849
|
+
console.info();
|
|
850
|
+
console.error(error);
|
|
851
|
+
console.info();
|
|
852
|
+
const serializedError = JSON.stringify(
|
|
853
|
+
await Promise.resolve(
|
|
854
|
+
ou(error, {
|
|
855
|
+
refs: /* @__PURE__ */ new Map(),
|
|
856
|
+
plugins: serovalPlugins
|
|
857
|
+
})
|
|
858
|
+
)
|
|
859
|
+
);
|
|
860
|
+
const response2 = getResponse();
|
|
861
|
+
return new Response(serializedError, {
|
|
862
|
+
status: response2.status ?? 500,
|
|
863
|
+
statusText: response2.statusText,
|
|
864
|
+
headers: {
|
|
865
|
+
"Content-Type": "application/json",
|
|
866
|
+
[X_TSS_SERIALIZED]: "true"
|
|
867
|
+
}
|
|
868
|
+
});
|
|
869
|
+
}
|
|
870
|
+
})();
|
|
871
|
+
request.signal.removeEventListener("abort", abort);
|
|
872
|
+
return response;
|
|
873
|
+
};
|
|
874
|
+
function isNotFoundResponse(error) {
|
|
875
|
+
const { headers, ...rest } = error;
|
|
876
|
+
return new Response(JSON.stringify(rest), {
|
|
877
|
+
status: 404,
|
|
878
|
+
headers: {
|
|
879
|
+
"Content-Type": "application/json",
|
|
880
|
+
...headers || {}
|
|
881
|
+
}
|
|
882
|
+
});
|
|
883
|
+
}
|
|
884
|
+
const HEADERS = {
|
|
885
|
+
TSS_SHELL: "X-TSS_SHELL"
|
|
886
|
+
};
|
|
887
|
+
const ServerFunctionSerializationAdapter = createSerializationAdapter({
|
|
888
|
+
key: "$TSS/serverfn",
|
|
889
|
+
test: (v) => {
|
|
890
|
+
if (typeof v !== "function") return false;
|
|
891
|
+
if (!(TSS_SERVER_FUNCTION in v)) return false;
|
|
892
|
+
return !!v[TSS_SERVER_FUNCTION];
|
|
893
|
+
},
|
|
894
|
+
toSerializable: ({ serverFnMeta }) => ({ functionId: serverFnMeta.id }),
|
|
895
|
+
fromSerializable: ({ functionId }) => {
|
|
896
|
+
const fn = async (opts, signal) => {
|
|
897
|
+
const serverFn = await getServerFnById(functionId);
|
|
898
|
+
const result = await serverFn(opts ?? {}, signal);
|
|
899
|
+
return result.result;
|
|
900
|
+
};
|
|
901
|
+
return fn;
|
|
902
|
+
}
|
|
903
|
+
});
|
|
904
|
+
function getStartResponseHeaders(opts) {
|
|
905
|
+
const headers = mergeHeaders(
|
|
906
|
+
{
|
|
907
|
+
"Content-Type": "text/html; charset=utf-8"
|
|
908
|
+
},
|
|
909
|
+
...opts.router.state.matches.map((match) => {
|
|
910
|
+
return match.headers;
|
|
911
|
+
})
|
|
912
|
+
);
|
|
913
|
+
return headers;
|
|
914
|
+
}
|
|
915
|
+
let entriesPromise;
|
|
916
|
+
let manifestPromise;
|
|
917
|
+
async function loadEntries() {
|
|
918
|
+
const routerEntry = await import("./router-DDWcF-kt.mjs").then((n) => n.s);
|
|
919
|
+
const startEntry = await import("./start-HYkvq4Ni.mjs");
|
|
920
|
+
return { startEntry, routerEntry };
|
|
921
|
+
}
|
|
922
|
+
function getEntries() {
|
|
923
|
+
if (!entriesPromise) {
|
|
924
|
+
entriesPromise = loadEntries();
|
|
925
|
+
}
|
|
926
|
+
return entriesPromise;
|
|
927
|
+
}
|
|
928
|
+
function getManifest(matchedRoutes) {
|
|
929
|
+
if (!manifestPromise) {
|
|
930
|
+
manifestPromise = getStartManifest();
|
|
931
|
+
}
|
|
932
|
+
return manifestPromise;
|
|
933
|
+
}
|
|
934
|
+
const ROUTER_BASEPATH = "/";
|
|
935
|
+
const SERVER_FN_BASE = "/_serverFn/";
|
|
936
|
+
const IS_PRERENDERING = process.env.TSS_PRERENDERING === "true";
|
|
937
|
+
const IS_SHELL_ENV = process.env.TSS_SHELL === "true";
|
|
938
|
+
const ERR_NO_RESPONSE = "Internal Server Error";
|
|
939
|
+
const ERR_NO_DEFER = "Internal Server Error";
|
|
940
|
+
function throwRouteHandlerError() {
|
|
941
|
+
throw new Error(ERR_NO_RESPONSE);
|
|
942
|
+
}
|
|
943
|
+
function throwIfMayNotDefer() {
|
|
944
|
+
throw new Error(ERR_NO_DEFER);
|
|
945
|
+
}
|
|
946
|
+
function isSpecialResponse(value) {
|
|
947
|
+
return value instanceof Response || isRedirect(value);
|
|
948
|
+
}
|
|
949
|
+
function handleCtxResult(result) {
|
|
950
|
+
if (isSpecialResponse(result)) {
|
|
951
|
+
return { response: result };
|
|
952
|
+
}
|
|
953
|
+
return result;
|
|
954
|
+
}
|
|
955
|
+
function executeMiddleware(middlewares, ctx) {
|
|
956
|
+
let index = -1;
|
|
957
|
+
const next = async (nextCtx) => {
|
|
958
|
+
if (nextCtx) {
|
|
959
|
+
if (nextCtx.context) {
|
|
960
|
+
ctx.context = safeObjectMerge(ctx.context, nextCtx.context);
|
|
961
|
+
}
|
|
962
|
+
for (const key of Object.keys(nextCtx)) {
|
|
963
|
+
if (key !== "context") {
|
|
964
|
+
ctx[key] = nextCtx[key];
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
}
|
|
968
|
+
index++;
|
|
969
|
+
const middleware = middlewares[index];
|
|
970
|
+
if (!middleware) return ctx;
|
|
971
|
+
let result;
|
|
972
|
+
try {
|
|
973
|
+
result = await middleware({ ...ctx, next });
|
|
974
|
+
} catch (err) {
|
|
975
|
+
if (isSpecialResponse(err)) {
|
|
976
|
+
ctx.response = err;
|
|
977
|
+
return ctx;
|
|
978
|
+
}
|
|
979
|
+
throw err;
|
|
980
|
+
}
|
|
981
|
+
const normalized = handleCtxResult(result);
|
|
982
|
+
if (normalized) {
|
|
983
|
+
if (normalized.response !== void 0) {
|
|
984
|
+
ctx.response = normalized.response;
|
|
985
|
+
}
|
|
986
|
+
if (normalized.context) {
|
|
987
|
+
ctx.context = safeObjectMerge(ctx.context, normalized.context);
|
|
988
|
+
}
|
|
989
|
+
}
|
|
990
|
+
return ctx;
|
|
991
|
+
};
|
|
992
|
+
return next();
|
|
993
|
+
}
|
|
994
|
+
function handlerToMiddleware(handler, mayDefer = false) {
|
|
995
|
+
if (mayDefer) {
|
|
996
|
+
return handler;
|
|
997
|
+
}
|
|
998
|
+
return async (ctx) => {
|
|
999
|
+
const response = await handler({ ...ctx, next: throwIfMayNotDefer });
|
|
1000
|
+
if (!response) {
|
|
1001
|
+
throwRouteHandlerError();
|
|
1002
|
+
}
|
|
1003
|
+
return response;
|
|
1004
|
+
};
|
|
1005
|
+
}
|
|
1006
|
+
function createStartHandler(cb) {
|
|
1007
|
+
const startRequestResolver = async (request, requestOpts) => {
|
|
1008
|
+
let router = null;
|
|
1009
|
+
let cbWillCleanup = false;
|
|
1010
|
+
try {
|
|
1011
|
+
const url = getNormalizedURL(request.url);
|
|
1012
|
+
const href = url.pathname + url.search + url.hash;
|
|
1013
|
+
const origin = getOrigin(request);
|
|
1014
|
+
const entries = await getEntries();
|
|
1015
|
+
const startOptions = await entries.startEntry.startInstance?.getOptions() || {};
|
|
1016
|
+
const serializationAdapters = [
|
|
1017
|
+
...startOptions.serializationAdapters || [],
|
|
1018
|
+
ServerFunctionSerializationAdapter
|
|
1019
|
+
];
|
|
1020
|
+
const requestStartOptions = {
|
|
1021
|
+
...startOptions,
|
|
1022
|
+
serializationAdapters
|
|
1023
|
+
};
|
|
1024
|
+
const flattenedRequestMiddlewares = startOptions.requestMiddleware ? flattenMiddlewares(startOptions.requestMiddleware) : [];
|
|
1025
|
+
const executedRequestMiddlewares = new Set(
|
|
1026
|
+
flattenedRequestMiddlewares
|
|
1027
|
+
);
|
|
1028
|
+
const getRouter = async () => {
|
|
1029
|
+
if (router) return router;
|
|
1030
|
+
router = await entries.routerEntry.getRouter();
|
|
1031
|
+
let isShell = IS_SHELL_ENV;
|
|
1032
|
+
if (IS_PRERENDERING && !isShell) {
|
|
1033
|
+
isShell = request.headers.get(HEADERS.TSS_SHELL) === "true";
|
|
1034
|
+
}
|
|
1035
|
+
const history = createMemoryHistory({
|
|
1036
|
+
initialEntries: [href]
|
|
1037
|
+
});
|
|
1038
|
+
router.update({
|
|
1039
|
+
history,
|
|
1040
|
+
isShell,
|
|
1041
|
+
isPrerendering: IS_PRERENDERING,
|
|
1042
|
+
origin: router.options.origin ?? origin,
|
|
1043
|
+
...{
|
|
1044
|
+
defaultSsr: requestStartOptions.defaultSsr,
|
|
1045
|
+
serializationAdapters: [
|
|
1046
|
+
...requestStartOptions.serializationAdapters,
|
|
1047
|
+
...router.options.serializationAdapters || []
|
|
1048
|
+
]
|
|
1049
|
+
},
|
|
1050
|
+
basepath: ROUTER_BASEPATH
|
|
1051
|
+
});
|
|
1052
|
+
return router;
|
|
1053
|
+
};
|
|
1054
|
+
if (SERVER_FN_BASE && url.pathname.startsWith(SERVER_FN_BASE)) {
|
|
1055
|
+
const serverFnId = url.pathname.slice(SERVER_FN_BASE.length).split("/")[0];
|
|
1056
|
+
if (!serverFnId) {
|
|
1057
|
+
throw new Error("Invalid server action param for serverFnId");
|
|
1058
|
+
}
|
|
1059
|
+
const serverFnHandler = async ({ context }) => {
|
|
1060
|
+
return runWithStartContext(
|
|
1061
|
+
{
|
|
1062
|
+
getRouter,
|
|
1063
|
+
startOptions: requestStartOptions,
|
|
1064
|
+
contextAfterGlobalMiddlewares: context,
|
|
1065
|
+
request,
|
|
1066
|
+
executedRequestMiddlewares
|
|
1067
|
+
},
|
|
1068
|
+
() => handleServerAction({
|
|
1069
|
+
request,
|
|
1070
|
+
context: requestOpts?.context,
|
|
1071
|
+
serverFnId
|
|
1072
|
+
})
|
|
1073
|
+
);
|
|
1074
|
+
};
|
|
1075
|
+
const middlewares2 = flattenedRequestMiddlewares.map(
|
|
1076
|
+
(d) => d.options.server
|
|
1077
|
+
);
|
|
1078
|
+
const ctx2 = await executeMiddleware([...middlewares2, serverFnHandler], {
|
|
1079
|
+
request,
|
|
1080
|
+
context: createNullProtoObject(requestOpts?.context)
|
|
1081
|
+
});
|
|
1082
|
+
return handleRedirectResponse(ctx2.response, request, getRouter);
|
|
1083
|
+
}
|
|
1084
|
+
const executeRouter = async (serverContext, matchedRoutes) => {
|
|
1085
|
+
const acceptHeader = request.headers.get("Accept") || "*/*";
|
|
1086
|
+
const acceptParts = acceptHeader.split(",");
|
|
1087
|
+
const supportedMimeTypes = ["*/*", "text/html"];
|
|
1088
|
+
const isSupported = supportedMimeTypes.some(
|
|
1089
|
+
(mimeType) => acceptParts.some((part) => part.trim().startsWith(mimeType))
|
|
1090
|
+
);
|
|
1091
|
+
if (!isSupported) {
|
|
1092
|
+
return Response.json(
|
|
1093
|
+
{ error: "Only HTML requests are supported here" },
|
|
1094
|
+
{ status: 500 }
|
|
1095
|
+
);
|
|
1096
|
+
}
|
|
1097
|
+
const manifest2 = await getManifest(matchedRoutes);
|
|
1098
|
+
const routerInstance = await getRouter();
|
|
1099
|
+
attachRouterServerSsrUtils({
|
|
1100
|
+
router: routerInstance,
|
|
1101
|
+
manifest: manifest2
|
|
1102
|
+
});
|
|
1103
|
+
routerInstance.update({ additionalContext: { serverContext } });
|
|
1104
|
+
await routerInstance.load();
|
|
1105
|
+
if (routerInstance.state.redirect) {
|
|
1106
|
+
return routerInstance.state.redirect;
|
|
1107
|
+
}
|
|
1108
|
+
await routerInstance.serverSsr.dehydrate();
|
|
1109
|
+
const responseHeaders = getStartResponseHeaders({
|
|
1110
|
+
router: routerInstance
|
|
1111
|
+
});
|
|
1112
|
+
cbWillCleanup = true;
|
|
1113
|
+
return cb({
|
|
1114
|
+
request,
|
|
1115
|
+
router: routerInstance,
|
|
1116
|
+
responseHeaders
|
|
1117
|
+
});
|
|
1118
|
+
};
|
|
1119
|
+
const requestHandlerMiddleware = async ({ context }) => {
|
|
1120
|
+
return runWithStartContext(
|
|
1121
|
+
{
|
|
1122
|
+
getRouter,
|
|
1123
|
+
startOptions: requestStartOptions,
|
|
1124
|
+
contextAfterGlobalMiddlewares: context,
|
|
1125
|
+
request,
|
|
1126
|
+
executedRequestMiddlewares
|
|
1127
|
+
},
|
|
1128
|
+
async () => {
|
|
1129
|
+
try {
|
|
1130
|
+
return await handleServerRoutes({
|
|
1131
|
+
getRouter,
|
|
1132
|
+
request,
|
|
1133
|
+
url,
|
|
1134
|
+
executeRouter,
|
|
1135
|
+
context,
|
|
1136
|
+
executedRequestMiddlewares
|
|
1137
|
+
});
|
|
1138
|
+
} catch (err) {
|
|
1139
|
+
if (err instanceof Response) {
|
|
1140
|
+
return err;
|
|
1141
|
+
}
|
|
1142
|
+
throw err;
|
|
1143
|
+
}
|
|
1144
|
+
}
|
|
1145
|
+
);
|
|
1146
|
+
};
|
|
1147
|
+
const middlewares = flattenedRequestMiddlewares.map(
|
|
1148
|
+
(d) => d.options.server
|
|
1149
|
+
);
|
|
1150
|
+
const ctx = await executeMiddleware(
|
|
1151
|
+
[...middlewares, requestHandlerMiddleware],
|
|
1152
|
+
{ request, context: createNullProtoObject(requestOpts?.context) }
|
|
1153
|
+
);
|
|
1154
|
+
return handleRedirectResponse(ctx.response, request, getRouter);
|
|
1155
|
+
} finally {
|
|
1156
|
+
if (router && !cbWillCleanup) {
|
|
1157
|
+
router.serverSsr?.cleanup();
|
|
1158
|
+
}
|
|
1159
|
+
router = null;
|
|
1160
|
+
}
|
|
1161
|
+
};
|
|
1162
|
+
return requestHandler(startRequestResolver);
|
|
1163
|
+
}
|
|
1164
|
+
async function handleRedirectResponse(response, request, getRouter) {
|
|
1165
|
+
if (!isRedirect(response)) {
|
|
1166
|
+
return response;
|
|
1167
|
+
}
|
|
1168
|
+
if (isResolvedRedirect(response)) {
|
|
1169
|
+
if (request.headers.get("x-tsr-serverFn") === "true") {
|
|
1170
|
+
return Response.json(
|
|
1171
|
+
{ ...response.options, isSerializedRedirect: true },
|
|
1172
|
+
{ headers: response.headers }
|
|
1173
|
+
);
|
|
1174
|
+
}
|
|
1175
|
+
return response;
|
|
1176
|
+
}
|
|
1177
|
+
const opts = response.options;
|
|
1178
|
+
if (opts.to && typeof opts.to === "string" && !opts.to.startsWith("/")) {
|
|
1179
|
+
throw new Error(
|
|
1180
|
+
`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)}`
|
|
1181
|
+
);
|
|
1182
|
+
}
|
|
1183
|
+
if (["params", "search", "hash"].some(
|
|
1184
|
+
(d) => typeof opts[d] === "function"
|
|
1185
|
+
)) {
|
|
1186
|
+
throw new Error(
|
|
1187
|
+
`Server side redirects must use static search, params, and hash values and do not support functional values. Received functional values for: ${Object.keys(
|
|
1188
|
+
opts
|
|
1189
|
+
).filter((d) => typeof opts[d] === "function").map((d) => `"${d}"`).join(", ")}`
|
|
1190
|
+
);
|
|
1191
|
+
}
|
|
1192
|
+
const router = await getRouter();
|
|
1193
|
+
const redirect = router.resolveRedirect(response);
|
|
1194
|
+
if (request.headers.get("x-tsr-serverFn") === "true") {
|
|
1195
|
+
return Response.json(
|
|
1196
|
+
{ ...response.options, isSerializedRedirect: true },
|
|
1197
|
+
{ headers: response.headers }
|
|
1198
|
+
);
|
|
1199
|
+
}
|
|
1200
|
+
return redirect;
|
|
1201
|
+
}
|
|
1202
|
+
async function handleServerRoutes({
|
|
1203
|
+
getRouter,
|
|
1204
|
+
request,
|
|
1205
|
+
url,
|
|
1206
|
+
executeRouter,
|
|
1207
|
+
context,
|
|
1208
|
+
executedRequestMiddlewares
|
|
1209
|
+
}) {
|
|
1210
|
+
const router = await getRouter();
|
|
1211
|
+
const rewrittenUrl = executeRewriteInput(router.rewrite, url);
|
|
1212
|
+
const pathname = rewrittenUrl.pathname;
|
|
1213
|
+
const { matchedRoutes, foundRoute, routeParams } = router.getMatchedRoutes(pathname);
|
|
1214
|
+
const isExactMatch = foundRoute && routeParams["**"] === void 0;
|
|
1215
|
+
const routeMiddlewares = [];
|
|
1216
|
+
for (const route of matchedRoutes) {
|
|
1217
|
+
const serverMiddleware = route.options.server?.middleware;
|
|
1218
|
+
if (serverMiddleware) {
|
|
1219
|
+
const flattened = flattenMiddlewares(serverMiddleware);
|
|
1220
|
+
for (const m of flattened) {
|
|
1221
|
+
if (!executedRequestMiddlewares.has(m)) {
|
|
1222
|
+
routeMiddlewares.push(m.options.server);
|
|
1223
|
+
}
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1226
|
+
}
|
|
1227
|
+
const server2 = foundRoute?.options.server;
|
|
1228
|
+
if (server2?.handlers && isExactMatch) {
|
|
1229
|
+
const handlers = typeof server2.handlers === "function" ? server2.handlers({ createHandlers: (d) => d }) : server2.handlers;
|
|
1230
|
+
const requestMethod = request.method.toUpperCase();
|
|
1231
|
+
const handler = handlers[requestMethod] ?? handlers["ANY"];
|
|
1232
|
+
if (handler) {
|
|
1233
|
+
const mayDefer = !!foundRoute.options.component;
|
|
1234
|
+
if (typeof handler === "function") {
|
|
1235
|
+
routeMiddlewares.push(handlerToMiddleware(handler, mayDefer));
|
|
1236
|
+
} else {
|
|
1237
|
+
if (handler.middleware?.length) {
|
|
1238
|
+
const handlerMiddlewares = flattenMiddlewares(handler.middleware);
|
|
1239
|
+
for (const m of handlerMiddlewares) {
|
|
1240
|
+
routeMiddlewares.push(m.options.server);
|
|
1241
|
+
}
|
|
1242
|
+
}
|
|
1243
|
+
if (handler.handler) {
|
|
1244
|
+
routeMiddlewares.push(handlerToMiddleware(handler.handler, mayDefer));
|
|
1245
|
+
}
|
|
1246
|
+
}
|
|
1247
|
+
}
|
|
1248
|
+
}
|
|
1249
|
+
routeMiddlewares.push(
|
|
1250
|
+
(ctx2) => executeRouter(ctx2.context, matchedRoutes)
|
|
1251
|
+
);
|
|
1252
|
+
const ctx = await executeMiddleware(routeMiddlewares, {
|
|
1253
|
+
request,
|
|
1254
|
+
context,
|
|
1255
|
+
params: routeParams,
|
|
1256
|
+
pathname
|
|
1257
|
+
});
|
|
1258
|
+
return ctx.response;
|
|
1259
|
+
}
|
|
1260
|
+
const fetch = createStartHandler(defaultStreamHandler);
|
|
1261
|
+
function createServerEntry(entry) {
|
|
1262
|
+
return {
|
|
1263
|
+
async fetch(...args) {
|
|
1264
|
+
return await entry.fetch(...args);
|
|
1265
|
+
}
|
|
1266
|
+
};
|
|
1267
|
+
}
|
|
1268
|
+
const server = createServerEntry({ fetch });
|
|
1269
|
+
export {
|
|
1270
|
+
TSS_SERVER_FUNCTION as T,
|
|
1271
|
+
createServerFn as c,
|
|
1272
|
+
createServerEntry,
|
|
1273
|
+
server as default,
|
|
1274
|
+
getServerFnById as g
|
|
1275
|
+
};
|