vinext 0.0.30 → 0.0.32
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 +15 -7
- package/dist/build/prerender.d.ts +188 -0
- package/dist/build/prerender.js +675 -0
- package/dist/build/prerender.js.map +1 -0
- package/dist/build/report.d.ts +45 -46
- package/dist/build/report.js +581 -276
- package/dist/build/report.js.map +1 -1
- package/dist/build/run-prerender.d.ts +62 -0
- package/dist/build/run-prerender.js +183 -0
- package/dist/build/run-prerender.js.map +1 -0
- package/dist/build/server-manifest.d.ts +19 -0
- package/dist/build/server-manifest.js +29 -0
- package/dist/build/server-manifest.js.map +1 -0
- package/dist/build/static-export.d.ts +51 -66
- package/dist/build/static-export.js +51 -545
- package/dist/build/static-export.js.map +1 -1
- package/dist/check.d.ts +26 -24
- package/dist/check.js +681 -571
- package/dist/check.js.map +1 -1
- package/dist/cli.d.ts +1 -15
- package/dist/cli.js +432 -491
- package/dist/cli.js.map +1 -1
- package/dist/client/entry.d.ts +1 -2
- package/dist/client/entry.js +49 -62
- package/dist/client/entry.js.map +1 -1
- package/dist/client/validate-module-path.d.ts +4 -1
- package/dist/client/validate-module-path.js +23 -28
- package/dist/client/validate-module-path.js.map +1 -1
- package/dist/client/vinext-next-data.d.ts +15 -20
- package/dist/client/vinext-next-data.js +0 -1
- package/dist/cloudflare/index.d.ts +3 -8
- package/dist/cloudflare/index.js +3 -8
- package/dist/cloudflare/kv-cache-handler.d.ts +95 -105
- package/dist/cloudflare/kv-cache-handler.js +354 -380
- package/dist/cloudflare/kv-cache-handler.js.map +1 -1
- package/dist/cloudflare/tpr.d.ts +36 -34
- package/dist/cloudflare/tpr.js +460 -603
- package/dist/cloudflare/tpr.js.map +1 -1
- package/dist/config/config-matchers.d.ts +31 -40
- package/dist/config/config-matchers.js +727 -936
- package/dist/config/config-matchers.js.map +1 -1
- package/dist/config/dotenv.d.ts +18 -11
- package/dist/config/dotenv.js +79 -84
- package/dist/config/dotenv.js.map +1 -1
- package/dist/config/next-config.d.ts +156 -146
- package/dist/config/next-config.js +376 -464
- package/dist/config/next-config.js.map +1 -1
- package/dist/deploy.d.ts +87 -96
- package/dist/deploy.js +490 -628
- package/dist/deploy.js.map +1 -1
- package/dist/entries/app-browser-entry.d.ts +4 -1
- package/dist/entries/app-browser-entry.js +12 -8
- package/dist/entries/app-browser-entry.js.map +1 -1
- package/dist/entries/app-rsc-entry.d.ts +33 -20
- package/dist/entries/app-rsc-entry.js +444 -212
- package/dist/entries/app-rsc-entry.js.map +1 -1
- package/dist/entries/app-ssr-entry.d.ts +9 -1
- package/dist/entries/app-ssr-entry.js +61 -28
- package/dist/entries/app-ssr-entry.js.map +1 -1
- package/dist/entries/pages-client-entry.d.ts +6 -2
- package/dist/entries/pages-client-entry.js +30 -33
- package/dist/entries/pages-client-entry.js.map +1 -1
- package/dist/entries/pages-entry-helpers.d.ts +5 -1
- package/dist/entries/pages-entry-helpers.js +17 -14
- package/dist/entries/pages-entry-helpers.js.map +1 -1
- package/dist/entries/pages-server-entry.d.ts +6 -2
- package/dist/entries/pages-server-entry.js +86 -114
- package/dist/entries/pages-server-entry.js.map +1 -1
- package/dist/index.d.ts +92 -60
- package/dist/index.js +2151 -3133
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts +40 -37
- package/dist/init.js +201 -258
- package/dist/init.js.map +1 -1
- package/dist/plugins/async-hooks-stub.d.ts +7 -3
- package/dist/plugins/async-hooks-stub.js +39 -42
- package/dist/plugins/async-hooks-stub.js.map +1 -1
- package/dist/plugins/client-reference-dedup.d.ts +7 -3
- package/dist/plugins/client-reference-dedup.js +63 -88
- package/dist/plugins/client-reference-dedup.js.map +1 -1
- package/dist/routing/app-router.d.ts +100 -96
- package/dist/routing/app-router.js +560 -670
- package/dist/routing/app-router.js.map +1 -1
- package/dist/routing/file-matcher.d.ts +18 -15
- package/dist/routing/file-matcher.js +65 -65
- package/dist/routing/file-matcher.js.map +1 -1
- package/dist/routing/pages-router.d.ts +23 -24
- package/dist/routing/pages-router.js +147 -172
- package/dist/routing/pages-router.js.map +1 -1
- package/dist/routing/route-trie.d.ts +23 -20
- package/dist/routing/route-trie.js +131 -151
- package/dist/routing/route-trie.js.map +1 -1
- package/dist/routing/route-validation.d.ts +5 -2
- package/dist/routing/route-validation.js +98 -130
- package/dist/routing/route-validation.js.map +1 -1
- package/dist/routing/utils.d.ts +10 -7
- package/dist/routing/utils.js +75 -111
- package/dist/routing/utils.js.map +1 -1
- package/dist/server/api-handler.d.ts +8 -13
- package/dist/server/api-handler.js +160 -193
- package/dist/server/api-handler.js.map +1 -1
- package/dist/server/app-router-entry.d.ts +6 -16
- package/dist/server/app-router-entry.js +26 -54
- package/dist/server/app-router-entry.js.map +1 -1
- package/dist/server/dev-module-runner.d.ts +11 -64
- package/dist/server/dev-module-runner.js +89 -101
- package/dist/server/dev-module-runner.js.map +1 -1
- package/dist/server/dev-origin-check.d.ts +12 -10
- package/dist/server/dev-origin-check.js +98 -108
- package/dist/server/dev-origin-check.js.map +1 -1
- package/dist/server/dev-server.d.ts +19 -15
- package/dist/server/dev-server.js +543 -871
- package/dist/server/dev-server.js.map +1 -1
- package/dist/server/html.d.ts +4 -1
- package/dist/server/html.js +25 -26
- package/dist/server/html.js.map +1 -1
- package/dist/server/image-optimization.d.ts +31 -28
- package/dist/server/image-optimization.js +181 -210
- package/dist/server/image-optimization.js.map +1 -1
- package/dist/server/instrumentation.d.ts +34 -59
- package/dist/server/instrumentation.js +112 -125
- package/dist/server/instrumentation.js.map +1 -1
- package/dist/server/isr-cache.d.ts +16 -26
- package/dist/server/isr-cache.js +106 -128
- package/dist/server/isr-cache.js.map +1 -1
- package/dist/server/metadata-routes.d.ts +85 -88
- package/dist/server/metadata-routes.js +270 -317
- package/dist/server/metadata-routes.js.map +1 -1
- package/dist/server/middleware-codegen.d.ts +7 -4
- package/dist/server/middleware-codegen.js +61 -61
- package/dist/server/middleware-codegen.js.map +1 -1
- package/dist/server/middleware-request-headers.d.ts +8 -6
- package/dist/server/middleware-request-headers.js +47 -65
- package/dist/server/middleware-request-headers.js.map +1 -1
- package/dist/server/middleware.d.ts +32 -47
- package/dist/server/middleware.js +261 -409
- package/dist/server/middleware.js.map +1 -1
- package/dist/server/normalize-path.d.ts +4 -1
- package/dist/server/normalize-path.js +33 -47
- package/dist/server/normalize-path.js.map +1 -1
- package/dist/server/pages-i18n.d.ts +38 -30
- package/dist/server/pages-i18n.js +112 -139
- package/dist/server/pages-i18n.js.map +1 -1
- package/dist/server/prod-server.d.ts +19 -31
- package/dist/server/prod-server.js +715 -945
- package/dist/server/prod-server.js.map +1 -1
- package/dist/server/request-log.d.ts +18 -12
- package/dist/server/request-log.js +45 -52
- package/dist/server/request-log.js.map +1 -1
- package/dist/server/request-pipeline.d.ts +9 -17
- package/dist/server/request-pipeline.js +133 -184
- package/dist/server/request-pipeline.js.map +1 -1
- package/dist/server/worker-utils.d.ts +4 -1
- package/dist/server/worker-utils.js +31 -37
- package/dist/server/worker-utils.js.map +1 -1
- package/dist/shims/amp.d.ts +5 -2
- package/dist/shims/amp.js +19 -15
- package/dist/shims/amp.js.map +1 -1
- package/dist/shims/app.d.ts +8 -10
- package/dist/shims/app.js +0 -1
- package/dist/shims/cache-runtime.d.ts +20 -45
- package/dist/shims/cache-runtime.js +271 -422
- package/dist/shims/cache-runtime.js.map +1 -1
- package/dist/shims/cache.d.ts +130 -121
- package/dist/shims/cache.js +339 -427
- package/dist/shims/cache.js.map +1 -1
- package/dist/shims/client-only.d.ts +1 -18
- package/dist/shims/client-only.js +0 -17
- package/dist/shims/compat-router.d.ts +6 -1
- package/dist/shims/compat-router.js +23 -19
- package/dist/shims/compat-router.js.map +1 -1
- package/dist/shims/config.d.ts +7 -5
- package/dist/shims/config.js +16 -23
- package/dist/shims/config.js.map +1 -1
- package/dist/shims/constants.d.ts +119 -118
- package/dist/shims/constants.js +159 -164
- package/dist/shims/constants.js.map +1 -1
- package/dist/shims/document.d.ts +20 -16
- package/dist/shims/document.js +41 -22
- package/dist/shims/document.js.map +1 -1
- package/dist/shims/dynamic.d.ts +13 -22
- package/dist/shims/dynamic.js +122 -136
- package/dist/shims/dynamic.js.map +1 -1
- package/dist/shims/error-boundary.d.ts +22 -15
- package/dist/shims/error-boundary.js +81 -79
- package/dist/shims/error-boundary.js.map +1 -1
- package/dist/shims/error.d.ts +11 -12
- package/dist/shims/error.js +35 -39
- package/dist/shims/error.js.map +1 -1
- package/dist/shims/fetch-cache.d.ts +16 -14
- package/dist/shims/fetch-cache.js +439 -645
- package/dist/shims/fetch-cache.js.map +1 -1
- package/dist/shims/font-google-base.d.ts +28 -26
- package/dist/shims/font-google-base.js +238 -325
- package/dist/shims/font-google-base.js.map +1 -1
- package/dist/shims/font-google.d.ts +3 -3
- package/dist/shims/font-google.generated.d.ts +1928 -1924
- package/dist/shims/font-google.generated.js +1928 -2133
- package/dist/shims/font-google.generated.js.map +1 -1
- package/dist/shims/font-google.js +3 -3
- package/dist/shims/font-local.d.ts +28 -26
- package/dist/shims/font-local.js +204 -260
- package/dist/shims/font-local.js.map +1 -1
- package/dist/shims/form.d.ts +13 -27
- package/dist/shims/form.js +128 -180
- package/dist/shims/form.js.map +1 -1
- package/dist/shims/head-state.d.ts +8 -13
- package/dist/shims/head-state.js +25 -42
- package/dist/shims/head-state.js.map +1 -1
- package/dist/shims/head.d.ts +17 -20
- package/dist/shims/head.js +194 -250
- package/dist/shims/head.js.map +1 -1
- package/dist/shims/headers.d.ts +84 -78
- package/dist/shims/headers.js +447 -575
- package/dist/shims/headers.js.map +1 -1
- package/dist/shims/i18n-context.d.ts +16 -20
- package/dist/shims/i18n-context.js +35 -48
- package/dist/shims/i18n-context.js.map +1 -1
- package/dist/shims/i18n-state.d.ts +8 -14
- package/dist/shims/i18n-state.js +34 -42
- package/dist/shims/i18n-state.js.map +1 -1
- package/dist/shims/image-config.d.ts +11 -8
- package/dist/shims/image-config.js +50 -83
- package/dist/shims/image-config.js.map +1 -1
- package/dist/shims/image.d.ts +37 -46
- package/dist/shims/image.js +283 -308
- package/dist/shims/image.js.map +1 -1
- package/dist/shims/internal/api-utils.d.ts +7 -4
- package/dist/shims/internal/api-utils.js +0 -6
- package/dist/shims/internal/app-router-context.d.ts +22 -17
- package/dist/shims/internal/app-router-context.js +17 -13
- package/dist/shims/internal/app-router-context.js.map +1 -1
- package/dist/shims/internal/cookies.d.ts +2 -9
- package/dist/shims/internal/cookies.js +2 -9
- package/dist/shims/internal/parse-cookie-header.d.ts +4 -1
- package/dist/shims/internal/parse-cookie-header.js +29 -29
- package/dist/shims/internal/parse-cookie-header.js.map +1 -1
- package/dist/shims/internal/router-context.d.ts +7 -1
- package/dist/shims/internal/router-context.js +11 -7
- package/dist/shims/internal/router-context.js.map +1 -1
- package/dist/shims/internal/utils.d.ts +40 -37
- package/dist/shims/internal/utils.js +24 -30
- package/dist/shims/internal/utils.js.map +1 -1
- package/dist/shims/internal/work-unit-async-storage.d.ts +6 -10
- package/dist/shims/internal/work-unit-async-storage.js +14 -11
- package/dist/shims/internal/work-unit-async-storage.js.map +1 -1
- package/dist/shims/layout-segment-context.d.ts +11 -14
- package/dist/shims/layout-segment-context.js +24 -23
- package/dist/shims/layout-segment-context.js.map +1 -1
- package/dist/shims/legacy-image.d.ts +39 -46
- package/dist/shims/legacy-image.js +47 -42
- package/dist/shims/legacy-image.js.map +1 -1
- package/dist/shims/link.d.ts +32 -36
- package/dist/shims/link.js +255 -391
- package/dist/shims/link.js.map +1 -1
- package/dist/shims/metadata.d.ts +210 -202
- package/dist/shims/metadata.js +545 -546
- package/dist/shims/metadata.js.map +1 -1
- package/dist/shims/navigation-state.d.ts +10 -18
- package/dist/shims/navigation-state.js +66 -74
- package/dist/shims/navigation-state.js.map +1 -1
- package/dist/shims/navigation.d.ts +59 -63
- package/dist/shims/navigation.js +505 -704
- package/dist/shims/navigation.js.map +1 -1
- package/dist/shims/og.d.ts +2 -20
- package/dist/shims/og.js +2 -19
- package/dist/shims/readonly-url-search-params.d.ts +8 -5
- package/dist/shims/readonly-url-search-params.js +26 -22
- package/dist/shims/readonly-url-search-params.js.map +1 -1
- package/dist/shims/request-context.d.ts +8 -5
- package/dist/shims/request-context.js +50 -60
- package/dist/shims/request-context.js.map +1 -1
- package/dist/shims/request-state-types.d.ts +11 -11
- package/dist/shims/request-state-types.js +0 -1
- package/dist/shims/router-state.d.ts +13 -10
- package/dist/shims/router-state.js +34 -43
- package/dist/shims/router-state.js.map +1 -1
- package/dist/shims/router.d.ts +81 -85
- package/dist/shims/router.js +506 -628
- package/dist/shims/router.js.map +1 -1
- package/dist/shims/script.d.ts +39 -48
- package/dist/shims/script.js +107 -160
- package/dist/shims/script.js.map +1 -1
- package/dist/shims/server-only.d.ts +1 -19
- package/dist/shims/server-only.js +0 -18
- package/dist/shims/server.d.ts +213 -164
- package/dist/shims/server.js +545 -478
- package/dist/shims/server.js.map +1 -1
- package/dist/shims/unified-request-context.d.ts +20 -20
- package/dist/shims/unified-request-context.js +81 -99
- package/dist/shims/unified-request-context.js.map +1 -1
- package/dist/shims/url-safety.d.ts +4 -1
- package/dist/shims/url-safety.js +15 -11
- package/dist/shims/url-safety.js.map +1 -1
- package/dist/shims/url-utils.d.ts +8 -5
- package/dist/shims/url-utils.js +62 -93
- package/dist/shims/url-utils.js.map +1 -1
- package/dist/shims/web-vitals.d.ts +10 -8
- package/dist/shims/web-vitals.js +9 -15
- package/dist/shims/web-vitals.js.map +1 -1
- package/dist/utils/base-path.d.ts +5 -2
- package/dist/utils/base-path.js +21 -19
- package/dist/utils/base-path.js.map +1 -1
- package/dist/utils/domain-locale.d.ts +17 -9
- package/dist/utils/domain-locale.js +36 -56
- package/dist/utils/domain-locale.js.map +1 -1
- package/dist/utils/hash.d.ts +4 -1
- package/dist/utils/hash.js +19 -17
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/manifest-paths.d.ts +6 -3
- package/dist/utils/manifest-paths.js +15 -16
- package/dist/utils/manifest-paths.js.map +1 -1
- package/dist/utils/project.d.ts +13 -11
- package/dist/utils/project.js +169 -216
- package/dist/utils/project.js.map +1 -1
- package/dist/utils/query.d.ts +8 -6
- package/dist/utils/query.js +57 -67
- package/dist/utils/query.js.map +1 -1
- package/package.json +10 -9
- package/dist/build/report.d.ts.map +0 -1
- package/dist/build/static-export.d.ts.map +0 -1
- package/dist/check.d.ts.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/client/entry.d.ts.map +0 -1
- package/dist/client/validate-module-path.d.ts.map +0 -1
- package/dist/client/vinext-next-data.d.ts.map +0 -1
- package/dist/client/vinext-next-data.js.map +0 -1
- package/dist/cloudflare/index.d.ts.map +0 -1
- package/dist/cloudflare/index.js.map +0 -1
- package/dist/cloudflare/kv-cache-handler.d.ts.map +0 -1
- package/dist/cloudflare/tpr.d.ts.map +0 -1
- package/dist/config/config-matchers.d.ts.map +0 -1
- package/dist/config/dotenv.d.ts.map +0 -1
- package/dist/config/next-config.d.ts.map +0 -1
- package/dist/deploy.d.ts.map +0 -1
- package/dist/entries/app-browser-entry.d.ts.map +0 -1
- package/dist/entries/app-rsc-entry.d.ts.map +0 -1
- package/dist/entries/app-ssr-entry.d.ts.map +0 -1
- package/dist/entries/pages-client-entry.d.ts.map +0 -1
- package/dist/entries/pages-entry-helpers.d.ts.map +0 -1
- package/dist/entries/pages-server-entry.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/init.d.ts.map +0 -1
- package/dist/plugins/async-hooks-stub.d.ts.map +0 -1
- package/dist/plugins/client-reference-dedup.d.ts.map +0 -1
- package/dist/routing/app-router.d.ts.map +0 -1
- package/dist/routing/file-matcher.d.ts.map +0 -1
- package/dist/routing/pages-router.d.ts.map +0 -1
- package/dist/routing/route-trie.d.ts.map +0 -1
- package/dist/routing/route-validation.d.ts.map +0 -1
- package/dist/routing/utils.d.ts.map +0 -1
- package/dist/server/api-handler.d.ts.map +0 -1
- package/dist/server/app-router-entry.d.ts.map +0 -1
- package/dist/server/dev-module-runner.d.ts.map +0 -1
- package/dist/server/dev-origin-check.d.ts.map +0 -1
- package/dist/server/dev-server.d.ts.map +0 -1
- package/dist/server/html.d.ts.map +0 -1
- package/dist/server/image-optimization.d.ts.map +0 -1
- package/dist/server/instrumentation.d.ts.map +0 -1
- package/dist/server/isr-cache.d.ts.map +0 -1
- package/dist/server/metadata-routes.d.ts.map +0 -1
- package/dist/server/middleware-codegen.d.ts.map +0 -1
- package/dist/server/middleware-request-headers.d.ts.map +0 -1
- package/dist/server/middleware.d.ts.map +0 -1
- package/dist/server/normalize-path.d.ts.map +0 -1
- package/dist/server/pages-i18n.d.ts.map +0 -1
- package/dist/server/prod-server.d.ts.map +0 -1
- package/dist/server/request-log.d.ts.map +0 -1
- package/dist/server/request-pipeline.d.ts.map +0 -1
- package/dist/server/worker-utils.d.ts.map +0 -1
- package/dist/shims/amp.d.ts.map +0 -1
- package/dist/shims/app.d.ts.map +0 -1
- package/dist/shims/app.js.map +0 -1
- package/dist/shims/cache-runtime.d.ts.map +0 -1
- package/dist/shims/cache.d.ts.map +0 -1
- package/dist/shims/client-only.d.ts.map +0 -1
- package/dist/shims/client-only.js.map +0 -1
- package/dist/shims/compat-router.d.ts.map +0 -1
- package/dist/shims/config.d.ts.map +0 -1
- package/dist/shims/constants.d.ts.map +0 -1
- package/dist/shims/document.d.ts.map +0 -1
- package/dist/shims/dynamic.d.ts.map +0 -1
- package/dist/shims/error-boundary.d.ts.map +0 -1
- package/dist/shims/error.d.ts.map +0 -1
- package/dist/shims/fetch-cache.d.ts.map +0 -1
- package/dist/shims/font-google-base.d.ts.map +0 -1
- package/dist/shims/font-google.d.ts.map +0 -1
- package/dist/shims/font-google.generated.d.ts.map +0 -1
- package/dist/shims/font-google.js.map +0 -1
- package/dist/shims/font-local.d.ts.map +0 -1
- package/dist/shims/form.d.ts.map +0 -1
- package/dist/shims/head-state.d.ts.map +0 -1
- package/dist/shims/head.d.ts.map +0 -1
- package/dist/shims/headers.d.ts.map +0 -1
- package/dist/shims/i18n-context.d.ts.map +0 -1
- package/dist/shims/i18n-state.d.ts.map +0 -1
- package/dist/shims/image-config.d.ts.map +0 -1
- package/dist/shims/image.d.ts.map +0 -1
- package/dist/shims/internal/api-utils.d.ts.map +0 -1
- package/dist/shims/internal/api-utils.js.map +0 -1
- package/dist/shims/internal/app-router-context.d.ts.map +0 -1
- package/dist/shims/internal/cookies.d.ts.map +0 -1
- package/dist/shims/internal/cookies.js.map +0 -1
- package/dist/shims/internal/parse-cookie-header.d.ts.map +0 -1
- package/dist/shims/internal/router-context.d.ts.map +0 -1
- package/dist/shims/internal/utils.d.ts.map +0 -1
- package/dist/shims/internal/work-unit-async-storage.d.ts.map +0 -1
- package/dist/shims/layout-segment-context.d.ts.map +0 -1
- package/dist/shims/legacy-image.d.ts.map +0 -1
- package/dist/shims/link.d.ts.map +0 -1
- package/dist/shims/metadata.d.ts.map +0 -1
- package/dist/shims/navigation-state.d.ts.map +0 -1
- package/dist/shims/navigation.d.ts.map +0 -1
- package/dist/shims/og.d.ts.map +0 -1
- package/dist/shims/og.js.map +0 -1
- package/dist/shims/readonly-url-search-params.d.ts.map +0 -1
- package/dist/shims/request-context.d.ts.map +0 -1
- package/dist/shims/request-state-types.d.ts.map +0 -1
- package/dist/shims/request-state-types.js.map +0 -1
- package/dist/shims/router-state.d.ts.map +0 -1
- package/dist/shims/router.d.ts.map +0 -1
- package/dist/shims/script.d.ts.map +0 -1
- package/dist/shims/server-only.d.ts.map +0 -1
- package/dist/shims/server-only.js.map +0 -1
- package/dist/shims/server.d.ts.map +0 -1
- package/dist/shims/unified-request-context.d.ts.map +0 -1
- package/dist/shims/url-safety.d.ts.map +0 -1
- package/dist/shims/url-utils.d.ts.map +0 -1
- package/dist/shims/web-vitals.d.ts.map +0 -1
- package/dist/utils/base-path.d.ts.map +0 -1
- package/dist/utils/domain-locale.d.ts.map +0 -1
- package/dist/utils/hash.d.ts.map +0 -1
- package/dist/utils/manifest-paths.d.ts.map +0 -1
- package/dist/utils/project.d.ts.map +0 -1
- package/dist/utils/query.d.ts.map +0 -1
|
@@ -1,441 +1,293 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
*
|
|
7
|
-
* In Next.js 16, proxy.ts replaces middleware.ts:
|
|
8
|
-
* - proxy.ts: default export OR named `proxy` function, runs on Node.js runtime
|
|
9
|
-
* - middleware.ts: deprecated but still supported for Edge runtime use cases
|
|
10
|
-
*
|
|
11
|
-
* The proxy/middleware receives a NextRequest and can:
|
|
12
|
-
* - Return NextResponse.next() to continue to the route
|
|
13
|
-
* - Return NextResponse.redirect() to redirect
|
|
14
|
-
* - Return NextResponse.rewrite() to rewrite the URL
|
|
15
|
-
* - Set/modify headers and cookies
|
|
16
|
-
* - Return a Response directly (e.g., for auth guards)
|
|
17
|
-
*
|
|
18
|
-
* Supports the `config.matcher` export for path filtering.
|
|
19
|
-
*/
|
|
1
|
+
import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
|
|
2
|
+
import { shouldKeepMiddlewareHeader } from "./middleware-request-headers.js";
|
|
3
|
+
import { checkHasConditions, requestContextFromRequest, safeRegExp } from "../config/config-matchers.js";
|
|
4
|
+
import { NextFetchEvent, NextRequest } from "../shims/server.js";
|
|
5
|
+
import { normalizePath } from "./normalize-path.js";
|
|
20
6
|
import fs from "node:fs";
|
|
21
7
|
import path from "node:path";
|
|
22
|
-
|
|
23
|
-
import { NextRequest, NextFetchEvent } from "../shims/server.js";
|
|
24
|
-
import { normalizePath } from "./normalize-path.js";
|
|
25
|
-
import { shouldKeepMiddlewareHeader } from "./middleware-request-headers.js";
|
|
26
|
-
import { normalizePathnameForRouteMatchStrict } from "../routing/utils.js";
|
|
8
|
+
//#region src/server/middleware.ts
|
|
27
9
|
/**
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
return base === "proxy";
|
|
10
|
+
* Determine whether a middleware/proxy file path refers to a proxy file.
|
|
11
|
+
* proxy.ts files accept `proxy` or `default` exports.
|
|
12
|
+
* middleware.ts files accept `middleware` or `default` exports.
|
|
13
|
+
*
|
|
14
|
+
* Matches Next.js behavior where each file type only accepts its own
|
|
15
|
+
* named export or a default export:
|
|
16
|
+
* https://github.com/vercel/next.js/blob/canary/packages/next/src/build/templates/middleware.ts
|
|
17
|
+
*/
|
|
18
|
+
function isProxyFile(filePath) {
|
|
19
|
+
return path.basename(filePath).replace(/\.\w+$/, "") === "proxy";
|
|
39
20
|
}
|
|
40
21
|
/**
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
22
|
+
* Resolve the middleware/proxy handler function from a module's exports.
|
|
23
|
+
* Matches Next.js behavior: for proxy files, check `proxy` then `default`;
|
|
24
|
+
* for middleware files, check `middleware` then `default`.
|
|
25
|
+
*
|
|
26
|
+
* Throws if the file exists but doesn't export a valid function, matching
|
|
27
|
+
* Next.js's ProxyMissingExportError behavior.
|
|
28
|
+
*
|
|
29
|
+
* @see https://github.com/vercel/next.js/blob/canary/packages/next/src/build/templates/middleware.ts
|
|
30
|
+
* @see https://github.com/vercel/next.js/blob/canary/test/e2e/app-dir/proxy-missing-export/proxy-missing-export.test.ts
|
|
31
|
+
*/
|
|
32
|
+
function resolveMiddlewareHandler(mod, filePath) {
|
|
33
|
+
const isProxy = isProxyFile(filePath);
|
|
34
|
+
const handler = isProxy ? mod.proxy ?? mod.default : mod.middleware ?? mod.default;
|
|
35
|
+
if (typeof handler !== "function") {
|
|
36
|
+
const fileType = isProxy ? "Proxy" : "Middleware";
|
|
37
|
+
const expectedExport = isProxy ? "proxy" : "middleware";
|
|
38
|
+
throw new Error(`The ${fileType} file "${filePath}" must export a function named \`${expectedExport}\` or a \`default\` function.`);
|
|
39
|
+
}
|
|
40
|
+
return handler;
|
|
60
41
|
}
|
|
42
|
+
const MIDDLEWARE_LOCATIONS = ["", "src/"];
|
|
61
43
|
/**
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
"src/middleware.tsx",
|
|
80
|
-
"src/middleware.js",
|
|
81
|
-
"src/middleware.mjs",
|
|
82
|
-
];
|
|
83
|
-
/**
|
|
84
|
-
* Find the proxy or middleware file in the project root.
|
|
85
|
-
* Checks for proxy.ts (Next.js 16) first, then falls back to middleware.ts.
|
|
86
|
-
* If middleware.ts is found, logs a deprecation warning.
|
|
87
|
-
*/
|
|
88
|
-
export function findMiddlewareFile(root) {
|
|
89
|
-
// Check proxy.ts first (Next.js 16 replacement for middleware.ts)
|
|
90
|
-
for (const file of PROXY_FILES) {
|
|
91
|
-
const fullPath = path.join(root, file);
|
|
92
|
-
if (fs.existsSync(fullPath)) {
|
|
93
|
-
return fullPath;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
// Fall back to middleware.ts (deprecated in Next.js 16)
|
|
97
|
-
for (const file of MIDDLEWARE_FILES) {
|
|
98
|
-
const fullPath = path.join(root, file);
|
|
99
|
-
if (fs.existsSync(fullPath)) {
|
|
100
|
-
console.warn("[vinext] middleware.ts is deprecated in Next.js 16. " +
|
|
101
|
-
"Rename to proxy.ts and export a default or named proxy function.");
|
|
102
|
-
return fullPath;
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
return null;
|
|
44
|
+
* Find the proxy or middleware file in the project root.
|
|
45
|
+
* Checks for proxy.ts (Next.js 16) first, then falls back to middleware.ts.
|
|
46
|
+
* If middleware.ts is found, logs a deprecation warning.
|
|
47
|
+
*/
|
|
48
|
+
function findMiddlewareFile(root, fileMatcher) {
|
|
49
|
+
for (const dir of MIDDLEWARE_LOCATIONS) for (const ext of fileMatcher.dottedExtensions) {
|
|
50
|
+
const fullPath = path.join(root, dir, `proxy${ext}`);
|
|
51
|
+
if (fs.existsSync(fullPath)) return fullPath;
|
|
52
|
+
}
|
|
53
|
+
for (const dir of MIDDLEWARE_LOCATIONS) for (const ext of fileMatcher.dottedExtensions) {
|
|
54
|
+
const fullPath = path.join(root, dir, `middleware${ext}`);
|
|
55
|
+
if (fs.existsSync(fullPath)) {
|
|
56
|
+
console.warn("[vinext] middleware.ts is deprecated in Next.js 16. Rename to proxy.ts and export a default or named proxy function.");
|
|
57
|
+
return fullPath;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return null;
|
|
106
61
|
}
|
|
107
62
|
const EMPTY_MIDDLEWARE_REQUEST_CONTEXT = {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
63
|
+
headers: new Headers(),
|
|
64
|
+
cookies: {},
|
|
65
|
+
query: new URLSearchParams(),
|
|
66
|
+
host: ""
|
|
112
67
|
};
|
|
113
68
|
/**
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
if (matchMatcherPattern(pathname, m, i18nConfig)) {
|
|
136
|
-
return true;
|
|
137
|
-
}
|
|
138
|
-
continue;
|
|
139
|
-
}
|
|
140
|
-
if (isValidMiddlewareMatcherObject(m)) {
|
|
141
|
-
if (!matchObjectMatcher(pathname, m, i18nConfig)) {
|
|
142
|
-
continue;
|
|
143
|
-
}
|
|
144
|
-
if (!checkHasConditions(m.has, m.missing, requestContext)) {
|
|
145
|
-
continue;
|
|
146
|
-
}
|
|
147
|
-
return true;
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
return false;
|
|
69
|
+
* Check if a pathname matches the middleware matcher config.
|
|
70
|
+
* If no matcher is configured, middleware runs on all paths
|
|
71
|
+
* except static files and internal Next.js paths.
|
|
72
|
+
*/
|
|
73
|
+
function matchesMiddleware(pathname, matcher, request, i18nConfig) {
|
|
74
|
+
if (!matcher) return true;
|
|
75
|
+
if (typeof matcher === "string") return matchMatcherPattern(pathname, matcher, i18nConfig);
|
|
76
|
+
if (!Array.isArray(matcher)) return false;
|
|
77
|
+
const requestContext = request ? requestContextFromRequest(request) : EMPTY_MIDDLEWARE_REQUEST_CONTEXT;
|
|
78
|
+
for (const m of matcher) {
|
|
79
|
+
if (typeof m === "string") {
|
|
80
|
+
if (matchMatcherPattern(pathname, m, i18nConfig)) return true;
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (isValidMiddlewareMatcherObject(m)) {
|
|
84
|
+
if (!matchObjectMatcher(pathname, m, i18nConfig)) continue;
|
|
85
|
+
if (!checkHasConditions(m.has, m.missing, requestContext)) continue;
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
151
90
|
}
|
|
152
|
-
// Keep this in sync with __isValidMiddlewareMatcherObject in middleware-codegen.ts.
|
|
153
91
|
function isValidMiddlewareMatcherObject(value) {
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
if ("locale" in matcher && matcher.locale !== undefined && matcher.locale !== false)
|
|
165
|
-
return false;
|
|
166
|
-
if ("has" in matcher && matcher.has !== undefined && !Array.isArray(matcher.has))
|
|
167
|
-
return false;
|
|
168
|
-
if ("missing" in matcher && matcher.missing !== undefined && !Array.isArray(matcher.missing)) {
|
|
169
|
-
return false;
|
|
170
|
-
}
|
|
171
|
-
return true;
|
|
92
|
+
if (!value || typeof value !== "object" || Array.isArray(value)) return false;
|
|
93
|
+
const matcher = value;
|
|
94
|
+
if (typeof matcher.source !== "string") return false;
|
|
95
|
+
for (const key of Object.keys(matcher)) if (key !== "source" && key !== "locale" && key !== "has" && key !== "missing") return false;
|
|
96
|
+
if ("locale" in matcher && matcher.locale !== void 0 && matcher.locale !== false) return false;
|
|
97
|
+
if ("has" in matcher && matcher.has !== void 0 && !Array.isArray(matcher.has)) return false;
|
|
98
|
+
if ("missing" in matcher && matcher.missing !== void 0 && !Array.isArray(matcher.missing)) return false;
|
|
99
|
+
return true;
|
|
172
100
|
}
|
|
173
101
|
function matchMatcherPattern(pathname, pattern, i18nConfig) {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
const localeStrippedPathname = stripLocalePrefix(pathname, i18nConfig);
|
|
177
|
-
return matchPattern(localeStrippedPathname ?? pathname, pattern);
|
|
102
|
+
if (!i18nConfig) return matchPattern(pathname, pattern);
|
|
103
|
+
return matchPattern(stripLocalePrefix(pathname, i18nConfig) ?? pathname, pattern);
|
|
178
104
|
}
|
|
179
105
|
function matchObjectMatcher(pathname, matcher, i18nConfig) {
|
|
180
|
-
|
|
181
|
-
? matchPattern(pathname, matcher.source)
|
|
182
|
-
: matchMatcherPattern(pathname, matcher.source, i18nConfig);
|
|
106
|
+
return matcher.locale === false ? matchPattern(pathname, matcher.source) : matchMatcherPattern(pathname, matcher.source, i18nConfig);
|
|
183
107
|
}
|
|
184
108
|
function stripLocalePrefix(pathname, i18nConfig) {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
}
|
|
192
|
-
const stripped = "/" + segments.slice(2).join("/");
|
|
193
|
-
return stripped === "/" ? "/" : stripped.replace(/\/+$/, "") || "/";
|
|
109
|
+
if (pathname === "/") return null;
|
|
110
|
+
const segments = pathname.split("/");
|
|
111
|
+
const firstSegment = segments[1];
|
|
112
|
+
if (!firstSegment || !i18nConfig.locales.includes(firstSegment)) return null;
|
|
113
|
+
const stripped = "/" + segments.slice(2).join("/");
|
|
114
|
+
return stripped === "/" ? "/" : stripped.replace(/\/+$/, "") || "/";
|
|
194
115
|
}
|
|
195
116
|
/**
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
const _mwPatternCache = new Map();
|
|
117
|
+
* Cache for compiled middleware matcher regexes.
|
|
118
|
+
*
|
|
119
|
+
* Middleware matcher patterns are static — they come from `config.matcher`
|
|
120
|
+
* in the user's middleware/proxy file and never change at runtime. Without
|
|
121
|
+
* caching, every request re-runs the full tokeniser + isSafeRegex scan +
|
|
122
|
+
* new RegExp() for every matcher pattern. This is the same problem that
|
|
123
|
+
* config-matchers.ts solved with `_compiledPatternCache` (which eliminated
|
|
124
|
+
* ~2.4s of CPU self-time in profiling).
|
|
125
|
+
*
|
|
126
|
+
* Value is `null` when safeRegExp rejected the pattern (ReDoS risk), so we
|
|
127
|
+
* skip it on subsequent requests without re-running the scanner.
|
|
128
|
+
*/
|
|
129
|
+
const _mwPatternCache = /* @__PURE__ */ new Map();
|
|
209
130
|
/**
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
return cached.test(pathname);
|
|
131
|
+
* Match a single pattern against a pathname.
|
|
132
|
+
* Supports Next.js matcher patterns:
|
|
133
|
+
* /about -> exact match
|
|
134
|
+
* /dashboard/:path* -> prefix match with params
|
|
135
|
+
* /api/:path+ -> one or more segments
|
|
136
|
+
* /((?!api|_next).*) -> regex patterns
|
|
137
|
+
*/
|
|
138
|
+
function matchPattern(pathname, pattern) {
|
|
139
|
+
let cached = _mwPatternCache.get(pattern);
|
|
140
|
+
if (cached === void 0) {
|
|
141
|
+
cached = compileMatcherPattern(pattern);
|
|
142
|
+
_mwPatternCache.set(pattern, cached);
|
|
143
|
+
}
|
|
144
|
+
if (cached === null) return pathname === pattern;
|
|
145
|
+
return cached.test(pathname);
|
|
226
146
|
}
|
|
227
147
|
/**
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
148
|
+
* Extract a parenthesized constraint from `str` starting at `re.lastIndex`.
|
|
149
|
+
* Returns the constraint string (without parens) and advances `re.lastIndex`
|
|
150
|
+
* past the closing `)`, or returns null if the next char is not `(`.
|
|
151
|
+
*/
|
|
232
152
|
function extractConstraint(str, re) {
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
if (depth !== 0)
|
|
246
|
-
return null;
|
|
247
|
-
re.lastIndex = i;
|
|
248
|
-
return str.slice(start, i - 1);
|
|
153
|
+
if (str[re.lastIndex] !== "(") return null;
|
|
154
|
+
const start = re.lastIndex + 1;
|
|
155
|
+
let depth = 1;
|
|
156
|
+
let i = start;
|
|
157
|
+
while (i < str.length && depth > 0) {
|
|
158
|
+
if (str[i] === "(") depth++;
|
|
159
|
+
else if (str[i] === ")") depth--;
|
|
160
|
+
i++;
|
|
161
|
+
}
|
|
162
|
+
if (depth !== 0) return null;
|
|
163
|
+
re.lastIndex = i;
|
|
164
|
+
return str.slice(start, i - 1);
|
|
249
165
|
}
|
|
250
166
|
/**
|
|
251
|
-
|
|
252
|
-
|
|
167
|
+
* Compile a matcher pattern into a RegExp (or null if rejected by safeRegExp).
|
|
168
|
+
*/
|
|
253
169
|
function compileMatcherPattern(pattern) {
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
const constraint = hasConstraints ? extractConstraint(pattern, tokenRe) : null;
|
|
277
|
-
regexStr += constraint !== null ? `(?:/(${constraint}))` : "(?:/.+)";
|
|
278
|
-
}
|
|
279
|
-
else if (tok[3] !== undefined) {
|
|
280
|
-
// :param — check for inline constraint (e.g. :id(\d+)) and optional ? marker
|
|
281
|
-
const constraint = hasConstraints ? extractConstraint(pattern, tokenRe) : null;
|
|
282
|
-
const isOptional = pattern[tokenRe.lastIndex] === "?";
|
|
283
|
-
if (isOptional)
|
|
284
|
-
tokenRe.lastIndex += 1;
|
|
285
|
-
const group = constraint !== null ? `(${constraint})` : "([^/]+)";
|
|
286
|
-
if (isOptional && regexStr.endsWith("/")) {
|
|
287
|
-
// Make the preceding / and the param group optional together:
|
|
288
|
-
// /:locale(en|es|fr)?/about → (?:/(en|es|fr))?/about
|
|
289
|
-
regexStr = regexStr.slice(0, -1) + `(?:/${group})?`;
|
|
290
|
-
}
|
|
291
|
-
else if (isOptional) {
|
|
292
|
-
regexStr += `${group}?`;
|
|
293
|
-
}
|
|
294
|
-
else {
|
|
295
|
-
regexStr += group;
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
else if (tok[0] === ".") {
|
|
299
|
-
regexStr += "\\.";
|
|
300
|
-
}
|
|
301
|
-
else {
|
|
302
|
-
regexStr += tok[0];
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
return safeRegExp("^" + regexStr + "$");
|
|
170
|
+
const hasConstraints = /:[\w-]+[*+]?\(/.test(pattern);
|
|
171
|
+
if (!hasConstraints && (pattern.includes("(") || pattern.includes("\\"))) return safeRegExp("^" + pattern + "$");
|
|
172
|
+
let regexStr = "";
|
|
173
|
+
const tokenRe = /\/:([\w-]+)\*|\/:([\w-]+)\+|:([\w-]+)|[.]|[^/:.]+|./g;
|
|
174
|
+
let tok;
|
|
175
|
+
while ((tok = tokenRe.exec(pattern)) !== null) if (tok[1] !== void 0) {
|
|
176
|
+
const constraint = hasConstraints ? extractConstraint(pattern, tokenRe) : null;
|
|
177
|
+
regexStr += constraint !== null ? `(?:/(${constraint}))?` : "(?:/.*)?";
|
|
178
|
+
} else if (tok[2] !== void 0) {
|
|
179
|
+
const constraint = hasConstraints ? extractConstraint(pattern, tokenRe) : null;
|
|
180
|
+
regexStr += constraint !== null ? `(?:/(${constraint}))` : "(?:/.+)";
|
|
181
|
+
} else if (tok[3] !== void 0) {
|
|
182
|
+
const constraint = hasConstraints ? extractConstraint(pattern, tokenRe) : null;
|
|
183
|
+
const isOptional = pattern[tokenRe.lastIndex] === "?";
|
|
184
|
+
if (isOptional) tokenRe.lastIndex += 1;
|
|
185
|
+
const group = constraint !== null ? `(${constraint})` : "([^/]+)";
|
|
186
|
+
if (isOptional && regexStr.endsWith("/")) regexStr = regexStr.slice(0, -1) + `(?:/${group})?`;
|
|
187
|
+
else if (isOptional) regexStr += `${group}?`;
|
|
188
|
+
else regexStr += group;
|
|
189
|
+
} else if (tok[0] === ".") regexStr += "\\.";
|
|
190
|
+
else regexStr += tok[0];
|
|
191
|
+
return safeRegExp("^" + regexStr + "$");
|
|
306
192
|
}
|
|
307
193
|
/**
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
}
|
|
404
|
-
return {
|
|
405
|
-
continue: false,
|
|
406
|
-
redirectUrl: location,
|
|
407
|
-
redirectStatus: response.status,
|
|
408
|
-
responseHeaders,
|
|
409
|
-
};
|
|
410
|
-
}
|
|
411
|
-
}
|
|
412
|
-
// Check for rewrite (x-middleware-rewrite header)
|
|
413
|
-
const rewriteUrl = response.headers.get("x-middleware-rewrite");
|
|
414
|
-
if (rewriteUrl) {
|
|
415
|
-
// Continue to the route but with a rewritten URL.
|
|
416
|
-
const responseHeaders = new Headers();
|
|
417
|
-
for (const [key, value] of response.headers) {
|
|
418
|
-
if (!key.startsWith("x-middleware-") || shouldKeepMiddlewareHeader(key)) {
|
|
419
|
-
responseHeaders.append(key, value);
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
// Parse the rewrite URL — may be absolute or relative
|
|
423
|
-
let rewritePath;
|
|
424
|
-
try {
|
|
425
|
-
const rewriteParsed = new URL(rewriteUrl, request.url);
|
|
426
|
-
rewritePath = rewriteParsed.pathname + rewriteParsed.search;
|
|
427
|
-
}
|
|
428
|
-
catch {
|
|
429
|
-
rewritePath = rewriteUrl;
|
|
430
|
-
}
|
|
431
|
-
return {
|
|
432
|
-
continue: true,
|
|
433
|
-
rewriteUrl: rewritePath,
|
|
434
|
-
rewriteStatus: response.status !== 200 ? response.status : undefined,
|
|
435
|
-
responseHeaders,
|
|
436
|
-
};
|
|
437
|
-
}
|
|
438
|
-
// Middleware returned a full Response (e.g., blocking, custom body)
|
|
439
|
-
return { continue: false, response };
|
|
194
|
+
* Load and execute middleware for a given request.
|
|
195
|
+
*
|
|
196
|
+
* @param runner - A ModuleRunner used to load the middleware module.
|
|
197
|
+
* Must be a long-lived instance created once (e.g. in configureServer) via
|
|
198
|
+
* createDirectRunner() — NOT recreated per request. Using server.ssrLoadModule
|
|
199
|
+
* directly crashes with `outsideEmitter` when @cloudflare/vite-plugin is
|
|
200
|
+
* present because SSRCompatModuleRunner reads environment.hot.api synchronously.
|
|
201
|
+
* @param middlewarePath - Absolute path to the middleware file
|
|
202
|
+
* @param request - The incoming Request object
|
|
203
|
+
* @returns Middleware result describing what action to take
|
|
204
|
+
*/
|
|
205
|
+
async function runMiddleware(runner, middlewarePath, request, i18nConfig, basePath) {
|
|
206
|
+
const mod = await runner.import(middlewarePath);
|
|
207
|
+
const middlewareFn = resolveMiddlewareHandler(mod, middlewarePath);
|
|
208
|
+
const matcher = mod.config?.matcher;
|
|
209
|
+
const url = new URL(request.url);
|
|
210
|
+
let decodedPathname;
|
|
211
|
+
try {
|
|
212
|
+
decodedPathname = normalizePathnameForRouteMatchStrict(url.pathname);
|
|
213
|
+
} catch {
|
|
214
|
+
return {
|
|
215
|
+
continue: false,
|
|
216
|
+
response: new Response("Bad Request", { status: 400 })
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
const normalizedPathname = normalizePath(decodedPathname);
|
|
220
|
+
if (!matchesMiddleware(normalizedPathname, matcher, request, i18nConfig)) return { continue: true };
|
|
221
|
+
let mwRequest = request;
|
|
222
|
+
if (normalizedPathname !== url.pathname) {
|
|
223
|
+
const mwUrl = new URL(url);
|
|
224
|
+
mwUrl.pathname = normalizedPathname;
|
|
225
|
+
mwRequest = new Request(mwUrl, request);
|
|
226
|
+
}
|
|
227
|
+
const nextConfig = basePath || i18nConfig ? {
|
|
228
|
+
basePath: basePath ?? "",
|
|
229
|
+
i18n: i18nConfig ?? void 0
|
|
230
|
+
} : void 0;
|
|
231
|
+
const nextRequest = mwRequest instanceof NextRequest ? mwRequest : new NextRequest(mwRequest, nextConfig ? { nextConfig } : void 0);
|
|
232
|
+
const fetchEvent = new NextFetchEvent({ page: normalizedPathname });
|
|
233
|
+
let response;
|
|
234
|
+
try {
|
|
235
|
+
response = await middlewareFn(nextRequest, fetchEvent);
|
|
236
|
+
} catch (e) {
|
|
237
|
+
console.error("[vinext] Middleware error:", e);
|
|
238
|
+
const message = process.env.NODE_ENV === "production" ? "Internal Server Error" : "Middleware Error: " + (e?.message ?? String(e));
|
|
239
|
+
return {
|
|
240
|
+
continue: false,
|
|
241
|
+
response: new Response(message, { status: 500 })
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
fetchEvent.drainWaitUntil();
|
|
245
|
+
if (!response) return { continue: true };
|
|
246
|
+
if (response.headers.get("x-middleware-next") === "1") {
|
|
247
|
+
const responseHeaders = new Headers();
|
|
248
|
+
for (const [key, value] of response.headers) if (!key.startsWith("x-middleware-") || shouldKeepMiddlewareHeader(key)) responseHeaders.append(key, value);
|
|
249
|
+
return {
|
|
250
|
+
continue: true,
|
|
251
|
+
responseHeaders
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
if (response.status >= 300 && response.status < 400) {
|
|
255
|
+
const location = response.headers.get("Location") ?? response.headers.get("location");
|
|
256
|
+
if (location) {
|
|
257
|
+
const responseHeaders = new Headers();
|
|
258
|
+
for (const [key, value] of response.headers) if (!key.startsWith("x-middleware-") && key.toLowerCase() !== "location") responseHeaders.append(key, value);
|
|
259
|
+
return {
|
|
260
|
+
continue: false,
|
|
261
|
+
redirectUrl: location,
|
|
262
|
+
redirectStatus: response.status,
|
|
263
|
+
responseHeaders
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
const rewriteUrl = response.headers.get("x-middleware-rewrite");
|
|
268
|
+
if (rewriteUrl) {
|
|
269
|
+
const responseHeaders = new Headers();
|
|
270
|
+
for (const [key, value] of response.headers) if (!key.startsWith("x-middleware-") || shouldKeepMiddlewareHeader(key)) responseHeaders.append(key, value);
|
|
271
|
+
let rewritePath;
|
|
272
|
+
try {
|
|
273
|
+
const rewriteParsed = new URL(rewriteUrl, request.url);
|
|
274
|
+
rewritePath = rewriteParsed.pathname + rewriteParsed.search;
|
|
275
|
+
} catch {
|
|
276
|
+
rewritePath = rewriteUrl;
|
|
277
|
+
}
|
|
278
|
+
return {
|
|
279
|
+
continue: true,
|
|
280
|
+
rewriteUrl: rewritePath,
|
|
281
|
+
rewriteStatus: response.status !== 200 ? response.status : void 0,
|
|
282
|
+
responseHeaders
|
|
283
|
+
};
|
|
284
|
+
}
|
|
285
|
+
return {
|
|
286
|
+
continue: false,
|
|
287
|
+
response
|
|
288
|
+
};
|
|
440
289
|
}
|
|
290
|
+
//#endregion
|
|
291
|
+
export { findMiddlewareFile, isProxyFile, matchPattern, matchesMiddleware, resolveMiddlewareHandler, runMiddleware };
|
|
292
|
+
|
|
441
293
|
//# sourceMappingURL=middleware.js.map
|