@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
|
@@ -8,44 +8,44 @@
|
|
|
8
8
|
// accepts.
|
|
9
9
|
// ---------------------------------------------------------------------------
|
|
10
10
|
|
|
11
|
-
import { getNextConfig } from '../config-loader'
|
|
11
|
+
import { getNextConfig } from '../config-loader'
|
|
12
12
|
|
|
13
13
|
export interface LocalPattern {
|
|
14
|
-
pathname?: string
|
|
15
|
-
search?: string
|
|
14
|
+
pathname?: string
|
|
15
|
+
search?: string
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
export interface RemotePattern {
|
|
19
|
-
protocol?: string
|
|
20
|
-
hostname?: string
|
|
21
|
-
port?: string
|
|
22
|
-
pathname?: string
|
|
23
|
-
search?: string
|
|
19
|
+
protocol?: string
|
|
20
|
+
hostname?: string
|
|
21
|
+
port?: string
|
|
22
|
+
pathname?: string
|
|
23
|
+
search?: string
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export interface ResolvedImagesConfig {
|
|
27
|
-
deviceSizes: number[]
|
|
28
|
-
imageSizes: number[]
|
|
27
|
+
deviceSizes: number[]
|
|
28
|
+
imageSizes: number[]
|
|
29
29
|
/** deviceSizes + imageSizes, sorted ascending (Next's `allSizes`). */
|
|
30
|
-
allSizes: number[]
|
|
31
|
-
qualities: number[] | undefined
|
|
32
|
-
formats: string[]
|
|
33
|
-
path: string
|
|
34
|
-
loader: string
|
|
35
|
-
loaderFile: string
|
|
36
|
-
domains: string[]
|
|
37
|
-
disableStaticImages: boolean
|
|
38
|
-
minimumCacheTTL: number
|
|
39
|
-
maximumRedirects: number
|
|
40
|
-
maximumResponseBody: number
|
|
41
|
-
dangerouslyAllowLocalIP: boolean
|
|
42
|
-
dangerouslyAllowSVG: boolean
|
|
43
|
-
contentSecurityPolicy: string
|
|
44
|
-
contentDispositionType: string
|
|
45
|
-
localPatterns: LocalPattern[] | undefined
|
|
46
|
-
remotePatterns: RemotePattern[]
|
|
47
|
-
unoptimized: boolean
|
|
48
|
-
customCacheHandler: boolean
|
|
30
|
+
allSizes: number[]
|
|
31
|
+
qualities: number[] | undefined
|
|
32
|
+
formats: string[]
|
|
33
|
+
path: string
|
|
34
|
+
loader: string
|
|
35
|
+
loaderFile: string
|
|
36
|
+
domains: string[]
|
|
37
|
+
disableStaticImages: boolean
|
|
38
|
+
minimumCacheTTL: number
|
|
39
|
+
maximumRedirects: number
|
|
40
|
+
maximumResponseBody: number
|
|
41
|
+
dangerouslyAllowLocalIP: boolean
|
|
42
|
+
dangerouslyAllowSVG: boolean
|
|
43
|
+
contentSecurityPolicy: string
|
|
44
|
+
contentDispositionType: string
|
|
45
|
+
localPatterns: LocalPattern[] | undefined
|
|
46
|
+
remotePatterns: RemotePattern[]
|
|
47
|
+
unoptimized: boolean
|
|
48
|
+
customCacheHandler: boolean
|
|
49
49
|
}
|
|
50
50
|
|
|
51
51
|
const DEFAULTS = {
|
|
@@ -69,41 +69,39 @@ const DEFAULTS = {
|
|
|
69
69
|
qualities: [75] as number[] | undefined,
|
|
70
70
|
unoptimized: false,
|
|
71
71
|
customCacheHandler: false,
|
|
72
|
-
} as const
|
|
72
|
+
} as const
|
|
73
73
|
|
|
74
|
-
let cached: { key: unknown; value: ResolvedImagesConfig } | undefined
|
|
74
|
+
let cached: { key: unknown; value: ResolvedImagesConfig } | undefined
|
|
75
75
|
|
|
76
76
|
function asNumberArray(value: unknown, fallback: number[]): number[] {
|
|
77
|
-
if (!Array.isArray(value)) return fallback
|
|
78
|
-
const nums = value.filter((v): v is number => typeof v === 'number')
|
|
79
|
-
return nums.length > 0 ? nums : fallback
|
|
77
|
+
if (!Array.isArray(value)) return fallback
|
|
78
|
+
const nums = value.filter((v): v is number => typeof v === 'number')
|
|
79
|
+
return nums.length > 0 ? nums : fallback
|
|
80
80
|
}
|
|
81
81
|
|
|
82
82
|
/** The app's resolved images config, defaults overlaid with next.config.images. */
|
|
83
83
|
export function getImagesConfig(): ResolvedImagesConfig {
|
|
84
|
-
const raw = getNextConfig().images
|
|
85
|
-
if (cached && cached.key === raw) return cached.value
|
|
86
|
-
const images = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown
|
|
84
|
+
const raw = getNextConfig().images
|
|
85
|
+
if (cached && cached.key === raw) return cached.value
|
|
86
|
+
const images = (raw && typeof raw === 'object' ? raw : {}) as Record<string, unknown>
|
|
87
87
|
|
|
88
88
|
const deviceSizes = asNumberArray(images.deviceSizes, [...DEFAULTS.deviceSizes]).sort(
|
|
89
89
|
(a, b) => a - b,
|
|
90
|
-
)
|
|
90
|
+
)
|
|
91
91
|
const imageSizes = asNumberArray(images.imageSizes, [...DEFAULTS.imageSizes]).sort(
|
|
92
92
|
(a, b) => a - b,
|
|
93
|
-
)
|
|
93
|
+
)
|
|
94
94
|
const qualities =
|
|
95
95
|
images.qualities === undefined
|
|
96
96
|
? [...(DEFAULTS.qualities ?? [])]
|
|
97
|
-
: asNumberArray(images.qualities, [...(DEFAULTS.qualities ?? [])]).sort((a, b) => a - b)
|
|
97
|
+
: asNumberArray(images.qualities, [...(DEFAULTS.qualities ?? [])]).sort((a, b) => a - b)
|
|
98
98
|
|
|
99
99
|
const value: ResolvedImagesConfig = {
|
|
100
100
|
deviceSizes,
|
|
101
101
|
imageSizes,
|
|
102
102
|
allSizes: [...deviceSizes, ...imageSizes].sort((a, b) => a - b),
|
|
103
103
|
qualities,
|
|
104
|
-
formats: Array.isArray(images.formats)
|
|
105
|
-
? (images.formats as string[])
|
|
106
|
-
: [...DEFAULTS.formats],
|
|
104
|
+
formats: Array.isArray(images.formats) ? (images.formats as string[]) : [...DEFAULTS.formats],
|
|
107
105
|
path: typeof images.path === 'string' ? images.path : DEFAULTS.path,
|
|
108
106
|
loader: typeof images.loader === 'string' ? images.loader : DEFAULTS.loader,
|
|
109
107
|
loaderFile: typeof images.loaderFile === 'string' ? images.loaderFile : DEFAULTS.loaderFile,
|
|
@@ -145,21 +143,21 @@ export function getImagesConfig(): ResolvedImagesConfig {
|
|
|
145
143
|
unoptimized:
|
|
146
144
|
typeof images.unoptimized === 'boolean' ? images.unoptimized : DEFAULTS.unoptimized,
|
|
147
145
|
customCacheHandler: Boolean(images.customCacheHandler),
|
|
148
|
-
}
|
|
149
|
-
cached = { key: raw, value }
|
|
150
|
-
return value
|
|
146
|
+
}
|
|
147
|
+
cached = { key: raw, value }
|
|
148
|
+
return value
|
|
151
149
|
}
|
|
152
150
|
|
|
153
151
|
function normalizeLocalPatterns(value: unknown): LocalPattern[] | undefined {
|
|
154
|
-
if (!Array.isArray(value)) return undefined
|
|
152
|
+
if (!Array.isArray(value)) return undefined
|
|
155
153
|
const patterns = value.map(entry => {
|
|
156
|
-
if (typeof entry === 'string') return { pathname: entry, search: '' }
|
|
157
|
-
const obj = (entry ?? {}) as Record<string, unknown
|
|
154
|
+
if (typeof entry === 'string') return { pathname: entry, search: '' }
|
|
155
|
+
const obj = (entry ?? {}) as Record<string, unknown>
|
|
158
156
|
return {
|
|
159
157
|
pathname: typeof obj.pathname === 'string' ? obj.pathname : undefined,
|
|
160
158
|
search: typeof obj.search === 'string' ? obj.search : undefined,
|
|
161
|
-
}
|
|
162
|
-
})
|
|
159
|
+
}
|
|
160
|
+
})
|
|
163
161
|
// Next implicitly allows statically-imported media once localPatterns is
|
|
164
162
|
// configured, so build-time optimized static images keep loading. Appended to
|
|
165
163
|
// the normalized list so the runtime check and the images-manifest writer
|
|
@@ -167,12 +165,12 @@ function normalizeLocalPatterns(value: unknown): LocalPattern[] | undefined {
|
|
|
167
165
|
patterns.push(
|
|
168
166
|
{ pathname: '/_next/static/media/**', search: '' },
|
|
169
167
|
{ pathname: '/_next/static/immutable/media/**', search: '' },
|
|
170
|
-
)
|
|
171
|
-
return patterns
|
|
168
|
+
)
|
|
169
|
+
return patterns
|
|
172
170
|
}
|
|
173
171
|
|
|
174
172
|
function normalizeRemotePatterns(value: unknown): RemotePattern[] {
|
|
175
|
-
if (!Array.isArray(value)) return []
|
|
173
|
+
if (!Array.isArray(value)) return []
|
|
176
174
|
return value.map(entry => {
|
|
177
175
|
// next.config may pass a URL instance (new URL('https://host/**')).
|
|
178
176
|
if (entry instanceof URL) {
|
|
@@ -182,15 +180,15 @@ function normalizeRemotePatterns(value: unknown): RemotePattern[] {
|
|
|
182
180
|
...(entry.port ? { port: entry.port } : {}),
|
|
183
181
|
pathname: entry.pathname,
|
|
184
182
|
search: entry.search,
|
|
185
|
-
}
|
|
183
|
+
}
|
|
186
184
|
}
|
|
187
|
-
const obj = (entry ?? {}) as Record<string, unknown
|
|
185
|
+
const obj = (entry ?? {}) as Record<string, unknown>
|
|
188
186
|
return {
|
|
189
187
|
protocol: typeof obj.protocol === 'string' ? obj.protocol : undefined,
|
|
190
188
|
hostname: typeof obj.hostname === 'string' ? obj.hostname : undefined,
|
|
191
189
|
port: typeof obj.port === 'string' ? obj.port : undefined,
|
|
192
190
|
pathname: typeof obj.pathname === 'string' ? obj.pathname : undefined,
|
|
193
191
|
search: typeof obj.search === 'string' ? obj.search : undefined,
|
|
194
|
-
}
|
|
195
|
-
})
|
|
192
|
+
}
|
|
193
|
+
})
|
|
196
194
|
}
|
|
@@ -6,62 +6,66 @@
|
|
|
6
6
|
// and the build-time blur-placeholder generator for static imports.
|
|
7
7
|
// ---------------------------------------------------------------------------
|
|
8
8
|
|
|
9
|
-
import type { ResolvedImagesConfig } from './config'
|
|
9
|
+
import type { ResolvedImagesConfig } from './config'
|
|
10
10
|
|
|
11
|
-
export { serveImageOptimizer } from '../../image-optimizer'
|
|
11
|
+
export { serveImageOptimizer } from '../../image-optimizer/optimize'
|
|
12
12
|
|
|
13
|
-
const BLUR_QUALITY = 70
|
|
13
|
+
const BLUR_QUALITY = 70
|
|
14
14
|
|
|
15
15
|
interface SharpPipeline {
|
|
16
|
-
resize(options: { width?: number; height?: number; withoutEnlargement?: boolean }): SharpPipeline
|
|
17
|
-
webp(options: { quality: number }): SharpPipeline
|
|
18
|
-
avif(options: { quality: number }): SharpPipeline
|
|
19
|
-
png(options: { quality: number }): SharpPipeline
|
|
20
|
-
jpeg(options: { quality: number; mozjpeg?: boolean }): SharpPipeline
|
|
21
|
-
toBuffer(): Promise<Buffer
|
|
16
|
+
resize(options: { width?: number; height?: number; withoutEnlargement?: boolean }): SharpPipeline
|
|
17
|
+
webp(options: { quality: number }): SharpPipeline
|
|
18
|
+
avif(options: { quality: number }): SharpPipeline
|
|
19
|
+
png(options: { quality: number }): SharpPipeline
|
|
20
|
+
jpeg(options: { quality: number; mozjpeg?: boolean }): SharpPipeline
|
|
21
|
+
toBuffer(): Promise<Buffer>
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
type SharpModule = (input: Buffer | Uint8Array) => SharpPipeline
|
|
24
|
+
type SharpModule = (input: Buffer | Uint8Array) => SharpPipeline
|
|
25
25
|
|
|
26
|
-
let sharpPromise: Promise<SharpModule | undefined> | undefined
|
|
26
|
+
let sharpPromise: Promise<SharpModule | undefined> | undefined
|
|
27
27
|
function loadSharp(): Promise<SharpModule | undefined> {
|
|
28
28
|
if (!sharpPromise) {
|
|
29
29
|
sharpPromise = import('sharp')
|
|
30
30
|
.then(m => (m.default ?? m) as unknown as SharpModule)
|
|
31
|
-
.catch(() => undefined)
|
|
31
|
+
.catch(() => undefined)
|
|
32
32
|
}
|
|
33
|
-
return sharpPromise
|
|
33
|
+
return sharpPromise
|
|
34
34
|
}
|
|
35
35
|
|
|
36
36
|
/** True if this request is for the image optimizer endpoint. */
|
|
37
37
|
export function isImageOptimizerRequest(url: URL, config: ResolvedImagesConfig): boolean {
|
|
38
38
|
// `/_next/image/` (trailingSlash: true apps) is served the same as the bare
|
|
39
39
|
// path — the interceptor runs before core's trailing-slash normalization.
|
|
40
|
-
return url.pathname === config.path || url.pathname === `${config.path}
|
|
40
|
+
return url.pathname === config.path || url.pathname === `${config.path}/`
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
const VALID_BLUR_EXT = new Set(['jpeg', 'jpg', 'png', 'webp', 'avif'])
|
|
43
|
+
const VALID_BLUR_EXT = new Set(['jpeg', 'jpg', 'png', 'webp', 'avif'])
|
|
44
44
|
|
|
45
45
|
/** True for animated webp/gif/avif — Next skips blur-placeholder generation for these. */
|
|
46
46
|
function isAnimated(buffer: Buffer): boolean {
|
|
47
47
|
// WebP: an 'ANIM' chunk under a VP8X container.
|
|
48
|
-
if (
|
|
49
|
-
|
|
48
|
+
if (
|
|
49
|
+
buffer.length > 16 &&
|
|
50
|
+
buffer.toString('ascii', 0, 4) === 'RIFF' &&
|
|
51
|
+
buffer.toString('ascii', 8, 12) === 'WEBP'
|
|
52
|
+
) {
|
|
53
|
+
return buffer.includes(Buffer.from('ANIM', 'ascii'))
|
|
50
54
|
}
|
|
51
55
|
// GIF: more than one image descriptor (0x2C) block before the trailer (0x3B).
|
|
52
56
|
if (buffer.length > 6 && buffer.toString('ascii', 0, 3) === 'GIF') {
|
|
53
|
-
let frames = 0
|
|
57
|
+
let frames = 0
|
|
54
58
|
for (let i = 6; i < buffer.length; i++) {
|
|
55
|
-
if (buffer[i] === 0x2c) frames
|
|
56
|
-
if (frames > 1) return true
|
|
59
|
+
if (buffer[i] === 0x2c) frames++
|
|
60
|
+
if (frames > 1) return true
|
|
57
61
|
}
|
|
58
|
-
return false
|
|
62
|
+
return false
|
|
59
63
|
}
|
|
60
64
|
// AVIF: 'avis' major/compatible brand in the ftyp box signals an image sequence.
|
|
61
65
|
if (buffer.length > 16 && buffer.toString('ascii', 4, 8) === 'ftyp') {
|
|
62
|
-
return buffer.toString('ascii', 8, 200).includes('avis')
|
|
66
|
+
return buffer.toString('ascii', 8, 200).includes('avis')
|
|
63
67
|
}
|
|
64
|
-
return false
|
|
68
|
+
return false
|
|
65
69
|
}
|
|
66
70
|
|
|
67
71
|
/**
|
|
@@ -77,20 +81,20 @@ export async function generateBlurDataURL(
|
|
|
77
81
|
blurWidth: number,
|
|
78
82
|
blurHeight: number,
|
|
79
83
|
): Promise<string | undefined> {
|
|
80
|
-
const extension = ext === 'jpg' ? 'jpeg' : ext
|
|
81
|
-
if (!VALID_BLUR_EXT.has(extension) || isAnimated(buffer)) return undefined
|
|
82
|
-
const sharp = await loadSharp()
|
|
83
|
-
if (!sharp) return undefined
|
|
84
|
+
const extension = ext === 'jpg' ? 'jpeg' : ext
|
|
85
|
+
if (!VALID_BLUR_EXT.has(extension) || isAnimated(buffer)) return undefined
|
|
86
|
+
const sharp = await loadSharp()
|
|
87
|
+
if (!sharp) return undefined
|
|
84
88
|
try {
|
|
85
|
-
const pipeline = sharp(buffer).resize({ width: blurWidth, height: blurHeight })
|
|
86
|
-
let out: SharpPipeline
|
|
87
|
-
if (extension === 'png') out = pipeline.png({ quality: BLUR_QUALITY })
|
|
88
|
-
else if (extension === 'webp') out = pipeline.webp({ quality: BLUR_QUALITY })
|
|
89
|
-
else if (extension === 'avif') out = pipeline.avif({ quality: BLUR_QUALITY })
|
|
90
|
-
else out = pipeline.jpeg({ quality: BLUR_QUALITY, mozjpeg: true })
|
|
91
|
-
const resized = await out.toBuffer()
|
|
92
|
-
return `data:image/${extension};base64,${resized.toString('base64')}
|
|
89
|
+
const pipeline = sharp(buffer).resize({ width: blurWidth, height: blurHeight })
|
|
90
|
+
let out: SharpPipeline
|
|
91
|
+
if (extension === 'png') out = pipeline.png({ quality: BLUR_QUALITY })
|
|
92
|
+
else if (extension === 'webp') out = pipeline.webp({ quality: BLUR_QUALITY })
|
|
93
|
+
else if (extension === 'avif') out = pipeline.avif({ quality: BLUR_QUALITY })
|
|
94
|
+
else out = pipeline.jpeg({ quality: BLUR_QUALITY, mozjpeg: true })
|
|
95
|
+
const resized = await out.toBuffer()
|
|
96
|
+
return `data:image/${extension};base64,${resized.toString('base64')}`
|
|
93
97
|
} catch {
|
|
94
|
-
return undefined
|
|
98
|
+
return undefined
|
|
95
99
|
}
|
|
96
100
|
}
|
|
@@ -5,31 +5,31 @@
|
|
|
5
5
|
// whether a requested `url` is allowed (else 400).
|
|
6
6
|
// ---------------------------------------------------------------------------
|
|
7
7
|
|
|
8
|
-
import type { LocalPattern, RemotePattern } from './config'
|
|
8
|
+
import type { LocalPattern, RemotePattern } from './config'
|
|
9
9
|
|
|
10
10
|
function makePathnameRegex(pathname: string): RegExp {
|
|
11
11
|
// Convert a Next path-to-regexp style glob ('/assets/**') into a RegExp.
|
|
12
12
|
// '**' matches any depth; '*' matches a single segment.
|
|
13
|
-
let source = ''
|
|
14
|
-
const escaped = pathname.replace(/[.+?^${}()|[\]\\]/g, '\\$&')
|
|
13
|
+
let source = ''
|
|
14
|
+
const escaped = pathname.replace(/[.+?^${}()|[\]\\]/g, '\\$&')
|
|
15
15
|
// Handle ** then * (double-star must be processed first).
|
|
16
|
-
source = escaped
|
|
17
|
-
|
|
16
|
+
source = escaped
|
|
17
|
+
.replace(/\/\*\*/g, '(?:/.*)?')
|
|
18
|
+
.replace(/\*\*/g, '.*')
|
|
19
|
+
.replace(/\*/g, '[^/]*')
|
|
20
|
+
return new RegExp(`^${source}$`)
|
|
18
21
|
}
|
|
19
22
|
|
|
20
|
-
export function hasLocalMatch(
|
|
21
|
-
localPatterns: LocalPattern[] | undefined,
|
|
22
|
-
url: URL,
|
|
23
|
-
): boolean {
|
|
23
|
+
export function hasLocalMatch(localPatterns: LocalPattern[] | undefined, url: URL): boolean {
|
|
24
24
|
// undefined localPatterns => allow all local images (Next default).
|
|
25
|
-
if (localPatterns === undefined) return true
|
|
25
|
+
if (localPatterns === undefined) return true
|
|
26
26
|
return localPatterns.some(pattern => {
|
|
27
27
|
if (pattern.pathname !== undefined && !makePathnameRegex(pattern.pathname).test(url.pathname)) {
|
|
28
|
-
return false
|
|
28
|
+
return false
|
|
29
29
|
}
|
|
30
|
-
if (pattern.search !== undefined && pattern.search !== url.search) return false
|
|
31
|
-
return true
|
|
32
|
-
})
|
|
30
|
+
if (pattern.search !== undefined && pattern.search !== url.search) return false
|
|
31
|
+
return true
|
|
32
|
+
})
|
|
33
33
|
}
|
|
34
34
|
|
|
35
35
|
export function hasRemoteMatch(
|
|
@@ -37,42 +37,39 @@ export function hasRemoteMatch(
|
|
|
37
37
|
remotePatterns: RemotePattern[],
|
|
38
38
|
url: URL,
|
|
39
39
|
): boolean {
|
|
40
|
-
if (domains.includes(url.hostname)) return true
|
|
40
|
+
if (domains.includes(url.hostname)) return true
|
|
41
41
|
return remotePatterns.some(pattern => {
|
|
42
42
|
if (pattern.protocol !== undefined && pattern.protocol !== url.protocol.replace(/:$/, '')) {
|
|
43
|
-
return false
|
|
43
|
+
return false
|
|
44
44
|
}
|
|
45
45
|
if (pattern.hostname !== undefined && !matchHostname(pattern.hostname, url.hostname)) {
|
|
46
|
-
return false
|
|
46
|
+
return false
|
|
47
47
|
}
|
|
48
48
|
if (pattern.port !== undefined && pattern.port !== '' && pattern.port !== url.port) {
|
|
49
|
-
return false
|
|
49
|
+
return false
|
|
50
50
|
}
|
|
51
|
-
if (
|
|
52
|
-
|
|
53
|
-
!makePathnameRegex(pattern.pathname).test(url.pathname)
|
|
54
|
-
) {
|
|
55
|
-
return false;
|
|
51
|
+
if (pattern.pathname !== undefined && !makePathnameRegex(pattern.pathname).test(url.pathname)) {
|
|
52
|
+
return false
|
|
56
53
|
}
|
|
57
54
|
if (pattern.search !== undefined && pattern.search !== '' && pattern.search !== url.search) {
|
|
58
|
-
return false
|
|
55
|
+
return false
|
|
59
56
|
}
|
|
60
|
-
return true
|
|
61
|
-
})
|
|
57
|
+
return true
|
|
58
|
+
})
|
|
62
59
|
}
|
|
63
60
|
|
|
64
61
|
function matchHostname(pattern: string, hostname: string): boolean {
|
|
65
62
|
if (pattern.startsWith('**.')) {
|
|
66
|
-
const suffix = pattern.slice(2)
|
|
67
|
-
return hostname.endsWith(suffix) && hostname.length > suffix.length
|
|
63
|
+
const suffix = pattern.slice(2) // ".example.com"
|
|
64
|
+
return hostname.endsWith(suffix) && hostname.length > suffix.length
|
|
68
65
|
}
|
|
69
66
|
if (pattern.startsWith('*.')) {
|
|
70
|
-
const suffix = pattern.slice(1)
|
|
71
|
-
if (!hostname.endsWith(suffix)) return false
|
|
72
|
-
const sub = hostname.slice(0, -suffix.length)
|
|
73
|
-
return sub.length > 0 && !sub.includes('.')
|
|
67
|
+
const suffix = pattern.slice(1)
|
|
68
|
+
if (!hostname.endsWith(suffix)) return false
|
|
69
|
+
const sub = hostname.slice(0, -suffix.length)
|
|
70
|
+
return sub.length > 0 && !sub.includes('.')
|
|
74
71
|
}
|
|
75
|
-
return pattern === hostname
|
|
72
|
+
return pattern === hostname
|
|
76
73
|
}
|
|
77
74
|
|
|
78
75
|
/**
|
|
@@ -83,21 +80,21 @@ function matchHostname(pattern: string, hostname: string): boolean {
|
|
|
83
80
|
export function manifestLocalPatterns(
|
|
84
81
|
localPatterns: LocalPattern[] | undefined,
|
|
85
82
|
): { pathname: string; search: string }[] {
|
|
86
|
-
const patterns = localPatterns ?? [{ pathname: undefined, search: '' }]
|
|
83
|
+
const patterns = localPatterns ?? [{ pathname: undefined, search: '' }]
|
|
87
84
|
const entries = patterns.map(pattern => ({
|
|
88
85
|
pathname: compileLocalPathname(pattern.pathname),
|
|
89
86
|
search: pattern.search ?? '',
|
|
90
|
-
}))
|
|
91
|
-
return entries
|
|
87
|
+
}))
|
|
88
|
+
return entries
|
|
92
89
|
}
|
|
93
90
|
|
|
94
91
|
// path-to-regexp compiled source strings Next emits for local patterns.
|
|
95
92
|
function compileLocalPathname(pathname: string | undefined): string {
|
|
96
93
|
if (pathname === undefined || pathname === '**') {
|
|
97
|
-
return '^(?:(?!(?:^|\\/)\\.{1,2}(?:\\/|$))(?:(?:(?!(?:^|\\/)\\.{1,2}(?:\\/|$)).)*?)\\/?)$'
|
|
94
|
+
return '^(?:(?!(?:^|\\/)\\.{1,2}(?:\\/|$))(?:(?:(?!(?:^|\\/)\\.{1,2}(?:\\/|$)).)*?)\\/?)$'
|
|
98
95
|
}
|
|
99
96
|
// '/assets/**' style
|
|
100
|
-
const base = pathname.replace(/\/\*\*$/, '')
|
|
101
|
-
const escaped = base.replace(/[.+?^${}()|[\]\\]/g, '\\$&').replace(/\//g, '\\/')
|
|
102
|
-
return `^(?:${escaped}(?:\\/(?!\\.{1,2}(?:\\/|$))(?:(?:(?!(?:^|\\/)\\.{1,2}(?:\\/|$)).)*?)|$))
|
|
97
|
+
const base = pathname.replace(/\/\*\*$/, '')
|
|
98
|
+
const escaped = base.replace(/[.+?^${}()|[\]\\]/g, '\\$&').replace(/\//g, '\\/')
|
|
99
|
+
return `^(?:${escaped}(?:\\/(?!\\.{1,2}(?:\\/|$))(?:(?:(?!(?:^|\\/)\\.{1,2}(?:\\/|$)).)*?)|$))$`
|
|
103
100
|
}
|