next 15.2.0-canary.28 → 15.2.0-canary.29
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.
Potentially problematic release.
This version of next might be problematic. Click here for more details.
- package/dist/bin/next +1 -1
- package/dist/build/index.js +2 -2
- package/dist/build/swc/index.js +1 -1
- package/dist/build/webpack/plugins/define-env-plugin.js +2 -1
- package/dist/build/webpack/plugins/define-env-plugin.js.map +1 -1
- package/dist/build/webpack/plugins/slow-module-detection-plugin.d.ts +12 -0
- package/dist/build/webpack/plugins/slow-module-detection-plugin.js +187 -0
- package/dist/build/webpack/plugins/slow-module-detection-plugin.js.map +1 -0
- package/dist/build/webpack-config.js +19 -4
- package/dist/build/webpack-config.js.map +1 -1
- package/dist/client/app-bootstrap.js +1 -1
- package/dist/client/components/errors/stitched-error.js +3 -3
- package/dist/client/components/errors/stitched-error.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/app/react-dev-overlay.js +3 -3
- package/dist/client/components/react-dev-overlay/_experimental/app/react-dev-overlay.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.d.ts +2 -2
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.js +273 -144
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.stories.js +4 -4
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.stories.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/internal/next-logo.d.ts +3 -3
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/internal/next-logo.js +9 -14
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/internal/next-logo.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/styles.js +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/styles.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay/error-overlay.js +1 -3
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay/error-overlay.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-feedback/error-feedback.d.ts +2 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-feedback/error-feedback.js +2 -2
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-feedback/error-feedback.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-overlay-footer.js +2 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-overlay-footer.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.d.ts +1 -4
- package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.js +2 -3
- package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.stories.js +111 -86
- package/dist/client/components/react-dev-overlay/_experimental/internal/container/errors.stories.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/use-error-hook.d.ts +4 -3
- package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/use-error-hook.js +8 -2
- package/dist/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/use-error-hook.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/internal/helpers/merge-refs.d.ts +14 -0
- package/dist/client/components/react-dev-overlay/_experimental/internal/helpers/merge-refs.js +49 -0
- package/dist/client/components/react-dev-overlay/_experimental/internal/helpers/merge-refs.js.map +1 -0
- package/dist/client/components/react-dev-overlay/_experimental/internal/styles/base.js +8 -2
- package/dist/client/components/react-dev-overlay/_experimental/internal/styles/base.js.map +1 -1
- package/dist/client/components/react-dev-overlay/_experimental/pages/react-dev-overlay.js +3 -3
- package/dist/client/components/react-dev-overlay/_experimental/pages/react-dev-overlay.js.map +1 -1
- package/dist/client/components/react-dev-overlay/internal/styles/Base.js +8 -2
- package/dist/client/components/react-dev-overlay/internal/styles/Base.js.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/compiled/next-server/app-page-experimental.runtime.dev.js +2 -2
- package/dist/compiled/next-server/app-page-experimental.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/app-page.runtime.dev.js +2 -2
- package/dist/compiled/next-server/app-page.runtime.dev.js.map +1 -1
- package/dist/compiled/next-server/pages-turbo.runtime.prod.js +2 -2
- package/dist/compiled/next-server/pages-turbo.runtime.prod.js.map +1 -1
- package/dist/compiled/next-server/server.runtime.prod.js +1 -1
- package/dist/compiled/next-server/server.runtime.prod.js.map +1 -1
- package/dist/esm/build/index.js +2 -2
- package/dist/esm/build/swc/index.js +1 -1
- package/dist/esm/build/webpack/plugins/define-env-plugin.js +2 -1
- package/dist/esm/build/webpack/plugins/define-env-plugin.js.map +1 -1
- package/dist/esm/build/webpack/plugins/slow-module-detection-plugin.js +177 -0
- package/dist/esm/build/webpack/plugins/slow-module-detection-plugin.js.map +1 -0
- package/dist/esm/build/webpack-config.js +19 -4
- package/dist/esm/build/webpack-config.js.map +1 -1
- package/dist/esm/client/app-bootstrap.js +1 -1
- package/dist/esm/client/components/errors/stitched-error.js +3 -3
- package/dist/esm/client/components/errors/stitched-error.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/app/react-dev-overlay.js +3 -3
- package/dist/esm/client/components/react-dev-overlay/_experimental/app/react-dev-overlay.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.js +274 -146
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.stories.js +4 -4
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/dev-tools-indicator.stories.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/internal/next-logo.js +9 -15
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/internal/next-logo.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/styles.js +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/dev-tools-indicator/styles.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay/error-overlay.js +1 -3
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay/error-overlay.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-feedback/error-feedback.js +2 -2
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-feedback/error-feedback.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-overlay-footer.js +2 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/components/errors/error-overlay-footer/error-overlay-footer.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/errors.js +2 -3
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/errors.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/errors.stories.js +111 -86
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/errors.stories.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/use-error-hook.js +8 -2
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/container/runtime-error/use-error-hook.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/helpers/merge-refs.js +33 -0
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/helpers/merge-refs.js.map +1 -0
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/styles/base.js +8 -2
- package/dist/esm/client/components/react-dev-overlay/_experimental/internal/styles/base.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/_experimental/pages/react-dev-overlay.js +3 -3
- package/dist/esm/client/components/react-dev-overlay/_experimental/pages/react-dev-overlay.js.map +1 -1
- package/dist/esm/client/components/react-dev-overlay/internal/styles/Base.js +8 -2
- package/dist/esm/client/components/react-dev-overlay/internal/styles/Base.js.map +1 -1
- package/dist/esm/client/index.js +1 -1
- package/dist/esm/export/worker.js +9 -1
- package/dist/esm/export/worker.js.map +1 -1
- package/dist/esm/lib/turbopack-warning.js +2 -1
- package/dist/esm/lib/turbopack-warning.js.map +1 -1
- package/dist/esm/server/base-server.js +4 -4
- package/dist/esm/server/base-server.js.map +1 -1
- package/dist/esm/server/config-schema.js +4 -1
- package/dist/esm/server/config-schema.js.map +1 -1
- package/dist/esm/server/config-shared.js +2 -1
- package/dist/esm/server/config-shared.js.map +1 -1
- package/dist/esm/server/config.js +1 -1
- package/dist/esm/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/esm/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/esm/server/lib/app-info-log.js +1 -1
- package/dist/esm/server/lib/start-server.js +1 -1
- package/dist/esm/server/server-utils.js +22 -19
- package/dist/esm/server/server-utils.js.map +1 -1
- package/dist/esm/server/web-server.js +2 -2
- package/dist/esm/server/web-server.js.map +1 -1
- package/dist/export/worker.js +9 -1
- package/dist/export/worker.js.map +1 -1
- package/dist/lib/turbopack-warning.js +2 -1
- package/dist/lib/turbopack-warning.js.map +1 -1
- package/dist/server/base-server.js +4 -4
- package/dist/server/base-server.js.map +1 -1
- package/dist/server/config-schema.js +4 -1
- package/dist/server/config-schema.js.map +1 -1
- package/dist/server/config-shared.d.ts +11 -0
- package/dist/server/config-shared.js +2 -1
- package/dist/server/config-shared.js.map +1 -1
- package/dist/server/config.js +1 -1
- package/dist/server/dev/hot-reloader-turbopack.js +1 -1
- package/dist/server/dev/hot-reloader-webpack.js +1 -1
- package/dist/server/lib/app-info-log.js +1 -1
- package/dist/server/lib/start-server.js +1 -1
- package/dist/server/server-utils.d.ts +4 -4
- package/dist/server/server-utils.js +22 -19
- package/dist/server/server-utils.js.map +1 -1
- package/dist/server/web-server.js +2 -2
- package/dist/server/web-server.js.map +1 -1
- package/dist/telemetry/anonymous-meta.js +1 -1
- package/dist/telemetry/events/session-stopped.js +2 -2
- package/dist/telemetry/events/version.js +2 -2
- package/package.json +15 -15
|
@@ -5,9 +5,9 @@ import type { BaseNextRequest } from './base-http';
|
|
|
5
5
|
import type { ParsedUrlQuery } from 'querystring';
|
|
6
6
|
import type { UrlWithParsedQuery } from 'url';
|
|
7
7
|
import { getNamedRouteRegex } from '../shared/lib/router/utils/route-regex';
|
|
8
|
-
export declare function normalizeVercelUrl(req: BaseNextRequest,
|
|
8
|
+
export declare function normalizeVercelUrl(req: BaseNextRequest, paramKeys: string[], defaultRouteRegex: ReturnType<typeof getNamedRouteRegex> | undefined): void;
|
|
9
9
|
export declare function interpolateDynamicPath(pathname: string, params: ParsedUrlQuery, defaultRouteRegex?: ReturnType<typeof getNamedRouteRegex> | undefined): string;
|
|
10
|
-
export declare function normalizeDynamicRouteParams(params: ParsedUrlQuery,
|
|
10
|
+
export declare function normalizeDynamicRouteParams(params: ParsedUrlQuery, defaultRouteRegex: ReturnType<typeof getNamedRouteRegex>, defaultRouteMatches: ParsedUrlQuery): {
|
|
11
11
|
params: ParsedUrlQuery;
|
|
12
12
|
hasValidParams: boolean;
|
|
13
13
|
};
|
|
@@ -38,10 +38,10 @@ export declare function getUtils({ page, i18n, basePath, rewrites, pageIsDynamic
|
|
|
38
38
|
dynamicRouteMatcher: RouteMatchFn | undefined;
|
|
39
39
|
defaultRouteMatches: ParsedUrlQuery | undefined;
|
|
40
40
|
getParamsFromRouteMatches: (routeMatchesHeader: string) => import("./request/params").Params | null;
|
|
41
|
-
normalizeDynamicRouteParams: (params: ParsedUrlQuery
|
|
41
|
+
normalizeDynamicRouteParams: (params: ParsedUrlQuery) => {
|
|
42
42
|
params: ParsedUrlQuery;
|
|
43
43
|
hasValidParams: boolean;
|
|
44
44
|
};
|
|
45
|
-
normalizeVercelUrl: (req: BaseNextRequest,
|
|
45
|
+
normalizeVercelUrl: (req: BaseNextRequest, paramKeys: string[]) => void;
|
|
46
46
|
interpolateDynamicPath: (pathname: string, params: Record<string, undefined | string | string[]>) => string;
|
|
47
47
|
};
|
|
@@ -38,21 +38,20 @@ const _removetrailingslash = require("../shared/lib/router/utils/remove-trailing
|
|
|
38
38
|
const _apppaths = require("../shared/lib/router/utils/app-paths");
|
|
39
39
|
const _constants = require("../lib/constants");
|
|
40
40
|
const _utils = require("./web/utils");
|
|
41
|
-
function normalizeVercelUrl(req,
|
|
41
|
+
function normalizeVercelUrl(req, paramKeys, defaultRouteRegex) {
|
|
42
|
+
if (!defaultRouteRegex) return;
|
|
42
43
|
// make sure to normalize req.url on Vercel to strip dynamic params
|
|
43
44
|
// from the query which are added during routing
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
delete _parsedUrl.query[key];
|
|
52
|
-
}
|
|
45
|
+
const _parsedUrl = (0, _url.parse)(req.url, true);
|
|
46
|
+
delete _parsedUrl.search;
|
|
47
|
+
for (const key of Object.keys(_parsedUrl.query)){
|
|
48
|
+
const isNextQueryPrefix = key !== _constants.NEXT_QUERY_PARAM_PREFIX && key.startsWith(_constants.NEXT_QUERY_PARAM_PREFIX);
|
|
49
|
+
const isNextInterceptionMarkerPrefix = key !== _constants.NEXT_INTERCEPTION_MARKER_PREFIX && key.startsWith(_constants.NEXT_INTERCEPTION_MARKER_PREFIX);
|
|
50
|
+
if (isNextQueryPrefix || isNextInterceptionMarkerPrefix || (paramKeys || Object.keys(defaultRouteRegex.groups)).includes(key)) {
|
|
51
|
+
delete _parsedUrl.query[key];
|
|
53
52
|
}
|
|
54
|
-
req.url = (0, _url.format)(_parsedUrl);
|
|
55
53
|
}
|
|
54
|
+
req.url = (0, _url.format)(_parsedUrl);
|
|
56
55
|
}
|
|
57
56
|
function interpolateDynamicPath(pathname, params, defaultRouteRegex) {
|
|
58
57
|
if (!defaultRouteRegex) return pathname;
|
|
@@ -75,12 +74,8 @@ function interpolateDynamicPath(pathname, params, defaultRouteRegex) {
|
|
|
75
74
|
}
|
|
76
75
|
return pathname;
|
|
77
76
|
}
|
|
78
|
-
function normalizeDynamicRouteParams(params,
|
|
77
|
+
function normalizeDynamicRouteParams(params, defaultRouteRegex, defaultRouteMatches) {
|
|
79
78
|
let hasValidParams = true;
|
|
80
|
-
if (!defaultRouteRegex) return {
|
|
81
|
-
params,
|
|
82
|
-
hasValidParams: false
|
|
83
|
-
};
|
|
84
79
|
params = Object.keys(defaultRouteRegex.groups).reduce((prev, key)=>{
|
|
85
80
|
let value = params[key];
|
|
86
81
|
if (typeof value === 'string') {
|
|
@@ -102,7 +97,7 @@ function normalizeDynamicRouteParams(params, ignoreOptional, defaultRouteRegex,
|
|
|
102
97
|
const isDefaultValue = Array.isArray(defaultValue) ? defaultValue.some((defaultVal)=>{
|
|
103
98
|
return Array.isArray(value) ? value.some((val)=>val.includes(defaultVal)) : value == null ? void 0 : value.includes(defaultVal);
|
|
104
99
|
}) : value == null ? void 0 : value.includes(defaultValue);
|
|
105
|
-
if (isDefaultValue || typeof value === 'undefined' && !
|
|
100
|
+
if (isDefaultValue || typeof value === 'undefined' && !isOptional) {
|
|
106
101
|
hasValidParams = false;
|
|
107
102
|
}
|
|
108
103
|
// non-provided optional values should be undefined so normalize
|
|
@@ -265,8 +260,16 @@ function getUtils({ page, i18n, basePath, rewrites, pageIsDynamic, trailingSlash
|
|
|
265
260
|
dynamicRouteMatcher,
|
|
266
261
|
defaultRouteMatches,
|
|
267
262
|
getParamsFromRouteMatches,
|
|
268
|
-
normalizeDynamicRouteParams: (params
|
|
269
|
-
|
|
263
|
+
normalizeDynamicRouteParams: (params)=>{
|
|
264
|
+
if (!defaultRouteRegex || !defaultRouteMatches) {
|
|
265
|
+
return {
|
|
266
|
+
params,
|
|
267
|
+
hasValidParams: false
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
return normalizeDynamicRouteParams(params, defaultRouteRegex, defaultRouteMatches);
|
|
271
|
+
},
|
|
272
|
+
normalizeVercelUrl: (req, paramKeys)=>normalizeVercelUrl(req, paramKeys, defaultRouteRegex),
|
|
270
273
|
interpolateDynamicPath: (pathname, params)=>interpolateDynamicPath(pathname, params, defaultRouteRegex)
|
|
271
274
|
};
|
|
272
275
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/server-utils.ts"],"sourcesContent":["import type { Rewrite } from '../lib/load-custom-routes'\nimport type { RouteMatchFn } from '../shared/lib/router/utils/route-matcher'\nimport type { NextConfig } from './config'\nimport type { BaseNextRequest } from './base-http'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { UrlWithParsedQuery } from 'url'\n\nimport { format as formatUrl, parse as parseUrl } from 'url'\nimport { normalizeLocalePath } from '../shared/lib/i18n/normalize-locale-path'\nimport { getPathMatch } from '../shared/lib/router/utils/path-match'\nimport { getNamedRouteRegex } from '../shared/lib/router/utils/route-regex'\nimport { getRouteMatcher } from '../shared/lib/router/utils/route-matcher'\nimport {\n matchHas,\n prepareDestination,\n} from '../shared/lib/router/utils/prepare-destination'\nimport { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'\nimport { normalizeRscURL } from '../shared/lib/router/utils/app-paths'\nimport {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../lib/constants'\nimport { normalizeNextQueryParam } from './web/utils'\n\nexport function normalizeVercelUrl(\n req: BaseNextRequest,\n trustQuery: boolean,\n paramKeys?: string[],\n pageIsDynamic?: boolean,\n defaultRouteRegex?: ReturnType<typeof getNamedRouteRegex> | undefined\n) {\n // make sure to normalize req.url on Vercel to strip dynamic params\n // from the query which are added during routing\n if (pageIsDynamic && trustQuery && defaultRouteRegex) {\n const _parsedUrl = parseUrl(req.url!, true)\n delete (_parsedUrl as any).search\n\n for (const key of Object.keys(_parsedUrl.query)) {\n const isNextQueryPrefix =\n key !== NEXT_QUERY_PARAM_PREFIX &&\n key.startsWith(NEXT_QUERY_PARAM_PREFIX)\n\n const isNextInterceptionMarkerPrefix =\n key !== NEXT_INTERCEPTION_MARKER_PREFIX &&\n key.startsWith(NEXT_INTERCEPTION_MARKER_PREFIX)\n\n if (\n isNextQueryPrefix ||\n isNextInterceptionMarkerPrefix ||\n (paramKeys || Object.keys(defaultRouteRegex.groups)).includes(key)\n ) {\n delete _parsedUrl.query[key]\n }\n }\n req.url = formatUrl(_parsedUrl)\n }\n}\n\nexport function interpolateDynamicPath(\n pathname: string,\n params: ParsedUrlQuery,\n defaultRouteRegex?: ReturnType<typeof getNamedRouteRegex> | undefined\n) {\n if (!defaultRouteRegex) return pathname\n\n for (const param of Object.keys(defaultRouteRegex.groups)) {\n const { optional, repeat } = defaultRouteRegex.groups[param]\n let builtParam = `[${repeat ? '...' : ''}${param}]`\n\n if (optional) {\n builtParam = `[${builtParam}]`\n }\n\n let paramValue: string\n const value = params[param]\n\n if (Array.isArray(value)) {\n paramValue = value.map((v) => v && encodeURIComponent(v)).join('/')\n } else if (value) {\n paramValue = encodeURIComponent(value)\n } else {\n paramValue = ''\n }\n\n pathname = pathname.replaceAll(builtParam, paramValue)\n }\n\n return pathname\n}\n\nexport function normalizeDynamicRouteParams(\n params: ParsedUrlQuery,\n ignoreOptional?: boolean,\n defaultRouteRegex?: ReturnType<typeof getNamedRouteRegex> | undefined,\n defaultRouteMatches?: ParsedUrlQuery | undefined\n) {\n let hasValidParams = true\n if (!defaultRouteRegex) return { params, hasValidParams: false }\n\n params = Object.keys(defaultRouteRegex.groups).reduce((prev, key) => {\n let value: string | string[] | undefined = params[key]\n\n if (typeof value === 'string') {\n value = normalizeRscURL(value)\n }\n if (Array.isArray(value)) {\n value = value.map((val) => {\n if (typeof val === 'string') {\n val = normalizeRscURL(val)\n }\n return val\n })\n }\n\n // if the value matches the default value we can't rely\n // on the parsed params, this is used to signal if we need\n // to parse x-now-route-matches or not\n const defaultValue = defaultRouteMatches![key]\n const isOptional = defaultRouteRegex!.groups[key].optional\n\n const isDefaultValue = Array.isArray(defaultValue)\n ? defaultValue.some((defaultVal) => {\n return Array.isArray(value)\n ? value.some((val) => val.includes(defaultVal))\n : value?.includes(defaultVal)\n })\n : value?.includes(defaultValue as string)\n\n if (\n isDefaultValue ||\n (typeof value === 'undefined' && !(isOptional && ignoreOptional))\n ) {\n hasValidParams = false\n }\n\n // non-provided optional values should be undefined so normalize\n // them to undefined\n if (\n isOptional &&\n (!value ||\n (Array.isArray(value) &&\n value.length === 1 &&\n // fallback optional catch-all SSG pages have\n // [[...paramName]] for the root path on Vercel\n (value[0] === 'index' || value[0] === `[[...${key}]]`)))\n ) {\n value = undefined\n delete params[key]\n }\n\n // query values from the proxy aren't already split into arrays\n // so make sure to normalize catch-all values\n if (\n value &&\n typeof value === 'string' &&\n defaultRouteRegex!.groups[key].repeat\n ) {\n value = value.split('/')\n }\n\n if (value) {\n prev[key] = value\n }\n return prev\n }, {} as ParsedUrlQuery)\n\n return {\n params,\n hasValidParams,\n }\n}\n\nexport function getUtils({\n page,\n i18n,\n basePath,\n rewrites,\n pageIsDynamic,\n trailingSlash,\n caseSensitive,\n}: {\n page: string\n i18n?: NextConfig['i18n']\n basePath: string\n rewrites: {\n fallback?: ReadonlyArray<Rewrite>\n afterFiles?: ReadonlyArray<Rewrite>\n beforeFiles?: ReadonlyArray<Rewrite>\n }\n pageIsDynamic: boolean\n trailingSlash?: boolean\n caseSensitive: boolean\n}) {\n let defaultRouteRegex: ReturnType<typeof getNamedRouteRegex> | undefined\n let dynamicRouteMatcher: RouteMatchFn | undefined\n let defaultRouteMatches: ParsedUrlQuery | undefined\n\n if (pageIsDynamic) {\n defaultRouteRegex = getNamedRouteRegex(page, {\n prefixRouteKeys: false,\n })\n dynamicRouteMatcher = getRouteMatcher(defaultRouteRegex)\n defaultRouteMatches = dynamicRouteMatcher(page) as ParsedUrlQuery\n }\n\n function handleRewrites(req: BaseNextRequest, parsedUrl: UrlWithParsedQuery) {\n const rewriteParams = {}\n let fsPathname = parsedUrl.pathname\n\n const matchesPage = () => {\n const fsPathnameNoSlash = removeTrailingSlash(fsPathname || '')\n return (\n fsPathnameNoSlash === removeTrailingSlash(page) ||\n dynamicRouteMatcher?.(fsPathnameNoSlash)\n )\n }\n\n const checkRewrite = (rewrite: Rewrite): boolean => {\n const matcher = getPathMatch(\n rewrite.source + (trailingSlash ? '(/)?' : ''),\n {\n removeUnnamedParams: true,\n strict: true,\n sensitive: !!caseSensitive,\n }\n )\n\n if (!parsedUrl.pathname) return false\n\n let params = matcher(parsedUrl.pathname)\n\n if ((rewrite.has || rewrite.missing) && params) {\n const hasParams = matchHas(\n req,\n parsedUrl.query,\n rewrite.has,\n rewrite.missing\n )\n\n if (hasParams) {\n Object.assign(params, hasParams)\n } else {\n params = false\n }\n }\n\n if (params) {\n const { parsedDestination, destQuery } = prepareDestination({\n appendParamsToQuery: true,\n destination: rewrite.destination,\n params: params,\n query: parsedUrl.query,\n })\n\n // if the rewrite destination is external break rewrite chain\n if (parsedDestination.protocol) {\n return true\n }\n\n Object.assign(rewriteParams, destQuery, params)\n Object.assign(parsedUrl.query, parsedDestination.query)\n delete (parsedDestination as any).query\n\n Object.assign(parsedUrl, parsedDestination)\n\n fsPathname = parsedUrl.pathname\n if (!fsPathname) return false\n\n if (basePath) {\n fsPathname = fsPathname.replace(new RegExp(`^${basePath}`), '') || '/'\n }\n\n if (i18n) {\n const result = normalizeLocalePath(fsPathname, i18n.locales)\n fsPathname = result.pathname\n parsedUrl.query.nextInternalLocale =\n result.detectedLocale || params.nextInternalLocale\n }\n\n if (fsPathname === page) {\n return true\n }\n\n if (pageIsDynamic && dynamicRouteMatcher) {\n const dynamicParams = dynamicRouteMatcher(fsPathname)\n if (dynamicParams) {\n parsedUrl.query = {\n ...parsedUrl.query,\n ...dynamicParams,\n }\n return true\n }\n }\n }\n return false\n }\n\n for (const rewrite of rewrites.beforeFiles || []) {\n checkRewrite(rewrite)\n }\n\n if (fsPathname !== page) {\n let finished = false\n\n for (const rewrite of rewrites.afterFiles || []) {\n finished = checkRewrite(rewrite)\n if (finished) break\n }\n\n if (!finished && !matchesPage()) {\n for (const rewrite of rewrites.fallback || []) {\n finished = checkRewrite(rewrite)\n if (finished) break\n }\n }\n }\n return rewriteParams\n }\n\n function getParamsFromRouteMatches(routeMatchesHeader: string) {\n // If we don't have a default route regex, we can't get params from route\n // matches\n if (!defaultRouteRegex) return null\n\n const { groups, routeKeys } = defaultRouteRegex\n\n const matcher = getRouteMatcher({\n re: {\n // Simulate a RegExp match from the \\`req.url\\` input\n exec: (str: string) => {\n // Normalize all the prefixed query params.\n const obj: Record<string, string> = Object.fromEntries(\n new URLSearchParams(str)\n )\n for (const [key, value] of Object.entries(obj)) {\n const normalizedKey = normalizeNextQueryParam(key)\n if (!normalizedKey) continue\n\n obj[normalizedKey] = value\n delete obj[key]\n }\n\n // Use all the named route keys.\n const result = {} as RegExpExecArray\n for (const keyName of Object.keys(routeKeys)) {\n const paramName = routeKeys[keyName]\n\n // If this param name is not a valid parameter name, then skip it.\n if (!paramName) continue\n\n const group = groups[paramName]\n const value = obj[keyName]\n\n // When we're missing a required param, we can't match the route.\n if (!group.optional && !value) return null\n\n result[group.pos] = value\n }\n\n return result\n },\n },\n groups,\n })\n\n const routeMatches = matcher(routeMatchesHeader)\n if (!routeMatches) return null\n\n return routeMatches\n }\n\n return {\n handleRewrites,\n defaultRouteRegex,\n dynamicRouteMatcher,\n defaultRouteMatches,\n getParamsFromRouteMatches,\n normalizeDynamicRouteParams: (\n params: ParsedUrlQuery,\n ignoreOptional?: boolean\n ) =>\n normalizeDynamicRouteParams(\n params,\n ignoreOptional,\n defaultRouteRegex,\n defaultRouteMatches\n ),\n normalizeVercelUrl: (\n req: BaseNextRequest,\n trustQuery: boolean,\n paramKeys?: string[]\n ) =>\n normalizeVercelUrl(\n req,\n trustQuery,\n paramKeys,\n pageIsDynamic,\n defaultRouteRegex\n ),\n interpolateDynamicPath: (\n pathname: string,\n params: Record<string, undefined | string | string[]>\n ) => interpolateDynamicPath(pathname, params, defaultRouteRegex),\n }\n}\n"],"names":["getUtils","interpolateDynamicPath","normalizeDynamicRouteParams","normalizeVercelUrl","req","trustQuery","paramKeys","pageIsDynamic","defaultRouteRegex","_parsedUrl","parseUrl","url","search","key","Object","keys","query","isNextQueryPrefix","NEXT_QUERY_PARAM_PREFIX","startsWith","isNextInterceptionMarkerPrefix","NEXT_INTERCEPTION_MARKER_PREFIX","groups","includes","formatUrl","pathname","params","param","optional","repeat","builtParam","paramValue","value","Array","isArray","map","v","encodeURIComponent","join","replaceAll","ignoreOptional","defaultRouteMatches","hasValidParams","reduce","prev","normalizeRscURL","val","defaultValue","isOptional","isDefaultValue","some","defaultVal","length","undefined","split","page","i18n","basePath","rewrites","trailingSlash","caseSensitive","dynamicRouteMatcher","getNamedRouteRegex","prefixRouteKeys","getRouteMatcher","handleRewrites","parsedUrl","rewriteParams","fsPathname","matchesPage","fsPathnameNoSlash","removeTrailingSlash","checkRewrite","rewrite","matcher","getPathMatch","source","removeUnnamedParams","strict","sensitive","has","missing","hasParams","matchHas","assign","parsedDestination","destQuery","prepareDestination","appendParamsToQuery","destination","protocol","replace","RegExp","result","normalizeLocalePath","locales","nextInternalLocale","detectedLocale","dynamicParams","beforeFiles","finished","afterFiles","fallback","getParamsFromRouteMatches","routeMatchesHeader","routeKeys","re","exec","str","obj","fromEntries","URLSearchParams","entries","normalizedKey","normalizeNextQueryParam","keyName","paramName","group","pos","routeMatches"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/server/server-utils.ts"],"sourcesContent":["import type { Rewrite } from '../lib/load-custom-routes'\nimport type { RouteMatchFn } from '../shared/lib/router/utils/route-matcher'\nimport type { NextConfig } from './config'\nimport type { BaseNextRequest } from './base-http'\nimport type { ParsedUrlQuery } from 'querystring'\nimport type { UrlWithParsedQuery } from 'url'\n\nimport { format as formatUrl, parse as parseUrl } from 'url'\nimport { normalizeLocalePath } from '../shared/lib/i18n/normalize-locale-path'\nimport { getPathMatch } from '../shared/lib/router/utils/path-match'\nimport { getNamedRouteRegex } from '../shared/lib/router/utils/route-regex'\nimport { getRouteMatcher } from '../shared/lib/router/utils/route-matcher'\nimport {\n matchHas,\n prepareDestination,\n} from '../shared/lib/router/utils/prepare-destination'\nimport { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'\nimport { normalizeRscURL } from '../shared/lib/router/utils/app-paths'\nimport {\n NEXT_INTERCEPTION_MARKER_PREFIX,\n NEXT_QUERY_PARAM_PREFIX,\n} from '../lib/constants'\nimport { normalizeNextQueryParam } from './web/utils'\n\nexport function normalizeVercelUrl(\n req: BaseNextRequest,\n paramKeys: string[],\n defaultRouteRegex: ReturnType<typeof getNamedRouteRegex> | undefined\n) {\n if (!defaultRouteRegex) return\n\n // make sure to normalize req.url on Vercel to strip dynamic params\n // from the query which are added during routing\n const _parsedUrl = parseUrl(req.url!, true)\n delete (_parsedUrl as any).search\n\n for (const key of Object.keys(_parsedUrl.query)) {\n const isNextQueryPrefix =\n key !== NEXT_QUERY_PARAM_PREFIX && key.startsWith(NEXT_QUERY_PARAM_PREFIX)\n\n const isNextInterceptionMarkerPrefix =\n key !== NEXT_INTERCEPTION_MARKER_PREFIX &&\n key.startsWith(NEXT_INTERCEPTION_MARKER_PREFIX)\n\n if (\n isNextQueryPrefix ||\n isNextInterceptionMarkerPrefix ||\n (paramKeys || Object.keys(defaultRouteRegex.groups)).includes(key)\n ) {\n delete _parsedUrl.query[key]\n }\n }\n\n req.url = formatUrl(_parsedUrl)\n}\n\nexport function interpolateDynamicPath(\n pathname: string,\n params: ParsedUrlQuery,\n defaultRouteRegex?: ReturnType<typeof getNamedRouteRegex> | undefined\n) {\n if (!defaultRouteRegex) return pathname\n\n for (const param of Object.keys(defaultRouteRegex.groups)) {\n const { optional, repeat } = defaultRouteRegex.groups[param]\n let builtParam = `[${repeat ? '...' : ''}${param}]`\n\n if (optional) {\n builtParam = `[${builtParam}]`\n }\n\n let paramValue: string\n const value = params[param]\n\n if (Array.isArray(value)) {\n paramValue = value.map((v) => v && encodeURIComponent(v)).join('/')\n } else if (value) {\n paramValue = encodeURIComponent(value)\n } else {\n paramValue = ''\n }\n\n pathname = pathname.replaceAll(builtParam, paramValue)\n }\n\n return pathname\n}\n\nexport function normalizeDynamicRouteParams(\n params: ParsedUrlQuery,\n defaultRouteRegex: ReturnType<typeof getNamedRouteRegex>,\n defaultRouteMatches: ParsedUrlQuery\n) {\n let hasValidParams = true\n params = Object.keys(defaultRouteRegex.groups).reduce((prev, key) => {\n let value: string | string[] | undefined = params[key]\n\n if (typeof value === 'string') {\n value = normalizeRscURL(value)\n }\n if (Array.isArray(value)) {\n value = value.map((val) => {\n if (typeof val === 'string') {\n val = normalizeRscURL(val)\n }\n return val\n })\n }\n\n // if the value matches the default value we can't rely\n // on the parsed params, this is used to signal if we need\n // to parse x-now-route-matches or not\n const defaultValue = defaultRouteMatches![key]\n const isOptional = defaultRouteRegex!.groups[key].optional\n\n const isDefaultValue = Array.isArray(defaultValue)\n ? defaultValue.some((defaultVal) => {\n return Array.isArray(value)\n ? value.some((val) => val.includes(defaultVal))\n : value?.includes(defaultVal)\n })\n : value?.includes(defaultValue as string)\n\n if (isDefaultValue || (typeof value === 'undefined' && !isOptional)) {\n hasValidParams = false\n }\n\n // non-provided optional values should be undefined so normalize\n // them to undefined\n if (\n isOptional &&\n (!value ||\n (Array.isArray(value) &&\n value.length === 1 &&\n // fallback optional catch-all SSG pages have\n // [[...paramName]] for the root path on Vercel\n (value[0] === 'index' || value[0] === `[[...${key}]]`)))\n ) {\n value = undefined\n delete params[key]\n }\n\n // query values from the proxy aren't already split into arrays\n // so make sure to normalize catch-all values\n if (\n value &&\n typeof value === 'string' &&\n defaultRouteRegex!.groups[key].repeat\n ) {\n value = value.split('/')\n }\n\n if (value) {\n prev[key] = value\n }\n return prev\n }, {} as ParsedUrlQuery)\n\n return {\n params,\n hasValidParams,\n }\n}\n\nexport function getUtils({\n page,\n i18n,\n basePath,\n rewrites,\n pageIsDynamic,\n trailingSlash,\n caseSensitive,\n}: {\n page: string\n i18n?: NextConfig['i18n']\n basePath: string\n rewrites: {\n fallback?: ReadonlyArray<Rewrite>\n afterFiles?: ReadonlyArray<Rewrite>\n beforeFiles?: ReadonlyArray<Rewrite>\n }\n pageIsDynamic: boolean\n trailingSlash?: boolean\n caseSensitive: boolean\n}) {\n let defaultRouteRegex: ReturnType<typeof getNamedRouteRegex> | undefined\n let dynamicRouteMatcher: RouteMatchFn | undefined\n let defaultRouteMatches: ParsedUrlQuery | undefined\n\n if (pageIsDynamic) {\n defaultRouteRegex = getNamedRouteRegex(page, {\n prefixRouteKeys: false,\n })\n dynamicRouteMatcher = getRouteMatcher(defaultRouteRegex)\n defaultRouteMatches = dynamicRouteMatcher(page) as ParsedUrlQuery\n }\n\n function handleRewrites(req: BaseNextRequest, parsedUrl: UrlWithParsedQuery) {\n const rewriteParams = {}\n let fsPathname = parsedUrl.pathname\n\n const matchesPage = () => {\n const fsPathnameNoSlash = removeTrailingSlash(fsPathname || '')\n return (\n fsPathnameNoSlash === removeTrailingSlash(page) ||\n dynamicRouteMatcher?.(fsPathnameNoSlash)\n )\n }\n\n const checkRewrite = (rewrite: Rewrite): boolean => {\n const matcher = getPathMatch(\n rewrite.source + (trailingSlash ? '(/)?' : ''),\n {\n removeUnnamedParams: true,\n strict: true,\n sensitive: !!caseSensitive,\n }\n )\n\n if (!parsedUrl.pathname) return false\n\n let params = matcher(parsedUrl.pathname)\n\n if ((rewrite.has || rewrite.missing) && params) {\n const hasParams = matchHas(\n req,\n parsedUrl.query,\n rewrite.has,\n rewrite.missing\n )\n\n if (hasParams) {\n Object.assign(params, hasParams)\n } else {\n params = false\n }\n }\n\n if (params) {\n const { parsedDestination, destQuery } = prepareDestination({\n appendParamsToQuery: true,\n destination: rewrite.destination,\n params: params,\n query: parsedUrl.query,\n })\n\n // if the rewrite destination is external break rewrite chain\n if (parsedDestination.protocol) {\n return true\n }\n\n Object.assign(rewriteParams, destQuery, params)\n Object.assign(parsedUrl.query, parsedDestination.query)\n delete (parsedDestination as any).query\n\n Object.assign(parsedUrl, parsedDestination)\n\n fsPathname = parsedUrl.pathname\n if (!fsPathname) return false\n\n if (basePath) {\n fsPathname = fsPathname.replace(new RegExp(`^${basePath}`), '') || '/'\n }\n\n if (i18n) {\n const result = normalizeLocalePath(fsPathname, i18n.locales)\n fsPathname = result.pathname\n parsedUrl.query.nextInternalLocale =\n result.detectedLocale || params.nextInternalLocale\n }\n\n if (fsPathname === page) {\n return true\n }\n\n if (pageIsDynamic && dynamicRouteMatcher) {\n const dynamicParams = dynamicRouteMatcher(fsPathname)\n if (dynamicParams) {\n parsedUrl.query = {\n ...parsedUrl.query,\n ...dynamicParams,\n }\n return true\n }\n }\n }\n return false\n }\n\n for (const rewrite of rewrites.beforeFiles || []) {\n checkRewrite(rewrite)\n }\n\n if (fsPathname !== page) {\n let finished = false\n\n for (const rewrite of rewrites.afterFiles || []) {\n finished = checkRewrite(rewrite)\n if (finished) break\n }\n\n if (!finished && !matchesPage()) {\n for (const rewrite of rewrites.fallback || []) {\n finished = checkRewrite(rewrite)\n if (finished) break\n }\n }\n }\n return rewriteParams\n }\n\n function getParamsFromRouteMatches(routeMatchesHeader: string) {\n // If we don't have a default route regex, we can't get params from route\n // matches\n if (!defaultRouteRegex) return null\n\n const { groups, routeKeys } = defaultRouteRegex\n\n const matcher = getRouteMatcher({\n re: {\n // Simulate a RegExp match from the \\`req.url\\` input\n exec: (str: string) => {\n // Normalize all the prefixed query params.\n const obj: Record<string, string> = Object.fromEntries(\n new URLSearchParams(str)\n )\n for (const [key, value] of Object.entries(obj)) {\n const normalizedKey = normalizeNextQueryParam(key)\n if (!normalizedKey) continue\n\n obj[normalizedKey] = value\n delete obj[key]\n }\n\n // Use all the named route keys.\n const result = {} as RegExpExecArray\n for (const keyName of Object.keys(routeKeys)) {\n const paramName = routeKeys[keyName]\n\n // If this param name is not a valid parameter name, then skip it.\n if (!paramName) continue\n\n const group = groups[paramName]\n const value = obj[keyName]\n\n // When we're missing a required param, we can't match the route.\n if (!group.optional && !value) return null\n\n result[group.pos] = value\n }\n\n return result\n },\n },\n groups,\n })\n\n const routeMatches = matcher(routeMatchesHeader)\n if (!routeMatches) return null\n\n return routeMatches\n }\n\n return {\n handleRewrites,\n defaultRouteRegex,\n dynamicRouteMatcher,\n defaultRouteMatches,\n getParamsFromRouteMatches,\n normalizeDynamicRouteParams: (params: ParsedUrlQuery) => {\n if (!defaultRouteRegex || !defaultRouteMatches) {\n return { params, hasValidParams: false }\n }\n\n return normalizeDynamicRouteParams(\n params,\n defaultRouteRegex,\n defaultRouteMatches\n )\n },\n normalizeVercelUrl: (req: BaseNextRequest, paramKeys: string[]) =>\n normalizeVercelUrl(req, paramKeys, defaultRouteRegex),\n interpolateDynamicPath: (\n pathname: string,\n params: Record<string, undefined | string | string[]>\n ) => interpolateDynamicPath(pathname, params, defaultRouteRegex),\n }\n}\n"],"names":["getUtils","interpolateDynamicPath","normalizeDynamicRouteParams","normalizeVercelUrl","req","paramKeys","defaultRouteRegex","_parsedUrl","parseUrl","url","search","key","Object","keys","query","isNextQueryPrefix","NEXT_QUERY_PARAM_PREFIX","startsWith","isNextInterceptionMarkerPrefix","NEXT_INTERCEPTION_MARKER_PREFIX","groups","includes","formatUrl","pathname","params","param","optional","repeat","builtParam","paramValue","value","Array","isArray","map","v","encodeURIComponent","join","replaceAll","defaultRouteMatches","hasValidParams","reduce","prev","normalizeRscURL","val","defaultValue","isOptional","isDefaultValue","some","defaultVal","length","undefined","split","page","i18n","basePath","rewrites","pageIsDynamic","trailingSlash","caseSensitive","dynamicRouteMatcher","getNamedRouteRegex","prefixRouteKeys","getRouteMatcher","handleRewrites","parsedUrl","rewriteParams","fsPathname","matchesPage","fsPathnameNoSlash","removeTrailingSlash","checkRewrite","rewrite","matcher","getPathMatch","source","removeUnnamedParams","strict","sensitive","has","missing","hasParams","matchHas","assign","parsedDestination","destQuery","prepareDestination","appendParamsToQuery","destination","protocol","replace","RegExp","result","normalizeLocalePath","locales","nextInternalLocale","detectedLocale","dynamicParams","beforeFiles","finished","afterFiles","fallback","getParamsFromRouteMatches","routeMatchesHeader","routeKeys","re","exec","str","obj","fromEntries","URLSearchParams","entries","normalizedKey","normalizeNextQueryParam","keyName","paramName","group","pos","routeMatches"],"mappings":"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"}
|
|
@@ -90,10 +90,10 @@ class NextWebServer extends _baseserver.default {
|
|
|
90
90
|
});
|
|
91
91
|
const dynamicRouteMatcher = (0, _routematcher.getRouteMatcher)(routeRegex);
|
|
92
92
|
const defaultRouteMatches = dynamicRouteMatcher(pathname);
|
|
93
|
-
const paramsResult = (0, _serverutils.normalizeDynamicRouteParams)(query,
|
|
93
|
+
const paramsResult = (0, _serverutils.normalizeDynamicRouteParams)(query, routeRegex, defaultRouteMatches);
|
|
94
94
|
const normalizedParams = paramsResult.hasValidParams ? paramsResult.params : query;
|
|
95
95
|
pathname = (0, _serverutils.interpolateDynamicPath)(pathname, normalizedParams, routeRegex);
|
|
96
|
-
(0, _serverutils.normalizeVercelUrl)(req,
|
|
96
|
+
(0, _serverutils.normalizeVercelUrl)(req, Object.keys(routeRegex.routeKeys), routeRegex);
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
// next.js core assumes page path without trailing slash
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/server/web-server.ts"],"sourcesContent":["import type { WebNextRequest, WebNextResponse } from './base-http/web'\nimport type RenderResult from './render-result'\nimport type { NextParsedUrlQuery, NextUrlWithParsedQuery } from './request-meta'\nimport type { Params } from './request/params'\nimport type { LoadComponentsReturnType } from './load-components'\nimport type {\n LoadedRenderOpts,\n MiddlewareRoutingItem,\n NormalizedRouteManifest,\n Options,\n RouteHandler,\n} from './base-server'\nimport type { Revalidate, ExpireTime } from './lib/revalidate'\n\nimport { byteLength } from './api-utils/web'\nimport BaseServer, { NoFallbackError } from './base-server'\nimport { generateETag } from './lib/etag'\nimport { addRequestMeta, getRequestMeta } from './request-meta'\nimport WebResponseCache from './response-cache/web'\nimport { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'\nimport { isDynamicRoute } from '../shared/lib/router/utils'\nimport {\n interpolateDynamicPath,\n normalizeVercelUrl,\n normalizeDynamicRouteParams,\n} from './server-utils'\nimport { getNamedRouteRegex } from '../shared/lib/router/utils/route-regex'\nimport { getRouteMatcher } from '../shared/lib/router/utils/route-matcher'\nimport { IncrementalCache } from './lib/incremental-cache'\nimport type { PAGE_TYPES } from '../lib/page-types'\nimport type { Rewrite } from '../lib/load-custom-routes'\nimport { buildCustomRoute } from '../lib/build-custom-route'\nimport { UNDERSCORE_NOT_FOUND_ROUTE } from '../api/constants'\nimport { getEdgeInstrumentationModule } from './web/globals'\nimport type { ServerOnInstrumentationRequestError } from './app-render/types'\nimport { getEdgePreviewProps } from './web/get-edge-preview-props'\n\ninterface WebServerOptions extends Options {\n buildId: string\n webServerConfig: {\n page: string\n pathname: string\n pagesType: PAGE_TYPES\n loadComponent: (page: string) => Promise<LoadComponentsReturnType | null>\n extendRenderOpts: Partial<BaseServer['renderOpts']> & {\n serverActionsManifest?: any\n }\n renderToHTML:\n | typeof import('./app-render/app-render').renderToHTMLOrFlight\n | undefined\n incrementalCacheHandler?: any\n interceptionRouteRewrites?: Rewrite[]\n }\n}\n\ntype WebRouteHandler = RouteHandler<WebNextRequest, WebNextResponse>\n\nexport default class NextWebServer extends BaseServer<\n WebServerOptions,\n WebNextRequest,\n WebNextResponse\n> {\n constructor(options: WebServerOptions) {\n super(options)\n\n // Extend `renderOpts`.\n Object.assign(this.renderOpts, options.webServerConfig.extendRenderOpts)\n }\n\n protected async getIncrementalCache({\n requestHeaders,\n }: {\n requestHeaders: IncrementalCache['requestHeaders']\n }) {\n const dev = !!this.renderOpts.dev\n // incremental-cache is request specific\n // although can have shared caches in module scope\n // per-cache handler\n return new IncrementalCache({\n dev,\n requestHeaders,\n requestProtocol: 'https',\n allowedRevalidateHeaderKeys:\n this.nextConfig.experimental.allowedRevalidateHeaderKeys,\n minimalMode: this.minimalMode,\n fetchCacheKeyPrefix: this.nextConfig.experimental.fetchCacheKeyPrefix,\n maxMemoryCacheSize: this.nextConfig.cacheMaxMemorySize,\n flushToDisk: false,\n CurCacheHandler:\n this.serverOptions.webServerConfig.incrementalCacheHandler,\n getPrerenderManifest: () => this.getPrerenderManifest(),\n })\n }\n protected getResponseCache() {\n return new WebResponseCache(this.minimalMode)\n }\n\n protected async hasPage(page: string) {\n return page === this.serverOptions.webServerConfig.page\n }\n\n protected getBuildId() {\n return this.serverOptions.buildId\n }\n\n protected getEnabledDirectories() {\n return {\n app: this.serverOptions.webServerConfig.pagesType === 'app',\n pages: this.serverOptions.webServerConfig.pagesType === 'pages',\n }\n }\n\n protected getPagesManifest() {\n return {\n // keep same theme but server path doesn't need to be accurate\n [this.serverOptions.webServerConfig.pathname]:\n `server${this.serverOptions.webServerConfig.page}.js`,\n }\n }\n\n protected getAppPathsManifest() {\n const page = this.serverOptions.webServerConfig.page\n return {\n [this.serverOptions.webServerConfig.page]: `app${page}.js`,\n }\n }\n\n protected attachRequestMeta(\n req: WebNextRequest,\n parsedUrl: NextUrlWithParsedQuery\n ) {\n addRequestMeta(req, 'initQuery', { ...parsedUrl.query })\n }\n\n protected getPrerenderManifest() {\n return {\n version: -1 as any, // letting us know this doesn't conform to spec\n routes: {},\n dynamicRoutes: {},\n notFoundRoutes: [],\n preview: getEdgePreviewProps(),\n }\n }\n\n protected getNextFontManifest() {\n return this.serverOptions.webServerConfig.extendRenderOpts.nextFontManifest\n }\n\n protected handleCatchallRenderRequest: WebRouteHandler = async (\n req,\n res,\n parsedUrl\n ) => {\n let { pathname, query } = parsedUrl\n if (!pathname) {\n throw new Error('pathname is undefined')\n }\n\n // interpolate query information into page for dynamic route\n // so that rewritten paths are handled properly\n const normalizedPage = this.serverOptions.webServerConfig.pathname\n\n if (pathname !== normalizedPage) {\n pathname = normalizedPage\n\n if (isDynamicRoute(pathname)) {\n const routeRegex = getNamedRouteRegex(pathname, {\n prefixRouteKeys: false,\n })\n const dynamicRouteMatcher = getRouteMatcher(routeRegex)\n const defaultRouteMatches = dynamicRouteMatcher(\n pathname\n ) as NextParsedUrlQuery\n const paramsResult = normalizeDynamicRouteParams(\n query,\n false,\n routeRegex,\n defaultRouteMatches\n )\n const normalizedParams = paramsResult.hasValidParams\n ? paramsResult.params\n : query\n\n pathname = interpolateDynamicPath(\n pathname,\n normalizedParams,\n routeRegex\n )\n normalizeVercelUrl(\n req,\n true,\n Object.keys(routeRegex.routeKeys),\n true,\n routeRegex\n )\n }\n }\n\n // next.js core assumes page path without trailing slash\n pathname = removeTrailingSlash(pathname)\n\n if (this.i18nProvider) {\n const { detectedLocale } = await this.i18nProvider.analyze(pathname)\n if (detectedLocale) {\n addRequestMeta(req, 'locale', detectedLocale)\n }\n }\n\n const bubbleNoFallback = getRequestMeta(req, 'bubbleNoFallback')\n\n try {\n await this.render(req, res, pathname, query, parsedUrl, true)\n\n return true\n } catch (err) {\n if (err instanceof NoFallbackError && bubbleNoFallback) {\n return false\n }\n throw err\n }\n }\n\n protected renderHTML(\n req: WebNextRequest,\n res: WebNextResponse,\n pathname: string,\n query: NextParsedUrlQuery,\n renderOpts: LoadedRenderOpts\n ): Promise<RenderResult> {\n const { renderToHTML } = this.serverOptions.webServerConfig\n if (!renderToHTML) {\n throw new Error(\n 'Invariant: routeModule should be configured when rendering pages'\n )\n }\n\n // For edge runtime if the pathname hit as /_not-found entrypoint,\n // override the pathname to /404 for rendering\n if (pathname === UNDERSCORE_NOT_FOUND_ROUTE) {\n pathname = '/404'\n }\n return renderToHTML(\n req as any,\n res as any,\n pathname,\n query,\n // Edge runtime does not support ISR/PPR, so we don't need to pass in\n // the unknown params.\n null,\n Object.assign(renderOpts, {\n disableOptimizedLoading: true,\n runtime: 'experimental-edge',\n }),\n undefined,\n false,\n {\n buildId: this.serverOptions.buildId,\n }\n )\n }\n\n protected async sendRenderResult(\n _req: WebNextRequest,\n res: WebNextResponse,\n options: {\n result: RenderResult\n type: 'html' | 'json'\n generateEtags: boolean\n poweredByHeader: boolean\n revalidate: Revalidate | undefined\n expireTime: ExpireTime | undefined\n }\n ): Promise<void> {\n res.setHeader('X-Edge-Runtime', '1')\n\n // Add necessary headers.\n // @TODO: Share the isomorphic logic with server/send-payload.ts.\n if (options.poweredByHeader && options.type === 'html') {\n res.setHeader('X-Powered-By', 'Next.js')\n }\n\n if (!res.getHeader('Content-Type')) {\n res.setHeader(\n 'Content-Type',\n options.result.contentType\n ? options.result.contentType\n : options.type === 'json'\n ? 'application/json'\n : 'text/html; charset=utf-8'\n )\n }\n\n let promise: Promise<void> | undefined\n if (options.result.isDynamic) {\n promise = options.result.pipeTo(res.transformStream.writable)\n } else {\n const payload = options.result.toUnchunkedString()\n res.setHeader('Content-Length', String(byteLength(payload)))\n if (options.generateEtags) {\n res.setHeader('ETag', generateETag(payload))\n }\n res.body(payload)\n }\n\n res.send()\n\n // If we have a promise, wait for it to resolve.\n if (promise) await promise\n }\n\n protected async findPageComponents({\n page,\n query,\n params,\n url: _url,\n }: {\n page: string\n query: NextParsedUrlQuery\n params: Params | null\n isAppPath: boolean\n url?: string\n }) {\n const result = await this.serverOptions.webServerConfig.loadComponent(page)\n if (!result) return null\n\n return {\n query: {\n ...(query || {}),\n ...(params || {}),\n },\n components: result,\n }\n }\n\n // Below are methods that are not implemented by the web server as they are\n // handled by the upstream proxy (edge runtime or node server).\n\n protected async runApi() {\n // This web server does not need to handle API requests.\n return true\n }\n\n protected async handleApiRequest() {\n // Edge API requests are handled separately in minimal mode.\n return false\n }\n\n protected loadEnvConfig() {\n // The web server does not need to load the env config. This is done by the\n // runtime already.\n }\n\n protected getPublicDir() {\n // Public files are not handled by the web server.\n return ''\n }\n\n protected getHasStaticDir() {\n return false\n }\n\n protected getFontManifest() {\n return undefined\n }\n\n protected handleCompression() {\n // For the web server layer, compression is automatically handled by the\n // upstream proxy (edge runtime or node server) and we can simply skip here.\n }\n\n protected async handleUpgrade(): Promise<void> {\n // The web server does not support web sockets.\n }\n\n protected async getFallbackErrorComponents(\n _url?: string\n ): Promise<LoadComponentsReturnType | null> {\n // The web server does not need to handle fallback errors in production.\n return null\n }\n protected getRoutesManifest(): NormalizedRouteManifest | undefined {\n // The web server does not need to handle rewrite rules. This is done by the\n // upstream proxy (edge runtime or node server).\n return undefined\n }\n\n protected getMiddleware(): MiddlewareRoutingItem | undefined {\n // The web server does not need to handle middleware. This is done by the\n // upstream proxy (edge runtime or node server).\n return undefined\n }\n\n protected getFilesystemPaths() {\n return new Set<string>()\n }\n\n protected getinterceptionRoutePatterns(): RegExp[] {\n return (\n this.serverOptions.webServerConfig.interceptionRouteRewrites?.map(\n (rewrite) => new RegExp(buildCustomRoute('rewrite', rewrite).regex)\n ) ?? []\n )\n }\n\n protected async loadInstrumentationModule() {\n return await getEdgeInstrumentationModule()\n }\n\n protected async instrumentationOnRequestError(\n ...args: Parameters<ServerOnInstrumentationRequestError>\n ) {\n await super.instrumentationOnRequestError(...args)\n const err = args[0]\n\n if (\n process.env.NODE_ENV !== 'production' &&\n typeof __next_log_error__ === 'function'\n ) {\n __next_log_error__(err)\n } else {\n console.error(err)\n }\n }\n}\n"],"names":["NextWebServer","BaseServer","constructor","options","handleCatchallRenderRequest","req","res","parsedUrl","pathname","query","Error","normalizedPage","serverOptions","webServerConfig","isDynamicRoute","routeRegex","getNamedRouteRegex","prefixRouteKeys","dynamicRouteMatcher","getRouteMatcher","defaultRouteMatches","paramsResult","normalizeDynamicRouteParams","normalizedParams","hasValidParams","params","interpolateDynamicPath","normalizeVercelUrl","Object","keys","routeKeys","removeTrailingSlash","i18nProvider","detectedLocale","analyze","addRequestMeta","bubbleNoFallback","getRequestMeta","render","err","NoFallbackError","assign","renderOpts","extendRenderOpts","getIncrementalCache","requestHeaders","dev","IncrementalCache","requestProtocol","allowedRevalidateHeaderKeys","nextConfig","experimental","minimalMode","fetchCacheKeyPrefix","maxMemoryCacheSize","cacheMaxMemorySize","flushToDisk","CurCacheHandler","incrementalCacheHandler","getPrerenderManifest","getResponseCache","WebResponseCache","hasPage","page","getBuildId","buildId","getEnabledDirectories","app","pagesType","pages","getPagesManifest","getAppPathsManifest","attachRequestMeta","version","routes","dynamicRoutes","notFoundRoutes","preview","getEdgePreviewProps","getNextFontManifest","nextFontManifest","renderHTML","renderToHTML","UNDERSCORE_NOT_FOUND_ROUTE","disableOptimizedLoading","runtime","undefined","sendRenderResult","_req","setHeader","poweredByHeader","type","getHeader","result","contentType","promise","isDynamic","pipeTo","transformStream","writable","payload","toUnchunkedString","String","byteLength","generateEtags","generateETag","body","send","findPageComponents","url","_url","loadComponent","components","runApi","handleApiRequest","loadEnvConfig","getPublicDir","getHasStaticDir","getFontManifest","handleCompression","handleUpgrade","getFallbackErrorComponents","getRoutesManifest","getMiddleware","getFilesystemPaths","Set","getinterceptionRoutePatterns","interceptionRouteRewrites","map","rewrite","RegExp","buildCustomRoute","regex","loadInstrumentationModule","getEdgeInstrumentationModule","instrumentationOnRequestError","args","process","env","NODE_ENV","__next_log_error__","console","error"],"mappings":"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"}
|
|
1
|
+
{"version":3,"sources":["../../src/server/web-server.ts"],"sourcesContent":["import type { WebNextRequest, WebNextResponse } from './base-http/web'\nimport type RenderResult from './render-result'\nimport type { NextParsedUrlQuery, NextUrlWithParsedQuery } from './request-meta'\nimport type { Params } from './request/params'\nimport type { LoadComponentsReturnType } from './load-components'\nimport type {\n LoadedRenderOpts,\n MiddlewareRoutingItem,\n NormalizedRouteManifest,\n Options,\n RouteHandler,\n} from './base-server'\nimport type { Revalidate, ExpireTime } from './lib/revalidate'\n\nimport { byteLength } from './api-utils/web'\nimport BaseServer, { NoFallbackError } from './base-server'\nimport { generateETag } from './lib/etag'\nimport { addRequestMeta, getRequestMeta } from './request-meta'\nimport WebResponseCache from './response-cache/web'\nimport { removeTrailingSlash } from '../shared/lib/router/utils/remove-trailing-slash'\nimport { isDynamicRoute } from '../shared/lib/router/utils'\nimport {\n interpolateDynamicPath,\n normalizeVercelUrl,\n normalizeDynamicRouteParams,\n} from './server-utils'\nimport { getNamedRouteRegex } from '../shared/lib/router/utils/route-regex'\nimport { getRouteMatcher } from '../shared/lib/router/utils/route-matcher'\nimport { IncrementalCache } from './lib/incremental-cache'\nimport type { PAGE_TYPES } from '../lib/page-types'\nimport type { Rewrite } from '../lib/load-custom-routes'\nimport { buildCustomRoute } from '../lib/build-custom-route'\nimport { UNDERSCORE_NOT_FOUND_ROUTE } from '../api/constants'\nimport { getEdgeInstrumentationModule } from './web/globals'\nimport type { ServerOnInstrumentationRequestError } from './app-render/types'\nimport { getEdgePreviewProps } from './web/get-edge-preview-props'\n\ninterface WebServerOptions extends Options {\n buildId: string\n webServerConfig: {\n page: string\n pathname: string\n pagesType: PAGE_TYPES\n loadComponent: (page: string) => Promise<LoadComponentsReturnType | null>\n extendRenderOpts: Partial<BaseServer['renderOpts']> & {\n serverActionsManifest?: any\n }\n renderToHTML:\n | typeof import('./app-render/app-render').renderToHTMLOrFlight\n | undefined\n incrementalCacheHandler?: any\n interceptionRouteRewrites?: Rewrite[]\n }\n}\n\ntype WebRouteHandler = RouteHandler<WebNextRequest, WebNextResponse>\n\nexport default class NextWebServer extends BaseServer<\n WebServerOptions,\n WebNextRequest,\n WebNextResponse\n> {\n constructor(options: WebServerOptions) {\n super(options)\n\n // Extend `renderOpts`.\n Object.assign(this.renderOpts, options.webServerConfig.extendRenderOpts)\n }\n\n protected async getIncrementalCache({\n requestHeaders,\n }: {\n requestHeaders: IncrementalCache['requestHeaders']\n }) {\n const dev = !!this.renderOpts.dev\n // incremental-cache is request specific\n // although can have shared caches in module scope\n // per-cache handler\n return new IncrementalCache({\n dev,\n requestHeaders,\n requestProtocol: 'https',\n allowedRevalidateHeaderKeys:\n this.nextConfig.experimental.allowedRevalidateHeaderKeys,\n minimalMode: this.minimalMode,\n fetchCacheKeyPrefix: this.nextConfig.experimental.fetchCacheKeyPrefix,\n maxMemoryCacheSize: this.nextConfig.cacheMaxMemorySize,\n flushToDisk: false,\n CurCacheHandler:\n this.serverOptions.webServerConfig.incrementalCacheHandler,\n getPrerenderManifest: () => this.getPrerenderManifest(),\n })\n }\n protected getResponseCache() {\n return new WebResponseCache(this.minimalMode)\n }\n\n protected async hasPage(page: string) {\n return page === this.serverOptions.webServerConfig.page\n }\n\n protected getBuildId() {\n return this.serverOptions.buildId\n }\n\n protected getEnabledDirectories() {\n return {\n app: this.serverOptions.webServerConfig.pagesType === 'app',\n pages: this.serverOptions.webServerConfig.pagesType === 'pages',\n }\n }\n\n protected getPagesManifest() {\n return {\n // keep same theme but server path doesn't need to be accurate\n [this.serverOptions.webServerConfig.pathname]:\n `server${this.serverOptions.webServerConfig.page}.js`,\n }\n }\n\n protected getAppPathsManifest() {\n const page = this.serverOptions.webServerConfig.page\n return {\n [this.serverOptions.webServerConfig.page]: `app${page}.js`,\n }\n }\n\n protected attachRequestMeta(\n req: WebNextRequest,\n parsedUrl: NextUrlWithParsedQuery\n ) {\n addRequestMeta(req, 'initQuery', { ...parsedUrl.query })\n }\n\n protected getPrerenderManifest() {\n return {\n version: -1 as any, // letting us know this doesn't conform to spec\n routes: {},\n dynamicRoutes: {},\n notFoundRoutes: [],\n preview: getEdgePreviewProps(),\n }\n }\n\n protected getNextFontManifest() {\n return this.serverOptions.webServerConfig.extendRenderOpts.nextFontManifest\n }\n\n protected handleCatchallRenderRequest: WebRouteHandler = async (\n req,\n res,\n parsedUrl\n ) => {\n let { pathname, query } = parsedUrl\n if (!pathname) {\n throw new Error('pathname is undefined')\n }\n\n // interpolate query information into page for dynamic route\n // so that rewritten paths are handled properly\n const normalizedPage = this.serverOptions.webServerConfig.pathname\n\n if (pathname !== normalizedPage) {\n pathname = normalizedPage\n\n if (isDynamicRoute(pathname)) {\n const routeRegex = getNamedRouteRegex(pathname, {\n prefixRouteKeys: false,\n })\n const dynamicRouteMatcher = getRouteMatcher(routeRegex)\n const defaultRouteMatches = dynamicRouteMatcher(\n pathname\n ) as NextParsedUrlQuery\n const paramsResult = normalizeDynamicRouteParams(\n query,\n routeRegex,\n defaultRouteMatches\n )\n const normalizedParams = paramsResult.hasValidParams\n ? paramsResult.params\n : query\n\n pathname = interpolateDynamicPath(\n pathname,\n normalizedParams,\n routeRegex\n )\n normalizeVercelUrl(req, Object.keys(routeRegex.routeKeys), routeRegex)\n }\n }\n\n // next.js core assumes page path without trailing slash\n pathname = removeTrailingSlash(pathname)\n\n if (this.i18nProvider) {\n const { detectedLocale } = await this.i18nProvider.analyze(pathname)\n if (detectedLocale) {\n addRequestMeta(req, 'locale', detectedLocale)\n }\n }\n\n const bubbleNoFallback = getRequestMeta(req, 'bubbleNoFallback')\n\n try {\n await this.render(req, res, pathname, query, parsedUrl, true)\n\n return true\n } catch (err) {\n if (err instanceof NoFallbackError && bubbleNoFallback) {\n return false\n }\n throw err\n }\n }\n\n protected renderHTML(\n req: WebNextRequest,\n res: WebNextResponse,\n pathname: string,\n query: NextParsedUrlQuery,\n renderOpts: LoadedRenderOpts\n ): Promise<RenderResult> {\n const { renderToHTML } = this.serverOptions.webServerConfig\n if (!renderToHTML) {\n throw new Error(\n 'Invariant: routeModule should be configured when rendering pages'\n )\n }\n\n // For edge runtime if the pathname hit as /_not-found entrypoint,\n // override the pathname to /404 for rendering\n if (pathname === UNDERSCORE_NOT_FOUND_ROUTE) {\n pathname = '/404'\n }\n return renderToHTML(\n req as any,\n res as any,\n pathname,\n query,\n // Edge runtime does not support ISR/PPR, so we don't need to pass in\n // the unknown params.\n null,\n Object.assign(renderOpts, {\n disableOptimizedLoading: true,\n runtime: 'experimental-edge',\n }),\n undefined,\n false,\n {\n buildId: this.serverOptions.buildId,\n }\n )\n }\n\n protected async sendRenderResult(\n _req: WebNextRequest,\n res: WebNextResponse,\n options: {\n result: RenderResult\n type: 'html' | 'json'\n generateEtags: boolean\n poweredByHeader: boolean\n revalidate: Revalidate | undefined\n expireTime: ExpireTime | undefined\n }\n ): Promise<void> {\n res.setHeader('X-Edge-Runtime', '1')\n\n // Add necessary headers.\n // @TODO: Share the isomorphic logic with server/send-payload.ts.\n if (options.poweredByHeader && options.type === 'html') {\n res.setHeader('X-Powered-By', 'Next.js')\n }\n\n if (!res.getHeader('Content-Type')) {\n res.setHeader(\n 'Content-Type',\n options.result.contentType\n ? options.result.contentType\n : options.type === 'json'\n ? 'application/json'\n : 'text/html; charset=utf-8'\n )\n }\n\n let promise: Promise<void> | undefined\n if (options.result.isDynamic) {\n promise = options.result.pipeTo(res.transformStream.writable)\n } else {\n const payload = options.result.toUnchunkedString()\n res.setHeader('Content-Length', String(byteLength(payload)))\n if (options.generateEtags) {\n res.setHeader('ETag', generateETag(payload))\n }\n res.body(payload)\n }\n\n res.send()\n\n // If we have a promise, wait for it to resolve.\n if (promise) await promise\n }\n\n protected async findPageComponents({\n page,\n query,\n params,\n url: _url,\n }: {\n page: string\n query: NextParsedUrlQuery\n params: Params | null\n isAppPath: boolean\n url?: string\n }) {\n const result = await this.serverOptions.webServerConfig.loadComponent(page)\n if (!result) return null\n\n return {\n query: {\n ...(query || {}),\n ...(params || {}),\n },\n components: result,\n }\n }\n\n // Below are methods that are not implemented by the web server as they are\n // handled by the upstream proxy (edge runtime or node server).\n\n protected async runApi() {\n // This web server does not need to handle API requests.\n return true\n }\n\n protected async handleApiRequest() {\n // Edge API requests are handled separately in minimal mode.\n return false\n }\n\n protected loadEnvConfig() {\n // The web server does not need to load the env config. This is done by the\n // runtime already.\n }\n\n protected getPublicDir() {\n // Public files are not handled by the web server.\n return ''\n }\n\n protected getHasStaticDir() {\n return false\n }\n\n protected getFontManifest() {\n return undefined\n }\n\n protected handleCompression() {\n // For the web server layer, compression is automatically handled by the\n // upstream proxy (edge runtime or node server) and we can simply skip here.\n }\n\n protected async handleUpgrade(): Promise<void> {\n // The web server does not support web sockets.\n }\n\n protected async getFallbackErrorComponents(\n _url?: string\n ): Promise<LoadComponentsReturnType | null> {\n // The web server does not need to handle fallback errors in production.\n return null\n }\n protected getRoutesManifest(): NormalizedRouteManifest | undefined {\n // The web server does not need to handle rewrite rules. This is done by the\n // upstream proxy (edge runtime or node server).\n return undefined\n }\n\n protected getMiddleware(): MiddlewareRoutingItem | undefined {\n // The web server does not need to handle middleware. This is done by the\n // upstream proxy (edge runtime or node server).\n return undefined\n }\n\n protected getFilesystemPaths() {\n return new Set<string>()\n }\n\n protected getinterceptionRoutePatterns(): RegExp[] {\n return (\n this.serverOptions.webServerConfig.interceptionRouteRewrites?.map(\n (rewrite) => new RegExp(buildCustomRoute('rewrite', rewrite).regex)\n ) ?? []\n )\n }\n\n protected async loadInstrumentationModule() {\n return await getEdgeInstrumentationModule()\n }\n\n protected async instrumentationOnRequestError(\n ...args: Parameters<ServerOnInstrumentationRequestError>\n ) {\n await super.instrumentationOnRequestError(...args)\n const err = args[0]\n\n if (\n process.env.NODE_ENV !== 'production' &&\n typeof __next_log_error__ === 'function'\n ) {\n __next_log_error__(err)\n } else {\n console.error(err)\n }\n }\n}\n"],"names":["NextWebServer","BaseServer","constructor","options","handleCatchallRenderRequest","req","res","parsedUrl","pathname","query","Error","normalizedPage","serverOptions","webServerConfig","isDynamicRoute","routeRegex","getNamedRouteRegex","prefixRouteKeys","dynamicRouteMatcher","getRouteMatcher","defaultRouteMatches","paramsResult","normalizeDynamicRouteParams","normalizedParams","hasValidParams","params","interpolateDynamicPath","normalizeVercelUrl","Object","keys","routeKeys","removeTrailingSlash","i18nProvider","detectedLocale","analyze","addRequestMeta","bubbleNoFallback","getRequestMeta","render","err","NoFallbackError","assign","renderOpts","extendRenderOpts","getIncrementalCache","requestHeaders","dev","IncrementalCache","requestProtocol","allowedRevalidateHeaderKeys","nextConfig","experimental","minimalMode","fetchCacheKeyPrefix","maxMemoryCacheSize","cacheMaxMemorySize","flushToDisk","CurCacheHandler","incrementalCacheHandler","getPrerenderManifest","getResponseCache","WebResponseCache","hasPage","page","getBuildId","buildId","getEnabledDirectories","app","pagesType","pages","getPagesManifest","getAppPathsManifest","attachRequestMeta","version","routes","dynamicRoutes","notFoundRoutes","preview","getEdgePreviewProps","getNextFontManifest","nextFontManifest","renderHTML","renderToHTML","UNDERSCORE_NOT_FOUND_ROUTE","disableOptimizedLoading","runtime","undefined","sendRenderResult","_req","setHeader","poweredByHeader","type","getHeader","result","contentType","promise","isDynamic","pipeTo","transformStream","writable","payload","toUnchunkedString","String","byteLength","generateEtags","generateETag","body","send","findPageComponents","url","_url","loadComponent","components","runApi","handleApiRequest","loadEnvConfig","getPublicDir","getHasStaticDir","getFontManifest","handleCompression","handleUpgrade","getFallbackErrorComponents","getRoutesManifest","getMiddleware","getFilesystemPaths","Set","getinterceptionRoutePatterns","interceptionRouteRewrites","map","rewrite","RegExp","buildCustomRoute","regex","loadInstrumentationModule","getEdgeInstrumentationModule","instrumentationOnRequestError","args","process","env","NODE_ENV","__next_log_error__","console","error"],"mappings":"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"}
|
|
@@ -11,11 +11,11 @@ Object.defineProperty(exports, "eventCliSessionStopped", {
|
|
|
11
11
|
const EVENT_VERSION = 'NEXT_CLI_SESSION_STOPPED';
|
|
12
12
|
function eventCliSessionStopped(event) {
|
|
13
13
|
// This should be an invariant, if it fails our build tooling is broken.
|
|
14
|
-
if (typeof "15.2.0-canary.
|
|
14
|
+
if (typeof "15.2.0-canary.29" !== 'string') {
|
|
15
15
|
return [];
|
|
16
16
|
}
|
|
17
17
|
const payload = {
|
|
18
|
-
nextVersion: "15.2.0-canary.
|
|
18
|
+
nextVersion: "15.2.0-canary.29",
|
|
19
19
|
nodeVersion: process.version,
|
|
20
20
|
cliCommand: event.cliCommand,
|
|
21
21
|
durationMilliseconds: event.durationMilliseconds,
|
|
@@ -36,12 +36,12 @@ function hasBabelConfig(dir) {
|
|
|
36
36
|
function eventCliSession(dir, nextConfig, event) {
|
|
37
37
|
var _nextConfig_experimental_staleTimes, _nextConfig_experimental_staleTimes1, _nextConfig_experimental_reactCompiler, _nextConfig_experimental_reactCompiler1;
|
|
38
38
|
// This should be an invariant, if it fails our build tooling is broken.
|
|
39
|
-
if (typeof "15.2.0-canary.
|
|
39
|
+
if (typeof "15.2.0-canary.29" !== 'string') {
|
|
40
40
|
return [];
|
|
41
41
|
}
|
|
42
42
|
const { images, i18n } = nextConfig || {};
|
|
43
43
|
const payload = {
|
|
44
|
-
nextVersion: "15.2.0-canary.
|
|
44
|
+
nextVersion: "15.2.0-canary.29",
|
|
45
45
|
nodeVersion: process.version,
|
|
46
46
|
cliCommand: event.cliCommand,
|
|
47
47
|
isSrcDir: event.isSrcDir,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "next",
|
|
3
|
-
"version": "15.2.0-canary.
|
|
3
|
+
"version": "15.2.0-canary.29",
|
|
4
4
|
"description": "The React Framework",
|
|
5
5
|
"main": "./dist/server/next.js",
|
|
6
6
|
"license": "MIT",
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
]
|
|
100
100
|
},
|
|
101
101
|
"dependencies": {
|
|
102
|
-
"@next/env": "15.2.0-canary.
|
|
102
|
+
"@next/env": "15.2.0-canary.29",
|
|
103
103
|
"@swc/counter": "0.1.3",
|
|
104
104
|
"@swc/helpers": "0.5.15",
|
|
105
105
|
"busboy": "1.6.0",
|
|
@@ -131,14 +131,14 @@
|
|
|
131
131
|
},
|
|
132
132
|
"optionalDependencies": {
|
|
133
133
|
"sharp": "^0.33.5",
|
|
134
|
-
"@next/swc-darwin-arm64": "15.2.0-canary.
|
|
135
|
-
"@next/swc-darwin-x64": "15.2.0-canary.
|
|
136
|
-
"@next/swc-linux-arm64-gnu": "15.2.0-canary.
|
|
137
|
-
"@next/swc-linux-arm64-musl": "15.2.0-canary.
|
|
138
|
-
"@next/swc-linux-x64-gnu": "15.2.0-canary.
|
|
139
|
-
"@next/swc-linux-x64-musl": "15.2.0-canary.
|
|
140
|
-
"@next/swc-win32-arm64-msvc": "15.2.0-canary.
|
|
141
|
-
"@next/swc-win32-x64-msvc": "15.2.0-canary.
|
|
134
|
+
"@next/swc-darwin-arm64": "15.2.0-canary.29",
|
|
135
|
+
"@next/swc-darwin-x64": "15.2.0-canary.29",
|
|
136
|
+
"@next/swc-linux-arm64-gnu": "15.2.0-canary.29",
|
|
137
|
+
"@next/swc-linux-arm64-musl": "15.2.0-canary.29",
|
|
138
|
+
"@next/swc-linux-x64-gnu": "15.2.0-canary.29",
|
|
139
|
+
"@next/swc-linux-x64-musl": "15.2.0-canary.29",
|
|
140
|
+
"@next/swc-win32-arm64-msvc": "15.2.0-canary.29",
|
|
141
|
+
"@next/swc-win32-x64-msvc": "15.2.0-canary.29"
|
|
142
142
|
},
|
|
143
143
|
"devDependencies": {
|
|
144
144
|
"@ampproject/toolbox-optimizer": "2.8.3",
|
|
@@ -172,11 +172,11 @@
|
|
|
172
172
|
"@jest/types": "29.5.0",
|
|
173
173
|
"@mswjs/interceptors": "0.23.0",
|
|
174
174
|
"@napi-rs/triples": "1.2.0",
|
|
175
|
-
"@next/font": "15.2.0-canary.
|
|
176
|
-
"@next/polyfill-module": "15.2.0-canary.
|
|
177
|
-
"@next/polyfill-nomodule": "15.2.0-canary.
|
|
178
|
-
"@next/react-refresh-utils": "15.2.0-canary.
|
|
179
|
-
"@next/swc": "15.2.0-canary.
|
|
175
|
+
"@next/font": "15.2.0-canary.29",
|
|
176
|
+
"@next/polyfill-module": "15.2.0-canary.29",
|
|
177
|
+
"@next/polyfill-nomodule": "15.2.0-canary.29",
|
|
178
|
+
"@next/react-refresh-utils": "15.2.0-canary.29",
|
|
179
|
+
"@next/swc": "15.2.0-canary.29",
|
|
180
180
|
"@opentelemetry/api": "1.6.0",
|
|
181
181
|
"@playwright/test": "1.41.2",
|
|
182
182
|
"@rspack/core": "1.2.2",
|