@wular/pnext 0.0.4 → 0.0.7
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 +22 -16
- package/bin/pnext +6 -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 +87 -22
- package/reference/config.md +40 -93
- package/reference/css.md +42 -33
- package/reference/dev.md +26 -33
- package/reference/env.md +18 -20
- package/reference/getting-started.md +132 -0
- package/reference/metadata.md +31 -46
- package/reference/navigation.md +65 -105
- package/reference/performance.md +21 -142
- package/reference/rendering.md +78 -75
- package/reference/routing.md +97 -107
- package/reference/typegen.md +27 -29
- package/src/api/cache.ts +36 -37
- package/src/api/client-cache.ts +2 -2
- package/src/api/client-navigation.ts +121 -114
- package/src/api/dynamic.tsx +58 -55
- package/src/api/link.tsx +52 -53
- 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 +72 -64
- package/src/cli/dev.ts +116 -116
- package/src/cli/index.ts +94 -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 +802 -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 +32 -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 +2022 -1995
- package/src/{api → client}/router/types.ts +98 -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 -1897
- 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 +86 -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 +2087 -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} +139 -139
- package/src/resolve/engine.ts +90 -77
- package/src/resolve/imports.ts +475 -463
- package/src/resolve/scan-facts.ts +318 -296
- 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 +87 -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 +827 -815
- package/src/routing/slots.ts +164 -160
- package/src/runtime/loader.ts +954 -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 +428 -406
- package/src/styles.d.ts +9 -0
- package/src/types.ts +324 -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/reference/overview.md +0 -35
- 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
|
@@ -2,101 +2,94 @@
|
|
|
2
2
|
// block (and the assetPrefix URL check) - the image-optimizer e2e suite asserts these exact strings in
|
|
3
3
|
// the build output of an invalid config. Only the rules Next enforces are checked.
|
|
4
4
|
|
|
5
|
-
import fs from 'node:fs'
|
|
6
|
-
import path from 'node:path'
|
|
5
|
+
import fs from 'node:fs'
|
|
6
|
+
import path from 'node:path'
|
|
7
7
|
|
|
8
|
-
const LOADERS = ['default', 'imgix', 'cloudinary', 'akamai', 'custom'] as const
|
|
9
|
-
const FORMATS = ['image/avif', 'image/webp'] as const
|
|
10
|
-
const DISPOSITIONS = ['inline', 'attachment'] as const
|
|
11
|
-
const REMOTE_PATTERN_KEYS = new Set(['protocol', 'hostname', 'port', 'pathname', 'search'])
|
|
12
|
-
const LOCAL_PATTERN_KEYS = new Set(['pathname', 'search'])
|
|
8
|
+
const LOADERS = ['default', 'imgix', 'cloudinary', 'akamai', 'custom'] as const
|
|
9
|
+
const FORMATS = ['image/avif', 'image/webp'] as const
|
|
10
|
+
const DISPOSITIONS = ['inline', 'attachment'] as const
|
|
11
|
+
const REMOTE_PATTERN_KEYS = new Set(['protocol', 'hostname', 'port', 'pathname', 'search'])
|
|
12
|
+
const LOCAL_PATTERN_KEYS = new Set(['pathname', 'search'])
|
|
13
13
|
|
|
14
14
|
function hasDefaultExport(file: string): boolean {
|
|
15
|
-
let source: string
|
|
15
|
+
let source: string
|
|
16
16
|
try {
|
|
17
|
-
source = fs.readFileSync(file, 'utf8')
|
|
17
|
+
source = fs.readFileSync(file, 'utf8')
|
|
18
18
|
} catch {
|
|
19
|
-
return false
|
|
19
|
+
return false
|
|
20
20
|
}
|
|
21
|
-
return /\bexport\s+default\b/.test(source) || /\bmodule\.exports\s*=/.test(source)
|
|
21
|
+
return /\bexport\s+default\b/.test(source) || /\bmodule\.exports\s*=/.test(source)
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
function received(value: unknown): string {
|
|
25
|
-
if (value === null) return 'null'
|
|
26
|
-
if (Array.isArray(value)) return 'array'
|
|
27
|
-
return typeof value
|
|
25
|
+
if (value === null) return 'null'
|
|
26
|
+
if (Array.isArray(value)) return 'array'
|
|
27
|
+
return typeof value
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
function quotedUnion(options: readonly string[]): string {
|
|
31
|
-
return options.map(option => `'${option}'`).join(' | ')
|
|
31
|
+
return options.map(option => `'${option}'`).join(' | ')
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
/**
|
|
35
35
|
* Validate the images/assetPrefix portions of a next.config object. Returns
|
|
36
36
|
* Next's exact error strings (empty array when valid).
|
|
37
37
|
*/
|
|
38
|
-
export function collectImagesConfigErrors(
|
|
39
|
-
|
|
40
|
-
root: string,
|
|
41
|
-
): string[] {
|
|
42
|
-
const errors: string[] = [];
|
|
38
|
+
export function collectImagesConfigErrors(config: Record<string, unknown>, root: string): string[] {
|
|
39
|
+
const errors: string[] = []
|
|
43
40
|
|
|
44
|
-
const assetPrefix = config.assetPrefix
|
|
41
|
+
const assetPrefix = config.assetPrefix
|
|
45
42
|
if (typeof assetPrefix === 'string' && assetPrefix !== '' && !assetPrefix.startsWith('/')) {
|
|
46
43
|
try {
|
|
47
|
-
new URL(assetPrefix)
|
|
44
|
+
new URL(assetPrefix)
|
|
48
45
|
} catch {
|
|
49
46
|
// Bun's URL error text differs from Node's; emit Node's exact phrasing.
|
|
50
|
-
errors.push('Invalid assetPrefix provided. Original error: TypeError: Invalid URL')
|
|
47
|
+
errors.push('Invalid assetPrefix provided. Original error: TypeError: Invalid URL')
|
|
51
48
|
}
|
|
52
49
|
}
|
|
53
50
|
|
|
54
|
-
const images = config.images
|
|
55
|
-
if (images === undefined || images === null) return errors
|
|
51
|
+
const images = config.images
|
|
52
|
+
if (images === undefined || images === null) return errors
|
|
56
53
|
if (typeof images !== 'object' || Array.isArray(images)) {
|
|
57
|
-
errors.push(`Expected object, received ${received(images)} at "images"`)
|
|
58
|
-
return errors
|
|
54
|
+
errors.push(`Expected object, received ${received(images)} at "images"`)
|
|
55
|
+
return errors
|
|
59
56
|
}
|
|
60
|
-
const img = images as Record<string, unknown
|
|
57
|
+
const img = images as Record<string, unknown>
|
|
61
58
|
|
|
62
|
-
validateSizeArray(errors, img.deviceSizes, 'images.deviceSizes')
|
|
63
|
-
validateSizeArray(errors, img.imageSizes, 'images.imageSizes')
|
|
59
|
+
validateSizeArray(errors, img.deviceSizes, 'images.deviceSizes')
|
|
60
|
+
validateSizeArray(errors, img.imageSizes, 'images.imageSizes')
|
|
64
61
|
|
|
65
62
|
if (img.domains !== undefined) {
|
|
66
63
|
if (!Array.isArray(img.domains)) {
|
|
67
|
-
errors.push(`Expected array, received ${received(img.domains)} at "images.domains"`)
|
|
64
|
+
errors.push(`Expected array, received ${received(img.domains)} at "images.domains"`)
|
|
68
65
|
} else if (img.domains.length > 50) {
|
|
69
|
-
errors.push('Array must contain at most 50 element(s) at "images.domains"')
|
|
66
|
+
errors.push('Array must contain at most 50 element(s) at "images.domains"')
|
|
70
67
|
}
|
|
71
68
|
}
|
|
72
69
|
|
|
73
70
|
if (img.qualities !== undefined) {
|
|
74
71
|
if (!Array.isArray(img.qualities)) {
|
|
75
|
-
errors.push(`Expected array, received ${received(img.qualities)} at "images.qualities"`)
|
|
72
|
+
errors.push(`Expected array, received ${received(img.qualities)} at "images.qualities"`)
|
|
76
73
|
} else {
|
|
77
74
|
if (img.qualities.length < 1) {
|
|
78
|
-
errors.push('Array must contain at least 1 element(s) at "images.qualities"')
|
|
75
|
+
errors.push('Array must contain at least 1 element(s) at "images.qualities"')
|
|
79
76
|
}
|
|
80
77
|
if (img.qualities.length > 20) {
|
|
81
|
-
errors.push('Array must contain at most 20 element(s) at "images.qualities"')
|
|
78
|
+
errors.push('Array must contain at most 20 element(s) at "images.qualities"')
|
|
82
79
|
}
|
|
83
80
|
img.qualities.forEach((quality, index) => {
|
|
84
81
|
if (typeof quality !== 'number') {
|
|
85
82
|
errors.push(
|
|
86
83
|
`Expected number, received ${received(quality)} at "images.qualities[${index}]"`,
|
|
87
|
-
)
|
|
84
|
+
)
|
|
88
85
|
} else if (!Number.isInteger(quality)) {
|
|
89
|
-
errors.push(`Expected integer, received float at "images.qualities[${index}]"`)
|
|
86
|
+
errors.push(`Expected integer, received float at "images.qualities[${index}]"`)
|
|
90
87
|
} else if (quality < 1) {
|
|
91
|
-
errors.push(
|
|
92
|
-
`Number must be greater than or equal to 1 at "images.qualities[${index}]"`,
|
|
93
|
-
);
|
|
88
|
+
errors.push(`Number must be greater than or equal to 1 at "images.qualities[${index}]"`)
|
|
94
89
|
} else if (quality > 100) {
|
|
95
|
-
errors.push(
|
|
96
|
-
`Number must be less than or equal to 100 at "images.qualities[${index}]"`,
|
|
97
|
-
);
|
|
90
|
+
errors.push(`Number must be less than or equal to 100 at "images.qualities[${index}]"`)
|
|
98
91
|
}
|
|
99
|
-
})
|
|
92
|
+
})
|
|
100
93
|
}
|
|
101
94
|
}
|
|
102
95
|
|
|
@@ -104,22 +97,22 @@ export function collectImagesConfigErrors(
|
|
|
104
97
|
if (!Array.isArray(img.localPatterns)) {
|
|
105
98
|
errors.push(
|
|
106
99
|
`Expected array, received ${received(img.localPatterns)} at "images.localPatterns"`,
|
|
107
|
-
)
|
|
100
|
+
)
|
|
108
101
|
} else {
|
|
109
102
|
if (img.localPatterns.length > 25) {
|
|
110
|
-
errors.push('Array must contain at most 25 element(s) at "images.localPatterns"')
|
|
103
|
+
errors.push('Array must contain at most 25 element(s) at "images.localPatterns"')
|
|
111
104
|
}
|
|
112
105
|
img.localPatterns.forEach((pattern, index) => {
|
|
113
|
-
if (!pattern || typeof pattern !== 'object') return
|
|
106
|
+
if (!pattern || typeof pattern !== 'object') return
|
|
114
107
|
const unknown = Object.keys(pattern as Record<string, unknown>).filter(
|
|
115
108
|
key => !LOCAL_PATTERN_KEYS.has(key),
|
|
116
|
-
)
|
|
109
|
+
)
|
|
117
110
|
if (unknown.length > 0) {
|
|
118
111
|
errors.push(
|
|
119
112
|
`Unrecognized key(s) in object: ${unknown.map(key => `'${key}'`).join(', ')} at "images.localPatterns[${index}]"`,
|
|
120
|
-
)
|
|
113
|
+
)
|
|
121
114
|
}
|
|
122
|
-
})
|
|
115
|
+
})
|
|
123
116
|
}
|
|
124
117
|
}
|
|
125
118
|
|
|
@@ -127,40 +120,38 @@ export function collectImagesConfigErrors(
|
|
|
127
120
|
if (!Array.isArray(img.remotePatterns)) {
|
|
128
121
|
errors.push(
|
|
129
122
|
`Expected array, received ${received(img.remotePatterns)} at "images.remotePatterns"`,
|
|
130
|
-
)
|
|
123
|
+
)
|
|
131
124
|
} else {
|
|
132
125
|
if (img.remotePatterns.length > 50) {
|
|
133
|
-
errors.push('Array must contain at most 50 element(s) at "images.remotePatterns"')
|
|
126
|
+
errors.push('Array must contain at most 50 element(s) at "images.remotePatterns"')
|
|
134
127
|
}
|
|
135
128
|
img.remotePatterns.forEach((pattern, index) => {
|
|
136
129
|
if (pattern instanceof URL) {
|
|
137
|
-
const protocol = pattern.protocol.replace(/:$/, '')
|
|
130
|
+
const protocol = pattern.protocol.replace(/:$/, '')
|
|
138
131
|
if (protocol !== 'http' && protocol !== 'https') {
|
|
139
132
|
errors.push(
|
|
140
133
|
`Specified images.remotePatterns must have protocol "http" or "https" received "${protocol}"`,
|
|
141
|
-
)
|
|
134
|
+
)
|
|
142
135
|
}
|
|
143
|
-
return
|
|
136
|
+
return
|
|
144
137
|
}
|
|
145
138
|
if (!pattern || typeof pattern !== 'object') {
|
|
146
139
|
errors.push(
|
|
147
140
|
`Expected object, received ${received(pattern)} at "images.remotePatterns[${index}]"`,
|
|
148
|
-
)
|
|
149
|
-
return
|
|
141
|
+
)
|
|
142
|
+
return
|
|
150
143
|
}
|
|
151
|
-
const obj = pattern as Record<string, unknown
|
|
152
|
-
const unknown = Object.keys(obj).filter(key => !REMOTE_PATTERN_KEYS.has(key))
|
|
144
|
+
const obj = pattern as Record<string, unknown>
|
|
145
|
+
const unknown = Object.keys(obj).filter(key => !REMOTE_PATTERN_KEYS.has(key))
|
|
153
146
|
if (unknown.length > 0) {
|
|
154
147
|
errors.push(
|
|
155
148
|
`Unrecognized key(s) in object: ${unknown.map(key => `'${key}'`).join(', ')} at "images.remotePatterns[${index}]"`,
|
|
156
|
-
)
|
|
149
|
+
)
|
|
157
150
|
}
|
|
158
151
|
if (typeof obj.hostname !== 'string') {
|
|
159
|
-
errors.push(
|
|
160
|
-
`"images.remotePatterns[${index}].hostname" is missing, expected string`,
|
|
161
|
-
);
|
|
152
|
+
errors.push(`"images.remotePatterns[${index}].hostname" is missing, expected string`)
|
|
162
153
|
}
|
|
163
|
-
})
|
|
154
|
+
})
|
|
164
155
|
}
|
|
165
156
|
}
|
|
166
157
|
|
|
@@ -168,18 +159,18 @@ export function collectImagesConfigErrors(
|
|
|
168
159
|
if (typeof img.loader !== 'string' || !LOADERS.includes(img.loader as never)) {
|
|
169
160
|
errors.push(
|
|
170
161
|
`Expected ${quotedUnion(LOADERS)}, received '${received(img.loader) === 'string' ? (img.loader as string) : received(img.loader)}' at "images.loader"`,
|
|
171
|
-
)
|
|
162
|
+
)
|
|
172
163
|
} else if (img.loader !== 'default' && img.loader !== 'custom') {
|
|
173
|
-
const loader = img.loader
|
|
164
|
+
const loader = img.loader
|
|
174
165
|
if (typeof img.path !== 'string' || img.path === '' || img.path === '/_next/image') {
|
|
175
166
|
errors.push(
|
|
176
167
|
`Specified images.loader property (${loader}) also requires images.path property to be assigned to a URL prefix.`,
|
|
177
|
-
)
|
|
168
|
+
)
|
|
178
169
|
}
|
|
179
170
|
if (typeof img.loaderFile === 'string' && img.loaderFile !== '') {
|
|
180
171
|
errors.push(
|
|
181
172
|
`Specified images.loader property (${loader}) cannot be used with images.loaderFile property. Please set images.loader to "custom".`,
|
|
182
|
-
)
|
|
173
|
+
)
|
|
183
174
|
}
|
|
184
175
|
}
|
|
185
176
|
}
|
|
@@ -189,28 +180,28 @@ export function collectImagesConfigErrors(
|
|
|
189
180
|
// absolute filesystem path — resolve it against the config root.
|
|
190
181
|
const absolute = img.loaderFile.startsWith('/')
|
|
191
182
|
? path.join(root, img.loaderFile)
|
|
192
|
-
: path.resolve(root, img.loaderFile)
|
|
183
|
+
: path.resolve(root, img.loaderFile)
|
|
193
184
|
if (!fs.existsSync(absolute)) {
|
|
194
|
-
errors.push(`Specified images.loaderFile does not exist at "${absolute}".`)
|
|
185
|
+
errors.push(`Specified images.loaderFile does not exist at "${absolute}".`)
|
|
195
186
|
} else if (!hasDefaultExport(absolute)) {
|
|
196
187
|
errors.push(
|
|
197
188
|
'images.loaderFile detected but the file is missing default export.\n' +
|
|
198
189
|
'Read more: https://nextjs.org/docs/messages/invalid-images-config',
|
|
199
|
-
)
|
|
190
|
+
)
|
|
200
191
|
}
|
|
201
192
|
}
|
|
202
193
|
|
|
203
194
|
if (img.formats !== undefined) {
|
|
204
195
|
if (!Array.isArray(img.formats)) {
|
|
205
|
-
errors.push(`Expected array, received ${received(img.formats)} at "images.formats"`)
|
|
196
|
+
errors.push(`Expected array, received ${received(img.formats)} at "images.formats"`)
|
|
206
197
|
} else {
|
|
207
198
|
img.formats.forEach((format, index) => {
|
|
208
199
|
if (!FORMATS.includes(format as never)) {
|
|
209
200
|
errors.push(
|
|
210
201
|
`Expected ${quotedUnion(FORMATS)}, received '${String(format)}' at "images.formats[${index}]"`,
|
|
211
|
-
)
|
|
202
|
+
)
|
|
212
203
|
}
|
|
213
|
-
})
|
|
204
|
+
})
|
|
214
205
|
}
|
|
215
206
|
}
|
|
216
207
|
|
|
@@ -220,50 +211,50 @@ export function collectImagesConfigErrors(
|
|
|
220
211
|
) {
|
|
221
212
|
errors.push(
|
|
222
213
|
`Expected ${quotedUnion(DISPOSITIONS)}, received '${typeof img.contentDispositionType === 'string' ? img.contentDispositionType : received(img.contentDispositionType)}' at "images.contentDispositionType"`,
|
|
223
|
-
)
|
|
214
|
+
)
|
|
224
215
|
}
|
|
225
216
|
|
|
226
217
|
if (img.contentSecurityPolicy !== undefined && typeof img.contentSecurityPolicy !== 'string') {
|
|
227
218
|
errors.push(
|
|
228
219
|
`Expected string, received ${received(img.contentSecurityPolicy)} at "images.contentSecurityPolicy"`,
|
|
229
|
-
)
|
|
220
|
+
)
|
|
230
221
|
}
|
|
231
222
|
|
|
232
223
|
if (img.minimumCacheTTL !== undefined) {
|
|
233
224
|
if (typeof img.minimumCacheTTL !== 'number') {
|
|
234
225
|
errors.push(
|
|
235
226
|
`Expected number, received ${received(img.minimumCacheTTL)} at "images.minimumCacheTTL"`,
|
|
236
|
-
)
|
|
227
|
+
)
|
|
237
228
|
} else if (img.minimumCacheTTL < 0) {
|
|
238
|
-
errors.push('Number must be greater than or equal to 0 at "images.minimumCacheTTL"')
|
|
229
|
+
errors.push('Number must be greater than or equal to 0 at "images.minimumCacheTTL"')
|
|
239
230
|
}
|
|
240
231
|
}
|
|
241
232
|
|
|
242
233
|
for (const key of ['dangerouslyAllowSVG', 'unoptimized', 'disableStaticImages'] as const) {
|
|
243
234
|
if (img[key] !== undefined && typeof img[key] !== 'boolean') {
|
|
244
|
-
errors.push(`Expected boolean, received ${received(img[key])} at "images.${key}"`)
|
|
235
|
+
errors.push(`Expected boolean, received ${received(img[key])} at "images.${key}"`)
|
|
245
236
|
}
|
|
246
237
|
}
|
|
247
238
|
|
|
248
|
-
return errors
|
|
239
|
+
return errors
|
|
249
240
|
}
|
|
250
241
|
|
|
251
242
|
function validateSizeArray(errors: string[], value: unknown, label: string): void {
|
|
252
|
-
if (value === undefined) return
|
|
243
|
+
if (value === undefined) return
|
|
253
244
|
if (!Array.isArray(value)) {
|
|
254
|
-
errors.push(`Expected array, received ${received(value)} at "${label}"`)
|
|
255
|
-
return
|
|
245
|
+
errors.push(`Expected array, received ${received(value)} at "${label}"`)
|
|
246
|
+
return
|
|
256
247
|
}
|
|
257
248
|
if (value.length > 25) {
|
|
258
|
-
errors.push(`Array must contain at most 25 element(s) at "${label}"`)
|
|
249
|
+
errors.push(`Array must contain at most 25 element(s) at "${label}"`)
|
|
259
250
|
}
|
|
260
251
|
value.forEach((size, index) => {
|
|
261
252
|
if (typeof size !== 'number') {
|
|
262
|
-
errors.push(`Expected number, received ${received(size)} at "${label}[${index}]"`)
|
|
253
|
+
errors.push(`Expected number, received ${received(size)} at "${label}[${index}]"`)
|
|
263
254
|
} else if (size < 1) {
|
|
264
|
-
errors.push(`Number must be greater than or equal to 1 at "${label}[${index}]"`)
|
|
255
|
+
errors.push(`Number must be greater than or equal to 1 at "${label}[${index}]"`)
|
|
265
256
|
} else if (size > 10000) {
|
|
266
|
-
errors.push(`Number must be less than or equal to 10000 at "${label}[${index}]"`)
|
|
257
|
+
errors.push(`Number must be less than or equal to 10000 at "${label}[${index}]"`)
|
|
267
258
|
}
|
|
268
|
-
})
|
|
259
|
+
})
|
|
269
260
|
}
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import { registerResourceHint } from '../../render/resource-hints'
|
|
2
|
-
import { forwardRef } from 'preact/compat'
|
|
3
|
-
import ClientImage from './image
|
|
4
|
-
import { getImagesConfig, resolveImageProps } from './image
|
|
5
|
-
import type { ImageProps } from './image
|
|
1
|
+
import { registerResourceHint } from '../../render/resource-hints'
|
|
2
|
+
import { forwardRef } from 'preact/compat'
|
|
3
|
+
import ClientImage from './image/client'
|
|
4
|
+
import { getImagesConfig, resolveImageProps } from './image/props'
|
|
5
|
+
import type { ImageProps } from './image/props'
|
|
6
6
|
|
|
7
7
|
const Image = forwardRef<HTMLImageElement, ImageProps>(function Image(imageProps, forwardedRef) {
|
|
8
|
-
const config = getImagesConfig()
|
|
9
|
-
const { props, meta } = resolveImageProps(imageProps, config)
|
|
8
|
+
const config = getImagesConfig()
|
|
9
|
+
const { props, meta } = resolveImageProps(imageProps, config)
|
|
10
10
|
const extra = imageProps as ImageProps & {
|
|
11
|
-
crossOrigin?: string
|
|
12
|
-
referrerPolicy?: string
|
|
13
|
-
fetchPriority?: string
|
|
14
|
-
}
|
|
11
|
+
crossOrigin?: string
|
|
12
|
+
referrerPolicy?: string
|
|
13
|
+
fetchPriority?: string
|
|
14
|
+
}
|
|
15
15
|
|
|
16
16
|
if (meta.preload) {
|
|
17
17
|
registerResourceHint({
|
|
@@ -25,7 +25,7 @@ const Image = forwardRef<HTMLImageElement, ImageProps>(function Image(imageProps
|
|
|
25
25
|
...(extra.referrerPolicy ? { referrerpolicy: extra.referrerPolicy } : {}),
|
|
26
26
|
...(extra.fetchPriority ? { fetchpriority: extra.fetchPriority } : {}),
|
|
27
27
|
},
|
|
28
|
-
})
|
|
28
|
+
})
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
if (!process.browser && typeof window === 'undefined') {
|
|
@@ -40,17 +40,13 @@ const Image = forwardRef<HTMLImageElement, ImageProps>(function Image(imageProps
|
|
|
40
40
|
{...(meta.loadedStyle !== undefined ? { 'data-nimg-ph': meta.loadedStyle } : {})}
|
|
41
41
|
ref={forwardedRef}
|
|
42
42
|
/>
|
|
43
|
-
)
|
|
43
|
+
)
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
return <ClientImage {...imageProps} ref={forwardedRef} __pnextConfig={config}
|
|
47
|
-
})
|
|
46
|
+
return <ClientImage {...imageProps} ref={forwardedRef} __pnextConfig={config} />
|
|
47
|
+
})
|
|
48
48
|
|
|
49
|
-
export default Image
|
|
50
|
-
export { Image }
|
|
51
|
-
export {
|
|
52
|
-
|
|
53
|
-
getImageProps,
|
|
54
|
-
unstable_getImgProps,
|
|
55
|
-
} from './image-props';
|
|
56
|
-
export type { ImageLoader, ImageProps, StaticImageData } from './image-props';
|
|
49
|
+
export default Image
|
|
50
|
+
export { Image }
|
|
51
|
+
export { findClosestQuality, getImageProps, unstable_getImgProps } from './image/props'
|
|
52
|
+
export type { ImageLoader, ImageProps, StaticImageData } from './image/props'
|
package/src/compat/next/index.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export type { Metadata, MetadataLink, Viewport } from '../../types'
|
|
1
|
+
export type { Metadata, MetadataLink, Viewport } from '../../types'
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { forwardRef } from 'preact/compat'
|
|
2
|
-
import { registerResourceHint } from '../../render/resource-hints'
|
|
3
|
-
import { getImagesConfig, resolveImageProps } from './image
|
|
4
|
-
import type { ImageProps } from './image
|
|
1
|
+
import { forwardRef } from 'preact/compat'
|
|
2
|
+
import { registerResourceHint } from '../../render/resource-hints'
|
|
3
|
+
import { getImagesConfig, resolveImageProps } from './image/props'
|
|
4
|
+
import type { ImageProps } from './image/props'
|
|
5
5
|
|
|
6
6
|
// next/legacy/image (the pre-13 component).
|
|
7
7
|
//
|
|
@@ -18,9 +18,9 @@ import type { ImageProps } from './image-props';
|
|
|
18
18
|
// still maps to the same styles next/image applies and lands in `data-nimg`.
|
|
19
19
|
|
|
20
20
|
const EMPTY_DATA_URL =
|
|
21
|
-
'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
|
|
21
|
+
'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
|
|
22
22
|
|
|
23
|
-
const LEGACY_SRC_ATTR = 'data-pnext-legacy-src'
|
|
23
|
+
const LEGACY_SRC_ATTR = 'data-pnext-legacy-src'
|
|
24
24
|
|
|
25
25
|
// Swaps every blanked legacy image to its real attributes when it nears the
|
|
26
26
|
// viewport (falling back to an immediate swap without IntersectionObserver).
|
|
@@ -35,63 +35,62 @@ const LAZY_SWAP_SCRIPT =
|
|
|
35
35
|
`if(!("IntersectionObserver"in window)){for(i=0;i<l.length;i++)s(l[i]);return}` +
|
|
36
36
|
`var o=new IntersectionObserver(function(es){for(var k=0;k<es.length;k++){if(es[k].isIntersecting){s(es[k].target);o.unobserve(es[k].target)}}},{rootMargin:"200px"});` +
|
|
37
37
|
`for(i=0;i<l.length;i++)o.observe(l[i])}` +
|
|
38
|
-
`if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",b);else b()}catch(e){}}())
|
|
38
|
+
`if(document.readyState==="loading")document.addEventListener("DOMContentLoaded",b);else b()}catch(e){}}());`
|
|
39
39
|
|
|
40
|
-
const LegacyImage = forwardRef<HTMLImageElement, ImageProps>(
|
|
41
|
-
imageProps,
|
|
42
|
-
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const layout = imageProps.layout ?? 'intrinsic';
|
|
47
|
-
const { props, meta } = resolveImageProps({ ...imageProps, layout }, config);
|
|
40
|
+
const LegacyImage = forwardRef<HTMLImageElement, ImageProps>(
|
|
41
|
+
function LegacyImage(imageProps, forwardedRef) {
|
|
42
|
+
const config = getImagesConfig()
|
|
43
|
+
// `intrinsic` is the legacy default layout (next/image has no default).
|
|
44
|
+
const layout = imageProps.layout ?? 'intrinsic'
|
|
45
|
+
const { props, meta } = resolveImageProps({ ...imageProps, layout }, config)
|
|
48
46
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
47
|
+
if (meta.preload) {
|
|
48
|
+
registerResourceHint({
|
|
49
|
+
rel: 'preload',
|
|
50
|
+
as: 'image',
|
|
51
|
+
...(meta.imgAttributes.srcSet ? {} : { url: meta.imgAttributes.src }),
|
|
52
|
+
attributes: {
|
|
53
|
+
...(meta.imgAttributes.srcSet ? { imagesrcset: meta.imgAttributes.srcSet } : {}),
|
|
54
|
+
...(meta.imgAttributes.sizes ? { imagesizes: meta.imgAttributes.sizes } : {}),
|
|
55
|
+
},
|
|
56
|
+
})
|
|
57
|
+
}
|
|
60
58
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
59
|
+
const eager = props.loading === 'eager' || Boolean(imageProps.priority)
|
|
60
|
+
const nimgAttrs = {
|
|
61
|
+
'data-nimg': layout,
|
|
62
|
+
...(meta.loadedStyle !== undefined ? { 'data-nimg-ph': meta.loadedStyle } : {}),
|
|
63
|
+
}
|
|
66
64
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
65
|
+
// On the client the component renders its real attributes directly — the
|
|
66
|
+
// browser's own `loading="lazy"` covers deferral there.
|
|
67
|
+
if (eager || process.browser || typeof window !== 'undefined') {
|
|
68
|
+
return <img {...props} {...nimgAttrs} ref={forwardedRef} />
|
|
69
|
+
}
|
|
72
70
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
71
|
+
const { src, srcSet, sizes, ...blanked } = props
|
|
72
|
+
return (
|
|
73
|
+
<>
|
|
74
|
+
<img
|
|
75
|
+
{...blanked}
|
|
76
|
+
src={EMPTY_DATA_URL}
|
|
77
|
+
loading="lazy"
|
|
78
|
+
{...nimgAttrs}
|
|
79
|
+
{...(typeof src === 'string' ? { [LEGACY_SRC_ATTR]: src } : {})}
|
|
80
|
+
{...(typeof srcSet === 'string' ? { [`${LEGACY_SRC_ATTR}set`]: srcSet } : {})}
|
|
81
|
+
{...(typeof sizes === 'string' ? { [`${LEGACY_SRC_ATTR}sizes`]: sizes } : {})}
|
|
82
|
+
ref={forwardedRef}
|
|
83
|
+
/>
|
|
84
|
+
<noscript>
|
|
85
|
+
<img {...props} loading="lazy" {...nimgAttrs} />
|
|
86
|
+
</noscript>
|
|
87
|
+
<script dangerouslySetInnerHTML={{ __html: LAZY_SWAP_SCRIPT }} />
|
|
88
|
+
</>
|
|
89
|
+
)
|
|
90
|
+
},
|
|
91
|
+
)
|
|
93
92
|
|
|
94
|
-
export default LegacyImage
|
|
95
|
-
export { LegacyImage as Image }
|
|
96
|
-
export { getImageProps, unstable_getImgProps } from './image
|
|
97
|
-
export type { ImageLoader, ImageProps, StaticImageData } from './image
|
|
93
|
+
export default LegacyImage
|
|
94
|
+
export { LegacyImage as Image }
|
|
95
|
+
export { getImageProps, unstable_getImgProps } from './image/props'
|
|
96
|
+
export type { ImageLoader, ImageProps, StaticImageData } from './image/props'
|