vinext 0.0.0 → 0.0.1
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/LICENSE +21 -0
- package/README.md +1 -0
- package/dist/build/static-export.d.ts +78 -0
- package/dist/build/static-export.d.ts.map +1 -0
- package/dist/build/static-export.js +553 -0
- package/dist/build/static-export.js.map +1 -0
- package/dist/check.d.ts +52 -0
- package/dist/check.d.ts.map +1 -0
- package/dist/check.js +483 -0
- package/dist/check.js.map +1 -0
- package/dist/cli.d.ts +15 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +565 -0
- package/dist/cli.js.map +1 -0
- package/dist/client/entry.d.ts +2 -0
- package/dist/client/entry.d.ts.map +1 -0
- package/dist/client/entry.js +85 -0
- package/dist/client/entry.js.map +1 -0
- package/dist/cloudflare/index.d.ts +8 -0
- package/dist/cloudflare/index.d.ts.map +1 -0
- package/dist/cloudflare/index.js +8 -0
- package/dist/cloudflare/index.js.map +1 -0
- package/dist/cloudflare/kv-cache-handler.d.ts +68 -0
- package/dist/cloudflare/kv-cache-handler.d.ts.map +1 -0
- package/dist/cloudflare/kv-cache-handler.js +304 -0
- package/dist/cloudflare/kv-cache-handler.js.map +1 -0
- package/dist/cloudflare/tpr.d.ts +78 -0
- package/dist/cloudflare/tpr.d.ts.map +1 -0
- package/dist/cloudflare/tpr.js +672 -0
- package/dist/cloudflare/tpr.js.map +1 -0
- package/dist/config/config-matchers.d.ts +106 -0
- package/dist/config/config-matchers.d.ts.map +1 -0
- package/dist/config/config-matchers.js +499 -0
- package/dist/config/config-matchers.js.map +1 -0
- package/dist/config/next-config.d.ts +153 -0
- package/dist/config/next-config.d.ts.map +1 -0
- package/dist/config/next-config.js +274 -0
- package/dist/config/next-config.js.map +1 -0
- package/dist/deploy.d.ts +87 -0
- package/dist/deploy.d.ts.map +1 -0
- package/dist/deploy.js +644 -0
- package/dist/deploy.js.map +1 -0
- package/dist/index.d.ts +156 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3287 -0
- package/dist/index.js.map +1 -0
- package/dist/init.d.ts +55 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +201 -0
- package/dist/init.js.map +1 -0
- package/dist/routing/app-router.d.ts +96 -0
- package/dist/routing/app-router.d.ts.map +1 -0
- package/dist/routing/app-router.js +815 -0
- package/dist/routing/app-router.js.map +1 -0
- package/dist/routing/pages-router.d.ts +52 -0
- package/dist/routing/pages-router.d.ts.map +1 -0
- package/dist/routing/pages-router.js +239 -0
- package/dist/routing/pages-router.js.map +1 -0
- package/dist/server/api-handler.d.ts +18 -0
- package/dist/server/api-handler.d.ts.map +1 -0
- package/dist/server/api-handler.js +169 -0
- package/dist/server/api-handler.js.map +1 -0
- package/dist/server/app-dev-server.d.ts +42 -0
- package/dist/server/app-dev-server.d.ts.map +1 -0
- package/dist/server/app-dev-server.js +2718 -0
- package/dist/server/app-dev-server.js.map +1 -0
- package/dist/server/app-router-entry.d.ts +18 -0
- package/dist/server/app-router-entry.d.ts.map +1 -0
- package/dist/server/app-router-entry.js +34 -0
- package/dist/server/app-router-entry.js.map +1 -0
- package/dist/server/dev-server.d.ts +40 -0
- package/dist/server/dev-server.d.ts.map +1 -0
- package/dist/server/dev-server.js +758 -0
- package/dist/server/dev-server.js.map +1 -0
- package/dist/server/html.d.ts +22 -0
- package/dist/server/html.d.ts.map +1 -0
- package/dist/server/html.js +29 -0
- package/dist/server/html.js.map +1 -0
- package/dist/server/image-optimization.d.ts +56 -0
- package/dist/server/image-optimization.d.ts.map +1 -0
- package/dist/server/image-optimization.js +103 -0
- package/dist/server/image-optimization.js.map +1 -0
- package/dist/server/instrumentation.d.ts +68 -0
- package/dist/server/instrumentation.d.ts.map +1 -0
- package/dist/server/instrumentation.js +90 -0
- package/dist/server/instrumentation.js.map +1 -0
- package/dist/server/isr-cache.d.ts +61 -0
- package/dist/server/isr-cache.d.ts.map +1 -0
- package/dist/server/isr-cache.js +134 -0
- package/dist/server/isr-cache.js.map +1 -0
- package/dist/server/metadata-routes.d.ts +103 -0
- package/dist/server/metadata-routes.d.ts.map +1 -0
- package/dist/server/metadata-routes.js +270 -0
- package/dist/server/metadata-routes.js.map +1 -0
- package/dist/server/middleware.d.ts +77 -0
- package/dist/server/middleware.d.ts.map +1 -0
- package/dist/server/middleware.js +228 -0
- package/dist/server/middleware.js.map +1 -0
- package/dist/server/prod-server.d.ts +78 -0
- package/dist/server/prod-server.d.ts.map +1 -0
- package/dist/server/prod-server.js +712 -0
- package/dist/server/prod-server.js.map +1 -0
- package/dist/shims/amp.d.ts +17 -0
- package/dist/shims/amp.d.ts.map +1 -0
- package/dist/shims/amp.js +21 -0
- package/dist/shims/amp.js.map +1 -0
- package/dist/shims/app.d.ts +12 -0
- package/dist/shims/app.d.ts.map +1 -0
- package/dist/shims/app.js +2 -0
- package/dist/shims/app.js.map +1 -0
- package/dist/shims/cache-runtime.d.ts +68 -0
- package/dist/shims/cache-runtime.d.ts.map +1 -0
- package/dist/shims/cache-runtime.js +437 -0
- package/dist/shims/cache-runtime.js.map +1 -0
- package/dist/shims/cache.d.ts +243 -0
- package/dist/shims/cache.d.ts.map +1 -0
- package/dist/shims/cache.js +415 -0
- package/dist/shims/cache.js.map +1 -0
- package/dist/shims/client-only.d.ts +18 -0
- package/dist/shims/client-only.d.ts.map +1 -0
- package/dist/shims/client-only.js +18 -0
- package/dist/shims/client-only.js.map +1 -0
- package/dist/shims/config.d.ts +27 -0
- package/dist/shims/config.d.ts.map +1 -0
- package/dist/shims/config.js +30 -0
- package/dist/shims/config.js.map +1 -0
- package/dist/shims/constants.d.ts +13 -0
- package/dist/shims/constants.d.ts.map +1 -0
- package/dist/shims/constants.js +13 -0
- package/dist/shims/constants.js.map +1 -0
- package/dist/shims/document.d.ts +33 -0
- package/dist/shims/document.d.ts.map +1 -0
- package/dist/shims/document.js +32 -0
- package/dist/shims/document.js.map +1 -0
- package/dist/shims/dynamic.d.ts +33 -0
- package/dist/shims/dynamic.d.ts.map +1 -0
- package/dist/shims/dynamic.js +148 -0
- package/dist/shims/dynamic.js.map +1 -0
- package/dist/shims/error-boundary.d.ts +33 -0
- package/dist/shims/error-boundary.d.ts.map +1 -0
- package/dist/shims/error-boundary.js +88 -0
- package/dist/shims/error-boundary.js.map +1 -0
- package/dist/shims/error.d.ts +16 -0
- package/dist/shims/error.d.ts.map +1 -0
- package/dist/shims/error.js +45 -0
- package/dist/shims/error.js.map +1 -0
- package/dist/shims/fetch-cache.d.ts +61 -0
- package/dist/shims/fetch-cache.d.ts.map +1 -0
- package/dist/shims/fetch-cache.js +307 -0
- package/dist/shims/fetch-cache.js.map +1 -0
- package/dist/shims/font-google.d.ts +122 -0
- package/dist/shims/font-google.d.ts.map +1 -0
- package/dist/shims/font-google.js +387 -0
- package/dist/shims/font-google.js.map +1 -0
- package/dist/shims/font-local.d.ts +61 -0
- package/dist/shims/font-local.d.ts.map +1 -0
- package/dist/shims/font-local.js +303 -0
- package/dist/shims/font-local.js.map +1 -0
- package/dist/shims/form.d.ts +30 -0
- package/dist/shims/form.d.ts.map +1 -0
- package/dist/shims/form.js +78 -0
- package/dist/shims/form.js.map +1 -0
- package/dist/shims/head-state.d.ts +11 -0
- package/dist/shims/head-state.d.ts.map +1 -0
- package/dist/shims/head-state.js +47 -0
- package/dist/shims/head-state.js.map +1 -0
- package/dist/shims/head.d.ts +28 -0
- package/dist/shims/head.d.ts.map +1 -0
- package/dist/shims/head.js +148 -0
- package/dist/shims/head.js.map +1 -0
- package/dist/shims/headers.d.ts +150 -0
- package/dist/shims/headers.d.ts.map +1 -0
- package/dist/shims/headers.js +412 -0
- package/dist/shims/headers.js.map +1 -0
- package/dist/shims/image-config.d.ts +30 -0
- package/dist/shims/image-config.d.ts.map +1 -0
- package/dist/shims/image-config.js +91 -0
- package/dist/shims/image-config.js.map +1 -0
- package/dist/shims/image.d.ts +63 -0
- package/dist/shims/image.d.ts.map +1 -0
- package/dist/shims/image.js +284 -0
- package/dist/shims/image.js.map +1 -0
- package/dist/shims/internal/api-utils.d.ts +12 -0
- package/dist/shims/internal/api-utils.d.ts.map +1 -0
- package/dist/shims/internal/api-utils.js +7 -0
- package/dist/shims/internal/api-utils.js.map +1 -0
- package/dist/shims/internal/app-router-context.d.ts +21 -0
- package/dist/shims/internal/app-router-context.d.ts.map +1 -0
- package/dist/shims/internal/app-router-context.js +15 -0
- package/dist/shims/internal/app-router-context.js.map +1 -0
- package/dist/shims/internal/cookies.d.ts +9 -0
- package/dist/shims/internal/cookies.d.ts.map +1 -0
- package/dist/shims/internal/cookies.js +9 -0
- package/dist/shims/internal/cookies.js.map +1 -0
- package/dist/shims/internal/router-context.d.ts +2 -0
- package/dist/shims/internal/router-context.d.ts.map +1 -0
- package/dist/shims/internal/router-context.js +9 -0
- package/dist/shims/internal/router-context.js.map +1 -0
- package/dist/shims/internal/utils.d.ts +48 -0
- package/dist/shims/internal/utils.d.ts.map +1 -0
- package/dist/shims/internal/utils.js +35 -0
- package/dist/shims/internal/utils.js.map +1 -0
- package/dist/shims/internal/work-unit-async-storage.d.ts +12 -0
- package/dist/shims/internal/work-unit-async-storage.d.ts.map +1 -0
- package/dist/shims/internal/work-unit-async-storage.js +13 -0
- package/dist/shims/internal/work-unit-async-storage.js.map +1 -0
- package/dist/shims/layout-segment-context.d.ts +21 -0
- package/dist/shims/layout-segment-context.d.ts.map +1 -0
- package/dist/shims/layout-segment-context.js +27 -0
- package/dist/shims/layout-segment-context.js.map +1 -0
- package/dist/shims/legacy-image.d.ts +52 -0
- package/dist/shims/legacy-image.d.ts.map +1 -0
- package/dist/shims/legacy-image.js +46 -0
- package/dist/shims/legacy-image.js.map +1 -0
- package/dist/shims/link.d.ts +48 -0
- package/dist/shims/link.d.ts.map +1 -0
- package/dist/shims/link.js +395 -0
- package/dist/shims/link.js.map +1 -0
- package/dist/shims/metadata.d.ts +184 -0
- package/dist/shims/metadata.d.ts.map +1 -0
- package/dist/shims/metadata.js +472 -0
- package/dist/shims/metadata.js.map +1 -0
- package/dist/shims/navigation-state.d.ts +14 -0
- package/dist/shims/navigation-state.d.ts.map +1 -0
- package/dist/shims/navigation-state.js +77 -0
- package/dist/shims/navigation-state.js.map +1 -0
- package/dist/shims/navigation.d.ts +201 -0
- package/dist/shims/navigation.d.ts.map +1 -0
- package/dist/shims/navigation.js +672 -0
- package/dist/shims/navigation.js.map +1 -0
- package/dist/shims/og.d.ts +20 -0
- package/dist/shims/og.d.ts.map +1 -0
- package/dist/shims/og.js +19 -0
- package/dist/shims/og.js.map +1 -0
- package/dist/shims/router-state.d.ts +11 -0
- package/dist/shims/router-state.d.ts.map +1 -0
- package/dist/shims/router-state.js +56 -0
- package/dist/shims/router-state.js.map +1 -0
- package/dist/shims/router.d.ts +103 -0
- package/dist/shims/router.d.ts.map +1 -0
- package/dist/shims/router.js +536 -0
- package/dist/shims/router.js.map +1 -0
- package/dist/shims/script.d.ts +58 -0
- package/dist/shims/script.d.ts.map +1 -0
- package/dist/shims/script.js +163 -0
- package/dist/shims/script.js.map +1 -0
- package/dist/shims/server-only.d.ts +19 -0
- package/dist/shims/server-only.d.ts.map +1 -0
- package/dist/shims/server-only.js +19 -0
- package/dist/shims/server-only.js.map +1 -0
- package/dist/shims/server.d.ts +178 -0
- package/dist/shims/server.d.ts.map +1 -0
- package/dist/shims/server.js +377 -0
- package/dist/shims/server.js.map +1 -0
- package/dist/shims/web-vitals.d.ts +24 -0
- package/dist/shims/web-vitals.d.ts.map +1 -0
- package/dist/shims/web-vitals.js +17 -0
- package/dist/shims/web-vitals.js.map +1 -0
- package/dist/utils/hash.d.ts +6 -0
- package/dist/utils/hash.d.ts.map +1 -0
- package/dist/utils/hash.js +20 -0
- package/dist/utils/hash.js.map +1 -0
- package/dist/utils/project.d.ts +36 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +112 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/query.d.ts +10 -0
- package/dist/utils/query.d.ts.map +1 -0
- package/dist/utils/query.js +27 -0
- package/dist/utils/query.js.map +1 -0
- package/package.json +65 -7
- package/index.js +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tpr.js","sourceRoot":"","sources":["../../src/cloudflare/tpr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config pattern matching and rule application utilities.
|
|
3
|
+
*
|
|
4
|
+
* Shared between the dev server (index.ts) and the production server
|
|
5
|
+
* (prod-server.ts) so both apply next.config.js rules identically.
|
|
6
|
+
*/
|
|
7
|
+
import type { NextRedirect, NextRewrite, NextHeader, HasCondition } from "./next-config.js";
|
|
8
|
+
/**
|
|
9
|
+
* Detect regex patterns vulnerable to catastrophic backtracking (ReDoS).
|
|
10
|
+
*
|
|
11
|
+
* Uses a lightweight heuristic: scans the pattern string for nested quantifiers
|
|
12
|
+
* (a quantifier applied to a group that itself contains a quantifier). This
|
|
13
|
+
* catches the most common pathological patterns like `(a+)+`, `(.*)*`,
|
|
14
|
+
* `([^/]+)+`, `(a|a+)+` without needing a full regex parser.
|
|
15
|
+
*
|
|
16
|
+
* Returns true if the pattern appears safe, false if it's potentially dangerous.
|
|
17
|
+
*/
|
|
18
|
+
export declare function isSafeRegex(pattern: string): boolean;
|
|
19
|
+
/**
|
|
20
|
+
* Compile a regex pattern safely. Returns the compiled RegExp or null if the
|
|
21
|
+
* pattern is invalid or vulnerable to ReDoS.
|
|
22
|
+
*
|
|
23
|
+
* Logs a warning when a pattern is rejected so developers can fix their config.
|
|
24
|
+
*/
|
|
25
|
+
export declare function safeRegExp(pattern: string, flags?: string): RegExp | null;
|
|
26
|
+
/**
|
|
27
|
+
* Request context needed for evaluating has/missing conditions.
|
|
28
|
+
* Callers extract the relevant parts from the incoming Request.
|
|
29
|
+
*/
|
|
30
|
+
export interface RequestContext {
|
|
31
|
+
headers: Headers;
|
|
32
|
+
cookies: Record<string, string>;
|
|
33
|
+
query: URLSearchParams;
|
|
34
|
+
host: string;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Parse a Cookie header string into a key-value record.
|
|
38
|
+
*/
|
|
39
|
+
export declare function parseCookies(cookieHeader: string | null): Record<string, string>;
|
|
40
|
+
/**
|
|
41
|
+
* Build a RequestContext from a Web Request object.
|
|
42
|
+
*/
|
|
43
|
+
export declare function requestContextFromRequest(request: Request): RequestContext;
|
|
44
|
+
/**
|
|
45
|
+
* Check all has/missing conditions for a config rule.
|
|
46
|
+
* Returns true if the rule should be applied (all has conditions pass, all missing conditions pass).
|
|
47
|
+
*
|
|
48
|
+
* - has: every condition must match (the request must have it)
|
|
49
|
+
* - missing: every condition must NOT match (the request must not have it)
|
|
50
|
+
*/
|
|
51
|
+
export declare function checkHasConditions(has: HasCondition[] | undefined, missing: HasCondition[] | undefined, ctx: RequestContext): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Match a Next.js config pattern (from redirects/rewrites sources) against a pathname.
|
|
54
|
+
* Returns matched params or null.
|
|
55
|
+
*
|
|
56
|
+
* Supports:
|
|
57
|
+
* :param - matches a single path segment
|
|
58
|
+
* :param* - matches zero or more segments (catch-all)
|
|
59
|
+
* :param+ - matches one or more segments
|
|
60
|
+
* (regex) - inline regex patterns in the source
|
|
61
|
+
* :param(constraint) - named param with inline regex constraint
|
|
62
|
+
*/
|
|
63
|
+
export declare function matchConfigPattern(pathname: string, pattern: string): Record<string, string> | null;
|
|
64
|
+
/**
|
|
65
|
+
* Apply redirect rules from next.config.js.
|
|
66
|
+
* Returns the redirect info if a redirect was matched, or null.
|
|
67
|
+
*
|
|
68
|
+
* When `ctx` is provided, has/missing conditions on the redirect rules
|
|
69
|
+
* are evaluated against the request context (cookies, headers, query, host).
|
|
70
|
+
*/
|
|
71
|
+
export declare function matchRedirect(pathname: string, redirects: NextRedirect[], ctx?: RequestContext): {
|
|
72
|
+
destination: string;
|
|
73
|
+
permanent: boolean;
|
|
74
|
+
} | null;
|
|
75
|
+
/**
|
|
76
|
+
* Apply rewrite rules from next.config.js.
|
|
77
|
+
* Returns the rewritten URL or null if no rewrite matched.
|
|
78
|
+
*
|
|
79
|
+
* When `ctx` is provided, has/missing conditions on the rewrite rules
|
|
80
|
+
* are evaluated against the request context (cookies, headers, query, host).
|
|
81
|
+
*/
|
|
82
|
+
export declare function matchRewrite(pathname: string, rewrites: NextRewrite[], ctx?: RequestContext): string | null;
|
|
83
|
+
/**
|
|
84
|
+
* Check if a URL is an external (absolute) URL.
|
|
85
|
+
* Returns true for URLs starting with http:// or https://.
|
|
86
|
+
*/
|
|
87
|
+
export declare function isExternalUrl(url: string): boolean;
|
|
88
|
+
/**
|
|
89
|
+
* Proxy an incoming request to an external URL and return the upstream response.
|
|
90
|
+
*
|
|
91
|
+
* Used for external rewrites (e.g. `/ph/:path*` → `https://us.i.posthog.com/:path*`).
|
|
92
|
+
* Next.js handles these as server-side reverse proxies, forwarding the request
|
|
93
|
+
* method, headers, and body to the external destination.
|
|
94
|
+
*
|
|
95
|
+
* Works in all runtimes (Node.js, Cloudflare Workers) via the standard fetch() API.
|
|
96
|
+
*/
|
|
97
|
+
export declare function proxyExternalRequest(request: Request, externalUrl: string): Promise<Response>;
|
|
98
|
+
/**
|
|
99
|
+
* Apply custom header rules from next.config.js.
|
|
100
|
+
* Returns an array of { key, value } pairs to set on the response.
|
|
101
|
+
*/
|
|
102
|
+
export declare function matchHeaders(pathname: string, headers: NextHeader[]): Array<{
|
|
103
|
+
key: string;
|
|
104
|
+
value: string;
|
|
105
|
+
}>;
|
|
106
|
+
//# sourceMappingURL=config-matchers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-matchers.d.ts","sourceRoot":"","sources":["../../src/config/config-matchers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAc5F;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAsGpD;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAczE;AAED;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,KAAK,EAAE,eAAe,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAWhF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,cAAc,CAQ1E;AAmDD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,YAAY,EAAE,GAAG,SAAS,EAC/B,OAAO,EAAE,YAAY,EAAE,GAAG,SAAS,EACnC,GAAG,EAAE,cAAc,GAClB,OAAO,CAYT;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAgF/B;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,YAAY,EAAE,EACzB,GAAG,CAAC,EAAE,cAAc,GACnB;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAsBpD;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,WAAW,EAAE,EACvB,GAAG,CAAC,EAAE,cAAc,GACnB,MAAM,GAAG,IAAI,CAsBf;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,QAAQ,CAAC,CAyDnB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,UAAU,EAAE,GACpB,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBvC"}
|
|
@@ -0,0 +1,499 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config pattern matching and rule application utilities.
|
|
3
|
+
*
|
|
4
|
+
* Shared between the dev server (index.ts) and the production server
|
|
5
|
+
* (prod-server.ts) so both apply next.config.js rules identically.
|
|
6
|
+
*/
|
|
7
|
+
/** Hop-by-hop headers that should not be forwarded through a proxy. */
|
|
8
|
+
const HOP_BY_HOP_HEADERS = new Set([
|
|
9
|
+
"connection",
|
|
10
|
+
"keep-alive",
|
|
11
|
+
"proxy-authenticate",
|
|
12
|
+
"proxy-authorization",
|
|
13
|
+
"te",
|
|
14
|
+
"trailers",
|
|
15
|
+
"transfer-encoding",
|
|
16
|
+
"upgrade",
|
|
17
|
+
]);
|
|
18
|
+
/**
|
|
19
|
+
* Detect regex patterns vulnerable to catastrophic backtracking (ReDoS).
|
|
20
|
+
*
|
|
21
|
+
* Uses a lightweight heuristic: scans the pattern string for nested quantifiers
|
|
22
|
+
* (a quantifier applied to a group that itself contains a quantifier). This
|
|
23
|
+
* catches the most common pathological patterns like `(a+)+`, `(.*)*`,
|
|
24
|
+
* `([^/]+)+`, `(a|a+)+` without needing a full regex parser.
|
|
25
|
+
*
|
|
26
|
+
* Returns true if the pattern appears safe, false if it's potentially dangerous.
|
|
27
|
+
*/
|
|
28
|
+
export function isSafeRegex(pattern) {
|
|
29
|
+
// Track parenthesis nesting depth and whether we've seen a quantifier
|
|
30
|
+
// at each depth level.
|
|
31
|
+
const quantifierAtDepth = [];
|
|
32
|
+
let depth = 0;
|
|
33
|
+
let i = 0;
|
|
34
|
+
while (i < pattern.length) {
|
|
35
|
+
const ch = pattern[i];
|
|
36
|
+
// Skip escaped characters
|
|
37
|
+
if (ch === "\\") {
|
|
38
|
+
i += 2;
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
// Skip character classes [...] — quantifiers inside them are literal
|
|
42
|
+
if (ch === "[") {
|
|
43
|
+
i++;
|
|
44
|
+
while (i < pattern.length && pattern[i] !== "]") {
|
|
45
|
+
if (pattern[i] === "\\")
|
|
46
|
+
i++; // skip escaped char in class
|
|
47
|
+
i++;
|
|
48
|
+
}
|
|
49
|
+
i++; // skip closing ]
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
if (ch === "(") {
|
|
53
|
+
depth++;
|
|
54
|
+
// Initialize: no quantifier seen yet at this new depth
|
|
55
|
+
if (quantifierAtDepth.length <= depth) {
|
|
56
|
+
quantifierAtDepth.push(false);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
quantifierAtDepth[depth] = false;
|
|
60
|
+
}
|
|
61
|
+
i++;
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
if (ch === ")") {
|
|
65
|
+
const hadQuantifier = depth > 0 && quantifierAtDepth[depth];
|
|
66
|
+
if (depth > 0)
|
|
67
|
+
depth--;
|
|
68
|
+
// Look ahead for a quantifier on this group: +, *, {n,m}
|
|
69
|
+
// Note: '?' after ')' means "zero or one" which does NOT cause catastrophic
|
|
70
|
+
// backtracking — it only allows 2 paths (match/skip), not exponential.
|
|
71
|
+
// Only unbounded repetition (+, *, {n,}) on a group with inner quantifiers is dangerous.
|
|
72
|
+
const next = pattern[i + 1];
|
|
73
|
+
if (next === "+" || next === "*" || next === "{") {
|
|
74
|
+
if (hadQuantifier) {
|
|
75
|
+
// Nested quantifier detected: quantifier on a group that contains a quantifier
|
|
76
|
+
return false;
|
|
77
|
+
}
|
|
78
|
+
// Mark the enclosing depth as having a quantifier
|
|
79
|
+
if (depth >= 0 && depth < quantifierAtDepth.length) {
|
|
80
|
+
quantifierAtDepth[depth] = true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
i++;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
// Detect quantifiers: +, *, ?, {n,m}
|
|
87
|
+
// '?' is a quantifier (optional) unless it follows another quantifier (+, *, ?, })
|
|
88
|
+
// in which case it's a non-greedy modifier.
|
|
89
|
+
if (ch === "+" || ch === "*") {
|
|
90
|
+
if (depth > 0) {
|
|
91
|
+
quantifierAtDepth[depth] = true;
|
|
92
|
+
}
|
|
93
|
+
i++;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
if (ch === "?") {
|
|
97
|
+
// '?' after +, *, ?, or } is a non-greedy modifier, not a quantifier
|
|
98
|
+
const prev = i > 0 ? pattern[i - 1] : "";
|
|
99
|
+
if (prev !== "+" && prev !== "*" && prev !== "?" && prev !== "}") {
|
|
100
|
+
if (depth > 0) {
|
|
101
|
+
quantifierAtDepth[depth] = true;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
i++;
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
107
|
+
if (ch === "{") {
|
|
108
|
+
// Check if this is a quantifier {n}, {n,}, {n,m}
|
|
109
|
+
let j = i + 1;
|
|
110
|
+
while (j < pattern.length && /[\d,]/.test(pattern[j]))
|
|
111
|
+
j++;
|
|
112
|
+
if (j < pattern.length && pattern[j] === "}" && j > i + 1) {
|
|
113
|
+
if (depth > 0) {
|
|
114
|
+
quantifierAtDepth[depth] = true;
|
|
115
|
+
}
|
|
116
|
+
i = j + 1;
|
|
117
|
+
continue;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
i++;
|
|
121
|
+
}
|
|
122
|
+
return true;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Compile a regex pattern safely. Returns the compiled RegExp or null if the
|
|
126
|
+
* pattern is invalid or vulnerable to ReDoS.
|
|
127
|
+
*
|
|
128
|
+
* Logs a warning when a pattern is rejected so developers can fix their config.
|
|
129
|
+
*/
|
|
130
|
+
export function safeRegExp(pattern, flags) {
|
|
131
|
+
if (!isSafeRegex(pattern)) {
|
|
132
|
+
console.warn(`[vinext] Ignoring potentially unsafe regex pattern (ReDoS risk): ${pattern}\n` +
|
|
133
|
+
` Patterns with nested quantifiers (e.g. (a+)+) can cause catastrophic backtracking.\n` +
|
|
134
|
+
` Simplify the pattern to avoid nested repetition.`);
|
|
135
|
+
return null;
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
return new RegExp(pattern, flags);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Parse a Cookie header string into a key-value record.
|
|
146
|
+
*/
|
|
147
|
+
export function parseCookies(cookieHeader) {
|
|
148
|
+
if (!cookieHeader)
|
|
149
|
+
return {};
|
|
150
|
+
const cookies = {};
|
|
151
|
+
for (const part of cookieHeader.split(";")) {
|
|
152
|
+
const eq = part.indexOf("=");
|
|
153
|
+
if (eq === -1)
|
|
154
|
+
continue;
|
|
155
|
+
const key = part.slice(0, eq).trim();
|
|
156
|
+
const value = part.slice(eq + 1).trim();
|
|
157
|
+
if (key)
|
|
158
|
+
cookies[key] = value;
|
|
159
|
+
}
|
|
160
|
+
return cookies;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Build a RequestContext from a Web Request object.
|
|
164
|
+
*/
|
|
165
|
+
export function requestContextFromRequest(request) {
|
|
166
|
+
const url = new URL(request.url);
|
|
167
|
+
return {
|
|
168
|
+
headers: request.headers,
|
|
169
|
+
cookies: parseCookies(request.headers.get("cookie")),
|
|
170
|
+
query: url.searchParams,
|
|
171
|
+
host: request.headers.get("host") ?? url.host,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Check a single has/missing condition against request context.
|
|
176
|
+
* Returns true if the condition is satisfied.
|
|
177
|
+
*/
|
|
178
|
+
function checkSingleCondition(condition, ctx) {
|
|
179
|
+
switch (condition.type) {
|
|
180
|
+
case "header": {
|
|
181
|
+
const headerValue = ctx.headers.get(condition.key);
|
|
182
|
+
if (headerValue === null)
|
|
183
|
+
return false;
|
|
184
|
+
if (condition.value !== undefined) {
|
|
185
|
+
const re = safeRegExp(condition.value);
|
|
186
|
+
if (re)
|
|
187
|
+
return re.test(headerValue);
|
|
188
|
+
return headerValue === condition.value;
|
|
189
|
+
}
|
|
190
|
+
return true; // Key exists, no value constraint
|
|
191
|
+
}
|
|
192
|
+
case "cookie": {
|
|
193
|
+
const cookieValue = ctx.cookies[condition.key];
|
|
194
|
+
if (cookieValue === undefined)
|
|
195
|
+
return false;
|
|
196
|
+
if (condition.value !== undefined) {
|
|
197
|
+
const re = safeRegExp(condition.value);
|
|
198
|
+
if (re)
|
|
199
|
+
return re.test(cookieValue);
|
|
200
|
+
return cookieValue === condition.value;
|
|
201
|
+
}
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
case "query": {
|
|
205
|
+
const queryValue = ctx.query.get(condition.key);
|
|
206
|
+
if (queryValue === null)
|
|
207
|
+
return false;
|
|
208
|
+
if (condition.value !== undefined) {
|
|
209
|
+
const re = safeRegExp(condition.value);
|
|
210
|
+
if (re)
|
|
211
|
+
return re.test(queryValue);
|
|
212
|
+
return queryValue === condition.value;
|
|
213
|
+
}
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
case "host": {
|
|
217
|
+
if (condition.value !== undefined) {
|
|
218
|
+
const re = safeRegExp(condition.value);
|
|
219
|
+
if (re)
|
|
220
|
+
return re.test(ctx.host);
|
|
221
|
+
return ctx.host === condition.value;
|
|
222
|
+
}
|
|
223
|
+
return ctx.host === condition.key;
|
|
224
|
+
}
|
|
225
|
+
default:
|
|
226
|
+
return false;
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Check all has/missing conditions for a config rule.
|
|
231
|
+
* Returns true if the rule should be applied (all has conditions pass, all missing conditions pass).
|
|
232
|
+
*
|
|
233
|
+
* - has: every condition must match (the request must have it)
|
|
234
|
+
* - missing: every condition must NOT match (the request must not have it)
|
|
235
|
+
*/
|
|
236
|
+
export function checkHasConditions(has, missing, ctx) {
|
|
237
|
+
if (has) {
|
|
238
|
+
for (const condition of has) {
|
|
239
|
+
if (!checkSingleCondition(condition, ctx))
|
|
240
|
+
return false;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (missing) {
|
|
244
|
+
for (const condition of missing) {
|
|
245
|
+
if (checkSingleCondition(condition, ctx))
|
|
246
|
+
return false;
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
return true;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* Match a Next.js config pattern (from redirects/rewrites sources) against a pathname.
|
|
253
|
+
* Returns matched params or null.
|
|
254
|
+
*
|
|
255
|
+
* Supports:
|
|
256
|
+
* :param - matches a single path segment
|
|
257
|
+
* :param* - matches zero or more segments (catch-all)
|
|
258
|
+
* :param+ - matches one or more segments
|
|
259
|
+
* (regex) - inline regex patterns in the source
|
|
260
|
+
* :param(constraint) - named param with inline regex constraint
|
|
261
|
+
*/
|
|
262
|
+
export function matchConfigPattern(pathname, pattern) {
|
|
263
|
+
// If the pattern contains regex groups like (\d+) or (.*), use regex matching.
|
|
264
|
+
// Also enter this branch when a catch-all parameter (:param* or :param+) is
|
|
265
|
+
// followed by a literal suffix (e.g. "/:path*.md"). Without this, the suffix
|
|
266
|
+
// pattern falls through to the simple segment matcher which incorrectly treats
|
|
267
|
+
// the whole segment (":path*.md") as a named parameter and matches everything.
|
|
268
|
+
if (pattern.includes("(") ||
|
|
269
|
+
pattern.includes("\\") ||
|
|
270
|
+
/:\w+[*+][^/]/.test(pattern)) {
|
|
271
|
+
try {
|
|
272
|
+
const paramNames = [];
|
|
273
|
+
const regexStr = pattern
|
|
274
|
+
.replace(/\./g, "\\.")
|
|
275
|
+
// :param* with optional constraint
|
|
276
|
+
.replace(/:(\w+)\*(?:\(([^)]+)\))?/g, (_m, name, constraint) => {
|
|
277
|
+
paramNames.push(name);
|
|
278
|
+
return constraint ? `(${constraint})` : "(.*)";
|
|
279
|
+
})
|
|
280
|
+
// :param+ with optional constraint
|
|
281
|
+
.replace(/:(\w+)\+(?:\(([^)]+)\))?/g, (_m, name, constraint) => {
|
|
282
|
+
paramNames.push(name);
|
|
283
|
+
return constraint ? `(${constraint})` : "(.+)";
|
|
284
|
+
})
|
|
285
|
+
// :param(constraint) - named param with inline regex constraint
|
|
286
|
+
.replace(/:(\w+)\(([^)]+)\)/g, (_m, name, constraint) => {
|
|
287
|
+
paramNames.push(name);
|
|
288
|
+
return `(${constraint})`;
|
|
289
|
+
})
|
|
290
|
+
// :param - plain named param
|
|
291
|
+
.replace(/:(\w+)/g, (_m, name) => {
|
|
292
|
+
paramNames.push(name);
|
|
293
|
+
return "([^/]+)";
|
|
294
|
+
});
|
|
295
|
+
const re = safeRegExp("^" + regexStr + "$");
|
|
296
|
+
if (!re)
|
|
297
|
+
return null;
|
|
298
|
+
const match = re.exec(pathname);
|
|
299
|
+
if (!match)
|
|
300
|
+
return null;
|
|
301
|
+
const params = Object.create(null);
|
|
302
|
+
for (let i = 0; i < paramNames.length; i++) {
|
|
303
|
+
params[paramNames[i]] = match[i + 1] ?? "";
|
|
304
|
+
}
|
|
305
|
+
return params;
|
|
306
|
+
}
|
|
307
|
+
catch {
|
|
308
|
+
// Fall through to segment-based matching
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
// Check for catch-all patterns (:param* or :param+) without regex groups
|
|
312
|
+
const catchAllMatch = pattern.match(/:(\w+)(\*|\+)$/);
|
|
313
|
+
if (catchAllMatch) {
|
|
314
|
+
const prefix = pattern.slice(0, pattern.lastIndexOf(":"));
|
|
315
|
+
const paramName = catchAllMatch[1];
|
|
316
|
+
const isPlus = catchAllMatch[2] === "+";
|
|
317
|
+
if (!pathname.startsWith(prefix.replace(/\/$/, "")))
|
|
318
|
+
return null;
|
|
319
|
+
const rest = pathname.slice(prefix.replace(/\/$/, "").length);
|
|
320
|
+
if (isPlus && (!rest || rest === "/"))
|
|
321
|
+
return null;
|
|
322
|
+
let restValue = rest.startsWith("/") ? rest.slice(1) : rest;
|
|
323
|
+
try {
|
|
324
|
+
restValue = decodeURIComponent(restValue);
|
|
325
|
+
}
|
|
326
|
+
catch { /* malformed percent-encoding */ }
|
|
327
|
+
return { [paramName]: restValue };
|
|
328
|
+
}
|
|
329
|
+
// Simple segment-based matching for exact patterns and :param
|
|
330
|
+
const parts = pattern.split("/");
|
|
331
|
+
const pathParts = pathname.split("/");
|
|
332
|
+
if (parts.length !== pathParts.length)
|
|
333
|
+
return null;
|
|
334
|
+
const params = Object.create(null);
|
|
335
|
+
for (let i = 0; i < parts.length; i++) {
|
|
336
|
+
if (parts[i].startsWith(":")) {
|
|
337
|
+
params[parts[i].slice(1)] = pathParts[i];
|
|
338
|
+
}
|
|
339
|
+
else if (parts[i] !== pathParts[i]) {
|
|
340
|
+
return null;
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
return params;
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Apply redirect rules from next.config.js.
|
|
347
|
+
* Returns the redirect info if a redirect was matched, or null.
|
|
348
|
+
*
|
|
349
|
+
* When `ctx` is provided, has/missing conditions on the redirect rules
|
|
350
|
+
* are evaluated against the request context (cookies, headers, query, host).
|
|
351
|
+
*/
|
|
352
|
+
export function matchRedirect(pathname, redirects, ctx) {
|
|
353
|
+
for (const redirect of redirects) {
|
|
354
|
+
const params = matchConfigPattern(pathname, redirect.source);
|
|
355
|
+
if (params) {
|
|
356
|
+
// Check has/missing conditions if present and context is available
|
|
357
|
+
if (ctx && (redirect.has || redirect.missing)) {
|
|
358
|
+
if (!checkHasConditions(redirect.has, redirect.missing, ctx)) {
|
|
359
|
+
continue;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
let dest = redirect.destination;
|
|
363
|
+
for (const [key, value] of Object.entries(params)) {
|
|
364
|
+
// Replace :param*, :param+, and :param forms in the destination.
|
|
365
|
+
// The catch-all suffixes (* and +) must be stripped along with the param name.
|
|
366
|
+
dest = dest.replace(`:${key}*`, value);
|
|
367
|
+
dest = dest.replace(`:${key}+`, value);
|
|
368
|
+
dest = dest.replace(`:${key}`, value);
|
|
369
|
+
}
|
|
370
|
+
return { destination: dest, permanent: redirect.permanent };
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
return null;
|
|
374
|
+
}
|
|
375
|
+
/**
|
|
376
|
+
* Apply rewrite rules from next.config.js.
|
|
377
|
+
* Returns the rewritten URL or null if no rewrite matched.
|
|
378
|
+
*
|
|
379
|
+
* When `ctx` is provided, has/missing conditions on the rewrite rules
|
|
380
|
+
* are evaluated against the request context (cookies, headers, query, host).
|
|
381
|
+
*/
|
|
382
|
+
export function matchRewrite(pathname, rewrites, ctx) {
|
|
383
|
+
for (const rewrite of rewrites) {
|
|
384
|
+
const params = matchConfigPattern(pathname, rewrite.source);
|
|
385
|
+
if (params) {
|
|
386
|
+
// Check has/missing conditions if present and context is available
|
|
387
|
+
if (ctx && (rewrite.has || rewrite.missing)) {
|
|
388
|
+
if (!checkHasConditions(rewrite.has, rewrite.missing, ctx)) {
|
|
389
|
+
continue;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
let dest = rewrite.destination;
|
|
393
|
+
for (const [key, value] of Object.entries(params)) {
|
|
394
|
+
// Replace :param*, :param+, and :param forms in the destination.
|
|
395
|
+
// The catch-all suffixes (* and +) must be stripped along with the param name.
|
|
396
|
+
dest = dest.replace(`:${key}*`, value);
|
|
397
|
+
dest = dest.replace(`:${key}+`, value);
|
|
398
|
+
dest = dest.replace(`:${key}`, value);
|
|
399
|
+
}
|
|
400
|
+
return dest;
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
/**
|
|
406
|
+
* Check if a URL is an external (absolute) URL.
|
|
407
|
+
* Returns true for URLs starting with http:// or https://.
|
|
408
|
+
*/
|
|
409
|
+
export function isExternalUrl(url) {
|
|
410
|
+
return url.startsWith("http://") || url.startsWith("https://");
|
|
411
|
+
}
|
|
412
|
+
/**
|
|
413
|
+
* Proxy an incoming request to an external URL and return the upstream response.
|
|
414
|
+
*
|
|
415
|
+
* Used for external rewrites (e.g. `/ph/:path*` → `https://us.i.posthog.com/:path*`).
|
|
416
|
+
* Next.js handles these as server-side reverse proxies, forwarding the request
|
|
417
|
+
* method, headers, and body to the external destination.
|
|
418
|
+
*
|
|
419
|
+
* Works in all runtimes (Node.js, Cloudflare Workers) via the standard fetch() API.
|
|
420
|
+
*/
|
|
421
|
+
export async function proxyExternalRequest(request, externalUrl) {
|
|
422
|
+
// Build the full external URL, preserving query parameters from the original request
|
|
423
|
+
const originalUrl = new URL(request.url);
|
|
424
|
+
const targetUrl = new URL(externalUrl);
|
|
425
|
+
// If the rewrite destination already has query params, merge them.
|
|
426
|
+
// Destination params take precedence — original request params are only added
|
|
427
|
+
// when the destination doesn't already specify that key.
|
|
428
|
+
for (const [key, value] of originalUrl.searchParams) {
|
|
429
|
+
if (!targetUrl.searchParams.has(key)) {
|
|
430
|
+
targetUrl.searchParams.set(key, value);
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
// Forward the request with appropriate headers
|
|
434
|
+
const headers = new Headers(request.headers);
|
|
435
|
+
// Set Host to the external target (required for correct routing)
|
|
436
|
+
headers.set("host", targetUrl.host);
|
|
437
|
+
// Remove headers that should not be forwarded to external services
|
|
438
|
+
headers.delete("connection");
|
|
439
|
+
const method = request.method;
|
|
440
|
+
const hasBody = method !== "GET" && method !== "HEAD";
|
|
441
|
+
const init = {
|
|
442
|
+
method,
|
|
443
|
+
headers,
|
|
444
|
+
redirect: "manual", // Don't follow redirects — pass them through to the client
|
|
445
|
+
};
|
|
446
|
+
if (hasBody && request.body) {
|
|
447
|
+
init.body = request.body;
|
|
448
|
+
init.duplex = "half";
|
|
449
|
+
}
|
|
450
|
+
let upstreamResponse;
|
|
451
|
+
try {
|
|
452
|
+
upstreamResponse = await fetch(targetUrl.href, init);
|
|
453
|
+
}
|
|
454
|
+
catch (e) {
|
|
455
|
+
console.error("[vinext] External rewrite proxy error:", e);
|
|
456
|
+
return new Response("Bad Gateway", { status: 502 });
|
|
457
|
+
}
|
|
458
|
+
// Build the response to return to the client.
|
|
459
|
+
// Copy all upstream headers except hop-by-hop headers.
|
|
460
|
+
const responseHeaders = new Headers();
|
|
461
|
+
upstreamResponse.headers.forEach((value, key) => {
|
|
462
|
+
if (!HOP_BY_HOP_HEADERS.has(key.toLowerCase())) {
|
|
463
|
+
responseHeaders.append(key, value);
|
|
464
|
+
}
|
|
465
|
+
});
|
|
466
|
+
return new Response(upstreamResponse.body, {
|
|
467
|
+
status: upstreamResponse.status,
|
|
468
|
+
statusText: upstreamResponse.statusText,
|
|
469
|
+
headers: responseHeaders,
|
|
470
|
+
});
|
|
471
|
+
}
|
|
472
|
+
/**
|
|
473
|
+
* Apply custom header rules from next.config.js.
|
|
474
|
+
* Returns an array of { key, value } pairs to set on the response.
|
|
475
|
+
*/
|
|
476
|
+
export function matchHeaders(pathname, headers) {
|
|
477
|
+
const result = [];
|
|
478
|
+
for (const rule of headers) {
|
|
479
|
+
// Extract regex groups first, process the rest, then restore groups.
|
|
480
|
+
const groups = [];
|
|
481
|
+
const withPlaceholders = rule.source.replace(/\(([^)]+)\)/g, (_m, inner) => {
|
|
482
|
+
groups.push(inner);
|
|
483
|
+
return `___GROUP_${groups.length - 1}___`;
|
|
484
|
+
});
|
|
485
|
+
const escaped = withPlaceholders
|
|
486
|
+
.replace(/\./g, "\\.")
|
|
487
|
+
.replace(/\+/g, "\\+")
|
|
488
|
+
.replace(/\?/g, "\\?")
|
|
489
|
+
.replace(/\*/g, ".*")
|
|
490
|
+
.replace(/:\w+/g, "[^/]+")
|
|
491
|
+
.replace(/___GROUP_(\d+)___/g, (_m, idx) => `(${groups[Number(idx)]})`);
|
|
492
|
+
const sourceRegex = safeRegExp("^" + escaped + "$");
|
|
493
|
+
if (sourceRegex && sourceRegex.test(pathname)) {
|
|
494
|
+
result.push(...rule.headers);
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
return result;
|
|
498
|
+
}
|
|
499
|
+
//# sourceMappingURL=config-matchers.js.map
|