@edgeone/opennextjs-pages 0.1.4 → 0.1.5
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.
|
@@ -3650,6 +3650,22 @@ async function executeMiddleware({request}) {
|
|
|
3650
3650
|
}
|
|
3651
3651
|
} catch (e) {}
|
|
3652
3652
|
}
|
|
3653
|
+
|
|
3654
|
+
// \u4ECE EdgeOne request.eo \u83B7\u53D6 geo \u548C ip \u4FE1\u606F
|
|
3655
|
+
const eoData = request.eo || {};
|
|
3656
|
+
const eoGeo = eoData.geo || {};
|
|
3657
|
+
|
|
3658
|
+
// \u5C06 EdgeOne geo \u683C\u5F0F\u8F6C\u6362\u4E3A Next.js geo \u683C\u5F0F
|
|
3659
|
+
// EdgeOne: { countryCodeAlpha2, regionCode, cityName, latitude, longitude, ... }
|
|
3660
|
+
// Next.js: { country, region, city, latitude, longitude }
|
|
3661
|
+
const nextGeo = {
|
|
3662
|
+
country: eoGeo.countryCodeAlpha2 || undefined,
|
|
3663
|
+
region: eoGeo.regionCode || undefined,
|
|
3664
|
+
city: eoGeo.cityName || undefined,
|
|
3665
|
+
latitude: eoGeo.latitude !== undefined ? String(eoGeo.latitude) : undefined,
|
|
3666
|
+
longitude: eoGeo.longitude !== undefined ? String(eoGeo.longitude) : undefined,
|
|
3667
|
+
};
|
|
3668
|
+
const clientIp = eoData.clientIp || request.headers.get('x-forwarded-for') || '';
|
|
3653
3669
|
|
|
3654
3670
|
// \u6784\u9020\u8BF7\u6C42\u5BF9\u8C61
|
|
3655
3671
|
let nextRequest;
|
|
@@ -3659,7 +3675,9 @@ async function executeMiddleware({request}) {
|
|
|
3659
3675
|
// NextRequest \u6784\u9020\u51FD\u6570\u7B7E\u540D: new NextRequest(input, init?)
|
|
3660
3676
|
// input \u53EF\u4EE5\u662F URL \u5B57\u7B26\u4E32\u6216 Request \u5BF9\u8C61
|
|
3661
3677
|
nextRequest = new NextRequestClass(request, {
|
|
3662
|
-
nextConfig: {}
|
|
3678
|
+
nextConfig: {},
|
|
3679
|
+
geo: nextGeo,
|
|
3680
|
+
ip: clientIp
|
|
3663
3681
|
});
|
|
3664
3682
|
} catch (e) {
|
|
3665
3683
|
nextRequest = null;
|
|
@@ -3713,9 +3731,9 @@ async function executeMiddleware({request}) {
|
|
|
3713
3731
|
delete: () => {}
|
|
3714
3732
|
};
|
|
3715
3733
|
|
|
3716
|
-
// \u6DFB\u52A0 geo \u548C ip
|
|
3717
|
-
nextRequest.geo =
|
|
3718
|
-
nextRequest.ip =
|
|
3734
|
+
// \u6DFB\u52A0 geo \u548C ip\uFF08\u4F7F\u7528\u4ECE EdgeOne \u8F6C\u6362\u540E\u7684\u6570\u636E\uFF09
|
|
3735
|
+
nextRequest.geo = nextGeo;
|
|
3736
|
+
nextRequest.ip = clientIp;
|
|
3719
3737
|
}
|
|
3720
3738
|
|
|
3721
3739
|
// \u8BBE\u7F6E\u5168\u5C40 NextResponse\uFF08\u5982\u679C\u53EF\u7528\uFF09
|
|
@@ -3738,6 +3756,11 @@ async function executeMiddleware({request}) {
|
|
|
3738
3756
|
headersObj[key] = value;
|
|
3739
3757
|
});
|
|
3740
3758
|
|
|
3759
|
+
// \u6CE8\u5165 geo \u548C clientIp \u5230 headers \u4E2D
|
|
3760
|
+
// Next.js 15+ \u79FB\u9664\u4E86 request.geo \u548C request.ip\uFF0C\u7528\u6237\u9700\u8981\u4ECE headers \u4E2D\u8BFB\u53D6
|
|
3761
|
+
headersObj['geo'] = JSON.stringify(nextGeo);
|
|
3762
|
+
headersObj['clientIp'] = clientIp;
|
|
3763
|
+
|
|
3741
3764
|
// \u521B\u5EFA\u4E00\u4E2A\u53EF\u5199\u7684 request \u5305\u88C5\u5BF9\u8C61
|
|
3742
3765
|
const requestWrapper = {
|
|
3743
3766
|
url: request.url,
|
|
@@ -3747,6 +3770,8 @@ async function executeMiddleware({request}) {
|
|
|
3747
3770
|
bodyUsed: request.bodyUsed,
|
|
3748
3771
|
signal: request.signal,
|
|
3749
3772
|
nextConfig: {}, // NextURL \u6784\u9020\u51FD\u6570\u9700\u8981\u8FD9\u4E2A
|
|
3773
|
+
geo: nextGeo, // EdgeOne geo \u8F6C\u6362\u4E3A Next.js \u683C\u5F0F\uFF08\u517C\u5BB9 Next.js 14 \u53CA\u4EE5\u4E0B\uFF09
|
|
3774
|
+
ip: clientIp, // \u5BA2\u6237\u7AEF IP\uFF08\u517C\u5BB9 Next.js 14 \u53CA\u4EE5\u4E0B\uFF09
|
|
3750
3775
|
// \u4FDD\u6301\u539F\u59CB Request \u7684\u65B9\u6CD5\u53EF\u7528
|
|
3751
3776
|
clone: () => request.clone(),
|
|
3752
3777
|
arrayBuffer: () => request.arrayBuffer(),
|
|
@@ -21,6 +21,24 @@ function getEdgeOneWrapperCode(options = {}) {
|
|
|
21
21
|
// Middleware Runner (Raw Source Mode)
|
|
22
22
|
// ============================================================
|
|
23
23
|
|
|
24
|
+
/**
|
|
25
|
+
* \u5C06 EdgeOne geo \u683C\u5F0F\u8F6C\u6362\u4E3A Next.js geo \u683C\u5F0F
|
|
26
|
+
* EdgeOne: { countryCodeAlpha2, regionCode, cityName, latitude, longitude, ... }
|
|
27
|
+
* Next.js: { country, region, city, latitude, longitude }
|
|
28
|
+
*/
|
|
29
|
+
function convertEoGeoToNextGeo(eoGeo) {
|
|
30
|
+
if (!eoGeo || typeof eoGeo !== 'object') {
|
|
31
|
+
return {};
|
|
32
|
+
}
|
|
33
|
+
return {
|
|
34
|
+
country: eoGeo.countryCodeAlpha2 || undefined,
|
|
35
|
+
region: eoGeo.regionCode || undefined,
|
|
36
|
+
city: eoGeo.cityName || undefined,
|
|
37
|
+
latitude: eoGeo.latitude !== undefined ? String(eoGeo.latitude) : undefined,
|
|
38
|
+
longitude: eoGeo.longitude !== undefined ? String(eoGeo.longitude) : undefined,
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
24
42
|
/**
|
|
25
43
|
* \u8FD0\u884C\u4E2D\u95F4\u4EF6\u7684\u4E3B\u51FD\u6570
|
|
26
44
|
* @param {Request} request - \u539F\u59CB\u8BF7\u6C42\u5BF9\u8C61
|
|
@@ -77,66 +95,80 @@ async function executeMiddleware({request}) {
|
|
|
77
95
|
}
|
|
78
96
|
}
|
|
79
97
|
|
|
98
|
+
// \u4ECE EdgeOne request.eo \u83B7\u53D6 geo \u548C ip \u4FE1\u606F
|
|
99
|
+
const eoData = request.eo || {};
|
|
100
|
+
const nextGeo = convertEoGeoToNextGeo(eoData.geo);
|
|
101
|
+
const clientIp = eoData.clientIp || request.headers.get('x-forwarded-for') || request.headers.get('x-real-ip') || '';
|
|
102
|
+
|
|
103
|
+
// \u521B\u5EFA\u65B0\u7684 Headers\uFF0C\u6CE8\u5165 geo \u548C clientIp
|
|
104
|
+
// Next.js 15+ \u79FB\u9664\u4E86 request.geo \u548C request.ip\uFF0C\u7528\u6237\u9700\u8981\u4ECE headers \u4E2D\u8BFB\u53D6
|
|
105
|
+
const newHeaders = new Headers(request.headers);
|
|
106
|
+
newHeaders.set('geo', JSON.stringify(nextGeo));
|
|
107
|
+
newHeaders.set('clientIp', clientIp);
|
|
108
|
+
|
|
109
|
+
// \u521B\u5EFA\u5E26\u6709\u65B0 headers \u7684 request
|
|
110
|
+
const newRequest = new Request(request.url, {
|
|
111
|
+
method: request.method,
|
|
112
|
+
headers: newHeaders,
|
|
113
|
+
body: request.body,
|
|
114
|
+
});
|
|
115
|
+
|
|
80
116
|
// \u4E3A request \u6DFB\u52A0 nextUrl \u5C5E\u6027
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
});
|
|
103
|
-
}
|
|
117
|
+
Object.defineProperty(newRequest, 'nextUrl', {
|
|
118
|
+
value: {
|
|
119
|
+
pathname: pathname,
|
|
120
|
+
search: url.search,
|
|
121
|
+
searchParams: url.searchParams,
|
|
122
|
+
hash: url.hash,
|
|
123
|
+
host: url.host,
|
|
124
|
+
hostname: url.hostname,
|
|
125
|
+
port: url.port,
|
|
126
|
+
protocol: url.protocol,
|
|
127
|
+
href: url.href,
|
|
128
|
+
origin: url.origin,
|
|
129
|
+
basePath: '',
|
|
130
|
+
locale: '',
|
|
131
|
+
defaultLocale: '',
|
|
132
|
+
toString: () => url.href,
|
|
133
|
+
clone: () => new URL(url.href)
|
|
134
|
+
},
|
|
135
|
+
writable: true,
|
|
136
|
+
enumerable: true
|
|
137
|
+
});
|
|
104
138
|
|
|
105
139
|
// \u4E3A request \u6DFB\u52A0 cookies \u5C5E\u6027
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
}
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
Object.defineProperty(request, 'cookies', {
|
|
123
|
-
value: {
|
|
124
|
-
get: (name) => cookieMap.get(name),
|
|
125
|
-
has: (name) => cookieMap.has(name),
|
|
126
|
-
getAll: () => Array.from(cookieMap.values()),
|
|
127
|
-
set: () => {},
|
|
128
|
-
delete: () => {},
|
|
129
|
-
clear: () => {},
|
|
130
|
-
[Symbol.iterator]: () => cookieMap.values(),
|
|
131
|
-
size: cookieMap.size
|
|
132
|
-
},
|
|
133
|
-
writable: true,
|
|
134
|
-
enumerable: true
|
|
140
|
+
const cookieHeader = newRequest.headers.get('cookie') || '';
|
|
141
|
+
const cookieMap = new Map();
|
|
142
|
+
|
|
143
|
+
if (cookieHeader) {
|
|
144
|
+
cookieHeader.split(';').forEach(cookie => {
|
|
145
|
+
const [name, ...valueParts] = cookie.trim().split('=');
|
|
146
|
+
if (name) {
|
|
147
|
+
cookieMap.set(name.trim(), {
|
|
148
|
+
name: name.trim(),
|
|
149
|
+
value: valueParts.join('=') || ''
|
|
150
|
+
});
|
|
151
|
+
}
|
|
135
152
|
});
|
|
136
153
|
}
|
|
154
|
+
|
|
155
|
+
Object.defineProperty(newRequest, 'cookies', {
|
|
156
|
+
value: {
|
|
157
|
+
get: (name) => cookieMap.get(name),
|
|
158
|
+
has: (name) => cookieMap.has(name),
|
|
159
|
+
getAll: () => Array.from(cookieMap.values()),
|
|
160
|
+
set: () => {},
|
|
161
|
+
delete: () => {},
|
|
162
|
+
clear: () => {},
|
|
163
|
+
[Symbol.iterator]: () => cookieMap.values(),
|
|
164
|
+
size: cookieMap.size
|
|
165
|
+
},
|
|
166
|
+
writable: true,
|
|
167
|
+
enumerable: true
|
|
168
|
+
});
|
|
137
169
|
|
|
138
170
|
// \u8C03\u7528 middleware \u51FD\u6570
|
|
139
|
-
const result = await middleware(
|
|
171
|
+
const result = await middleware(newRequest);
|
|
140
172
|
|
|
141
173
|
return result;
|
|
142
174
|
}
|
|
@@ -274,6 +306,24 @@ function matchesPath(pathname, matcher) {
|
|
|
274
306
|
return false;
|
|
275
307
|
}
|
|
276
308
|
|
|
309
|
+
/**
|
|
310
|
+
* \u5C06 EdgeOne geo \u683C\u5F0F\u8F6C\u6362\u4E3A Next.js geo \u683C\u5F0F
|
|
311
|
+
* EdgeOne: { countryCodeAlpha2, regionCode, cityName, latitude, longitude, ... }
|
|
312
|
+
* Next.js: { country, region, city, latitude, longitude }
|
|
313
|
+
*/
|
|
314
|
+
function convertEoGeoToNextGeo(eoGeo) {
|
|
315
|
+
if (!eoGeo || typeof eoGeo !== 'object') {
|
|
316
|
+
return {};
|
|
317
|
+
}
|
|
318
|
+
return {
|
|
319
|
+
country: eoGeo.countryCodeAlpha2 || undefined,
|
|
320
|
+
region: eoGeo.regionCode || undefined,
|
|
321
|
+
city: eoGeo.cityName || undefined,
|
|
322
|
+
latitude: eoGeo.latitude !== undefined ? String(eoGeo.latitude) : undefined,
|
|
323
|
+
longitude: eoGeo.longitude !== undefined ? String(eoGeo.longitude) : undefined,
|
|
324
|
+
};
|
|
325
|
+
}
|
|
326
|
+
|
|
277
327
|
/**
|
|
278
328
|
* \u8FD0\u884C\u4E2D\u95F4\u4EF6\u7684\u4E3B\u51FD\u6570
|
|
279
329
|
* @param {Request} request - \u539F\u59CB\u8BF7\u6C42\u5BF9\u8C61
|
|
@@ -298,6 +348,17 @@ async function executeMiddleware({request}) {
|
|
|
298
348
|
request.headers.forEach((value, key) => {
|
|
299
349
|
headersObject[key] = value;
|
|
300
350
|
});
|
|
351
|
+
|
|
352
|
+
// \u4ECE EdgeOne request.eo \u83B7\u53D6 geo \u548C ip \u4FE1\u606F
|
|
353
|
+
const eoData = request.eo || {};
|
|
354
|
+
const nextGeo = convertEoGeoToNextGeo(eoData.geo);
|
|
355
|
+
const clientIp = eoData.clientIp || request.headers.get('x-forwarded-for') || request.headers.get('x-real-ip') || '';
|
|
356
|
+
|
|
357
|
+
// \u6CE8\u5165 geo \u548C clientIp \u5230 headers \u4E2D
|
|
358
|
+
// Next.js 15+ \u79FB\u9664\u4E86 request.geo \u548C request.ip\uFF0C\u7528\u6237\u9700\u8981\u4ECE headers \u4E2D\u8BFB\u53D6
|
|
359
|
+
// \u4F7F\u7528 'geo' (JSON \u5B57\u7B26\u4E32) \u548C 'clientIp' \u4F5C\u4E3A header \u540D\u79F0
|
|
360
|
+
headersObject['geo'] = JSON.stringify(nextGeo);
|
|
361
|
+
headersObject['clientIp'] = clientIp;
|
|
301
362
|
|
|
302
363
|
// \u6784\u9020 Next.js middleware adapter \u671F\u671B\u7684\u53C2\u6570\u683C\u5F0F
|
|
303
364
|
// \u53C2\u8003 Next.js \u6E90\u7801\u4E2D\u7684 adapter \u51FD\u6570
|
|
@@ -312,8 +373,8 @@ async function executeMiddleware({request}) {
|
|
|
312
373
|
i18n: null,
|
|
313
374
|
trailingSlash: false
|
|
314
375
|
},
|
|
315
|
-
geo:
|
|
316
|
-
ip:
|
|
376
|
+
geo: nextGeo,
|
|
377
|
+
ip: clientIp,
|
|
317
378
|
signal: request.signal || null
|
|
318
379
|
},
|
|
319
380
|
page: '/',
|
|
@@ -28,7 +28,7 @@ module.exports = __toCommonJS(tags_handler_exports);
|
|
|
28
28
|
|
|
29
29
|
// package.json
|
|
30
30
|
var name = "@edgeone/opennextjs-pages";
|
|
31
|
-
var version = "0.1.
|
|
31
|
+
var version = "0.1.5";
|
|
32
32
|
|
|
33
33
|
// src/run/handlers/tags-handler.cts
|
|
34
34
|
var import_request_context = require("./request-context.cjs");
|