@bleedingdev/modern-js-runtime 3.2.0-ultramodern.99 → 3.4.0-ultramodern.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/boundary-debugger/index.js +19 -11
- package/dist/cjs/cache/index.js +9 -5
- package/dist/cjs/cli/alias.js +9 -5
- package/dist/cjs/cli/code.js +9 -5
- package/dist/cjs/cli/constants.js +20 -16
- package/dist/cjs/cli/entry.js +9 -5
- package/dist/cjs/cli/index.js +20 -5
- package/dist/cjs/cli/ssr/index.js +9 -5
- package/dist/cjs/cli/ssr/loadable-bundler-plugin.js +9 -5
- package/dist/cjs/cli/ssr/mode.js +12 -8
- package/dist/cjs/cli/template.js +9 -5
- package/dist/cjs/cli/template.server.js +9 -5
- package/dist/cjs/common.js +14 -10
- package/dist/cjs/core/browser/hydrate.js +9 -5
- package/dist/cjs/core/browser/index.js +9 -5
- package/dist/cjs/core/browser/withCallback.js +9 -5
- package/dist/cjs/core/compat/hooks.js +14 -10
- package/dist/cjs/core/compat/index.js +9 -5
- package/dist/cjs/core/compat/requestContext.js +13 -9
- package/dist/cjs/core/config.js +12 -8
- package/dist/cjs/core/constants.js +15 -10
- package/dist/cjs/core/context/extensions.js +69 -0
- package/dist/cjs/core/context/helmetContext.js +54 -0
- package/dist/cjs/core/context/index.js +74 -5
- package/dist/cjs/core/context/monitors/default.js +12 -8
- package/dist/cjs/core/context/monitors/index.js +9 -5
- package/dist/cjs/core/context/monitors/index.server.js +9 -5
- package/dist/cjs/core/context/request/index.js +12 -8
- package/dist/cjs/core/context/request/index.server.js +9 -5
- package/dist/cjs/core/context/response/index.js +15 -11
- package/dist/cjs/core/context/response/index.server.js +9 -5
- package/dist/cjs/core/context/runtime.js +9 -5
- package/dist/cjs/core/context/serverPayload/index.js +13 -9
- package/dist/cjs/core/context/serverPayload/index.server.js +9 -5
- package/dist/cjs/core/index.js +9 -5
- package/dist/cjs/core/plugin/index.js +9 -5
- package/dist/cjs/core/react/index.js +9 -5
- package/dist/cjs/core/react/wrapper.js +15 -9
- package/dist/cjs/core/server/constants.js +15 -11
- package/dist/cjs/core/server/federatedCss.js +11 -7
- package/dist/cjs/core/server/helmet.js +11 -6
- package/dist/cjs/core/server/index.js +9 -5
- package/dist/cjs/core/server/react/index.js +9 -5
- package/dist/cjs/core/server/react/no-ssr-cache/index.js +9 -5
- package/dist/cjs/core/server/react/nossr/index.js +9 -5
- package/dist/cjs/core/server/requestHandler.js +51 -34
- package/dist/cjs/core/server/routerCleanup.js +110 -0
- package/dist/cjs/core/server/scriptOrder.js +84 -9
- package/dist/cjs/core/server/server.js +9 -5
- package/dist/cjs/core/server/shared.js +12 -8
- package/dist/cjs/core/server/stream/afterTemplate.js +15 -23
- package/dist/cjs/core/server/stream/beforeTemplate.js +11 -7
- package/dist/cjs/core/server/stream/beforeTemplate.worker.js +10 -6
- package/dist/cjs/core/server/stream/createReadableStream.js +16 -10
- package/dist/cjs/core/server/stream/createReadableStream.worker.js +15 -7
- package/dist/cjs/core/server/stream/deferredScript.js +13 -6
- package/dist/cjs/core/server/stream/index.js +9 -5
- package/dist/cjs/core/server/stream/shared.js +9 -5
- package/dist/cjs/core/server/stream/template.js +9 -5
- package/dist/cjs/core/server/string/index.js +10 -12
- package/dist/cjs/core/server/string/loadable.js +24 -54
- package/dist/cjs/core/server/string/ssrData.js +10 -6
- package/dist/cjs/core/server/tracer.js +13 -9
- package/dist/cjs/core/server/utils.js +63 -13
- package/dist/cjs/document/Body.js +9 -5
- package/dist/cjs/document/Comment.js +9 -5
- package/dist/cjs/document/DocumentContext.js +9 -5
- package/dist/cjs/document/DocumentStructureContext.js +9 -5
- package/dist/cjs/document/Head.js +9 -5
- package/dist/cjs/document/Html.js +9 -5
- package/dist/cjs/document/Links.js +9 -5
- package/dist/cjs/document/Root.js +9 -5
- package/dist/cjs/document/Script.js +9 -5
- package/dist/cjs/document/Scripts.js +9 -5
- package/dist/cjs/document/Style.js +9 -5
- package/dist/cjs/document/Title.js +9 -5
- package/dist/cjs/document/cli/index.js +14 -11
- package/dist/cjs/document/constants.js +9 -5
- package/dist/cjs/document/index.js +9 -5
- package/dist/cjs/exports/config-routes.js +12 -8
- package/dist/cjs/exports/head.js +153 -83
- package/dist/cjs/exports/loadable.js +27 -18
- package/dist/cjs/exports/tanstack-router.js +50 -58
- package/dist/cjs/index.js +9 -5
- package/dist/cjs/internal.js +9 -5
- package/dist/cjs/module-federation/index.js +178 -0
- package/dist/cjs/react-server.js +9 -5
- package/dist/cjs/router/cli/code/getClientRoutes/getRoutes.js +9 -5
- package/dist/cjs/router/cli/code/getClientRoutes/index.js +9 -5
- package/dist/cjs/router/cli/code/getClientRoutes/utils.js +9 -5
- package/dist/cjs/router/cli/code/index.js +16 -52
- package/dist/cjs/router/cli/code/inspect.js +9 -5
- package/dist/cjs/router/cli/code/makeLegalIdentifier.js +12 -8
- package/dist/cjs/router/cli/code/nestedRoutes.js +9 -5
- package/dist/cjs/router/cli/code/templates.js +10 -19
- package/dist/cjs/router/cli/code/utils.js +9 -5
- package/dist/cjs/router/cli/config-routes/converter.js +9 -5
- package/dist/cjs/router/cli/config-routes/parseRouteConfig.js +9 -5
- package/dist/cjs/router/cli/constants.js +23 -19
- package/dist/cjs/router/cli/entry.js +9 -5
- package/dist/cjs/router/cli/handler.js +10 -6
- package/dist/cjs/router/cli/index.js +11 -29
- package/dist/cjs/router/index.js +9 -5
- package/dist/cjs/router/internal.js +12 -8
- package/dist/cjs/router/runtime/CSSLinks.js +9 -5
- package/dist/cjs/router/runtime/DefaultNotFound.js +9 -5
- package/dist/cjs/router/runtime/DeferredDataScripts.js +12 -8
- package/dist/cjs/router/runtime/DeferredDataScripts.node.js +25 -9
- package/dist/cjs/router/runtime/PrefetchLink.js +161 -26
- package/dist/cjs/router/runtime/constants.js +9 -5
- package/dist/cjs/router/runtime/hooks.js +9 -5
- package/dist/cjs/router/runtime/index.js +15 -10
- package/dist/cjs/router/runtime/internal.js +29 -18
- package/dist/cjs/router/runtime/lifecycle.js +38 -19
- package/dist/cjs/router/runtime/plugin.js +11 -14
- package/dist/cjs/router/runtime/plugin.node.js +11 -12
- package/dist/cjs/router/runtime/provider.js +107 -0
- package/dist/cjs/router/runtime/routerHelper.js +9 -5
- package/dist/cjs/router/runtime/rsc-router.js +19 -9
- package/dist/cjs/router/runtime/rsc.js +9 -5
- package/dist/cjs/router/runtime/server.js +9 -5
- package/dist/cjs/router/runtime/utils.js +44 -15
- package/dist/cjs/router/runtime/withRouter.js +9 -5
- package/dist/cjs/rsc/client.js +12 -8
- package/dist/cjs/rsc/server.js +9 -5
- package/dist/cjs/rsc/server.worker.js +9 -5
- package/dist/esm/boundary-debugger/index.mjs +10 -6
- package/dist/esm/cli/index.mjs +4 -2
- package/dist/esm/core/context/extensions.mjs +28 -0
- package/dist/esm/core/context/helmetContext.mjs +13 -0
- package/dist/esm/core/context/index.mjs +5 -0
- package/dist/esm/core/react/wrapper.mjs +6 -4
- package/dist/esm/core/server/federatedCss.mjs +2 -2
- package/dist/esm/core/server/helmet.mjs +2 -1
- package/dist/esm/core/server/requestHandler.mjs +43 -30
- package/dist/esm/core/server/routerCleanup.mjs +66 -0
- package/dist/esm/core/server/scriptOrder.mjs +62 -3
- package/dist/esm/core/server/stream/afterTemplate.mjs +8 -20
- package/dist/esm/core/server/stream/beforeTemplate.mjs +3 -3
- package/dist/esm/core/server/stream/beforeTemplate.worker.mjs +1 -1
- package/dist/esm/core/server/stream/createReadableStream.mjs +7 -5
- package/dist/esm/core/server/stream/createReadableStream.worker.mjs +6 -2
- package/dist/esm/core/server/stream/deferredScript.mjs +4 -1
- package/dist/esm/core/server/string/index.mjs +3 -9
- package/dist/esm/core/server/string/loadable.mjs +14 -48
- package/dist/esm/core/server/string/ssrData.mjs +2 -2
- package/dist/esm/core/server/utils.mjs +52 -9
- package/dist/esm/document/cli/index.mjs +5 -6
- package/dist/esm/exports/head.mjs +144 -78
- package/dist/esm/exports/loadable.mjs +12 -6
- package/dist/esm/exports/tanstack-router.mjs +30 -3
- package/dist/esm/module-federation/index.mjs +109 -0
- package/dist/esm/router/cli/code/index.mjs +8 -48
- package/dist/esm/router/cli/code/templates.mjs +1 -14
- package/dist/esm/router/cli/handler.mjs +1 -1
- package/dist/esm/router/cli/index.mjs +3 -25
- package/dist/esm/router/runtime/DeferredDataScripts.node.mjs +16 -4
- package/dist/esm/router/runtime/PrefetchLink.mjs +152 -21
- package/dist/esm/router/runtime/internal.mjs +16 -15
- package/dist/esm/router/runtime/lifecycle.mjs +22 -13
- package/dist/esm/router/runtime/plugin.mjs +4 -11
- package/dist/esm/router/runtime/plugin.node.mjs +4 -9
- package/dist/esm/router/runtime/provider.mjs +57 -0
- package/dist/esm/router/runtime/rsc-router.mjs +10 -4
- package/dist/esm/router/runtime/utils.mjs +35 -10
- package/dist/esm-node/boundary-debugger/index.mjs +10 -6
- package/dist/esm-node/cli/index.mjs +4 -2
- package/dist/esm-node/core/context/extensions.mjs +29 -0
- package/dist/esm-node/core/context/helmetContext.mjs +14 -0
- package/dist/esm-node/core/context/index.mjs +5 -0
- package/dist/esm-node/core/react/wrapper.mjs +6 -4
- package/dist/esm-node/core/server/federatedCss.mjs +2 -2
- package/dist/esm-node/core/server/helmet.mjs +2 -1
- package/dist/esm-node/core/server/requestHandler.mjs +43 -30
- package/dist/esm-node/core/server/routerCleanup.mjs +67 -0
- package/dist/esm-node/core/server/scriptOrder.mjs +62 -3
- package/dist/esm-node/core/server/stream/afterTemplate.mjs +8 -20
- package/dist/esm-node/core/server/stream/beforeTemplate.mjs +3 -3
- package/dist/esm-node/core/server/stream/beforeTemplate.worker.mjs +1 -1
- package/dist/esm-node/core/server/stream/createReadableStream.mjs +7 -5
- package/dist/esm-node/core/server/stream/createReadableStream.worker.mjs +6 -2
- package/dist/esm-node/core/server/stream/deferredScript.mjs +4 -1
- package/dist/esm-node/core/server/string/index.mjs +3 -9
- package/dist/esm-node/core/server/string/loadable.mjs +14 -48
- package/dist/esm-node/core/server/string/ssrData.mjs +2 -2
- package/dist/esm-node/core/server/utils.mjs +52 -9
- package/dist/esm-node/document/cli/index.mjs +5 -6
- package/dist/esm-node/exports/head.mjs +144 -78
- package/dist/esm-node/exports/loadable.mjs +12 -6
- package/dist/esm-node/exports/tanstack-router.mjs +30 -3
- package/dist/esm-node/module-federation/index.mjs +110 -0
- package/dist/esm-node/router/cli/code/index.mjs +8 -48
- package/dist/esm-node/router/cli/code/templates.mjs +1 -14
- package/dist/esm-node/router/cli/handler.mjs +1 -1
- package/dist/esm-node/router/cli/index.mjs +3 -25
- package/dist/esm-node/router/runtime/DeferredDataScripts.node.mjs +16 -4
- package/dist/esm-node/router/runtime/PrefetchLink.mjs +152 -21
- package/dist/esm-node/router/runtime/internal.mjs +16 -15
- package/dist/esm-node/router/runtime/lifecycle.mjs +22 -13
- package/dist/esm-node/router/runtime/plugin.mjs +4 -11
- package/dist/esm-node/router/runtime/plugin.node.mjs +4 -9
- package/dist/esm-node/router/runtime/provider.mjs +58 -0
- package/dist/esm-node/router/runtime/rsc-router.mjs +10 -4
- package/dist/esm-node/router/runtime/utils.mjs +35 -10
- package/dist/types/cli/entry.d.ts +2 -2
- package/dist/types/cli/index.d.ts +3 -1
- package/dist/types/core/context/extensions.d.ts +37 -0
- package/dist/types/core/context/helmetContext.d.ts +10 -0
- package/dist/types/core/context/index.d.ts +6 -0
- package/dist/types/core/context/response/index.server.d.ts +4 -1
- package/dist/types/core/context/runtime.d.ts +1 -11
- package/dist/types/core/plugin/index.d.ts +1 -1
- package/dist/types/core/server/routerCleanup.d.ts +28 -0
- package/dist/types/core/server/scriptOrder.d.ts +24 -0
- package/dist/types/core/server/string/loadable.d.ts +1 -7
- package/dist/types/core/server/utils.d.ts +19 -1
- package/dist/types/document/constants.d.ts +3 -1
- package/dist/types/exports/head.d.ts +4 -4
- package/dist/types/exports/loadable.d.ts +1 -1
- package/dist/types/exports/tanstack-router.d.ts +88 -5
- package/dist/types/module-federation/index.d.ts +65 -0
- package/dist/types/router/cli/code/index.d.ts +1 -3
- package/dist/types/router/cli/code/utils.d.ts +1 -1
- package/dist/types/router/cli/entry.d.ts +1 -1
- package/dist/types/router/cli/handler.d.ts +0 -3
- package/dist/types/router/runtime/DeferredDataScripts.d.ts +1 -1
- package/dist/types/router/runtime/PrefetchLink.d.ts +5 -1
- package/dist/types/router/runtime/internal.d.ts +1 -0
- package/dist/types/router/runtime/lifecycle.d.ts +2 -0
- package/dist/types/router/runtime/plugin.d.ts +1 -1
- package/dist/types/router/runtime/plugin.node.d.ts +1 -1
- package/dist/types/router/runtime/provider.d.ts +61 -0
- package/package.json +34 -26
- package/rstest.config.mts +2 -4
- package/dist/cjs/router/cli/code/tanstackTypes.js +0 -443
- package/dist/cjs/router/runtime/tanstack/basepathRewrite.js +0 -62
- package/dist/cjs/router/runtime/tanstack/dataMutation.js +0 -345
- package/dist/cjs/router/runtime/tanstack/hydrationBoundary.js +0 -43
- package/dist/cjs/router/runtime/tanstack/plugin.js +0 -240
- package/dist/cjs/router/runtime/tanstack/plugin.node.js +0 -268
- package/dist/cjs/router/runtime/tanstack/prefetchLink.js +0 -55
- package/dist/cjs/router/runtime/tanstack/routeTree.js +0 -510
- package/dist/cjs/router/runtime/tanstack/rsc/ClientSlot.js +0 -53
- package/dist/cjs/router/runtime/tanstack/rsc/CompositeComponent.js +0 -75
- package/dist/cjs/router/runtime/tanstack/rsc/ReplayableStream.js +0 -141
- package/dist/cjs/router/runtime/tanstack/rsc/RscNodeRenderer.js +0 -65
- package/dist/cjs/router/runtime/tanstack/rsc/SlotContext.js +0 -54
- package/dist/cjs/router/runtime/tanstack/rsc/client.js +0 -93
- package/dist/cjs/router/runtime/tanstack/rsc/createRscProxy.js +0 -141
- package/dist/cjs/router/runtime/tanstack/rsc/index.js +0 -42
- package/dist/cjs/router/runtime/tanstack/rsc/server.js +0 -246
- package/dist/cjs/router/runtime/tanstack/rsc/slotUsageSanitizer.js +0 -65
- package/dist/cjs/router/runtime/tanstack/rsc/symbols.js +0 -72
- package/dist/cjs/ssr/index.node.js +0 -121
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +0 -84
- package/dist/cjs/ssr/serverRender/renderToString/entry.js +0 -196
- package/dist/cjs/ssr/serverRender/types.js +0 -36
- package/dist/esm/router/cli/code/tanstackTypes.mjs +0 -396
- package/dist/esm/router/runtime/tanstack/basepathRewrite.mjs +0 -28
- package/dist/esm/router/runtime/tanstack/dataMutation.mjs +0 -305
- package/dist/esm/router/runtime/tanstack/hydrationBoundary.mjs +0 -9
- package/dist/esm/router/runtime/tanstack/plugin.mjs +0 -206
- package/dist/esm/router/runtime/tanstack/plugin.node.mjs +0 -234
- package/dist/esm/router/runtime/tanstack/prefetchLink.mjs +0 -18
- package/dist/esm/router/runtime/tanstack/routeTree.mjs +0 -470
- package/dist/esm/router/runtime/tanstack/rsc/ClientSlot.mjs +0 -19
- package/dist/esm/router/runtime/tanstack/rsc/CompositeComponent.mjs +0 -41
- package/dist/esm/router/runtime/tanstack/rsc/ReplayableStream.mjs +0 -104
- package/dist/esm/router/runtime/tanstack/rsc/RscNodeRenderer.mjs +0 -31
- package/dist/esm/router/runtime/tanstack/rsc/SlotContext.mjs +0 -17
- package/dist/esm/router/runtime/tanstack/rsc/client.mjs +0 -53
- package/dist/esm/router/runtime/tanstack/rsc/createRscProxy.mjs +0 -107
- package/dist/esm/router/runtime/tanstack/rsc/index.mjs +0 -1
- package/dist/esm/router/runtime/tanstack/rsc/server.mjs +0 -200
- package/dist/esm/router/runtime/tanstack/rsc/slotUsageSanitizer.mjs +0 -31
- package/dist/esm/router/runtime/tanstack/rsc/symbols.mjs +0 -17
- package/dist/esm/ssr/index.node.mjs +0 -44
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.mjs +0 -50
- package/dist/esm/ssr/serverRender/renderToString/entry.mjs +0 -151
- package/dist/esm/ssr/serverRender/types.mjs +0 -1
- package/dist/esm-node/router/cli/code/tanstackTypes.mjs +0 -397
- package/dist/esm-node/router/runtime/tanstack/basepathRewrite.mjs +0 -29
- package/dist/esm-node/router/runtime/tanstack/dataMutation.mjs +0 -306
- package/dist/esm-node/router/runtime/tanstack/hydrationBoundary.mjs +0 -10
- package/dist/esm-node/router/runtime/tanstack/plugin.mjs +0 -207
- package/dist/esm-node/router/runtime/tanstack/plugin.node.mjs +0 -235
- package/dist/esm-node/router/runtime/tanstack/prefetchLink.mjs +0 -19
- package/dist/esm-node/router/runtime/tanstack/routeTree.mjs +0 -471
- package/dist/esm-node/router/runtime/tanstack/rsc/ClientSlot.mjs +0 -20
- package/dist/esm-node/router/runtime/tanstack/rsc/CompositeComponent.mjs +0 -42
- package/dist/esm-node/router/runtime/tanstack/rsc/ReplayableStream.mjs +0 -105
- package/dist/esm-node/router/runtime/tanstack/rsc/RscNodeRenderer.mjs +0 -32
- package/dist/esm-node/router/runtime/tanstack/rsc/SlotContext.mjs +0 -18
- package/dist/esm-node/router/runtime/tanstack/rsc/client.mjs +0 -54
- package/dist/esm-node/router/runtime/tanstack/rsc/createRscProxy.mjs +0 -108
- package/dist/esm-node/router/runtime/tanstack/rsc/index.mjs +0 -2
- package/dist/esm-node/router/runtime/tanstack/rsc/server.mjs +0 -201
- package/dist/esm-node/router/runtime/tanstack/rsc/slotUsageSanitizer.mjs +0 -32
- package/dist/esm-node/router/runtime/tanstack/rsc/symbols.mjs +0 -18
- package/dist/esm-node/ssr/index.node.mjs +0 -45
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.mjs +0 -51
- package/dist/esm-node/ssr/serverRender/renderToString/entry.mjs +0 -152
- package/dist/esm-node/ssr/serverRender/types.mjs +0 -2
- package/dist/types/router/cli/code/tanstackTypes.d.ts +0 -10
- package/dist/types/router/runtime/tanstack/basepathRewrite.d.ts +0 -8
- package/dist/types/router/runtime/tanstack/dataMutation.d.ts +0 -29
- package/dist/types/router/runtime/tanstack/hydrationBoundary.d.ts +0 -2
- package/dist/types/router/runtime/tanstack/plugin.d.ts +0 -6
- package/dist/types/router/runtime/tanstack/plugin.node.d.ts +0 -6
- package/dist/types/router/runtime/tanstack/prefetchLink.d.ts +0 -11
- package/dist/types/router/runtime/tanstack/routeTree.d.ts +0 -8
- package/dist/types/router/runtime/tanstack/rsc/ClientSlot.d.ts +0 -5
- package/dist/types/router/runtime/tanstack/rsc/CompositeComponent.d.ts +0 -3
- package/dist/types/router/runtime/tanstack/rsc/ReplayableStream.d.ts +0 -24
- package/dist/types/router/runtime/tanstack/rsc/RscNodeRenderer.d.ts +0 -5
- package/dist/types/router/runtime/tanstack/rsc/SlotContext.d.ts +0 -11
- package/dist/types/router/runtime/tanstack/rsc/client.d.ts +0 -11
- package/dist/types/router/runtime/tanstack/rsc/createRscProxy.d.ts +0 -7
- package/dist/types/router/runtime/tanstack/rsc/index.d.ts +0 -2
- package/dist/types/router/runtime/tanstack/rsc/server.d.ts +0 -14
- package/dist/types/router/runtime/tanstack/rsc/slotUsageSanitizer.d.ts +0 -2
- package/dist/types/router/runtime/tanstack/rsc/symbols.d.ts +0 -46
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import "node:module";
|
|
2
|
-
"use client";
|
|
3
|
-
import { createSerializationAdapter } from "@tanstack/react-router";
|
|
4
|
-
import { use } from "react";
|
|
5
|
-
import { createRscProxy } from "./createRscProxy.mjs";
|
|
6
|
-
let modernRscClientRuntimePromise;
|
|
7
|
-
function loadModernRscClientRuntime() {
|
|
8
|
-
modernRscClientRuntimePromise ??= import("../../../../rsc/client.mjs").then((runtime)=>{
|
|
9
|
-
runtime.setServerCallback(runtime.callServer);
|
|
10
|
-
return runtime;
|
|
11
|
-
});
|
|
12
|
-
return modernRscClientRuntimePromise;
|
|
13
|
-
}
|
|
14
|
-
function createTreeGetter(stream) {
|
|
15
|
-
let ready = false;
|
|
16
|
-
let tree;
|
|
17
|
-
const treePromise = loadModernRscClientRuntime().then((runtime)=>runtime.createFromReadableStream(stream, {
|
|
18
|
-
callServer: runtime.callServer
|
|
19
|
-
})).then((value)=>{
|
|
20
|
-
tree = value;
|
|
21
|
-
ready = true;
|
|
22
|
-
return value;
|
|
23
|
-
});
|
|
24
|
-
return ()=>{
|
|
25
|
-
if (ready) return tree;
|
|
26
|
-
return use(treePromise);
|
|
27
|
-
};
|
|
28
|
-
}
|
|
29
|
-
function createFromFlightStream(serialized) {
|
|
30
|
-
const streamWrapper = {
|
|
31
|
-
createReplayStream: ()=>serialized.stream
|
|
32
|
-
};
|
|
33
|
-
return createRscProxy(createTreeGetter(serialized.stream), {
|
|
34
|
-
renderable: 'renderable' === serialized.kind,
|
|
35
|
-
slotUsagesStream: serialized.slotUsagesStream,
|
|
36
|
-
stream: streamWrapper
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
const adapter = createSerializationAdapter({
|
|
40
|
-
key: '$MODERN_TANSTACK_RSC',
|
|
41
|
-
test: (_value)=>false,
|
|
42
|
-
toSerializable: ()=>{
|
|
43
|
-
throw new Error('TanStack RSC data cannot be serialized on client.');
|
|
44
|
-
},
|
|
45
|
-
fromSerializable: (value)=>createFromFlightStream(value)
|
|
46
|
-
});
|
|
47
|
-
function getTanstackRscSerializationAdapters() {
|
|
48
|
-
return [
|
|
49
|
-
adapter
|
|
50
|
-
];
|
|
51
|
-
}
|
|
52
|
-
const rscSerializationAdapter = getTanstackRscSerializationAdapters;
|
|
53
|
-
export { CompositeComponent } from "./CompositeComponent.mjs";
|
|
54
|
-
export { getTanstackRscSerializationAdapters, rscSerializationAdapter };
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
import "node:module";
|
|
2
|
-
"use client";
|
|
3
|
-
import { createElement } from "react";
|
|
4
|
-
import { RscNodeRenderer } from "./RscNodeRenderer.mjs";
|
|
5
|
-
import { RENDERABLE_RSC, RSC_PROXY_GET_TREE, RSC_PROXY_PATH, RSC_SLOT_USAGES, RSC_SLOT_USAGES_STREAM, SERVER_COMPONENT_STREAM } from "./symbols.mjs";
|
|
6
|
-
const UNHANDLED = Symbol('modern.tanstack.rsc.unhandled');
|
|
7
|
-
function handleProxyTrap(kind, prop, options) {
|
|
8
|
-
switch(prop){
|
|
9
|
-
case '__SEROVAL_STREAM__':
|
|
10
|
-
case '__SEROVAL_SEQUENCE__':
|
|
11
|
-
case Symbol.iterator:
|
|
12
|
-
case Symbol.asyncIterator:
|
|
13
|
-
return 'get' === kind ? void 0 : false;
|
|
14
|
-
case SERVER_COMPONENT_STREAM:
|
|
15
|
-
return 'get' === kind ? options.stream : Boolean(options.stream);
|
|
16
|
-
case RENDERABLE_RSC:
|
|
17
|
-
return 'get' === kind ? options.renderable : true;
|
|
18
|
-
case RSC_PROXY_GET_TREE:
|
|
19
|
-
return 'get' === kind ? options.getTree : true;
|
|
20
|
-
case RSC_PROXY_PATH:
|
|
21
|
-
return 'get' === kind ? options.path : true;
|
|
22
|
-
case RSC_SLOT_USAGES_STREAM:
|
|
23
|
-
return 'get' === kind ? options.slotUsagesStream : Boolean(options.slotUsagesStream);
|
|
24
|
-
case RSC_SLOT_USAGES:
|
|
25
|
-
return 'get' === kind ? options.slotUsages : Boolean(options.slotUsages);
|
|
26
|
-
case 'then':
|
|
27
|
-
return 'get' === kind ? void 0 : UNHANDLED;
|
|
28
|
-
case 'toString':
|
|
29
|
-
return 'get' === kind ? Object.prototype.toString : UNHANDLED;
|
|
30
|
-
case 'valueOf':
|
|
31
|
-
return 'get' === kind ? Object.prototype.valueOf : UNHANDLED;
|
|
32
|
-
case 'constructor':
|
|
33
|
-
return 'get' === kind ? Object : UNHANDLED;
|
|
34
|
-
default:
|
|
35
|
-
return UNHANDLED;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
function createRscProxyInternal(options) {
|
|
39
|
-
const childCache = new Map();
|
|
40
|
-
const dataProxy = options.renderable ? createRscProxyInternal({
|
|
41
|
-
...options,
|
|
42
|
-
renderable: false
|
|
43
|
-
}) : void 0;
|
|
44
|
-
const target = options.renderable ? /*#__PURE__*/ createElement(RscNodeRenderer, {
|
|
45
|
-
data: dataProxy
|
|
46
|
-
}) : {};
|
|
47
|
-
const getChild = (key)=>{
|
|
48
|
-
if (!childCache.has(key)) childCache.set(key, createRscProxyInternal({
|
|
49
|
-
...options,
|
|
50
|
-
path: [
|
|
51
|
-
...options.path,
|
|
52
|
-
key
|
|
53
|
-
]
|
|
54
|
-
}));
|
|
55
|
-
return childCache.get(key);
|
|
56
|
-
};
|
|
57
|
-
return new Proxy(target, {
|
|
58
|
-
get (proxyTarget, prop) {
|
|
59
|
-
const handled = handleProxyTrap('get', prop, options);
|
|
60
|
-
if (handled !== UNHANDLED) return handled;
|
|
61
|
-
if (options.renderable) {
|
|
62
|
-
if ('props' === prop) return proxyTarget.props;
|
|
63
|
-
if ('data' === prop) return dataProxy;
|
|
64
|
-
if (prop in proxyTarget) return proxyTarget[prop];
|
|
65
|
-
}
|
|
66
|
-
if ('symbol' == typeof prop) return;
|
|
67
|
-
return getChild(prop);
|
|
68
|
-
},
|
|
69
|
-
getOwnPropertyDescriptor (proxyTarget, prop) {
|
|
70
|
-
return options.renderable ? Object.getOwnPropertyDescriptor(proxyTarget, prop) : void 0;
|
|
71
|
-
},
|
|
72
|
-
getPrototypeOf (proxyTarget) {
|
|
73
|
-
return options.renderable ? Object.getPrototypeOf(proxyTarget) : Object.prototype;
|
|
74
|
-
},
|
|
75
|
-
has (proxyTarget, prop) {
|
|
76
|
-
const handled = handleProxyTrap('has', prop, options);
|
|
77
|
-
if (handled !== UNHANDLED) return Boolean(handled);
|
|
78
|
-
if (options.renderable) return prop in proxyTarget || 'string' == typeof prop;
|
|
79
|
-
return 'string' == typeof prop;
|
|
80
|
-
},
|
|
81
|
-
ownKeys (proxyTarget) {
|
|
82
|
-
return options.renderable ? Reflect.ownKeys(proxyTarget) : [];
|
|
83
|
-
}
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
function createRscProxy(getTree, options = {}) {
|
|
87
|
-
const slotUsages = 'development' === process.env.NODE_ENV && options.slotUsagesStream ? options.slotUsages ?? [] : options.slotUsages;
|
|
88
|
-
if ('development' === process.env.NODE_ENV && options.slotUsagesStream && slotUsages) consumeSlotUsages(options.slotUsagesStream, slotUsages);
|
|
89
|
-
return createRscProxyInternal({
|
|
90
|
-
getTree,
|
|
91
|
-
path: [],
|
|
92
|
-
renderable: true === options.renderable,
|
|
93
|
-
slotUsages,
|
|
94
|
-
slotUsagesStream: options.slotUsagesStream,
|
|
95
|
-
stream: options.stream
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
async function consumeSlotUsages(stream, slotUsages) {
|
|
99
|
-
try {
|
|
100
|
-
const reader = stream.getReader();
|
|
101
|
-
for(;;){
|
|
102
|
-
const { value, done } = await reader.read();
|
|
103
|
-
if (done) break;
|
|
104
|
-
if (value?.slot) slotUsages.push(value);
|
|
105
|
-
}
|
|
106
|
-
} catch {}
|
|
107
|
-
}
|
|
108
|
-
export { createRscProxy };
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import "node:module";
|
|
2
|
-
import { Fragment, jsx } from "react/jsx-runtime";
|
|
3
|
-
import { createSerializationAdapter } from "@tanstack/react-router";
|
|
4
|
-
import { RawStream } from "@tanstack/router-core";
|
|
5
|
-
import { createElement, use } from "react";
|
|
6
|
-
import { createFromReadableStream, renderRsc } from "../../../../rsc/server.mjs";
|
|
7
|
-
import { ClientSlot } from "./ClientSlot.mjs";
|
|
8
|
-
import { createRscProxy } from "./createRscProxy.mjs";
|
|
9
|
-
import { ReplayableStream } from "./ReplayableStream.mjs";
|
|
10
|
-
import { sanitizeSlotArgs } from "./slotUsageSanitizer.mjs";
|
|
11
|
-
import { RSC_SLOT_USAGES_STREAM, SERVER_COMPONENT_STREAM, isRenderableServerComponent, isServerComponent } from "./symbols.mjs";
|
|
12
|
-
function createTreeGetter(stream) {
|
|
13
|
-
let ready = false;
|
|
14
|
-
let tree;
|
|
15
|
-
const treePromise = Promise.resolve(createFromReadableStream(stream.createReplayStream())).then((value)=>{
|
|
16
|
-
tree = value;
|
|
17
|
-
ready = true;
|
|
18
|
-
return value;
|
|
19
|
-
});
|
|
20
|
-
return ()=>{
|
|
21
|
-
if (ready) return tree;
|
|
22
|
-
return use(treePromise);
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
function createSlotProxy(options) {
|
|
26
|
-
const cache = new Map();
|
|
27
|
-
return new Proxy({}, {
|
|
28
|
-
get (_target, prop) {
|
|
29
|
-
if ('then' === prop || 'string' != typeof prop) return;
|
|
30
|
-
if ('children' === prop) {
|
|
31
|
-
options?.onSlotCall?.('children', []);
|
|
32
|
-
return /*#__PURE__*/ createElement(ClientSlot, {
|
|
33
|
-
args: [],
|
|
34
|
-
slot: 'children'
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
if (!cache.has(prop)) cache.set(prop, (...args)=>{
|
|
38
|
-
options?.onSlotCall?.(prop, args);
|
|
39
|
-
return /*#__PURE__*/ createElement(ClientSlot, {
|
|
40
|
-
args,
|
|
41
|
-
slot: prop
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
return cache.get(prop);
|
|
45
|
-
}
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
function toReplayableFlightStream(node, handlers) {
|
|
49
|
-
const flightStream = renderRsc({
|
|
50
|
-
element: node
|
|
51
|
-
});
|
|
52
|
-
return new ReplayableStream(handlers ? wrapReadableStream(flightStream, handlers) : flightStream);
|
|
53
|
-
}
|
|
54
|
-
async function renderServerComponent(node) {
|
|
55
|
-
const stream = toReplayableFlightStream(/*#__PURE__*/ jsx(Fragment, {
|
|
56
|
-
children: node
|
|
57
|
-
}));
|
|
58
|
-
const streamWrapper = {
|
|
59
|
-
createReplayStream: ()=>stream.createReplayStream()
|
|
60
|
-
};
|
|
61
|
-
return createRscProxy(createTreeGetter(streamWrapper), {
|
|
62
|
-
renderable: true,
|
|
63
|
-
stream: streamWrapper
|
|
64
|
-
});
|
|
65
|
-
}
|
|
66
|
-
async function createCompositeComponent(component) {
|
|
67
|
-
const slotUsagesEmitter = 'development' === process.env.NODE_ENV ? createReadableStreamEmitter() : void 0;
|
|
68
|
-
const slotProxy = createSlotProxy({
|
|
69
|
-
onSlotCall: slotUsagesEmitter ? (slot, args)=>{
|
|
70
|
-
const sanitizedArgs = sanitizeSlotArgs(args);
|
|
71
|
-
slotUsagesEmitter.emit({
|
|
72
|
-
slot,
|
|
73
|
-
...sanitizedArgs.length ? {
|
|
74
|
-
args: sanitizedArgs
|
|
75
|
-
} : {}
|
|
76
|
-
});
|
|
77
|
-
} : void 0
|
|
78
|
-
});
|
|
79
|
-
async function ServerComponentWrapper() {
|
|
80
|
-
return component(slotProxy);
|
|
81
|
-
}
|
|
82
|
-
const flightStream = toReplayableFlightStream(/*#__PURE__*/ createElement(ServerComponentWrapper), slotUsagesEmitter ? {
|
|
83
|
-
onCancel: slotUsagesEmitter.close,
|
|
84
|
-
onDone: slotUsagesEmitter.close,
|
|
85
|
-
onError: slotUsagesEmitter.close
|
|
86
|
-
} : void 0);
|
|
87
|
-
const streamWrapper = {
|
|
88
|
-
createReplayStream: ()=>flightStream.createReplayStream()
|
|
89
|
-
};
|
|
90
|
-
return createRscProxy(createTreeGetter(streamWrapper), {
|
|
91
|
-
renderable: false,
|
|
92
|
-
slotUsagesStream: slotUsagesEmitter?.stream,
|
|
93
|
-
stream: streamWrapper
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
const adapter = createSerializationAdapter({
|
|
97
|
-
key: '$MODERN_TANSTACK_RSC',
|
|
98
|
-
test: isServerComponent,
|
|
99
|
-
toSerializable: (component)=>{
|
|
100
|
-
const streamWrapper = component[SERVER_COMPONENT_STREAM];
|
|
101
|
-
if (!streamWrapper) throw new Error('Cannot serialize TanStack RSC without a Flight stream.');
|
|
102
|
-
const kind = isRenderableServerComponent(component) ? 'renderable' : 'composite';
|
|
103
|
-
const slotUsagesStream = 'development' === process.env.NODE_ENV && 'composite' === kind ? component[RSC_SLOT_USAGES_STREAM] : void 0;
|
|
104
|
-
return {
|
|
105
|
-
kind,
|
|
106
|
-
stream: new RawStream(streamWrapper.createReplayStream(), {
|
|
107
|
-
hint: 'text'
|
|
108
|
-
}),
|
|
109
|
-
...slotUsagesStream ? {
|
|
110
|
-
slotUsagesStream
|
|
111
|
-
} : {}
|
|
112
|
-
};
|
|
113
|
-
},
|
|
114
|
-
fromSerializable: ()=>{
|
|
115
|
-
throw new Error('TanStack RSC data should not be deserialized on server.');
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
function getTanstackRscSerializationAdapters() {
|
|
119
|
-
return [
|
|
120
|
-
adapter
|
|
121
|
-
];
|
|
122
|
-
}
|
|
123
|
-
const rscSerializationAdapter = getTanstackRscSerializationAdapters;
|
|
124
|
-
function createReadableStreamEmitter() {
|
|
125
|
-
let closed = false;
|
|
126
|
-
const queue = [];
|
|
127
|
-
let controller = null;
|
|
128
|
-
const stream = new ReadableStream({
|
|
129
|
-
start (ctrl) {
|
|
130
|
-
controller = ctrl;
|
|
131
|
-
for (const value of queue)ctrl.enqueue(value);
|
|
132
|
-
queue.length = 0;
|
|
133
|
-
if (closed) ctrl.close();
|
|
134
|
-
},
|
|
135
|
-
cancel () {
|
|
136
|
-
closed = true;
|
|
137
|
-
controller = null;
|
|
138
|
-
queue.length = 0;
|
|
139
|
-
}
|
|
140
|
-
});
|
|
141
|
-
const emit = (value)=>{
|
|
142
|
-
if (closed) return;
|
|
143
|
-
if (!controller) return void queue.push(value);
|
|
144
|
-
try {
|
|
145
|
-
controller.enqueue(value);
|
|
146
|
-
} catch {}
|
|
147
|
-
};
|
|
148
|
-
const close = ()=>{
|
|
149
|
-
if (closed) return;
|
|
150
|
-
closed = true;
|
|
151
|
-
try {
|
|
152
|
-
controller?.close();
|
|
153
|
-
} catch {}
|
|
154
|
-
controller = null;
|
|
155
|
-
};
|
|
156
|
-
return {
|
|
157
|
-
close,
|
|
158
|
-
emit,
|
|
159
|
-
stream
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
function wrapReadableStream(source, handlers) {
|
|
163
|
-
const reader = source.getReader();
|
|
164
|
-
let finished = false;
|
|
165
|
-
const finish = (kind)=>{
|
|
166
|
-
if (finished) return;
|
|
167
|
-
finished = true;
|
|
168
|
-
if ('cancel' === kind) handlers.onCancel?.();
|
|
169
|
-
else if ('error' === kind) handlers.onError?.();
|
|
170
|
-
else handlers.onDone?.();
|
|
171
|
-
try {
|
|
172
|
-
reader.releaseLock();
|
|
173
|
-
} catch {}
|
|
174
|
-
};
|
|
175
|
-
return new ReadableStream({
|
|
176
|
-
async pull (controller) {
|
|
177
|
-
try {
|
|
178
|
-
const { done, value } = await reader.read();
|
|
179
|
-
if (done) {
|
|
180
|
-
controller.close();
|
|
181
|
-
finish('done');
|
|
182
|
-
return;
|
|
183
|
-
}
|
|
184
|
-
controller.enqueue(value);
|
|
185
|
-
} catch (err) {
|
|
186
|
-
try {
|
|
187
|
-
controller.error(err);
|
|
188
|
-
} catch {}
|
|
189
|
-
finish('error');
|
|
190
|
-
}
|
|
191
|
-
},
|
|
192
|
-
async cancel (reason) {
|
|
193
|
-
try {
|
|
194
|
-
await reader.cancel(reason);
|
|
195
|
-
} catch {}
|
|
196
|
-
finish('cancel');
|
|
197
|
-
}
|
|
198
|
-
});
|
|
199
|
-
}
|
|
200
|
-
export { CompositeComponent } from "./CompositeComponent.mjs";
|
|
201
|
-
export { createCompositeComponent, getTanstackRscSerializationAdapters, renderServerComponent, rscSerializationAdapter };
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import "node:module";
|
|
2
|
-
import { isValidElement } from "react";
|
|
3
|
-
const REACT_ELEMENT_TYPE = Symbol.for('react.element');
|
|
4
|
-
const REACT_PORTAL_TYPE = Symbol.for('react.portal');
|
|
5
|
-
const REACT_TRANSITIONAL_ELEMENT_TYPE = Symbol.for('react.transitional.element');
|
|
6
|
-
function isReactElementLike(value) {
|
|
7
|
-
if (!value || 'object' != typeof value && 'function' != typeof value) return false;
|
|
8
|
-
if (isValidElement(value)) return true;
|
|
9
|
-
const type = value.$$typeof;
|
|
10
|
-
return type === REACT_ELEMENT_TYPE || type === REACT_TRANSITIONAL_ELEMENT_TYPE || type === REACT_PORTAL_TYPE;
|
|
11
|
-
}
|
|
12
|
-
function sanitizeSlotArg(value, seen) {
|
|
13
|
-
if (isReactElementLike(value)) return 'React element';
|
|
14
|
-
if (null == value) return value;
|
|
15
|
-
if ('string' == typeof value || 'number' == typeof value || 'boolean' == typeof value || 'bigint' == typeof value) return value;
|
|
16
|
-
if ('object' != typeof value && 'function' != typeof value) return String(value);
|
|
17
|
-
if (seen.has(value)) return '[Circular]';
|
|
18
|
-
seen.add(value);
|
|
19
|
-
if (Array.isArray(value)) return value.map((item)=>sanitizeSlotArg(item, seen));
|
|
20
|
-
const proto = Object.getPrototypeOf(value);
|
|
21
|
-
if (proto === Object.prototype || null === proto) {
|
|
22
|
-
const out = {};
|
|
23
|
-
for (const [key, item] of Object.entries(value))out[key] = sanitizeSlotArg(item, seen);
|
|
24
|
-
return out;
|
|
25
|
-
}
|
|
26
|
-
return String(value);
|
|
27
|
-
}
|
|
28
|
-
function sanitizeSlotArgs(args) {
|
|
29
|
-
const seen = new WeakSet();
|
|
30
|
-
return args.map((arg)=>sanitizeSlotArg(arg, seen));
|
|
31
|
-
}
|
|
32
|
-
export { sanitizeSlotArgs };
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import "node:module";
|
|
2
|
-
const SERVER_COMPONENT_STREAM = Symbol.for('modern.tanstack.rsc.stream');
|
|
3
|
-
const RENDERABLE_RSC = Symbol.for('modern.tanstack.rsc.renderable');
|
|
4
|
-
const RSC_PROXY_GET_TREE = Symbol.for('modern.tanstack.rsc.proxy.getTree');
|
|
5
|
-
const RSC_PROXY_PATH = Symbol.for('modern.tanstack.rsc.proxy.path');
|
|
6
|
-
const RSC_SLOT_USAGES_STREAM = Symbol.for('modern.tanstack.rsc.slotUsages.stream');
|
|
7
|
-
const RSC_SLOT_USAGES = Symbol.for('modern.tanstack.rsc.slotUsages');
|
|
8
|
-
function isServerComponent(value) {
|
|
9
|
-
if (null == value) return false;
|
|
10
|
-
if ('object' != typeof value && 'function' != typeof value) return false;
|
|
11
|
-
return SERVER_COMPONENT_STREAM in value && void 0 !== value[SERVER_COMPONENT_STREAM];
|
|
12
|
-
}
|
|
13
|
-
function isRenderableServerComponent(value) {
|
|
14
|
-
if (null == value) return false;
|
|
15
|
-
if ('object' != typeof value && 'function' != typeof value) return false;
|
|
16
|
-
return RENDERABLE_RSC in value && true === value[RENDERABLE_RSC];
|
|
17
|
-
}
|
|
18
|
-
export { RENDERABLE_RSC, RSC_PROXY_GET_TREE, RSC_PROXY_PATH, RSC_SLOT_USAGES, RSC_SLOT_USAGES_STREAM, SERVER_COMPONENT_STREAM, isRenderableServerComponent, isServerComponent };
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import "node:module";
|
|
2
|
-
import serverRender from "./serverRender";
|
|
3
|
-
import { createSSRTracker } from "./serverRender/tracker";
|
|
4
|
-
import { formatServer } from "./utils";
|
|
5
|
-
export * from "./react";
|
|
6
|
-
const ssr = (config = {})=>({
|
|
7
|
-
name: '@modern-js/plugin-ssr',
|
|
8
|
-
setup: ()=>({
|
|
9
|
-
server: async ({ App, context })=>{
|
|
10
|
-
const html = await serverRender({
|
|
11
|
-
context,
|
|
12
|
-
App: App,
|
|
13
|
-
config
|
|
14
|
-
});
|
|
15
|
-
return html;
|
|
16
|
-
},
|
|
17
|
-
init ({ context }, next) {
|
|
18
|
-
const { request } = context.ssrContext;
|
|
19
|
-
context.ssrContext.request = formatServer(request);
|
|
20
|
-
context.ssrContext.mode = config.mode;
|
|
21
|
-
context.ssrContext.tracker = createSSRTracker(context.ssrContext);
|
|
22
|
-
context.ssrContext.unsafeHeaders = config.unsafeHeaders;
|
|
23
|
-
if (!context.ssrContext.htmlModifiers) context.ssrContext.htmlModifiers = [];
|
|
24
|
-
return next({
|
|
25
|
-
context
|
|
26
|
-
});
|
|
27
|
-
},
|
|
28
|
-
pickContext: ({ context, pickedContext }, next)=>{
|
|
29
|
-
const { request, response } = context?.ssrContext;
|
|
30
|
-
const { initialData } = context;
|
|
31
|
-
return next({
|
|
32
|
-
context,
|
|
33
|
-
pickedContext: {
|
|
34
|
-
...pickedContext,
|
|
35
|
-
initialData,
|
|
36
|
-
request,
|
|
37
|
-
response
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
})
|
|
42
|
-
});
|
|
43
|
-
const index_node = ssr;
|
|
44
|
-
export default index_node;
|
|
45
|
-
export { ssr };
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import "node:module";
|
|
2
|
-
import { sanitizeSSRPayload, serializeJson } from "@modern-js/runtime-utils/node";
|
|
3
|
-
import { attributesToString } from "../utils";
|
|
4
|
-
import { buildTemplate } from "./buildTemplate.share";
|
|
5
|
-
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
6
|
-
const callbacks = [
|
|
7
|
-
injectSSRDataScript
|
|
8
|
-
];
|
|
9
|
-
return buildTemplate(afterAppTemplate, callbacks);
|
|
10
|
-
function injectSSRDataScript(template) {
|
|
11
|
-
const ssrDataScript = buildSSRDataScript();
|
|
12
|
-
return template.replace('<!--<?- SSRDataScript ?>-->', ssrDataScript);
|
|
13
|
-
function buildSSRDataScript() {
|
|
14
|
-
const { context: { ssrContext, initialData, __i18nData__ }, renderLevel } = options;
|
|
15
|
-
const { request, enableUnsafeCtx, nonce, tracker, unsafeHeaders } = ssrContext;
|
|
16
|
-
const unsafeContext = {
|
|
17
|
-
headers: request.headers
|
|
18
|
-
};
|
|
19
|
-
const SSRData = {
|
|
20
|
-
data: {
|
|
21
|
-
initialData,
|
|
22
|
-
i18nData: __i18nData__
|
|
23
|
-
},
|
|
24
|
-
context: {
|
|
25
|
-
reporter: {
|
|
26
|
-
sessionId: tracker.sessionId
|
|
27
|
-
},
|
|
28
|
-
request: {
|
|
29
|
-
params: request.params,
|
|
30
|
-
query: request.query,
|
|
31
|
-
pathname: request.pathname,
|
|
32
|
-
host: request.host,
|
|
33
|
-
url: request.url,
|
|
34
|
-
...enableUnsafeCtx ? unsafeContext : {}
|
|
35
|
-
}
|
|
36
|
-
},
|
|
37
|
-
renderLevel
|
|
38
|
-
};
|
|
39
|
-
const attrsStr = attributesToString({
|
|
40
|
-
nonce
|
|
41
|
-
});
|
|
42
|
-
const sanitizedSSRData = sanitizeSSRPayload(SSRData, {
|
|
43
|
-
unsafeHeaders
|
|
44
|
-
}).payload;
|
|
45
|
-
return `
|
|
46
|
-
<script${attrsStr}>window._SSR_DATA = ${serializeJson(sanitizedSSRData)}</script>
|
|
47
|
-
`;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
export { buildShellAfterTemplate };
|
|
@@ -1,152 +0,0 @@
|
|
|
1
|
-
import "node:module";
|
|
2
|
-
import { sanitizeSSRPayload, serializeJson } from "@modern-js/runtime-utils/node";
|
|
3
|
-
import { time } from "@modern-js/runtime-utils/time";
|
|
4
|
-
import react from "react";
|
|
5
|
-
import { HelmetProvider } from "react-helmet-async";
|
|
6
|
-
import { getHelmetData, helmetReplace } from "../../../core/server/helmet.mjs";
|
|
7
|
-
import { serializeErrors } from "../../../router/runtime/utils.mjs";
|
|
8
|
-
import prefetch from "../../prefetch";
|
|
9
|
-
import { SSRErrors, SSRTimings } from "../tracker";
|
|
10
|
-
import { RenderLevel } from "../types.mjs";
|
|
11
|
-
import { ROUTER_DATA_JSON_ID, SSR_DATA_JSON_ID, attributesToString } from "../utils";
|
|
12
|
-
import { buildHtml, createReplaceChunkCss, createReplaceChunkJs, createReplaceHtml, createReplaceSSRDataScript } from "./buildHtml";
|
|
13
|
-
import { createLoadableCollector } from "./loadable";
|
|
14
|
-
import { createRender } from "./render";
|
|
15
|
-
import { createStyledCollector } from "./styledComponent";
|
|
16
|
-
const buildTemplateData = (context, data, renderLevel, tracker)=>{
|
|
17
|
-
const { request, enableUnsafeCtx } = context;
|
|
18
|
-
const unsafeContext = {
|
|
19
|
-
headers: request.headers
|
|
20
|
-
};
|
|
21
|
-
return {
|
|
22
|
-
data,
|
|
23
|
-
context: {
|
|
24
|
-
request: {
|
|
25
|
-
params: request.params,
|
|
26
|
-
query: request.query,
|
|
27
|
-
pathname: request.pathname,
|
|
28
|
-
host: request.host,
|
|
29
|
-
url: request.url,
|
|
30
|
-
...enableUnsafeCtx ? unsafeContext : {}
|
|
31
|
-
},
|
|
32
|
-
reporter: {
|
|
33
|
-
sessionId: tracker.sessionId
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
renderLevel
|
|
37
|
-
};
|
|
38
|
-
};
|
|
39
|
-
class Entry {
|
|
40
|
-
async renderToHtml(context) {
|
|
41
|
-
const ssrContext = context.ssrContext;
|
|
42
|
-
if (ssrContext.redirection?.url) return '';
|
|
43
|
-
const prefetchData = await this.prefetch(context);
|
|
44
|
-
if (ssrContext.redirection?.url) return '';
|
|
45
|
-
if (this.result.renderLevel >= RenderLevel.SERVER_PREFETCH) this.result.html = await this.renderToString(context);
|
|
46
|
-
if (ssrContext.redirection?.url) return '';
|
|
47
|
-
const { routerContext, routerServerSnapshot } = context;
|
|
48
|
-
const routerData = routerServerSnapshot?.routerData ? {
|
|
49
|
-
loaderData: routerServerSnapshot.routerData.loaderData,
|
|
50
|
-
errors: serializeErrors(routerServerSnapshot.routerData.errors)
|
|
51
|
-
} : routerContext ? {
|
|
52
|
-
loaderData: routerContext.loaderData,
|
|
53
|
-
errors: serializeErrors(routerContext.errors)
|
|
54
|
-
} : void 0;
|
|
55
|
-
const templateData = buildTemplateData(ssrContext, prefetchData, this.result.renderLevel, this.tracker);
|
|
56
|
-
const ssrDataScripts = this.getSSRDataScript(templateData, routerData);
|
|
57
|
-
const html = buildHtml(this.template, [
|
|
58
|
-
createReplaceChunkCss(this.result.chunksMap.css),
|
|
59
|
-
createReplaceChunkJs(this.result.chunksMap.js),
|
|
60
|
-
createReplaceHtml(this.result.html || ''),
|
|
61
|
-
createReplaceSSRDataScript(ssrDataScripts),
|
|
62
|
-
...this.htmlModifiers
|
|
63
|
-
]);
|
|
64
|
-
const helmetData = getHelmetData(context);
|
|
65
|
-
return helmetData ? helmetReplace(html, helmetData) : html;
|
|
66
|
-
}
|
|
67
|
-
async prefetch(context) {
|
|
68
|
-
let prefetchData;
|
|
69
|
-
const end = time();
|
|
70
|
-
try {
|
|
71
|
-
prefetchData = await prefetch(this.App, context, this.pluginConfig);
|
|
72
|
-
this.result.renderLevel = RenderLevel.SERVER_PREFETCH;
|
|
73
|
-
const prefetchCost = end();
|
|
74
|
-
this.tracker.trackTiming(SSRTimings.SSR_PREFETCH, prefetchCost);
|
|
75
|
-
} catch (e) {
|
|
76
|
-
this.result.renderLevel = RenderLevel.CLIENT_RENDER;
|
|
77
|
-
this.tracker.trackError(SSRErrors.PREFETCH, e);
|
|
78
|
-
}
|
|
79
|
-
return prefetchData || {};
|
|
80
|
-
}
|
|
81
|
-
async renderToString(context) {
|
|
82
|
-
let html = '';
|
|
83
|
-
const end = time();
|
|
84
|
-
const { ssrContext } = context;
|
|
85
|
-
try {
|
|
86
|
-
const helmetContext = context._helmetContext ??= {};
|
|
87
|
-
const App = react.createElement(HelmetProvider, {
|
|
88
|
-
context: helmetContext
|
|
89
|
-
}, react.createElement(this.App, {
|
|
90
|
-
context: Object.assign(context, {
|
|
91
|
-
ssr: true
|
|
92
|
-
})
|
|
93
|
-
}));
|
|
94
|
-
html = await createRender(App).addCollector(createStyledCollector(this.result)).addCollector(createLoadableCollector({
|
|
95
|
-
stats: ssrContext.loadableStats,
|
|
96
|
-
result: this.result,
|
|
97
|
-
entryName: this.entryName,
|
|
98
|
-
config: this.pluginConfig,
|
|
99
|
-
nonce: this.nonce,
|
|
100
|
-
template: this.template,
|
|
101
|
-
routeManifest: this.routeManifest
|
|
102
|
-
})).finish();
|
|
103
|
-
const cost = end();
|
|
104
|
-
this.tracker.trackTiming(SSRTimings.SSR_RENDER_HTML, cost);
|
|
105
|
-
this.result.renderLevel = RenderLevel.SERVER_RENDER;
|
|
106
|
-
} catch (e) {
|
|
107
|
-
this.tracker.trackError(SSRErrors.RENDER_HTML, e);
|
|
108
|
-
}
|
|
109
|
-
return html;
|
|
110
|
-
}
|
|
111
|
-
getSSRDataScript(templateData, routerData) {
|
|
112
|
-
const useInlineScript = false !== this.pluginConfig.inlineScript;
|
|
113
|
-
const sanitizedTemplateData = sanitizeSSRPayload(templateData, {
|
|
114
|
-
unsafeHeaders: this.pluginConfig.unsafeHeaders
|
|
115
|
-
}).payload;
|
|
116
|
-
const ssrData = serializeJson(sanitizedTemplateData);
|
|
117
|
-
const attrsStr = attributesToString({
|
|
118
|
-
nonce: this.nonce
|
|
119
|
-
});
|
|
120
|
-
let ssrDataScripts = useInlineScript ? `<script${attrsStr}>window._SSR_DATA = ${ssrData}</script>` : `<script type="application/json" id="${SSR_DATA_JSON_ID}">${ssrData}</script>`;
|
|
121
|
-
if (routerData) {
|
|
122
|
-
const sanitizedRouterData = sanitizeSSRPayload(routerData, {
|
|
123
|
-
unsafeHeaders: this.pluginConfig.unsafeHeaders
|
|
124
|
-
}).payload;
|
|
125
|
-
const serializedRouterData = serializeJson(sanitizedRouterData);
|
|
126
|
-
ssrDataScripts += useInlineScript ? `\n<script${attrsStr}>window._ROUTER_DATA = ${serializedRouterData}</script>` : `\n<script type="application/json" id="${ROUTER_DATA_JSON_ID}">${serializedRouterData}</script>`;
|
|
127
|
-
}
|
|
128
|
-
return ssrDataScripts;
|
|
129
|
-
}
|
|
130
|
-
constructor(options){
|
|
131
|
-
const { ctx, config } = options;
|
|
132
|
-
const { entryName, template, nonce } = ctx;
|
|
133
|
-
this.template = template;
|
|
134
|
-
this.entryName = entryName;
|
|
135
|
-
this.App = options.App;
|
|
136
|
-
this.pluginConfig = config;
|
|
137
|
-
this.routeManifest = ctx.routeManifest;
|
|
138
|
-
this.tracker = ctx.tracker;
|
|
139
|
-
this.metrics = ctx.metrics;
|
|
140
|
-
this.htmlModifiers = ctx.htmlModifiers;
|
|
141
|
-
this.nonce = nonce;
|
|
142
|
-
this.result = {
|
|
143
|
-
renderLevel: RenderLevel.CLIENT_RENDER,
|
|
144
|
-
html: '',
|
|
145
|
-
chunksMap: {
|
|
146
|
-
js: '',
|
|
147
|
-
css: ''
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
export default Entry;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { AppToolsContext } from '@modern-js/app-tools';
|
|
2
|
-
import type { NestedRouteForCli, PageRoute } from '@modern-js/types';
|
|
3
|
-
export declare function isTanstackRouterFrameworkEnabled(appContext: AppToolsContext): Promise<boolean>;
|
|
4
|
-
export declare function generateTanstackRouterTypesSourceForEntry(opts: {
|
|
5
|
-
appContext: AppToolsContext;
|
|
6
|
-
entryName: string;
|
|
7
|
-
routes: (NestedRouteForCli | PageRoute)[];
|
|
8
|
-
}): Promise<{
|
|
9
|
-
routerGenTs: string;
|
|
10
|
-
}>;
|