@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
package/dist/cjs/rsc/client.js
CHANGED
|
@@ -24,11 +24,15 @@ function __webpack_require__(moduleId) {
|
|
|
24
24
|
};
|
|
25
25
|
})();
|
|
26
26
|
(()=>{
|
|
27
|
-
__webpack_require__.d = (exports1,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
28
|
+
var define = (defs, kind)=>{
|
|
29
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
[kind]: defs[key]
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
define(getters, "get");
|
|
35
|
+
define(values, "value");
|
|
32
36
|
};
|
|
33
37
|
})();
|
|
34
38
|
(()=>{
|
|
@@ -47,9 +51,6 @@ function __webpack_require__(moduleId) {
|
|
|
47
51
|
var __webpack_exports__ = {};
|
|
48
52
|
(()=>{
|
|
49
53
|
__webpack_require__.r(__webpack_exports__);
|
|
50
|
-
__webpack_require__.d(__webpack_exports__, {
|
|
51
|
-
isRedirectResponse: ()=>isRedirectResponse
|
|
52
|
-
});
|
|
53
54
|
var _modern_js_render_client__rspack_import_0 = __webpack_require__("@modern-js/render/client");
|
|
54
55
|
var __rspack_reexport = {};
|
|
55
56
|
for(const __rspack_import_key in _modern_js_render_client__rspack_import_0)if ([
|
|
@@ -58,6 +59,9 @@ var __webpack_exports__ = {};
|
|
|
58
59
|
].indexOf(__rspack_import_key) < 0) __rspack_reexport[__rspack_import_key] = ()=>_modern_js_render_client__rspack_import_0[__rspack_import_key];
|
|
59
60
|
__webpack_require__.d(__webpack_exports__, __rspack_reexport);
|
|
60
61
|
const isRedirectResponse = (res)=>null != res.headers.get('X-Modernjs-Redirect');
|
|
62
|
+
__webpack_require__.d(__webpack_exports__, {}, {
|
|
63
|
+
isRedirectResponse: isRedirectResponse
|
|
64
|
+
});
|
|
61
65
|
})();
|
|
62
66
|
exports.isRedirectResponse = __webpack_exports__.isRedirectResponse;
|
|
63
67
|
for(var __rspack_i in __webpack_exports__)if (-1 === [
|
package/dist/cjs/rsc/server.js
CHANGED
|
@@ -24,11 +24,15 @@ function __webpack_require__(moduleId) {
|
|
|
24
24
|
};
|
|
25
25
|
})();
|
|
26
26
|
(()=>{
|
|
27
|
-
__webpack_require__.d = (exports1,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
28
|
+
var define = (defs, kind)=>{
|
|
29
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
[kind]: defs[key]
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
define(getters, "get");
|
|
35
|
+
define(values, "value");
|
|
32
36
|
};
|
|
33
37
|
})();
|
|
34
38
|
(()=>{
|
|
@@ -24,11 +24,15 @@ function __webpack_require__(moduleId) {
|
|
|
24
24
|
};
|
|
25
25
|
})();
|
|
26
26
|
(()=>{
|
|
27
|
-
__webpack_require__.d = (exports1,
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
__webpack_require__.d = (exports1, getters, values)=>{
|
|
28
|
+
var define = (defs, kind)=>{
|
|
29
|
+
for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
[kind]: defs[key]
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
define(getters, "get");
|
|
35
|
+
define(values, "value");
|
|
32
36
|
};
|
|
33
37
|
})();
|
|
34
38
|
(()=>{
|
|
@@ -50,7 +50,7 @@ const readQueryEnabledOverride = ()=>{
|
|
|
50
50
|
const detectLanguage = ()=>{
|
|
51
51
|
if ("u" < typeof document) return 'en';
|
|
52
52
|
const htmlLanguage = document.documentElement.lang;
|
|
53
|
-
if (htmlLanguage) return htmlLanguage.split('-')[0] || 'en';
|
|
53
|
+
if ('' !== htmlLanguage) return htmlLanguage.split('-')[0] || 'en';
|
|
54
54
|
if ("u" < typeof window) return 'en';
|
|
55
55
|
return window.location.pathname.split('/').filter(Boolean)[0] || 'en';
|
|
56
56
|
};
|
|
@@ -69,7 +69,7 @@ const getBoundaryId = (element)=>element.dataset.modernBoundaryId ?? element.dat
|
|
|
69
69
|
const collectBoundaryElements = (legacySelector)=>{
|
|
70
70
|
const elements = new Set();
|
|
71
71
|
for (const element of document.querySelectorAll(boundarySelector))elements.add(element);
|
|
72
|
-
if (
|
|
72
|
+
if (void 0 === legacySelector || '' === legacySelector) return Array.from(elements);
|
|
73
73
|
try {
|
|
74
74
|
for (const element of document.querySelectorAll(legacySelector))elements.add(element);
|
|
75
75
|
} catch {}
|
|
@@ -113,7 +113,7 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
|
|
|
113
113
|
const seenBoxes = new Set();
|
|
114
114
|
const nextBoxes = collectBoundaryElements(legacySelector).map((element)=>{
|
|
115
115
|
const boundaryId = getBoundaryId(element);
|
|
116
|
-
if (
|
|
116
|
+
if (void 0 === boundaryId || '' === boundaryId) return;
|
|
117
117
|
const rect = element.getBoundingClientRect();
|
|
118
118
|
if (rect.width <= 0 || rect.height <= 0) return;
|
|
119
119
|
const rectKey = formatRectKey(rect);
|
|
@@ -124,7 +124,7 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
|
|
|
124
124
|
const color = boundary?.color ?? palette[hashBoundaryId(boundaryId) % palette.length];
|
|
125
125
|
const label = boundary?.label ?? boundary?.appId ?? boundaryId;
|
|
126
126
|
const expose = element.dataset.modernMfExpose;
|
|
127
|
-
const detail = expose && expose !== label && expose !== boundaryId ? expose : void 0;
|
|
127
|
+
const detail = void 0 !== expose && '' !== expose && expose !== label && expose !== boundaryId ? expose : void 0;
|
|
128
128
|
const box = {
|
|
129
129
|
color,
|
|
130
130
|
height: rect.height,
|
|
@@ -134,7 +134,7 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
|
|
|
134
134
|
top: rect.top,
|
|
135
135
|
width: rect.width
|
|
136
136
|
};
|
|
137
|
-
if (detail) box.detail = detail;
|
|
137
|
+
if (void 0 !== detail) box.detail = detail;
|
|
138
138
|
return box;
|
|
139
139
|
}).filter((box)=>void 0 !== box);
|
|
140
140
|
setBoxes(nextBoxes);
|
|
@@ -196,9 +196,13 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
|
|
|
196
196
|
enabled ? /*#__PURE__*/ jsx("div", {
|
|
197
197
|
"aria-hidden": "true",
|
|
198
198
|
children: boxes.map((box)=>/*#__PURE__*/ jsx("div", {
|
|
199
|
+
"data-modern-boundary-overlay": "",
|
|
200
|
+
"data-modern-boundary-overlay-id": box.id,
|
|
201
|
+
"data-modern-boundary-overlay-label": box.label,
|
|
199
202
|
style: {
|
|
200
203
|
border: `2px solid ${box.color}`,
|
|
201
204
|
borderRadius: 8,
|
|
205
|
+
boxSizing: 'border-box',
|
|
202
206
|
boxShadow: `0 0 0 1px rgba(255,255,255,.72), 0 6px 20px color-mix(in srgb, ${box.color} 20%, transparent)`,
|
|
203
207
|
height: box.height,
|
|
204
208
|
left: box.left,
|
|
@@ -227,7 +231,7 @@ function BoundaryDebugger({ controlMode = 'visible', enabledByDefault = false, l
|
|
|
227
231
|
/*#__PURE__*/ jsx("span", {
|
|
228
232
|
children: box.label
|
|
229
233
|
}),
|
|
230
|
-
box.detail ? /*#__PURE__*/ jsx("span", {
|
|
234
|
+
void 0 !== box.detail && '' !== box.detail ? /*#__PURE__*/ jsx("span", {
|
|
231
235
|
style: {
|
|
232
236
|
font: '700 10px/1.1 system-ui, sans-serif',
|
|
233
237
|
opacity: 0.82,
|
package/dist/esm/cli/index.mjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { cleanRequireCache, isReact18 as utils_isReact18 } from "@modern-js/utils";
|
|
2
2
|
import path_0 from "path";
|
|
3
3
|
import { documentPlugin } from "../document/cli/index.mjs";
|
|
4
|
-
import { getEntrypointRoutesDir, handleFileChange, handleGeneratorEntryCode, handleModifyEntrypoints, isRouteEntry, routerPlugin } from "../router/cli/index.mjs";
|
|
4
|
+
import { getEntrypointRoutesDir, getEntrypointRoutesOwner, handleFileChange, handleGeneratorEntryCode, handleModifyEntrypoints, isRouteEntry, routerPlugin } from "../router/cli/index.mjs";
|
|
5
5
|
import { builderPluginAlias } from "./alias.mjs";
|
|
6
6
|
import { generateCode } from "./code.mjs";
|
|
7
7
|
import { ENTRY_BOOTSTRAP_FILE_NAME, ENTRY_POINT_FILE_NAME } from "./constants.mjs";
|
|
@@ -89,5 +89,7 @@ const runtimePlugin = (params)=>({
|
|
|
89
89
|
}
|
|
90
90
|
});
|
|
91
91
|
const cli = runtimePlugin;
|
|
92
|
+
export { makeLegalIdentifier } from "../router/cli/code/makeLegalIdentifier.mjs";
|
|
93
|
+
export { getPathWithoutExt } from "../router/cli/code/utils.mjs";
|
|
92
94
|
export default cli;
|
|
93
|
-
export { documentPlugin, getEntrypointRoutesDir, handleFileChange, handleGeneratorEntryCode, handleModifyEntrypoints, isRouteEntry, isRuntimeEntry, routerPlugin, runtimePlugin, ssrPlugin };
|
|
95
|
+
export { documentPlugin, getEntrypointRoutesDir, getEntrypointRoutesOwner, handleFileChange, handleGeneratorEntryCode, handleModifyEntrypoints, isRouteEntry, isRuntimeEntry, routerPlugin, runtimePlugin, ssrPlugin };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
const EXTENSIONS_SLOT = Symbol.for('@modern-js/runtime:context-extensions');
|
|
2
|
+
function getStore(context) {
|
|
3
|
+
return context[EXTENSIONS_SLOT];
|
|
4
|
+
}
|
|
5
|
+
function ensureStore(context) {
|
|
6
|
+
const target = context;
|
|
7
|
+
target[EXTENSIONS_SLOT] ??= new Map();
|
|
8
|
+
return target[EXTENSIONS_SLOT];
|
|
9
|
+
}
|
|
10
|
+
function stripRuntimeContextExtensions(context) {
|
|
11
|
+
delete context[EXTENSIONS_SLOT];
|
|
12
|
+
}
|
|
13
|
+
function createRuntimeContextExtension(id) {
|
|
14
|
+
const key = Symbol.for(`@modern-js/runtime:context-extension:${id}`);
|
|
15
|
+
return {
|
|
16
|
+
key,
|
|
17
|
+
get (context) {
|
|
18
|
+
return getStore(context)?.get(key);
|
|
19
|
+
},
|
|
20
|
+
set (context, value) {
|
|
21
|
+
ensureStore(context).set(key, value);
|
|
22
|
+
},
|
|
23
|
+
remove (context) {
|
|
24
|
+
getStore(context)?.delete(key);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export { createRuntimeContextExtension, stripRuntimeContextExtensions };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { createRuntimeContextExtension } from "./extensions.mjs";
|
|
2
|
+
const helmetContextExtension = createRuntimeContextExtension('@modern-js/runtime:helmet-context');
|
|
3
|
+
function getHelmetContext(context) {
|
|
4
|
+
return helmetContextExtension.get(context);
|
|
5
|
+
}
|
|
6
|
+
function ensureHelmetContext(context) {
|
|
7
|
+
const existing = helmetContextExtension.get(context);
|
|
8
|
+
if (void 0 !== existing) return existing;
|
|
9
|
+
const created = {};
|
|
10
|
+
helmetContextExtension.set(context, created);
|
|
11
|
+
return created;
|
|
12
|
+
}
|
|
13
|
+
export { ensureHelmetContext, getHelmetContext };
|
|
@@ -40,6 +40,11 @@ function getGlobalLayoutApp() {
|
|
|
40
40
|
function getGlobalBasename() {
|
|
41
41
|
return globalContext.basename;
|
|
42
42
|
}
|
|
43
|
+
export { DefaultNotFound } from "../../router/runtime/DefaultNotFound.mjs";
|
|
44
|
+
export { modifyRoutes, onAfterCreateRouter, onAfterHydrateRouter, onBeforeCreateRouter, onBeforeCreateRoutes, onBeforeHydrateRouter } from "../../router/runtime/hooks.mjs";
|
|
45
|
+
export { applyRouterRuntimeState, applyRouterServerPrepareResult, cleanupRouterRuntimeState, createRouterRuntimeState, createRouterServerSnapshot, getRouterHydrationScripts, getRouterMatchedRouteIds, getRouterRuntimeState, getRouterServerSnapshot } from "../../router/runtime/lifecycle.mjs";
|
|
46
|
+
export { registerRouterProvider, resolveRouterProvider, routerProviderRegistryHooks } from "../../router/runtime/provider.mjs";
|
|
47
|
+
export { createRuntimeContextExtension } from "./extensions.mjs";
|
|
43
48
|
export { InternalRuntimeContext, RuntimeContext, getInitialContext } from "./runtime.mjs";
|
|
44
49
|
export { getServerPayload, setServerPayload } from "./serverPayload/index.mjs";
|
|
45
50
|
export { getCurrentEntryName, getGlobalApp, getGlobalBasename, getGlobalEnableRsc, getGlobalInternalRuntimeContext, getGlobalIsRscClient, getGlobalLayoutApp, getGlobalRSCRoot, getGlobalRoutes, setGlobalContext, setGlobalInternalRuntimeContext };
|
|
@@ -1,24 +1,26 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import { HelmetProvider } from "react-helmet-async";
|
|
3
3
|
import { InternalRuntimeContext, RuntimeContext } from "../context/index.mjs";
|
|
4
|
+
import { stripRuntimeContextExtensions } from "../context/extensions.mjs";
|
|
5
|
+
import { ensureHelmetContext } from "../context/helmetContext.mjs";
|
|
4
6
|
function wrapRuntimeContextProvider(App, contextValue) {
|
|
5
|
-
const { isBrowser, initialData, routes,
|
|
7
|
+
const { isBrowser, initialData, routes, context, routeManifest, routerContext, unstable_getBlockNavState, ssrContext, _internalContext, _internalRouterBaseName, ...rest } = contextValue;
|
|
6
8
|
const internalContextValue = contextValue;
|
|
7
|
-
|
|
9
|
+
const helmetContext = ensureHelmetContext(internalContextValue);
|
|
8
10
|
const runtimeContextValue = {
|
|
9
11
|
isBrowser,
|
|
10
12
|
initialData,
|
|
11
13
|
routes,
|
|
12
|
-
routerFramework,
|
|
13
14
|
context,
|
|
14
15
|
...rest
|
|
15
16
|
};
|
|
17
|
+
stripRuntimeContextExtensions(runtimeContextValue);
|
|
16
18
|
return /*#__PURE__*/ jsx(InternalRuntimeContext.Provider, {
|
|
17
19
|
value: internalContextValue,
|
|
18
20
|
children: /*#__PURE__*/ jsx(RuntimeContext.Provider, {
|
|
19
21
|
value: runtimeContextValue,
|
|
20
22
|
children: /*#__PURE__*/ jsx(HelmetProvider, {
|
|
21
|
-
context:
|
|
23
|
+
context: helmetContext,
|
|
22
24
|
children: App
|
|
23
25
|
})
|
|
24
26
|
})
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { attributesToString } from "./utils.mjs";
|
|
2
2
|
const createFederatedCssLinks = (assets, options)=>{
|
|
3
|
-
if (
|
|
3
|
+
if (void 0 === assets || 0 === assets.length) return '';
|
|
4
4
|
const seen = new Set(options.existingAssets || []);
|
|
5
5
|
const attributes = attributesToString(options.attributes || {});
|
|
6
6
|
const links = [];
|
|
7
|
-
for (const asset of assets)if (!(
|
|
7
|
+
for (const asset of assets)if (!('' === asset || seen.has(asset) || options.template.includes(asset))) {
|
|
8
8
|
seen.add(asset);
|
|
9
9
|
links.push(`<link${attributes} href="${asset}" rel="stylesheet" />`);
|
|
10
10
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { getHelmetContext } from "../context/helmetContext.mjs";
|
|
1
2
|
import { safeReplace } from "./utils.mjs";
|
|
2
3
|
const EOL = '\n';
|
|
3
4
|
const RE_HTML_ATTR = /<html[^>]*>/;
|
|
@@ -6,7 +7,7 @@ const RE_LAST_IN_HEAD = /<\/head>/;
|
|
|
6
7
|
const RE_TITLE = /<title[^>]*>([\s\S\n\r]*?)<\/title>/;
|
|
7
8
|
const TEST_TITLE_CONTENT = /(?<=<title[^>]*>)([\s\S\n\r]*?)([.|\S])([\s\S\n\r]*?)(?=<\/title>)/;
|
|
8
9
|
function getHelmetData(runtimeContext) {
|
|
9
|
-
return runtimeContext
|
|
10
|
+
return getHelmetContext(runtimeContext)?.helmet ?? void 0;
|
|
10
11
|
}
|
|
11
12
|
function createReplaceHelemt(helmetData) {
|
|
12
13
|
return helmetData ? (template)=>helmetReplace(template, helmetData) : (tempalte)=>tempalte;
|
|
@@ -2,13 +2,14 @@ import { jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { storage } from "@modern-js/runtime-utils/node";
|
|
3
3
|
import { getPathname, parseCookie, parseHeaders, parseQuery } from "@modern-js/runtime-utils/universal/request";
|
|
4
4
|
import react, { Fragment } from "react";
|
|
5
|
-
import {
|
|
5
|
+
import { getRouterServerSnapshot } from "../../router/runtime/lifecycle.mjs";
|
|
6
6
|
import { handleRSCRedirect } from "../../router/runtime/rsc-router.mjs";
|
|
7
7
|
import { getGlobalInternalRuntimeContext, getGlobalRSCRoot } from "../context/index.mjs";
|
|
8
8
|
import { getInitialContext } from "../context/runtime.mjs";
|
|
9
9
|
import { getServerPayload } from "../context/serverPayload/index.mjs";
|
|
10
10
|
import { createRoot } from "../react/index.mjs";
|
|
11
11
|
import { CHUNK_CSS_PLACEHOLDER } from "./constants.mjs";
|
|
12
|
+
import { withRouterCleanup } from "./routerCleanup.mjs";
|
|
12
13
|
import { SSRErrors } from "./tracer.mjs";
|
|
13
14
|
import { getSSRConfigByEntry, getSSRMode } from "./utils.mjs";
|
|
14
15
|
async function handleRSCRequest(request, Root, context, options, handleRequest) {
|
|
@@ -37,6 +38,39 @@ const processRedirect = (headers, status, ctx)=>{
|
|
|
37
38
|
headers
|
|
38
39
|
});
|
|
39
40
|
};
|
|
41
|
+
const applyRouterSnapshotResult = (context, onError)=>{
|
|
42
|
+
const routerServerSnapshot = getRouterServerSnapshot(context);
|
|
43
|
+
const routerStatusCode = routerServerSnapshot?.statusCode ?? context.routerContext?.statusCode;
|
|
44
|
+
if (routerStatusCode && 200 !== routerStatusCode) context.ssrContext?.response.status(routerStatusCode);
|
|
45
|
+
const errors = Object.values(routerServerSnapshot?.errors || context.routerContext?.errors || {});
|
|
46
|
+
if (errors.length > 0) onError(errors[0], SSRErrors.LOADER_ERROR);
|
|
47
|
+
};
|
|
48
|
+
const createLoaderRedirectResponse = (beforeRenderResult, redirectCtx)=>{
|
|
49
|
+
if (!beforeRenderResult || !isRedirectStatus(beforeRenderResult.status)) return;
|
|
50
|
+
if (beforeRenderResult.headers.has('X-Modernjs-Redirect')) return beforeRenderResult;
|
|
51
|
+
const redirectUrl = beforeRenderResult.headers.get('Location') || '/';
|
|
52
|
+
return processRedirect(new Headers({
|
|
53
|
+
Location: redirectUrl
|
|
54
|
+
}), beforeRenderResult.status, redirectCtx);
|
|
55
|
+
};
|
|
56
|
+
const renderRequest = async (request, Root, context, options, handleRequest, enableRsc)=>{
|
|
57
|
+
if (enableRsc) return handleRSCRequest(request, Root, context, options, handleRequest);
|
|
58
|
+
return handleRequest(request, Root, {
|
|
59
|
+
...options,
|
|
60
|
+
runtimeContext: context
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
const finalizeRenderResponse = (response, responseProxy, redirectCtx, routerCleanup)=>{
|
|
64
|
+
if (-1 !== responseProxy.status && isRedirectStatus(responseProxy.status) && responseProxy.headers.Location) return processRedirect(new Headers(responseProxy.headers), responseProxy.status, redirectCtx);
|
|
65
|
+
Object.entries(responseProxy.headers).forEach(([key, value])=>{
|
|
66
|
+
response.headers.set(key, value);
|
|
67
|
+
});
|
|
68
|
+
if (-1 !== responseProxy.status) return routerCleanup.deferUntilBodyDone(new Response(response.body, {
|
|
69
|
+
status: responseProxy.status,
|
|
70
|
+
headers: response.headers
|
|
71
|
+
}));
|
|
72
|
+
return routerCleanup.deferUntilBodyDone(response);
|
|
73
|
+
};
|
|
40
74
|
function createSSRContext(request, options) {
|
|
41
75
|
const { config, loaderContext, onError, onTiming, locals, resource, params, responseProxy, reporter } = options;
|
|
42
76
|
const { nonce, useJsonScript } = config;
|
|
@@ -132,41 +166,20 @@ const createRequestHandler = async (handleRequest, createRequestOptions)=>{
|
|
|
132
166
|
isRSCNavigation: 'true' === request.headers.get('x-rsc-tree'),
|
|
133
167
|
basename: ssrContext.baseUrl || '/'
|
|
134
168
|
};
|
|
135
|
-
|
|
169
|
+
return withRouterCleanup(context, options.onError, async (routerCleanup)=>{
|
|
136
170
|
const beforeRenderResult = await runBeforeRender(context);
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
if (errors.length > 0) options.onError(errors[0], SSRErrors.LOADER_ERROR);
|
|
142
|
-
if ("u" > typeof Response && beforeRenderResult instanceof Response && isRedirectStatus(beforeRenderResult.status)) {
|
|
143
|
-
if (beforeRenderResult.headers.has('X-Modernjs-Redirect')) return beforeRenderResult;
|
|
144
|
-
const redirectUrl = beforeRenderResult.headers.get('Location') || '/';
|
|
145
|
-
return processRedirect(new Headers({
|
|
146
|
-
Location: redirectUrl
|
|
147
|
-
}), beforeRenderResult.status, redirectCtx);
|
|
171
|
+
applyRouterSnapshotResult(context, options.onError);
|
|
172
|
+
if ("u" > typeof Response) {
|
|
173
|
+
const redirectResponse = createLoaderRedirectResponse(beforeRenderResult, redirectCtx);
|
|
174
|
+
if (redirectResponse) return redirectResponse;
|
|
148
175
|
}
|
|
149
176
|
if (!createRequestOptions?.enableRsc) {
|
|
150
177
|
const { htmlTemplate } = options.resource;
|
|
151
178
|
options.resource.htmlTemplate = htmlTemplate.replace('</head>', `${CHUNK_CSS_PLACEHOLDER}</head>`);
|
|
152
179
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
runtimeContext: context
|
|
157
|
-
});
|
|
158
|
-
if (-1 !== responseProxy.status && isRedirectStatus(responseProxy.status) && responseProxy.headers.Location) return processRedirect(new Headers(responseProxy.headers), responseProxy.status, redirectCtx);
|
|
159
|
-
Object.entries(responseProxy.headers).forEach(([key, value])=>{
|
|
160
|
-
response.headers.set(key, value);
|
|
161
|
-
});
|
|
162
|
-
if (-1 !== responseProxy.status) return new Response(response.body, {
|
|
163
|
-
status: responseProxy.status,
|
|
164
|
-
headers: response.headers
|
|
165
|
-
});
|
|
166
|
-
return response;
|
|
167
|
-
} finally{
|
|
168
|
-
await cleanupRouterRuntimeState(context);
|
|
169
|
-
}
|
|
180
|
+
const response = await renderRequest(request, Root, context, options, handleRequest, !!createRequestOptions?.enableRsc);
|
|
181
|
+
return finalizeRenderResponse(response, responseProxy, redirectCtx, routerCleanup);
|
|
182
|
+
});
|
|
170
183
|
});
|
|
171
184
|
};
|
|
172
185
|
return requestHandler;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { getRouterRuntimeState } from "../../router/runtime/lifecycle.mjs";
|
|
2
|
+
const ROUTER_CLEANUP_ERROR = 'An error occurs during router runtime cleanup';
|
|
3
|
+
async function withRouterCleanup(runtimeContext, onError, callback) {
|
|
4
|
+
const routerCleanup = createRouterCleanup(runtimeContext, onError);
|
|
5
|
+
try {
|
|
6
|
+
return await callback(routerCleanup);
|
|
7
|
+
} finally{
|
|
8
|
+
if (!routerCleanup.deferred) await routerCleanup.run();
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
function createRouterCleanup(runtimeContext, onError) {
|
|
12
|
+
let deferred = false;
|
|
13
|
+
let finished = false;
|
|
14
|
+
const run = async ()=>{
|
|
15
|
+
if (finished) return;
|
|
16
|
+
finished = true;
|
|
17
|
+
try {
|
|
18
|
+
await getRouterRuntimeState(runtimeContext)?.cleanup?.();
|
|
19
|
+
} catch (error) {
|
|
20
|
+
onError(error, ROUTER_CLEANUP_ERROR);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const deferUntilBodyDone = (response)=>{
|
|
24
|
+
const { body } = response;
|
|
25
|
+
if (!body || body.locked) return response;
|
|
26
|
+
deferred = true;
|
|
27
|
+
const reader = body.getReader();
|
|
28
|
+
const wrappedBody = new ReadableStream({
|
|
29
|
+
async pull (controller) {
|
|
30
|
+
let result;
|
|
31
|
+
try {
|
|
32
|
+
result = await reader.read();
|
|
33
|
+
} catch (error) {
|
|
34
|
+
controller.error(error);
|
|
35
|
+
await run();
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
if (result.done) {
|
|
39
|
+
controller.close();
|
|
40
|
+
await run();
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
controller.enqueue(result.value);
|
|
44
|
+
},
|
|
45
|
+
async cancel (reason) {
|
|
46
|
+
try {
|
|
47
|
+
await reader.cancel(reason);
|
|
48
|
+
} catch {}
|
|
49
|
+
await run();
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
return new Response(wrappedBody, {
|
|
53
|
+
status: response.status,
|
|
54
|
+
statusText: response.statusText,
|
|
55
|
+
headers: response.headers
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
return {
|
|
59
|
+
get deferred () {
|
|
60
|
+
return deferred;
|
|
61
|
+
},
|
|
62
|
+
run,
|
|
63
|
+
deferUntilBodyDone
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
export { ROUTER_CLEANUP_ERROR, createRouterCleanup, withRouterCleanup };
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { getRouterMatchedRouteIds } from "../../router/runtime/lifecycle.mjs";
|
|
2
|
+
import { CHUNK_JS_PLACEHOLDER } from "./constants.mjs";
|
|
3
|
+
import { safeReplace } from "./utils.mjs";
|
|
1
4
|
function getScriptTags(template) {
|
|
2
5
|
const scriptRegExp = /<script\b[^>]*\bsrc=(["'])(.*?)\1[^>]*><\/script>/g;
|
|
3
6
|
return Array.from(template.matchAll(scriptRegExp)).map((match)=>({
|
|
@@ -15,11 +18,67 @@ function isEntryScript(src, entryName, asyncEntry) {
|
|
|
15
18
|
const prefix = asyncEntry ? `async-${entryName}` : entryName;
|
|
16
19
|
return basename === `${prefix}.js` || basename.startsWith(`${prefix}.`) || basename.startsWith(`${prefix}-`);
|
|
17
20
|
}
|
|
21
|
+
const dedupeByUrl = (chunks)=>{
|
|
22
|
+
const seen = new Set();
|
|
23
|
+
return chunks.filter((chunk)=>{
|
|
24
|
+
if (void 0 === chunk.url || '' === chunk.url || seen.has(chunk.url)) return false;
|
|
25
|
+
seen.add(chunk.url);
|
|
26
|
+
return true;
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
const isAsyncEntryScriptChunk = (chunk, entryName)=>{
|
|
30
|
+
if (void 0 === chunk.url || !chunk.url.endsWith('.js')) return false;
|
|
31
|
+
const asyncEntryName = `async-${entryName}`;
|
|
32
|
+
const filename = chunk.filename ?? chunk.url;
|
|
33
|
+
const basename = filename.split('/').pop() ?? filename;
|
|
34
|
+
return basename === `${asyncEntryName}.js` || basename.startsWith(`${asyncEntryName}.`) || basename.startsWith(`${asyncEntryName}-`);
|
|
35
|
+
};
|
|
36
|
+
function getRouteAssets(runtimeContext, routeManifest = runtimeContext.routeManifest) {
|
|
37
|
+
return routeManifest?.routeAssets;
|
|
38
|
+
}
|
|
39
|
+
function getMatchedRouteAssets(runtimeContext, routeManifest) {
|
|
40
|
+
const routeAssets = getRouteAssets(runtimeContext, routeManifest);
|
|
41
|
+
if (void 0 === routeAssets) return [];
|
|
42
|
+
const matchedRouteIds = getRouterMatchedRouteIds(runtimeContext) ?? [];
|
|
43
|
+
return matchedRouteIds.flatMap((routeId)=>routeAssets[routeId]?.assets ?? []);
|
|
44
|
+
}
|
|
45
|
+
const orderHydrationScriptChunks = ({ asyncEntryChunks, collectedChunks, matchedRouteChunks, entryName })=>{
|
|
46
|
+
const asyncEntryScriptChunks = [];
|
|
47
|
+
const asyncEntryDependencyChunks = [];
|
|
48
|
+
for (const chunk of asyncEntryChunks)if (isAsyncEntryScriptChunk(chunk, entryName)) asyncEntryScriptChunks.push(chunk);
|
|
49
|
+
else asyncEntryDependencyChunks.push(chunk);
|
|
50
|
+
return dedupeByUrl([
|
|
51
|
+
...asyncEntryDependencyChunks,
|
|
52
|
+
...collectedChunks,
|
|
53
|
+
...matchedRouteChunks,
|
|
54
|
+
...asyncEntryScriptChunks
|
|
55
|
+
]);
|
|
56
|
+
};
|
|
18
57
|
function injectBeforeHydrationEntryScript(template, scripts, entryName = 'index') {
|
|
19
|
-
if (
|
|
58
|
+
if ('' === scripts) return template;
|
|
20
59
|
const scriptTags = getScriptTags(template);
|
|
21
60
|
const target = scriptTags.find((match)=>isEntryScript(match.src, entryName, false)) ?? scriptTags.find((match)=>isEntryScript(match.src, entryName, true));
|
|
22
|
-
if (
|
|
61
|
+
if (void 0 === target) return template;
|
|
23
62
|
return `${template.slice(0, target.index)}${scripts}${template.slice(target.index)}`;
|
|
24
63
|
}
|
|
25
|
-
|
|
64
|
+
function replaceChunkJsPlaceholder(template, scripts, entryName, placeholder = CHUNK_JS_PLACEHOLDER) {
|
|
65
|
+
if ('' === scripts) return safeReplace(template, placeholder, '');
|
|
66
|
+
const withoutPlaceholder = safeReplace(template, placeholder, '');
|
|
67
|
+
const withEarlyScripts = injectBeforeHydrationEntryScript(withoutPlaceholder, scripts, entryName);
|
|
68
|
+
if (withEarlyScripts !== withoutPlaceholder) return withEarlyScripts;
|
|
69
|
+
return safeReplace(template, placeholder, scripts);
|
|
70
|
+
}
|
|
71
|
+
function createRouteHydrationScriptTags(runtimeContext, entryName, options = {}) {
|
|
72
|
+
const { nonce, template } = options;
|
|
73
|
+
const routeAssets = getRouteAssets(runtimeContext);
|
|
74
|
+
if (void 0 === routeAssets) return '';
|
|
75
|
+
const matchedRouteIds = getRouterMatchedRouteIds(runtimeContext) ?? [];
|
|
76
|
+
const assetEntries = [
|
|
77
|
+
...matchedRouteIds.map((routeId)=>routeAssets[routeId]),
|
|
78
|
+
routeAssets[`async-${entryName}`]
|
|
79
|
+
].filter((entry)=>void 0 !== entry);
|
|
80
|
+
const jsAssets = Array.from(new Set(assetEntries.flatMap((entry)=>(entry.assets ?? []).filter((asset)=>asset.endsWith('.js')))));
|
|
81
|
+
const nonceAttr = void 0 === nonce || '' === nonce ? '' : ` nonce="${nonce}"`;
|
|
82
|
+
return jsAssets.filter((asset)=>template?.includes(asset) !== true).map((asset)=>`<script src=${asset}${nonceAttr}></script>`).join(' ');
|
|
83
|
+
}
|
|
84
|
+
export { createRouteHydrationScriptTags, getMatchedRouteAssets, injectBeforeHydrationEntryScript, orderHydrationScriptChunks, replaceChunkJsPlaceholder };
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { serializeJson } from "@modern-js/runtime-utils/node";
|
|
2
|
-
import { getRouterHydrationScripts
|
|
2
|
+
import { getRouterHydrationScripts } from "../../../router/runtime/lifecycle.mjs";
|
|
3
3
|
import { SSR_DATA_JSON_ID } from "../../constants.mjs";
|
|
4
4
|
import { SSR_DATA_PLACEHOLDER } from "../constants.mjs";
|
|
5
|
-
import {
|
|
5
|
+
import { createRouteHydrationScriptTags, replaceChunkJsPlaceholder } from "../scriptOrder.mjs";
|
|
6
6
|
import { buildHtml } from "../shared.mjs";
|
|
7
7
|
import { attributesToString, safeReplace } from "../utils.mjs";
|
|
8
8
|
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
@@ -19,24 +19,12 @@ function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
|
19
19
|
(template)=>injectJs(template, entryName, config.nonce)
|
|
20
20
|
];
|
|
21
21
|
async function injectJs(template, entryName, nonce) {
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
...matchedRouteIds.map((routeId)=>routeAssets[routeId]),
|
|
29
|
-
routeAssets[`async-${entryName}`]
|
|
30
|
-
].filter(Boolean);
|
|
31
|
-
const jsAssets = Array.from(new Set(assetEntries.flatMap((entry)=>(entry.assets ?? []).filter((asset)=>asset.endsWith('.js')))));
|
|
32
|
-
const nonceAttr = nonce ? ` nonce="${nonce}"` : '';
|
|
33
|
-
const jsChunkStr = jsAssets.filter((asset)=>!template.includes(asset)).map((asset)=>`<script src=${asset}${nonceAttr}></script>`).join(' ');
|
|
34
|
-
if (jsChunkStr) {
|
|
35
|
-
const withoutPlaceholder = safeReplace(template, '<!--<?- chunksMap.js ?>-->', '');
|
|
36
|
-
const withEarlyScripts = injectBeforeHydrationEntryScript(withoutPlaceholder, jsChunkStr, entryName);
|
|
37
|
-
return withEarlyScripts !== withoutPlaceholder ? withEarlyScripts : safeReplace(template, '<!--<?- chunksMap.js ?>-->', jsChunkStr);
|
|
38
|
-
}
|
|
39
|
-
return template;
|
|
22
|
+
const jsChunkStr = createRouteHydrationScriptTags(runtimeContext, entryName, {
|
|
23
|
+
nonce,
|
|
24
|
+
template
|
|
25
|
+
});
|
|
26
|
+
if (!jsChunkStr) return template;
|
|
27
|
+
return replaceChunkJsPlaceholder(template, jsChunkStr, entryName);
|
|
40
28
|
}
|
|
41
29
|
return buildHtml(afterAppTemplate, callbacks);
|
|
42
30
|
}
|
|
@@ -4,7 +4,7 @@ import { CHUNK_CSS_PLACEHOLDER } from "../constants.mjs";
|
|
|
4
4
|
import { createFederatedCssLinks } from "../federatedCss.mjs";
|
|
5
5
|
import { createReplaceHelemt, getHelmetData } from "../helmet.mjs";
|
|
6
6
|
import { buildHtml } from "../shared.mjs";
|
|
7
|
-
import { checkIsNode, safeReplace } from "../utils.mjs";
|
|
7
|
+
import { checkIsNode, hasStylesheetLink, safeReplace } from "../utils.mjs";
|
|
8
8
|
const readAsset = async (chunk)=>{
|
|
9
9
|
const fs = await import("fs/promises");
|
|
10
10
|
const path = await import("path");
|
|
@@ -45,13 +45,13 @@ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
|
|
|
45
45
|
if (!index) return;
|
|
46
46
|
const routeId = match.route.id;
|
|
47
47
|
if (routeId) return routeAssets[routeId];
|
|
48
|
-
}).filter(
|
|
48
|
+
}).filter((routeManifest)=>void 0 !== routeManifest) ?? [];
|
|
49
49
|
}
|
|
50
50
|
const asyncEntry = routeAssets[`async-${entryName}`];
|
|
51
51
|
if (asyncEntry) matchedRouteManifests.push(asyncEntry);
|
|
52
52
|
const cssChunks = matchedRouteManifests.reduce((chunks, routeManifest)=>{
|
|
53
53
|
const { referenceCssAssets = [] } = routeManifest;
|
|
54
|
-
const _cssChunks = referenceCssAssets.filter((asset)=>asset?.endsWith('.css') && !template
|
|
54
|
+
const _cssChunks = referenceCssAssets.filter((asset)=>asset?.endsWith('.css') && !hasStylesheetLink(template, asset));
|
|
55
55
|
return [
|
|
56
56
|
...chunks,
|
|
57
57
|
..._cssChunks
|
|
@@ -39,7 +39,7 @@ async function buildShellBeforeTemplate(beforeAppTemplate, options) {
|
|
|
39
39
|
if (!index) return;
|
|
40
40
|
const routeId = match.route.id;
|
|
41
41
|
if (routeId) return routeAssets[routeId];
|
|
42
|
-
}).filter(
|
|
42
|
+
}).filter((routeManifest)=>void 0 !== routeManifest) ?? [];
|
|
43
43
|
}
|
|
44
44
|
const asyncEntry = routeAssets[`async-${entryName}`];
|
|
45
45
|
if (asyncEntry) matchedRouteManifests.push(asyncEntry);
|
|
@@ -64,12 +64,14 @@ const createReadableStreamFromElement = async (request, rootElement, options)=>{
|
|
|
64
64
|
try {
|
|
65
65
|
if (shellChunkStatus !== ShellChunkStatus.FINISH) {
|
|
66
66
|
chunkVec.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
67
|
+
const concatedChunk = Buffer.concat(chunkVec).toString('utf-8');
|
|
68
|
+
const markerIndex = concatedChunk.indexOf(ESCAPED_SHELL_STREAM_END_MARK);
|
|
69
|
+
if (-1 !== markerIndex) {
|
|
70
|
+
const beforeMark = concatedChunk.slice(0, markerIndex);
|
|
71
|
+
const afterMark = concatedChunk.slice(markerIndex + ESCAPED_SHELL_STREAM_END_MARK.length);
|
|
71
72
|
shellChunkStatus = ShellChunkStatus.FINISH;
|
|
72
|
-
this.push(`${shellBefore}${
|
|
73
|
+
this.push(`${shellBefore}${beforeMark}${shellAfter}`);
|
|
74
|
+
if (afterMark) this.push(afterMark);
|
|
73
75
|
if (pendingScripts.length > 0) for (const s of pendingScripts)this.push(s);
|
|
74
76
|
}
|
|
75
77
|
} else this.push(chunk);
|