@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
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import { useEffect, useState } from 'preact/hooks'
|
|
2
|
-
import { ReadonlyURLSearchParams, type HrefOptions } from './navigation'
|
|
3
|
-
import { blockJavascriptUrl, prefetchRoute, softNavigate } from '
|
|
4
|
-
import { seedHistoryEntry } from '
|
|
1
|
+
import { useEffect, useState } from 'preact/hooks'
|
|
2
|
+
import { ReadonlyURLSearchParams, type HrefOptions } from './navigation'
|
|
3
|
+
import { blockJavascriptUrl, prefetchRoute, softNavigate } from '../client/router'
|
|
4
|
+
import { seedHistoryEntry } from '../client/router/history'
|
|
5
5
|
import {
|
|
6
6
|
emitLocationChange,
|
|
7
7
|
locationListeners,
|
|
8
8
|
scheduleNavigationScroll,
|
|
9
|
-
} from '
|
|
10
|
-
import { routeHref } from '../routing/href'
|
|
11
|
-
import type { RouteParams, RouteParamValue, RoutePath } from '../types'
|
|
9
|
+
} from '../client/router/events'
|
|
10
|
+
import { routeHref } from '../routing/href'
|
|
11
|
+
import type { RouteParams, RouteParamValue, RoutePath } from '../types'
|
|
12
12
|
|
|
13
13
|
export type NavigateOptions<Route extends RoutePath> = HrefOptions<Route> & {
|
|
14
|
-
scroll?: boolean
|
|
15
|
-
}
|
|
14
|
+
scroll?: boolean
|
|
15
|
+
}
|
|
16
16
|
|
|
17
17
|
export type PrefetchOptions<Route extends RoutePath> = HrefOptions<Route> & {
|
|
18
|
-
kind?: 'auto' | 'full'
|
|
19
|
-
onInvalidate?: () => void
|
|
20
|
-
}
|
|
18
|
+
kind?: 'auto' | 'full'
|
|
19
|
+
onInvalidate?: () => void
|
|
20
|
+
}
|
|
21
21
|
|
|
22
22
|
export interface PNextRouter {
|
|
23
23
|
push<Route extends RoutePath>(
|
|
@@ -25,42 +25,42 @@ export interface PNextRouter {
|
|
|
25
25
|
...options: RouteParams<Route> extends Record<string, never>
|
|
26
26
|
? [options?: NavigateOptions<Route>]
|
|
27
27
|
: [options: NavigateOptions<Route>]
|
|
28
|
-
): void
|
|
28
|
+
): void
|
|
29
29
|
replace<Route extends RoutePath>(
|
|
30
30
|
route: Route,
|
|
31
31
|
...options: RouteParams<Route> extends Record<string, never>
|
|
32
32
|
? [options?: NavigateOptions<Route>]
|
|
33
33
|
: [options: NavigateOptions<Route>]
|
|
34
|
-
): void
|
|
34
|
+
): void
|
|
35
35
|
prefetch<Route extends RoutePath>(
|
|
36
36
|
route: Route,
|
|
37
37
|
...options: RouteParams<Route> extends Record<string, never>
|
|
38
38
|
? [options?: PrefetchOptions<Route>]
|
|
39
39
|
: [options: PrefetchOptions<Route>]
|
|
40
|
-
): void
|
|
41
|
-
refresh(): void
|
|
42
|
-
back(): void
|
|
43
|
-
forward(): void
|
|
44
|
-
bfcacheId: string
|
|
40
|
+
): void
|
|
41
|
+
refresh(): void
|
|
42
|
+
back(): void
|
|
43
|
+
forward(): void
|
|
44
|
+
bfcacheId: string
|
|
45
45
|
}
|
|
46
46
|
|
|
47
|
-
export { ReadonlyURLSearchParams }
|
|
47
|
+
export { ReadonlyURLSearchParams }
|
|
48
48
|
|
|
49
49
|
export interface CurrentRoute<Route extends RoutePath = RoutePath> {
|
|
50
|
-
route: Route | null
|
|
51
|
-
pathname: string
|
|
52
|
-
params: RouteParams<Route
|
|
53
|
-
searchParams: ReadonlyURLSearchParams
|
|
50
|
+
route: Route | null
|
|
51
|
+
pathname: string
|
|
52
|
+
params: RouteParams<Route>
|
|
53
|
+
searchParams: ReadonlyURLSearchParams
|
|
54
54
|
}
|
|
55
55
|
|
|
56
56
|
interface RouteState {
|
|
57
|
-
route?: string
|
|
58
|
-
params?: Record<string, RouteParamValue
|
|
59
|
-
catchAllOptional?: boolean
|
|
60
|
-
staticChildren?: string[]
|
|
61
|
-
bfcacheId?: string
|
|
57
|
+
route?: string
|
|
58
|
+
params?: Record<string, RouteParamValue>
|
|
59
|
+
catchAllOptional?: boolean
|
|
60
|
+
staticChildren?: string[]
|
|
61
|
+
bfcacheId?: string
|
|
62
62
|
/** `prefetch = 'allow-runtime'`: this route's shell is request-sampled. */
|
|
63
|
-
runtimePrefetch?: boolean
|
|
63
|
+
runtimePrefetch?: boolean
|
|
64
64
|
}
|
|
65
65
|
|
|
66
66
|
/**
|
|
@@ -70,17 +70,17 @@ interface RouteState {
|
|
|
70
70
|
* pattern (`/[teamSlug]/[...slug]`), so convert back at the API boundary.
|
|
71
71
|
*/
|
|
72
72
|
function bracketRoutePattern(state: RouteState): string | null {
|
|
73
|
-
const route = state.route
|
|
74
|
-
if (route == null) return null
|
|
73
|
+
const route = state.route
|
|
74
|
+
if (route == null) return null
|
|
75
75
|
return route
|
|
76
76
|
.replace(/:([\w$]+)\*/g, state.catchAllOptional ? '[[...$1]]' : '[...$1]')
|
|
77
|
-
.replace(/:([\w$]+)/g, '[$1]')
|
|
77
|
+
.replace(/:([\w$]+)/g, '[$1]')
|
|
78
78
|
}
|
|
79
79
|
|
|
80
80
|
declare global {
|
|
81
81
|
interface Window {
|
|
82
|
-
__PNEXT_ROUTE__?: RouteState
|
|
83
|
-
__PNEXT_HISTORY_PATCHED__?: boolean
|
|
82
|
+
__PNEXT_ROUTE__?: RouteState
|
|
83
|
+
__PNEXT_HISTORY_PATCHED__?: boolean
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
|
|
@@ -88,104 +88,107 @@ declare global {
|
|
|
88
88
|
// `bfcacheId` below reads them, and `patchHistory` carries them onto an app-level pushState. Seeding
|
|
89
89
|
// here rather than in the hub's installRouter keeps a page whose client graph never touches router
|
|
90
90
|
// state from paying for them.
|
|
91
|
-
seedHistoryEntry()
|
|
91
|
+
seedHistoryEntry()
|
|
92
92
|
|
|
93
93
|
export function useRouter(): PNextRouter {
|
|
94
|
-
return router
|
|
94
|
+
return router
|
|
95
95
|
}
|
|
96
96
|
|
|
97
97
|
const router: PNextRouter = {
|
|
98
98
|
push(route, ...[options]) {
|
|
99
|
-
navigate(routerHref(route, options), 'push', options?.scroll)
|
|
99
|
+
navigate(routerHref(route, options), 'push', options?.scroll)
|
|
100
100
|
},
|
|
101
101
|
replace(route, ...[options]) {
|
|
102
|
-
navigate(routerHref(route, options), 'replace', options?.scroll)
|
|
102
|
+
navigate(routerHref(route, options), 'replace', options?.scroll)
|
|
103
103
|
},
|
|
104
104
|
prefetch(route, ...[options]) {
|
|
105
105
|
void prefetchRoute(routerHref(route, options), {
|
|
106
106
|
strict: true,
|
|
107
107
|
full: options?.kind === 'full',
|
|
108
108
|
onInvalidate: options?.onInvalidate,
|
|
109
|
-
})
|
|
109
|
+
})
|
|
110
110
|
},
|
|
111
111
|
refresh() {
|
|
112
|
-
void softNavigate(window.location.href, { replace: true, scroll: false })
|
|
112
|
+
void softNavigate(window.location.href, { replace: true, scroll: false })
|
|
113
113
|
},
|
|
114
114
|
back() {
|
|
115
|
-
window.history.back()
|
|
115
|
+
window.history.back()
|
|
116
116
|
},
|
|
117
117
|
forward() {
|
|
118
|
-
window.history.forward()
|
|
118
|
+
window.history.forward()
|
|
119
119
|
},
|
|
120
120
|
get bfcacheId() {
|
|
121
|
-
return routeState().bfcacheId ?? ''
|
|
121
|
+
return routeState().bfcacheId ?? ''
|
|
122
122
|
},
|
|
123
|
-
}
|
|
123
|
+
}
|
|
124
124
|
|
|
125
|
-
function routerHref<Route extends RoutePath>(
|
|
126
|
-
|
|
125
|
+
function routerHref<Route extends RoutePath>(
|
|
126
|
+
route: Route,
|
|
127
|
+
options: HrefOptions<Route> | undefined,
|
|
128
|
+
) {
|
|
129
|
+
return hasHrefParts(options) ? routeHref(route, options) : String(route)
|
|
127
130
|
}
|
|
128
131
|
|
|
129
132
|
function hasHrefParts<Route extends RoutePath>(
|
|
130
133
|
options: HrefOptions<Route> | undefined,
|
|
131
134
|
): options is HrefOptions<Route> {
|
|
132
|
-
return Boolean(options && ('params' in options || 'search' in options || 'hash' in options))
|
|
135
|
+
return Boolean(options && ('params' in options || 'search' in options || 'hash' in options))
|
|
133
136
|
}
|
|
134
137
|
|
|
135
138
|
export function usePathname() {
|
|
136
|
-
return useLocation().pathname
|
|
139
|
+
return useLocation().pathname
|
|
137
140
|
}
|
|
138
141
|
|
|
139
142
|
export function useSearchParams(): ReadonlyURLSearchParams {
|
|
140
|
-
return new ReadonlyURLSearchParams(useLocation().search)
|
|
143
|
+
return new ReadonlyURLSearchParams(useLocation().search)
|
|
141
144
|
}
|
|
142
145
|
|
|
143
146
|
export function useParams<Route extends RoutePath = RoutePath>() {
|
|
144
|
-
useLocation()
|
|
145
|
-
return (routeState().params ?? {}) as RouteParams<Route
|
|
147
|
+
useLocation()
|
|
148
|
+
return (routeState().params ?? {}) as RouteParams<Route>
|
|
146
149
|
}
|
|
147
150
|
|
|
148
151
|
export function useRoute<Route extends RoutePath = RoutePath>(): CurrentRoute<Route> {
|
|
149
|
-
const location = useLocation()
|
|
152
|
+
const location = useLocation()
|
|
150
153
|
return {
|
|
151
154
|
route: bracketRoutePattern(routeState()) as Route | null,
|
|
152
155
|
pathname: location.pathname,
|
|
153
156
|
params: (routeState().params ?? {}) as RouteParams<Route>,
|
|
154
157
|
searchParams: new ReadonlyURLSearchParams(location.search),
|
|
155
|
-
}
|
|
158
|
+
}
|
|
156
159
|
}
|
|
157
160
|
|
|
158
161
|
export function useLinkStatus() {
|
|
159
|
-
return { pending: false }
|
|
162
|
+
return { pending: false }
|
|
160
163
|
}
|
|
161
164
|
|
|
162
165
|
function useLocation() {
|
|
163
|
-
const [location, setLocation] = useState(() => currentLocation())
|
|
166
|
+
const [location, setLocation] = useState(() => currentLocation())
|
|
164
167
|
|
|
165
168
|
useEffect(() => {
|
|
166
|
-
patchHistory()
|
|
169
|
+
patchHistory()
|
|
167
170
|
const listener = () =>
|
|
168
171
|
setLocation(previous => {
|
|
169
|
-
const next = currentLocation()
|
|
172
|
+
const next = currentLocation()
|
|
170
173
|
return previous.pathname === next.pathname &&
|
|
171
174
|
previous.search === next.search &&
|
|
172
175
|
previous.hash === next.hash
|
|
173
176
|
? previous
|
|
174
|
-
: next
|
|
175
|
-
})
|
|
176
|
-
locationListeners().add(listener)
|
|
177
|
-
window.addEventListener('popstate', listener)
|
|
177
|
+
: next
|
|
178
|
+
})
|
|
179
|
+
locationListeners().add(listener)
|
|
180
|
+
window.addEventListener('popstate', listener)
|
|
178
181
|
// Re-read once the listener is attached: the URL can move between the
|
|
179
182
|
// render that captured it and this effect (a history traversal landing
|
|
180
183
|
// while a swapped-in tree mounts), and nothing was listening for that one.
|
|
181
|
-
listener()
|
|
184
|
+
listener()
|
|
182
185
|
return () => {
|
|
183
|
-
locationListeners().delete(listener)
|
|
184
|
-
window.removeEventListener('popstate', listener)
|
|
185
|
-
}
|
|
186
|
-
}, [])
|
|
186
|
+
locationListeners().delete(listener)
|
|
187
|
+
window.removeEventListener('popstate', listener)
|
|
188
|
+
}
|
|
189
|
+
}, [])
|
|
187
190
|
|
|
188
|
-
return location
|
|
191
|
+
return location
|
|
189
192
|
}
|
|
190
193
|
|
|
191
194
|
function currentLocation() {
|
|
@@ -194,56 +197,57 @@ function currentLocation() {
|
|
|
194
197
|
pathname: '/',
|
|
195
198
|
search: '',
|
|
196
199
|
hash: '',
|
|
197
|
-
}
|
|
200
|
+
}
|
|
198
201
|
}
|
|
199
202
|
return {
|
|
200
203
|
pathname: window.location.pathname,
|
|
201
204
|
search: window.location.search,
|
|
202
205
|
hash: window.location.hash,
|
|
203
|
-
}
|
|
206
|
+
}
|
|
204
207
|
}
|
|
205
208
|
|
|
206
209
|
function routeState() {
|
|
207
|
-
if (!process.browser && typeof window === 'undefined') return {}
|
|
208
|
-
const state = (history.state as Record<string, unknown> | null) ?? {}
|
|
209
|
-
const routeState = window.__PNEXT_ROUTE__ ?? {}
|
|
210
|
-
const bfcacheId = typeof state.__pnextBfcacheId === 'string' ? state.__pnextBfcacheId : undefined
|
|
211
|
-
return bfcacheId ? ({ ...routeState, bfcacheId } as RouteState) : routeState
|
|
210
|
+
if (!process.browser && typeof window === 'undefined') return {}
|
|
211
|
+
const state = (history.state as Record<string, unknown> | null) ?? {}
|
|
212
|
+
const routeState = window.__PNEXT_ROUTE__ ?? {}
|
|
213
|
+
const bfcacheId = typeof state.__pnextBfcacheId === 'string' ? state.__pnextBfcacheId : undefined
|
|
214
|
+
return bfcacheId ? ({ ...routeState, bfcacheId } as RouteState) : routeState
|
|
212
215
|
}
|
|
213
216
|
|
|
214
217
|
function navigate(url: string, mode: 'push' | 'replace', scroll = true) {
|
|
215
|
-
if (blockJavascriptUrl(url)) return
|
|
216
|
-
const next = new URL(url, window.location.href)
|
|
218
|
+
if (blockJavascriptUrl(url)) return
|
|
219
|
+
const next = new URL(url, window.location.href)
|
|
217
220
|
if (next.origin !== window.location.origin) {
|
|
218
|
-
const holder = globalThis as { __pnextMpaNavigation?: number }
|
|
219
|
-
holder.__pnextMpaNavigation = (holder.__pnextMpaNavigation ?? 0) + 1
|
|
221
|
+
const holder = globalThis as { __pnextMpaNavigation?: number }
|
|
222
|
+
holder.__pnextMpaNavigation = (holder.__pnextMpaNavigation ?? 0) + 1
|
|
220
223
|
requestAnimationFrame(() =>
|
|
221
224
|
requestAnimationFrame(() => {
|
|
222
|
-
if (mode === 'replace') window.location.replace(next.href)
|
|
223
|
-
else window.location.assign(next.href)
|
|
225
|
+
if (mode === 'replace') window.location.replace(next.href)
|
|
226
|
+
else window.location.assign(next.href)
|
|
224
227
|
}),
|
|
225
|
-
)
|
|
226
|
-
return
|
|
228
|
+
)
|
|
229
|
+
return
|
|
227
230
|
}
|
|
228
231
|
|
|
229
232
|
if (next.pathname !== window.location.pathname || next.search !== window.location.search) {
|
|
230
|
-
void softNavigate(next.href, { replace: mode === 'replace', scroll })
|
|
231
|
-
return
|
|
233
|
+
void softNavigate(next.href, { replace: mode === 'replace', scroll })
|
|
234
|
+
return
|
|
232
235
|
}
|
|
233
236
|
|
|
234
|
-
if (mode === 'replace') window.history.replaceState(history.state, '', next)
|
|
235
|
-
else window.history.pushState(history.state, '', next)
|
|
236
|
-
scheduleNavigationScroll(next, { scroll })
|
|
237
|
+
if (mode === 'replace') window.history.replaceState(history.state, '', next)
|
|
238
|
+
else window.history.pushState(history.state, '', next)
|
|
239
|
+
scheduleNavigationScroll(next, { scroll })
|
|
237
240
|
}
|
|
238
241
|
|
|
239
242
|
// Exported so compat's link-status can guarantee raw history.pushState /
|
|
240
243
|
// replaceState calls broadcast a location change (ending a link's pending
|
|
241
244
|
// state) even when no useLocation-based hook has mounted yet.
|
|
242
245
|
export function patchHistory() {
|
|
243
|
-
if ((!process.browser && typeof window === 'undefined') || window.__PNEXT_HISTORY_PATCHED__)
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
const
|
|
246
|
+
if ((!process.browser && typeof window === 'undefined') || window.__PNEXT_HISTORY_PATCHED__)
|
|
247
|
+
return
|
|
248
|
+
window.__PNEXT_HISTORY_PATCHED__ = true
|
|
249
|
+
const pushState = window.history.pushState.bind(window.history)
|
|
250
|
+
const replaceState = window.history.replaceState.bind(window.history)
|
|
247
251
|
|
|
248
252
|
// Broadcast only when the URL actually changes. The router itself calls replaceState with the
|
|
249
253
|
// CURRENT href for bookkeeping - including at the start of every soft navigation - and emitting for
|
|
@@ -254,26 +258,26 @@ export function patchHistory() {
|
|
|
254
258
|
// document, so a later traversal is a location broadcast rather than a fetch-and-swap of a URL that
|
|
255
259
|
// may not even exist on the server. Router-initiated calls already carry the keys.
|
|
256
260
|
function copyInternalState(data: unknown): unknown {
|
|
257
|
-
const current = (window.history.state as Record<string, unknown> | null) ?? {}
|
|
258
|
-
const carried: Record<string, unknown> = {}
|
|
261
|
+
const current = (window.history.state as Record<string, unknown> | null) ?? {}
|
|
262
|
+
const carried: Record<string, unknown> = {}
|
|
259
263
|
for (const key of Object.keys(current)) {
|
|
260
|
-
if (key.startsWith('__pnext')) carried[key] = current[key]
|
|
264
|
+
if (key.startsWith('__pnext')) carried[key] = current[key]
|
|
261
265
|
}
|
|
262
|
-
if (Object.keys(carried).length === 0) return data
|
|
263
|
-
const own = (data as Record<string, unknown> | null) ?? {}
|
|
264
|
-
if (Object.keys(own).some(key => key.startsWith('__pnext'))) return data
|
|
265
|
-
return { ...own, ...carried }
|
|
266
|
+
if (Object.keys(carried).length === 0) return data
|
|
267
|
+
const own = (data as Record<string, unknown> | null) ?? {}
|
|
268
|
+
if (Object.keys(own).some(key => key.startsWith('__pnext'))) return data
|
|
269
|
+
return { ...own, ...carried }
|
|
266
270
|
}
|
|
267
271
|
window.history.pushState = function patchedPushState(data, unused, url) {
|
|
268
|
-
const before = window.location.href
|
|
269
|
-
const result = pushState(copyInternalState(data), unused, url)
|
|
270
|
-
if (window.location.href !== before) emitLocationChange()
|
|
271
|
-
return result
|
|
272
|
-
}
|
|
272
|
+
const before = window.location.href
|
|
273
|
+
const result = pushState(copyInternalState(data), unused, url)
|
|
274
|
+
if (window.location.href !== before) emitLocationChange()
|
|
275
|
+
return result
|
|
276
|
+
}
|
|
273
277
|
window.history.replaceState = function patchedReplaceState(data, unused, url) {
|
|
274
|
-
const before = window.location.href
|
|
275
|
-
const result = replaceState(copyInternalState(data), unused, url)
|
|
276
|
-
if (window.location.href !== before) emitLocationChange()
|
|
277
|
-
return result
|
|
278
|
-
}
|
|
278
|
+
const before = window.location.href
|
|
279
|
+
const result = replaceState(copyInternalState(data), unused, url)
|
|
280
|
+
if (window.location.href !== before) emitLocationChange()
|
|
281
|
+
return result
|
|
282
|
+
}
|
|
279
283
|
}
|
package/src/api/dynamic.tsx
CHANGED
|
@@ -1,26 +1,26 @@
|
|
|
1
|
-
import { h, type ComponentType } from 'preact'
|
|
2
|
-
import { useEffect, useRef, useState } from 'preact/hooks'
|
|
1
|
+
import { h, type ComponentType } from 'preact'
|
|
2
|
+
import { useEffect, useRef, useState } from 'preact/hooks'
|
|
3
3
|
|
|
4
|
-
export type DynamicModule<Props> = ComponentType<Props> | { default: ComponentType<Props> }
|
|
5
|
-
export type DynamicLoader<Props> = string | (() => Promise<DynamicModule<Props>>)
|
|
6
|
-
export const dynamicReferenceSymbol = Symbol.for('pnext.dynamic')
|
|
4
|
+
export type DynamicModule<Props> = ComponentType<Props> | { default: ComponentType<Props> }
|
|
5
|
+
export type DynamicLoader<Props> = string | (() => Promise<DynamicModule<Props>>)
|
|
6
|
+
export const dynamicReferenceSymbol = Symbol.for('pnext.dynamic')
|
|
7
7
|
|
|
8
8
|
export interface DynamicTarget {
|
|
9
|
-
file: string
|
|
10
|
-
exportName: string
|
|
9
|
+
file: string
|
|
10
|
+
exportName: string
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export interface DynamicReference<Props extends object = object> {
|
|
14
|
-
load: () => Promise<ComponentType<Props
|
|
15
|
-
target?: DynamicTarget
|
|
14
|
+
load: () => Promise<ComponentType<Props>>
|
|
15
|
+
target?: DynamicTarget
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export interface DynamicOptions<Props> {
|
|
19
|
-
loading?: ComponentType<Props
|
|
20
|
-
load?: 'render' | 'visible'
|
|
21
|
-
rootMargin?: string
|
|
22
|
-
ssr?: boolean
|
|
23
|
-
threshold?: number | number[]
|
|
19
|
+
loading?: ComponentType<Props>
|
|
20
|
+
load?: 'render' | 'visible'
|
|
21
|
+
rootMargin?: string
|
|
22
|
+
ssr?: boolean
|
|
23
|
+
threshold?: number | number[]
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export function dynamic<Props extends object = object>(
|
|
@@ -30,73 +30,76 @@ export function dynamic<Props extends object = object>(
|
|
|
30
30
|
// never passes this.
|
|
31
31
|
target?: DynamicTarget,
|
|
32
32
|
) {
|
|
33
|
-
let loaded: ComponentType<Props> | null = null
|
|
34
|
-
let pending: Promise<ComponentType<Props>> | null = null
|
|
35
|
-
const loadModule =
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
33
|
+
let loaded: ComponentType<Props> | null = null
|
|
34
|
+
let pending: Promise<ComponentType<Props>> | null = null
|
|
35
|
+
const loadModule =
|
|
36
|
+
typeof loader === 'string'
|
|
37
|
+
? () => {
|
|
38
|
+
throw new Error(`dynamic(${JSON.stringify(loader)}) was not compiled by PNext.`)
|
|
39
|
+
}
|
|
40
|
+
: loader
|
|
40
41
|
|
|
41
42
|
const load = () => {
|
|
42
43
|
pending ??= Promise.resolve(loadModule()).then(module => {
|
|
43
|
-
loaded = typeof module === 'function' ? module : module.default
|
|
44
|
-
return loaded
|
|
45
|
-
})
|
|
46
|
-
return pending
|
|
47
|
-
}
|
|
44
|
+
loaded = typeof module === 'function' ? module : module.default
|
|
45
|
+
return loaded
|
|
46
|
+
})
|
|
47
|
+
return pending
|
|
48
|
+
}
|
|
48
49
|
|
|
49
50
|
function DynamicComponent(props: Props) {
|
|
50
|
-
const [Component, setComponent] = useState<ComponentType<Props> | null>(() => loaded)
|
|
51
|
-
const [shouldLoad, setShouldLoad] = useState(() => options.load !== 'visible')
|
|
52
|
-
const visibleRef = useRef<HTMLDivElement>(null)
|
|
51
|
+
const [Component, setComponent] = useState<ComponentType<Props> | null>(() => loaded)
|
|
52
|
+
const [shouldLoad, setShouldLoad] = useState(() => options.load !== 'visible')
|
|
53
|
+
const visibleRef = useRef<HTMLDivElement>(null)
|
|
53
54
|
|
|
54
55
|
useEffect(() => {
|
|
55
|
-
if (Component || shouldLoad) return
|
|
56
|
-
const node = visibleRef.current
|
|
56
|
+
if (Component || shouldLoad) return
|
|
57
|
+
const node = visibleRef.current
|
|
57
58
|
if (!node || typeof IntersectionObserver === 'undefined') {
|
|
58
|
-
setShouldLoad(true)
|
|
59
|
-
return
|
|
59
|
+
setShouldLoad(true)
|
|
60
|
+
return
|
|
60
61
|
}
|
|
61
62
|
|
|
62
63
|
const observer = new IntersectionObserver(
|
|
63
64
|
entries => {
|
|
64
|
-
if (!entries.some(entry => entry.isIntersecting)) return
|
|
65
|
-
observer.disconnect()
|
|
66
|
-
setShouldLoad(true)
|
|
65
|
+
if (!entries.some(entry => entry.isIntersecting)) return
|
|
66
|
+
observer.disconnect()
|
|
67
|
+
setShouldLoad(true)
|
|
67
68
|
},
|
|
68
69
|
{
|
|
69
70
|
rootMargin: options.rootMargin,
|
|
70
71
|
threshold: options.threshold,
|
|
71
72
|
},
|
|
72
|
-
)
|
|
73
|
+
)
|
|
73
74
|
|
|
74
|
-
observer.observe(node)
|
|
75
|
-
return () => observer.disconnect()
|
|
76
|
-
}, [Component, shouldLoad])
|
|
75
|
+
observer.observe(node)
|
|
76
|
+
return () => observer.disconnect()
|
|
77
|
+
}, [Component, shouldLoad])
|
|
77
78
|
|
|
78
79
|
useEffect(() => {
|
|
79
|
-
if (Component || !shouldLoad) return
|
|
80
|
-
let cancelled = false
|
|
80
|
+
if (Component || !shouldLoad) return
|
|
81
|
+
let cancelled = false
|
|
81
82
|
void load().then(next => {
|
|
82
|
-
if (!cancelled) setComponent(() => next)
|
|
83
|
-
})
|
|
83
|
+
if (!cancelled) setComponent(() => next)
|
|
84
|
+
})
|
|
84
85
|
return () => {
|
|
85
|
-
cancelled = true
|
|
86
|
-
}
|
|
87
|
-
}, [Component, shouldLoad])
|
|
86
|
+
cancelled = true
|
|
87
|
+
}
|
|
88
|
+
}, [Component, shouldLoad])
|
|
88
89
|
|
|
89
|
-
if (Component) return h(Component, props)
|
|
90
|
-
const Loading = options.loading
|
|
90
|
+
if (Component) return h(Component, props)
|
|
91
|
+
const Loading = options.loading
|
|
91
92
|
if (options.load === 'visible') {
|
|
92
|
-
return h('div', { ref: visibleRef }, Loading ? h(Loading, props) : null)
|
|
93
|
+
return h('div', { ref: visibleRef }, Loading ? h(Loading, props) : null)
|
|
93
94
|
}
|
|
94
|
-
return Loading ? h(Loading, props) : null
|
|
95
|
+
return Loading ? h(Loading, props) : null
|
|
95
96
|
}
|
|
96
97
|
|
|
97
|
-
(
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
;(
|
|
99
|
+
DynamicComponent as typeof DynamicComponent & {
|
|
100
|
+
[dynamicReferenceSymbol]: DynamicReference<Props>
|
|
101
|
+
}
|
|
102
|
+
)[dynamicReferenceSymbol] = { load, target }
|
|
100
103
|
|
|
101
|
-
return DynamicComponent
|
|
104
|
+
return DynamicComponent
|
|
102
105
|
}
|