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