@wular/pnext 0.0.3 → 0.0.6
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/README.md +11 -11
- package/bin/pnext +1 -1
- package/config/lint/base.js +7 -7
- package/config/ts/base.json +2 -4
- package/config/ts/react.json +2 -6
- package/package.json +23 -2
- package/reference/compat.md +1 -1
- package/reference/config.md +2 -2
- package/reference/css.md +13 -9
- package/reference/dev.md +1 -1
- package/reference/metadata.md +7 -7
- package/reference/navigation.md +35 -28
- package/reference/performance.md +70 -70
- package/reference/rendering.md +17 -17
- package/reference/routing.md +17 -17
- package/reference/typegen.md +12 -8
- package/src/api/cache.ts +36 -37
- package/src/api/client-cache.ts +2 -2
- package/src/api/client-navigation.ts +113 -109
- package/src/api/dynamic.tsx +58 -55
- package/src/api/link.tsx +49 -52
- package/src/api/navigation.ts +59 -58
- package/src/api/server.ts +152 -144
- package/src/api/suspense.ts +4 -4
- package/src/cli/adapters/vercel-warm.ts +126 -121
- package/src/cli/adapters/vercel.ts +437 -443
- package/src/cli/analyze.ts +333 -144
- package/src/cli/{named-bin.ts → boot/named-bin.ts} +37 -37
- package/src/cli/{boot-trace.ts → boot/trace.ts} +10 -10
- package/src/cli/build.ts +976 -978
- package/src/cli/create.ts +71 -63
- package/src/cli/dev.ts +116 -116
- package/src/cli/index.ts +88 -85
- package/src/cli/migrate/package-json.ts +73 -71
- package/src/cli/migrate/report.ts +32 -33
- package/src/cli/migrate/{index.ts → run.ts} +48 -49
- package/src/cli/migrate/scan.ts +46 -46
- package/src/cli/migrate/spinner.ts +9 -9
- package/src/cli/migrate/tsconfig.ts +35 -35
- package/src/cli/{server-entry.ts → serve/entry.ts} +57 -57
- package/src/cli/{request-pipeline.ts → serve/pipeline.ts} +386 -394
- package/src/cli/{serve-ui.ts → serve/ui.ts} +47 -47
- package/src/cli/start.ts +65 -66
- package/src/{typegen.ts → cli/typegen.ts} +59 -59
- package/src/client/build.ts +794 -768
- package/src/client/chunk-fold.ts +245 -240
- package/src/client/{paths.ts → chunk-name.ts} +6 -6
- package/src/client/entry.ts +162 -147
- package/src/client/prebuilt.ts +231 -223
- package/src/client/profile.ts +29 -29
- package/src/client/react-compiler.ts +20 -15
- package/src/client/{compat-surface.ts → react-tier.ts} +64 -64
- package/src/client/reference-stub.ts +51 -51
- package/src/client/reference.ts +19 -19
- package/src/{api → client}/router/events.ts +17 -17
- package/src/{api → client}/router/history.ts +16 -16
- package/src/{api → client}/router/hub.ts +52 -53
- package/src/{api/router.ts → client/router/index.ts} +61 -60
- package/src/{api → client}/router/policies.ts +24 -24
- package/src/{api → client}/router/runtime.ts +1988 -1961
- package/src/{api → client}/router/types.ts +93 -98
- package/src/compat/actions/client-plugin.ts +42 -43
- package/src/compat/actions/client-stub.ts +14 -14
- package/src/compat/actions/{action-client.ts → client.ts} +194 -193
- package/src/compat/actions/config.ts +63 -64
- package/src/compat/actions/detect.ts +68 -68
- package/src/compat/actions/discovery.ts +105 -105
- package/src/compat/actions/{action-dispatch.ts → dispatch.ts} +277 -274
- package/src/compat/actions/early-submit.ts +1 -1
- package/src/compat/actions/endpoint.ts +198 -198
- package/src/compat/actions/extensions.ts +811 -0
- package/src/compat/actions/flight.ts +23 -23
- package/src/compat/actions/form-state.ts +34 -34
- package/src/compat/actions/hoist.ts +382 -236
- package/src/compat/actions/ids.ts +7 -12
- package/src/compat/actions/index.ts +8 -8
- package/src/compat/actions/instances.ts +46 -46
- package/src/compat/actions/origin.ts +47 -48
- package/src/compat/actions/protocol.ts +22 -22
- package/src/compat/actions/registry.ts +19 -19
- package/src/compat/{misc/action-return.ts → actions/return.ts} +60 -57
- package/src/compat/actions/rewrite.ts +125 -125
- package/src/compat/actions/{action-router.ts → router.ts} +10 -10
- package/src/compat/actions/serve.ts +132 -136
- package/src/compat/actions/server-tag.ts +4 -4
- package/src/compat/actions/{action-shared.ts → shared.ts} +34 -34
- package/src/compat/actions/unrecognized-error.ts +4 -4
- package/src/compat/{index.ts → aliases.ts} +112 -109
- package/src/compat/bundler/bun-externals.ts +18 -18
- package/src/compat/bundler/cjs-exports.ts +271 -223
- package/src/compat/bundler/config.ts +116 -111
- package/src/compat/bundler/externals.ts +12 -12
- package/src/compat/bundler/import-meta-url.ts +19 -19
- package/src/compat/bundler/modularize-imports.ts +36 -33
- package/src/compat/bundler/new-url-asset.ts +22 -24
- package/src/compat/bundler/optimize-package-imports.ts +111 -107
- package/src/compat/bundler/polyfill.ts +28 -28
- package/src/compat/bundler/react-compiler.ts +35 -29
- package/src/compat/bundler/react-profiler.tsx +11 -11
- package/src/compat/bundler/relay-transform.ts +48 -47
- package/src/compat/bundler/require-context.ts +119 -113
- package/src/compat/bundler/resolve-extensions.ts +19 -19
- package/src/compat/bundler/source-cache.ts +25 -25
- package/src/compat/bundler/static-imports.ts +7 -7
- package/src/compat/bundler/symlink-imports.ts +46 -46
- package/src/compat/bundler/tsconfig-paths.ts +13 -15
- package/src/compat/bundler/wasm.ts +58 -60
- package/src/compat/bundler/webpack-loaders.ts +254 -241
- package/src/compat/bundler/worker.ts +101 -104
- package/src/compat/cache/build-flags.ts +29 -29
- package/src/compat/cache/build-prerender-errors.ts +40 -44
- package/src/compat/cache/custom-handler.ts +60 -53
- package/src/compat/cache/fetch-patch.ts +240 -240
- package/src/compat/cache/handler.ts +27 -31
- package/src/compat/cache/modern-handler.ts +148 -126
- package/src/compat/cache/resume-data-cache.ts +47 -45
- package/src/compat/cache/revalidate.ts +233 -232
- package/src/compat/cache/runtime-error.ts +35 -35
- package/src/compat/cache/use-cache-transform.ts +442 -417
- package/src/compat/cache/use-cache.ts +650 -614
- package/src/compat/cache-control.ts +140 -142
- package/src/compat/client/base-path.ts +21 -20
- package/src/compat/client/css-order.ts +18 -18
- package/src/compat/client/errors/bare-boundary.ts +11 -11
- package/src/compat/client/errors/control-flow.ts +23 -23
- package/src/compat/client/errors/error-boundary.ts +61 -61
- package/src/compat/client/errors/global-error.ts +101 -91
- package/src/compat/client/errors/install.ts +71 -72
- package/src/compat/client/errors/lazy.ts +23 -23
- package/src/compat/client/errors/primitive-throw.ts +47 -45
- package/src/compat/client/errors/soft-refresh.ts +4 -4
- package/src/compat/client/link-status.ts +33 -33
- package/src/compat/client/{nav-compat-runtime.ts → nav-runtime.ts} +20 -20
- package/src/compat/client/{nav-compat.ts → nav.ts} +12 -13
- package/src/compat/client/navigation-scroll.ts +63 -63
- package/src/compat/client/optimistic-routing.ts +93 -88
- package/src/compat/client/prefetch-cache.ts +23 -24
- package/src/compat/client/route-announcer.ts +35 -35
- package/src/compat/client/segment-cache-policy.ts +20 -20
- package/src/compat/client/segment-cache.ts +309 -315
- package/src/compat/client/segment-prefetch.ts +127 -132
- package/src/compat/client/trailing-slash.ts +5 -4
- package/src/compat/css/chunking.ts +113 -116
- package/src/compat/css/inline-css.ts +21 -21
- package/src/compat/css/lightningcss.ts +37 -38
- package/src/compat/css/modules.ts +161 -175
- package/src/compat/css/nonce.ts +7 -7
- package/src/compat/css/sass-plugin.ts +18 -21
- package/src/compat/css/sass.ts +150 -152
- package/src/compat/css/styled-jsx-runtime.ts +27 -27
- package/src/compat/css/styled-jsx.ts +21 -21
- package/src/compat/edge-runtime.ts +27 -27
- package/src/compat/{adapter → export}/build-complete.ts +72 -75
- package/src/compat/export/client.ts +29 -31
- package/src/compat/export/{index.ts → emit.ts} +111 -110
- package/src/compat/export/standalone.ts +62 -54
- package/src/compat/image-optimizer/cache.ts +51 -49
- package/src/compat/image-optimizer/detect.ts +52 -52
- package/src/compat/image-optimizer/{index.ts → optimize.ts} +189 -194
- package/src/compat/image-optimizer/source.ts +77 -80
- package/src/compat/lifecycle/after-scope.ts +26 -26
- package/src/compat/lifecycle/after.ts +48 -45
- package/src/compat/lifecycle/error-funnel.ts +98 -102
- package/src/compat/lifecycle/error-serialize.ts +30 -26
- package/src/compat/lifecycle/error-ui.ts +67 -32
- package/src/compat/lifecycle/instrumentation-client.ts +36 -38
- package/src/compat/lifecycle/instrumentation.ts +85 -85
- package/src/compat/lifecycle/node-console.ts +11 -11
- package/src/compat/lifecycle/testmode.ts +160 -132
- package/src/compat/mdx/compile.ts +60 -57
- package/src/compat/mdx/plugin.ts +11 -11
- package/src/compat/mdx/{next-mdx-stub.ts → stub.ts} +5 -5
- package/src/compat/{metadata-route-artifacts.ts → metadata-artifacts.ts} +195 -191
- package/src/compat/metadata.ts +75 -81
- package/src/compat/next/cache.ts +68 -69
- package/src/compat/next/canonical-url.ts +9 -9
- package/src/compat/next/client-cache.ts +19 -19
- package/src/compat/next/client-navigation.ts +112 -116
- package/src/compat/next/client-only.ts +1 -1
- package/src/compat/next/client-script.tsx +99 -93
- package/src/compat/next/client-server.ts +10 -10
- package/src/compat/next/config-loader.ts +176 -173
- package/src/compat/next/config.ts +7 -7
- package/src/compat/next/constants.cjs +6 -6
- package/src/compat/next/constants.ts +6 -6
- package/src/compat/next/custom-server.ts +26 -24
- package/src/compat/next/dist/client/components/app-router-headers.ts +21 -21
- package/src/compat/next/dist/server/app-render/work-unit-async-storage.external.cjs +3 -4
- package/src/compat/next/dist/server/web/spec-extension/revalidate.ts +1 -1
- package/src/compat/next/dist/server/web/spec-extension/unstable-cache.ts +1 -1
- package/src/compat/next/dist/server/web/spec-extension/unstable-no-store.ts +1 -1
- package/src/compat/next/dynamic.tsx +21 -18
- package/src/compat/next/error.tsx +52 -52
- package/src/compat/next/font/cache.ts +74 -74
- package/src/compat/next/font/google.ts +2 -2
- package/src/compat/next/font/index.ts +1 -1
- package/src/compat/next/font/local.ts +3 -3
- package/src/compat/next/font/runtime-client.ts +17 -15
- package/src/compat/next/font/runtime.ts +443 -408
- package/src/compat/next/font/shared.ts +120 -108
- package/src/compat/next/form.tsx +63 -63
- package/src/compat/next/head.tsx +2 -2
- package/src/compat/next/headers.ts +103 -95
- package/src/compat/next/image/client.tsx +220 -0
- package/src/compat/next/image/config.ts +56 -58
- package/src/compat/next/image/optimizer.ts +40 -36
- package/src/compat/next/image/patterns.ts +37 -40
- package/src/compat/next/{image-props.ts → image/props.ts} +208 -202
- package/src/compat/next/image/shared.ts +65 -57
- package/src/compat/next/image/static-metadata.ts +98 -107
- package/src/compat/next/image/validate.ts +79 -88
- package/src/compat/next/image.tsx +19 -23
- package/src/compat/next/index.ts +1 -1
- package/src/compat/next/legacy-image.tsx +59 -60
- package/src/compat/next/{link-validation-transform.ts → link-transform.ts} +95 -96
- package/src/compat/next/link.tsx +158 -158
- package/src/compat/next/navigation.cjs +12 -3
- package/src/compat/next/navigation.ts +48 -50
- package/src/compat/next/offline.ts +27 -27
- package/src/compat/next/og.ts +121 -124
- package/src/compat/next/preferred-region.ts +13 -14
- package/src/compat/next/redirects.ts +58 -56
- package/src/compat/next/resource-hints.ts +73 -76
- package/src/compat/next/rewrites.ts +130 -133
- package/src/compat/next/root-params.ts +45 -45
- package/src/compat/next/{optimistic-route-state.ts → route-state.ts} +52 -52
- package/src/compat/next/router.cjs +4 -2
- package/src/compat/next/router.ts +58 -61
- package/src/compat/next/script.tsx +108 -108
- package/src/compat/next/server-only.ts +1 -1
- package/src/compat/next/server.ts +19 -19
- package/src/compat/next/svgr.ts +18 -17
- package/src/compat/next/telemetry.ts +24 -24
- package/src/compat/next/{image-usage.ts → usage.ts} +70 -39
- package/src/compat/next/user-agent.ts +53 -49
- package/src/compat/next/web-vitals.ts +22 -24
- package/src/compat/otel/api.ts +41 -41
- package/src/compat/otel/client-trace-metadata.ts +25 -27
- package/src/compat/otel/fetch-span.ts +29 -29
- package/src/compat/otel/tracer.ts +331 -331
- package/src/compat/pages/api.ts +456 -0
- package/src/compat/pages/client-plugin.ts +36 -36
- package/src/compat/pages/router-state.ts +34 -34
- package/src/compat/pages/{index.ts → router.ts} +130 -135
- package/src/compat/ppr/io.ts +12 -12
- package/src/compat/ppr/missing-root-params.ts +34 -38
- package/src/compat/ppr/root-params-scan.ts +66 -66
- package/src/compat/ppr/root-params-transform.ts +24 -26
- package/src/compat/ppr/root-params.ts +30 -30
- package/src/compat/ppr/segment-config-incompat.ts +6 -7
- package/src/compat/protocol.ts +71 -70
- package/src/compat/react/action-state.ts +47 -48
- package/src/compat/react/client-lite.ts +15 -15
- package/src/compat/react/client.ts +4 -4
- package/src/compat/react/compiler-runtime.ts +11 -11
- package/src/compat/react/dom-client.ts +44 -44
- package/src/compat/react/dom-react-server.ts +10 -16
- package/src/compat/react/dom-server.ts +10 -10
- package/src/compat/react/dom.ts +52 -52
- package/src/compat/react/hooks-extra.ts +34 -35
- package/src/compat/react/parity.ts +64 -61
- package/src/compat/react/preact.ts +81 -82
- package/src/compat/react/react-server.ts +28 -28
- package/src/compat/react/router-shim.ts +1 -1
- package/src/compat/react/server-component-use.ts +8 -8
- package/src/compat/react/server-inserted-html.ts +30 -31
- package/src/compat/react/server.ts +53 -55
- package/src/compat/react/use.ts +32 -32
- package/src/compat/react/view-transition.ts +20 -20
- package/src/compat/register/actions.ts +35 -824
- package/src/compat/register/boot.ts +41 -41
- package/src/compat/register/build-tier.ts +5 -5
- package/src/compat/register/build.ts +74 -70
- package/src/compat/register/bundler.ts +161 -156
- package/src/compat/register/cache.ts +20 -20
- package/src/compat/register/client-errors.ts +3 -3
- package/src/compat/register/config.ts +6 -6
- package/src/compat/register/css-extras.ts +30 -34
- package/src/compat/register/edge-runtime.ts +3 -3
- package/src/compat/register/errors.ts +10 -12
- package/src/compat/register/export.ts +16 -16
- package/src/compat/register/font.ts +11 -11
- package/src/compat/register/hooks.ts +2 -2
- package/src/compat/register/image.ts +40 -40
- package/src/compat/register/index.ts +59 -62
- package/src/compat/register/instrumentation-client.ts +10 -10
- package/src/compat/register/lifecycle.ts +25 -28
- package/src/compat/register/mdx.ts +10 -10
- package/src/compat/register/middleware.ts +226 -16
- package/src/compat/register/otel.ts +80 -88
- package/src/compat/register/pages-api.ts +10 -463
- package/src/compat/register/ppr.ts +16 -16
- package/src/compat/register/protocol.ts +17 -18
- package/src/compat/register/proxy.ts +49 -51
- package/src/compat/register/render.ts +79 -76
- package/src/compat/register/routing.ts +162 -159
- package/src/compat/register/segment.ts +24 -1887
- package/src/compat/register/static-image.ts +3 -3
- package/src/compat/register/{misc.ts → taint.ts} +9 -9
- package/src/compat/register/typed-routes.ts +14 -14
- package/src/compat/register/{usecache.ts → use-cache.ts} +39 -39
- package/src/compat/register/validation.ts +18 -18
- package/src/compat/segment/loading-boundary.ts +43 -45
- package/src/compat/segment/page-slot.ts +69 -69
- package/src/compat/segment/serve.ts +1884 -0
- package/src/compat/segment/tree.ts +113 -112
- package/src/compat/segment/vary-key.ts +38 -38
- package/src/compat/segment/vary-params.ts +138 -142
- package/src/compat/static-params.ts +14 -12
- package/src/compat/tsconfig-defaults.ts +87 -91
- package/src/compat/typecheck/{index.ts → check.ts} +234 -212
- package/src/compat/typecheck/worker.ts +15 -12
- package/src/compat/typed-routes/{index.ts → generate.ts} +36 -36
- package/src/compat/typed-routes/manifest.ts +174 -170
- package/src/compat/typed-routes/typegen.ts +127 -110
- package/src/compat/validation/errors.ts +16 -19
- package/src/compat/validation/prerender-diagnostics.ts +521 -504
- package/src/compat/validation/{index.ts → validate.ts} +647 -648
- package/src/compat-bootstrap.ts +16 -16
- package/src/config.ts +69 -69
- package/src/css/build.ts +230 -227
- package/src/css/postcss.ts +79 -80
- package/src/css/worker.ts +14 -15
- package/src/dev/client-actions.ts +10 -10
- package/src/dev/client-chunk-store.ts +27 -27
- package/src/dev/{client-key-cache.ts → restart/client-key.ts} +76 -76
- package/src/dev/{restart-cache.ts → restart/enabled.ts} +1 -1
- package/src/dev/{global-css-cache.ts → restart/global-css.ts} +91 -83
- package/src/dev/{node-module-bundle-cache.ts → restart/node-modules.ts} +24 -24
- package/src/dev/{route-bundle-key-cache.ts → restart/route-bundle-key.ts} +53 -53
- package/src/dev/{route-facts-cache.ts → restart/route-facts.ts} +82 -82
- package/src/dev/server.ts +804 -820
- package/src/env.ts +46 -43
- package/src/extensions.ts +491 -478
- package/src/index.ts +8 -8
- package/src/internal.ts +20 -23
- package/src/{islands → render}/boundary-error.ts +3 -3
- package/src/render/hooks.ts +71 -71
- package/src/render/island-context.ts +14 -14
- package/src/render/metadata.ts +310 -310
- package/src/{ppr-postpone.ts → render/postpone.ts} +5 -5
- package/src/{ppr.ts → render/ppr.ts} +244 -245
- package/src/render/renderer.ts +2076 -2082
- package/src/render/resource-hints.ts +16 -17
- package/src/render/slots.tsx +224 -235
- package/src/{islands → render}/static-children.ts +9 -12
- package/src/{islands → render}/static-slots.ts +37 -37
- package/src/{cache/context.ts → request/cache.ts} +20 -20
- package/src/request/context.ts +107 -107
- package/src/{dynamic/source.ts → resolve/dynamic.ts} +152 -143
- package/src/resolve/engine.ts +90 -77
- package/src/resolve/imports.ts +475 -463
- package/src/resolve/scan-facts.ts +442 -186
- package/src/resolve/source-text.ts +37 -37
- package/src/{dynamic → resolve}/tree-shake.ts +132 -128
- package/src/routing/forwarded.ts +19 -19
- package/src/routing/handler.ts +84 -91
- package/src/routing/href.ts +69 -70
- package/src/routing/{metadata.ts → metadata-files.ts} +403 -401
- package/src/{proxy.ts → routing/proxy.ts} +306 -312
- package/src/routing/{request-runtime.ts → request-environment.ts} +10 -10
- package/src/routing/routes.ts +833 -848
- package/src/routing/slots.ts +164 -160
- package/src/runtime/loader.ts +952 -0
- package/src/{dev → runtime}/module-cache.ts +309 -287
- package/src/{dev → runtime}/module-generations.ts +9 -9
- package/src/{dev → runtime}/module-transform.ts +81 -72
- package/src/{dev/imports.ts → runtime/modules.ts} +934 -847
- package/src/runtime/{server.ts → vendor-build.ts} +848 -1696
- package/src/runtime/vendor.ts +425 -404
- package/src/styles.d.ts +9 -0
- package/src/types.ts +320 -335
- package/src/utils/ansi.ts +5 -5
- package/src/utils/{source.ts → code.ts} +15 -12
- package/src/utils/content-type.ts +3 -3
- package/src/utils/decode.ts +2 -2
- package/src/utils/dev-profile.ts +13 -13
- package/src/utils/error-log.ts +6 -6
- package/src/utils/esbuild.ts +18 -18
- package/src/utils/fs-cache.ts +13 -13
- package/src/utils/fs.ts +57 -49
- package/src/utils/html.ts +20 -24
- package/src/utils/native-require.ts +8 -8
- package/src/utils/serialize.ts +139 -146
- package/src/utils/verbose.ts +18 -18
- package/src/cli/analyze-print.ts +0 -181
- package/src/compat/middleware/manifest.ts +0 -210
- package/src/compat/next/image-client.tsx +0 -215
- package/src/compat/next/link-usage.ts +0 -29
- package/src/css/index.ts +0 -2
- package/src/render/index.ts +0 -1
- package/src/style-modules.d.ts +0 -9
|
@@ -17,18 +17,18 @@
|
|
|
17
17
|
/** The byte range of a document's page slot and of the page markup inside it. */
|
|
18
18
|
export interface PageSlotRange {
|
|
19
19
|
/** Index of the opening `<div …>` / `<!--pnext-page:…-->` marker. */
|
|
20
|
-
start: number
|
|
20
|
+
start: number
|
|
21
21
|
/** Index just past the opening marker (where the page's markup begins). */
|
|
22
|
-
childrenStart: number
|
|
22
|
+
childrenStart: number
|
|
23
23
|
/** Index of the closing `</div>` / `<!--/pnext-page-->` marker. */
|
|
24
|
-
childrenEnd: number
|
|
24
|
+
childrenEnd: number
|
|
25
25
|
/** Index just past the closing marker. */
|
|
26
|
-
end: number
|
|
26
|
+
end: number
|
|
27
27
|
}
|
|
28
28
|
|
|
29
|
-
const SLOT_DIV_OPEN = /<div\b[^>]*\bid="pnext-page"[^>]
|
|
30
|
-
const SLOT_COMMENT_OPEN = /<!--pnext-page:[^>]
|
|
31
|
-
const SLOT_COMMENT_CLOSE = '<!--/pnext-page-->'
|
|
29
|
+
const SLOT_DIV_OPEN = /<div\b[^>]*\bid="pnext-page"[^>]*>/
|
|
30
|
+
const SLOT_COMMENT_OPEN = /<!--pnext-page:[^>]*-->/
|
|
31
|
+
const SLOT_COMMENT_CLOSE = '<!--/pnext-page-->'
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* Locate the page slot in a rendered document, or null when it has none (a
|
|
@@ -36,41 +36,41 @@ const SLOT_COMMENT_CLOSE = '<!--/pnext-page-->';
|
|
|
36
36
|
* its slot markers dropped, a non-pnext body).
|
|
37
37
|
*/
|
|
38
38
|
export function pageSlotRange(html: string): PageSlotRange | null {
|
|
39
|
-
const comment = SLOT_COMMENT_OPEN.exec(html)
|
|
39
|
+
const comment = SLOT_COMMENT_OPEN.exec(html)
|
|
40
40
|
if (comment) {
|
|
41
|
-
const childrenStart = comment.index + comment[0].length
|
|
42
|
-
const childrenEnd = html.indexOf(SLOT_COMMENT_CLOSE, childrenStart)
|
|
43
|
-
if (childrenEnd === -1) return null
|
|
41
|
+
const childrenStart = comment.index + comment[0].length
|
|
42
|
+
const childrenEnd = html.indexOf(SLOT_COMMENT_CLOSE, childrenStart)
|
|
43
|
+
if (childrenEnd === -1) return null
|
|
44
44
|
return {
|
|
45
45
|
start: comment.index,
|
|
46
46
|
childrenStart,
|
|
47
47
|
childrenEnd,
|
|
48
48
|
end: childrenEnd + SLOT_COMMENT_CLOSE.length,
|
|
49
|
-
}
|
|
49
|
+
}
|
|
50
50
|
}
|
|
51
|
-
const open = SLOT_DIV_OPEN.exec(html)
|
|
52
|
-
if (!open) return null
|
|
53
|
-
const childrenStart = open.index + open[0].length
|
|
54
|
-
const tag = /<div\b|<\/div>/g
|
|
55
|
-
tag.lastIndex = childrenStart
|
|
56
|
-
let depth = 1
|
|
51
|
+
const open = SLOT_DIV_OPEN.exec(html)
|
|
52
|
+
if (!open) return null
|
|
53
|
+
const childrenStart = open.index + open[0].length
|
|
54
|
+
const tag = /<div\b|<\/div>/g
|
|
55
|
+
tag.lastIndex = childrenStart
|
|
56
|
+
let depth = 1
|
|
57
57
|
for (let match = tag.exec(html); match; match = tag.exec(html)) {
|
|
58
|
-
depth += match[0] === '</div>' ? -1 : 1
|
|
59
|
-
if (depth !== 0) continue
|
|
58
|
+
depth += match[0] === '</div>' ? -1 : 1
|
|
59
|
+
if (depth !== 0) continue
|
|
60
60
|
return {
|
|
61
61
|
start: open.index,
|
|
62
62
|
childrenStart,
|
|
63
63
|
childrenEnd: match.index,
|
|
64
64
|
end: match.index + match[0].length,
|
|
65
|
-
}
|
|
65
|
+
}
|
|
66
66
|
}
|
|
67
|
-
return null
|
|
67
|
+
return null
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
/** The page's own markup (the slot's children), or null without a slot. */
|
|
71
71
|
export function pageSlotContent(html: string): string | null {
|
|
72
|
-
const range = pageSlotRange(html)
|
|
73
|
-
return range ? html.slice(range.childrenStart, range.childrenEnd) : null
|
|
72
|
+
const range = pageSlotRange(html)
|
|
73
|
+
return range ? html.slice(range.childrenStart, range.childrenEnd) : null
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
/**
|
|
@@ -79,9 +79,9 @@ export function pageSlotContent(html: string): string | null {
|
|
|
79
79
|
* worse than a whole one.
|
|
80
80
|
*/
|
|
81
81
|
export function stripPageSlotContent(html: string): string {
|
|
82
|
-
const range = pageSlotRange(html)
|
|
83
|
-
if (!range) return html
|
|
84
|
-
return html.slice(0, range.childrenStart) + html.slice(range.childrenEnd)
|
|
82
|
+
const range = pageSlotRange(html)
|
|
83
|
+
if (!range) return html
|
|
84
|
+
return html.slice(0, range.childrenStart) + html.slice(range.childrenEnd)
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
// A streamed Suspense continuation: the hidden chunk divs the renderer appends
|
|
@@ -89,14 +89,14 @@ export function stripPageSlotContent(html: string): string {
|
|
|
89
89
|
// inline-suspense variant. A page's dynamic content resolves INTO one of these,
|
|
90
90
|
// not into the slot, so a page frame that stopped at the slot would carry only
|
|
91
91
|
// the page's `loading` fallback.
|
|
92
|
-
const STREAM_CHUNK_MARKERS = ['<div hidden data-pnext-stream', '<div hidden><preact-island']
|
|
92
|
+
const STREAM_CHUNK_MARKERS = ['<div hidden data-pnext-stream', '<div hidden><preact-island']
|
|
93
93
|
|
|
94
94
|
/** Index of the first streamed continuation chunk at/after `from`, or -1. */
|
|
95
95
|
function streamedContinuationStart(html: string, from: number): number {
|
|
96
96
|
const cuts = STREAM_CHUNK_MARKERS.map(marker => html.indexOf(marker, from)).filter(
|
|
97
97
|
index => index !== -1,
|
|
98
|
-
)
|
|
99
|
-
return cuts.length > 0 ? Math.min(...cuts) : -1
|
|
98
|
+
)
|
|
99
|
+
return cuts.length > 0 ? Math.min(...cuts) : -1
|
|
100
100
|
}
|
|
101
101
|
|
|
102
102
|
/**
|
|
@@ -110,13 +110,13 @@ function streamedContinuationStart(html: string, from: number): number {
|
|
|
110
110
|
* page slot starts at offset 0, which is what `composeSegmentFrames` keys on.
|
|
111
111
|
*/
|
|
112
112
|
export function pageSlotFrame(html: string): string | null {
|
|
113
|
-
const range = pageSlotRange(html)
|
|
114
|
-
if (!range) return null
|
|
115
|
-
const slot = html.slice(range.start, range.end)
|
|
116
|
-
const chunks = streamedContinuationStart(html, range.end)
|
|
117
|
-
if (chunks === -1) return slot
|
|
118
|
-
const bodyEnd = html.lastIndexOf('</body>')
|
|
119
|
-
return slot + html.slice(chunks, bodyEnd > chunks ? bodyEnd : html.length)
|
|
113
|
+
const range = pageSlotRange(html)
|
|
114
|
+
if (!range) return null
|
|
115
|
+
const slot = html.slice(range.start, range.end)
|
|
116
|
+
const chunks = streamedContinuationStart(html, range.end)
|
|
117
|
+
if (chunks === -1) return slot
|
|
118
|
+
const bodyEnd = html.lastIndexOf('</body>')
|
|
119
|
+
return slot + html.slice(chunks, bodyEnd > chunks ? bodyEnd : html.length)
|
|
120
120
|
}
|
|
121
121
|
|
|
122
122
|
/**
|
|
@@ -134,41 +134,41 @@ export function stripStreamedContinuation(html: string): string {
|
|
|
134
134
|
// whose own content streams emits chunks BEFORE the page slot, and cutting to
|
|
135
135
|
// the end of the body would take the slot with them, leaving a frame nothing
|
|
136
136
|
// can be composed into.
|
|
137
|
-
let result = html
|
|
138
|
-
let from = 0
|
|
137
|
+
let result = html
|
|
138
|
+
let from = 0
|
|
139
139
|
for (;;) {
|
|
140
|
-
const start = streamedContinuationStart(result, from)
|
|
141
|
-
if (start === -1) return result
|
|
142
|
-
const end = chunkEnd(result, start)
|
|
143
|
-
if (end === -1) return result
|
|
140
|
+
const start = streamedContinuationStart(result, from)
|
|
141
|
+
if (start === -1) return result
|
|
142
|
+
const end = chunkEnd(result, start)
|
|
143
|
+
if (end === -1) return result
|
|
144
144
|
// A chunk that CONTAINS the page slot is the frame's own slot carrier (the
|
|
145
145
|
// page's markup streams in below the layout), not stale continuation —
|
|
146
146
|
// dropping it would leave nothing to compose a fresh page into.
|
|
147
|
-
const slot = pageSlotRange(result)
|
|
147
|
+
const slot = pageSlotRange(result)
|
|
148
148
|
if (slot && slot.start > start && slot.end <= end) {
|
|
149
|
-
from = end
|
|
150
|
-
continue
|
|
149
|
+
from = end
|
|
150
|
+
continue
|
|
151
151
|
}
|
|
152
|
-
result = result.slice(0, start) + result.slice(end)
|
|
152
|
+
result = result.slice(0, start) + result.slice(end)
|
|
153
153
|
}
|
|
154
154
|
}
|
|
155
155
|
|
|
156
156
|
/** Index just past a continuation chunk (its balanced div + promotion script). */
|
|
157
157
|
function chunkEnd(html: string, start: number): number {
|
|
158
|
-
const tag = /<div\b|<\/div>/g
|
|
159
|
-
tag.lastIndex = start + '<div'.length
|
|
160
|
-
let depth = 1
|
|
161
|
-
let divEnd = -1
|
|
158
|
+
const tag = /<div\b|<\/div>/g
|
|
159
|
+
tag.lastIndex = start + '<div'.length
|
|
160
|
+
let depth = 1
|
|
161
|
+
let divEnd = -1
|
|
162
162
|
for (let match = tag.exec(html); match; match = tag.exec(html)) {
|
|
163
|
-
depth += match[0] === '</div>' ? -1 : 1
|
|
164
|
-
if (depth > 0) continue
|
|
165
|
-
divEnd = match.index + match[0].length
|
|
166
|
-
break
|
|
163
|
+
depth += match[0] === '</div>' ? -1 : 1
|
|
164
|
+
if (depth > 0) continue
|
|
165
|
+
divEnd = match.index + match[0].length
|
|
166
|
+
break
|
|
167
167
|
}
|
|
168
|
-
if (divEnd === -1) return -1
|
|
169
|
-
const rest = html.slice(divEnd)
|
|
170
|
-
const script = /^\s*<script\b[^>]*>[\s\S]*?<\/script>/.exec(rest)
|
|
171
|
-
return script ? divEnd + script[0].length : divEnd
|
|
168
|
+
if (divEnd === -1) return -1
|
|
169
|
+
const rest = html.slice(divEnd)
|
|
170
|
+
const script = /^\s*<script\b[^>]*>[\s\S]*?<\/script>/.exec(rest)
|
|
171
|
+
return script ? divEnd + script[0].length : divEnd
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
/**
|
|
@@ -182,19 +182,19 @@ function chunkEnd(html: string, start: number): number {
|
|
|
182
182
|
* and painting a half-composed document is worse than fetching.
|
|
183
183
|
*/
|
|
184
184
|
export function composeSegmentFrames(layoutHtml: string, pageHtml: string): string | null {
|
|
185
|
-
const range = pageSlotRange(layoutHtml)
|
|
186
|
-
if (!range) return null
|
|
187
|
-
const pageRange = pageSlotRange(pageHtml)
|
|
188
|
-
if (!pageRange) return null
|
|
189
|
-
const page = pageHtml.slice(pageRange.childrenStart, pageRange.childrenEnd)
|
|
185
|
+
const range = pageSlotRange(layoutHtml)
|
|
186
|
+
if (!range) return null
|
|
187
|
+
const pageRange = pageSlotRange(pageHtml)
|
|
188
|
+
if (!pageRange) return null
|
|
189
|
+
const page = pageHtml.slice(pageRange.childrenStart, pageRange.childrenEnd)
|
|
190
190
|
const composed =
|
|
191
|
-
layoutHtml.slice(0, range.childrenStart) + page + layoutHtml.slice(range.childrenEnd)
|
|
191
|
+
layoutHtml.slice(0, range.childrenStart) + page + layoutHtml.slice(range.childrenEnd)
|
|
192
192
|
// A whole document's tail is its own layout/scripts, already present in the
|
|
193
193
|
// layout frame; only a frame's tail is continuation markup to carry over.
|
|
194
|
-
const tail = pageRange.start === 0 ? pageHtml.slice(pageRange.end) : ''
|
|
195
|
-
if (!tail) return composed
|
|
196
|
-
const insertAt = composed.lastIndexOf('</body>')
|
|
194
|
+
const tail = pageRange.start === 0 ? pageHtml.slice(pageRange.end) : ''
|
|
195
|
+
if (!tail) return composed
|
|
196
|
+
const insertAt = composed.lastIndexOf('</body>')
|
|
197
197
|
return insertAt === -1
|
|
198
198
|
? composed + tail
|
|
199
|
-
: composed.slice(0, insertAt) + tail + composed.slice(insertAt)
|
|
199
|
+
: composed.slice(0, insertAt) + tail + composed.slice(insertAt)
|
|
200
200
|
}
|