Skip to content

Commit 557084a

Browse files
authored
Fix fetch cache body handling and update edge-runtime deps (vercel#48365)
This ensures we don't fail to return the full body when storing to fetch-cache in edge-runtime. Also ensures the fetch cache tests are running for Node.js v16 correctly. Fetch handling was also failing on Node.js v16 due to react's use of `res.clone()` being broken with undici which is fixed in the latest version of edge-runtime so this bumps that. x-ref: [slack thread](https://vercel.slack.com/archives/C03S8ED1DKM/p1681310566927429)
1 parent 79f4e11 commit 557084a

File tree

20 files changed

+350
-190
lines changed

20 files changed

+350
-190
lines changed

packages/next/package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,8 +134,8 @@
134134
"@babel/traverse": "7.18.0",
135135
"@babel/types": "7.18.0",
136136
"@capsizecss/metrics": "1.1.0",
137-
"@edge-runtime/cookies": "3.0.4",
138-
"@edge-runtime/primitives": "2.0.5",
137+
"@edge-runtime/cookies": "3.0.6",
138+
"@edge-runtime/primitives": "2.1.2",
139139
"@hapi/accept": "5.0.2",
140140
"@napi-rs/cli": "2.14.7",
141141
"@napi-rs/triples": "1.1.0",
@@ -220,7 +220,7 @@
220220
"debug": "4.1.1",
221221
"devalue": "2.0.1",
222222
"domain-browser": "4.19.0",
223-
"edge-runtime": "2.0.0",
223+
"edge-runtime": "2.1.4",
224224
"events": "3.3.0",
225225
"find-cache-dir": "3.3.1",
226226
"find-up": "4.1.0",

packages/next/src/compiled/@edge-runtime/cookies/index.d.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,13 @@ interface CookieSerializeOptions {
114114
* {@link https://wicg.github.io/cookie-store/#dictdef-cookielistitem CookieListItem}
115115
* as specified by W3C.
116116
*/
117-
interface CookieListItem extends Pick<CookieSerializeOptions, 'domain' | 'path' | 'expires' | 'secure' | 'sameSite'> {
117+
interface CookieListItem extends Pick<CookieSerializeOptions, 'domain' | 'path' | 'secure' | 'sameSite'> {
118118
/** A string with the name of a cookie. */
119119
name: string;
120120
/** A string containing the value of the cookie. */
121121
value: string;
122+
/** A number of milliseconds or Date interface containing the expires of the cookie. */
123+
expires?: number | CookieSerializeOptions['expires'];
122124
}
123125
/**
124126
* Superset of {@link CookieListItem} extending it with

packages/next/src/compiled/@edge-runtime/cookies/index.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ module.exports = __toCommonJS(src_exports);
2929
function serialize(c) {
3030
const attrs = [
3131
"path" in c && c.path && `Path=${c.path}`,
32-
"expires" in c && c.expires && `Expires=${c.expires.toUTCString()}`,
32+
"expires" in c && (c.expires || c.expires === 0) && `Expires=${(typeof c.expires === "number" ? new Date(c.expires) : c.expires).toUTCString()}`,
3333
"maxAge" in c && c.maxAge && `Max-Age=${c.maxAge}`,
3434
"domain" in c && c.domain && `Domain=${c.domain}`,
3535
"secure" in c && c.secure && "Secure",
@@ -207,6 +207,9 @@ function replace(bag, headers) {
207207
}
208208
}
209209
function normalizeCookie(cookie = { name: "", value: "" }) {
210+
if (typeof cookie.expires === "number") {
211+
cookie.expires = new Date(cookie.expires);
212+
}
210213
if (cookie.maxAge) {
211214
cookie.expires = new Date(Date.now() + cookie.maxAge * 1e3);
212215
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"name":"@edge-runtime/cookies","version":"3.0.4","main":"./index.js","license":"MPLv2"}
1+
{"name":"@edge-runtime/cookies","version":"3.0.6","main":"./index.js","license":"MPL-2.0"}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"name":"@edge-runtime/primitives","version":"2.0.5","main":"./index.js","license":"MPLv2"}
1+
{"name":"@edge-runtime/primitives","version":"2.1.2","main":"./index.js","license":"MPL-2.0"}

packages/next/src/compiled/@edge-runtime/primitives/streams.d.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ declare class ReadableStreamBYOBReader {
1515
declare const ReadableStreamConstructor: typeof ReadableStream
1616
declare const ReadableStreamBYOBReaderConstructor: typeof ReadableStreamBYOBReader
1717
declare const ReadableStreamDefaultReaderConstructor: typeof ReadableStreamDefaultReader
18+
declare const TextDecoderStreamConstructor: typeof TextDecoderStream
19+
declare const TextEncoderStreamConstructor: typeof TextEncoderStream
1820
declare const TransformStreamConstructor: typeof TransformStream
1921
declare const WritableStreamConstructor: typeof WritableStream
2022
declare const WritableStreamDefaultWriterConstructor: typeof WritableStreamDefaultWriter
2123

22-
export { ReadableStreamConstructor as ReadableStream, ReadableStreamBYOBReaderConstructor as ReadableStreamBYOBReader, ReadableStreamDefaultReaderConstructor as ReadableStreamDefaultReader, TransformStreamConstructor as TransformStream, WritableStreamConstructor as WritableStream, WritableStreamDefaultWriterConstructor as WritableStreamDefaultWriter };
24+
export { ReadableStreamConstructor as ReadableStream, ReadableStreamBYOBReaderConstructor as ReadableStreamBYOBReader, ReadableStreamDefaultReaderConstructor as ReadableStreamDefaultReader, TextDecoderStreamConstructor as TextDecoderStream, TextEncoderStreamConstructor as TextEncoderStream, TransformStreamConstructor as TransformStream, WritableStreamConstructor as WritableStream, WritableStreamDefaultWriterConstructor as WritableStreamDefaultWriter };

packages/next/src/compiled/@edge-runtime/primitives/streams.js

Lines changed: 104 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ __export(streams_exports, {
2424
ReadableStream: () => ReadableStream,
2525
ReadableStreamBYOBReader: () => ReadableStreamBYOBReader,
2626
ReadableStreamDefaultReader: () => ReadableStreamDefaultReader,
27-
TransformStream: () => TransformStream,
27+
TextDecoderStream: () => TextDecoderStream,
28+
TextEncoderStream: () => TextEncoderStream,
29+
TransformStream: () => TransformStream2,
2830
WritableStream: () => WritableStream,
2931
WritableStreamDefaultWriter: () => WritableStreamDefaultWriter
3032
});
@@ -1954,7 +1956,7 @@ function sr(e2, t2, r2) {
19541956
}
19551957
__name(sr, "sr");
19561958
Object.defineProperties(CountQueuingStrategy.prototype, { highWaterMark: { enumerable: true }, size: { enumerable: true } }), "symbol" == typeof e.toStringTag && Object.defineProperty(CountQueuingStrategy.prototype, e.toStringTag, { value: "CountQueuingStrategy", configurable: true });
1957-
var TransformStream = class {
1959+
var TransformStream2 = class {
19581960
constructor(e2 = {}, t2 = {}, r2 = {}) {
19591961
void 0 === e2 && (e2 = null);
19601962
const o2 = Ye(t2, "Second parameter"), n2 = Ye(r2, "Third parameter"), a2 = function(e3, t3) {
@@ -2084,9 +2086,9 @@ var TransformStream = class {
20842086
return this._writable;
20852087
}
20862088
};
2087-
__name(TransformStream, "TransformStream");
2089+
__name(TransformStream2, "TransformStream");
20882090
function ur(e2) {
2089-
return !!r(e2) && (!!Object.prototype.hasOwnProperty.call(e2, "_transformStreamController") && e2 instanceof TransformStream);
2091+
return !!r(e2) && (!!Object.prototype.hasOwnProperty.call(e2, "_transformStreamController") && e2 instanceof TransformStream2);
20902092
}
20912093
__name(ur, "ur");
20922094
function cr(e2, t2) {
@@ -2106,7 +2108,7 @@ function fr(e2, t2) {
21062108
}), e2._backpressure = t2;
21072109
}
21082110
__name(fr, "fr");
2109-
Object.defineProperties(TransformStream.prototype, { readable: { enumerable: true }, writable: { enumerable: true } }), "symbol" == typeof e.toStringTag && Object.defineProperty(TransformStream.prototype, e.toStringTag, { value: "TransformStream", configurable: true });
2111+
Object.defineProperties(TransformStream2.prototype, { readable: { enumerable: true }, writable: { enumerable: true } }), "symbol" == typeof e.toStringTag && Object.defineProperty(TransformStream2.prototype, e.toStringTag, { value: "TransformStream", configurable: true });
21102112
var TransformStreamDefaultController = class {
21112113
constructor() {
21122114
throw new TypeError("Illegal constructor");
@@ -2226,11 +2228,108 @@ function Cr(e2) {
22262228
}
22272229
__name(Cr, "Cr");
22282230
Object.defineProperties(TransformStreamDefaultController.prototype, { enqueue: { enumerable: true }, error: { enumerable: true }, terminate: { enumerable: true }, desiredSize: { enumerable: true } }), n(TransformStreamDefaultController.prototype.enqueue, "enqueue"), n(TransformStreamDefaultController.prototype.error, "error"), n(TransformStreamDefaultController.prototype.terminate, "terminate"), "symbol" == typeof e.toStringTag && Object.defineProperty(TransformStreamDefaultController.prototype, e.toStringTag, { value: "TransformStreamDefaultController", configurable: true });
2231+
2232+
// ../../node_modules/.pnpm/@stardazed+streams-text-encoding@1.0.2/node_modules/@stardazed/streams-text-encoding/dist/sd-streams-text-encoding.esm.js
2233+
var decDecoder = Symbol("decDecoder");
2234+
var decTransform = Symbol("decTransform");
2235+
var TextDecodeTransformer = class {
2236+
constructor(decoder) {
2237+
this.decoder_ = decoder;
2238+
}
2239+
transform(chunk, controller) {
2240+
if (!(chunk instanceof ArrayBuffer || ArrayBuffer.isView(chunk))) {
2241+
throw new TypeError("Input data must be a BufferSource");
2242+
}
2243+
const text = this.decoder_.decode(chunk, { stream: true });
2244+
if (text.length !== 0) {
2245+
controller.enqueue(text);
2246+
}
2247+
}
2248+
flush(controller) {
2249+
const text = this.decoder_.decode();
2250+
if (text.length !== 0) {
2251+
controller.enqueue(text);
2252+
}
2253+
}
2254+
};
2255+
__name(TextDecodeTransformer, "TextDecodeTransformer");
2256+
var TextDecoderStream = class {
2257+
constructor(label, options) {
2258+
this[decDecoder] = new TextDecoder(label, options);
2259+
this[decTransform] = new TransformStream(new TextDecodeTransformer(this[decDecoder]));
2260+
}
2261+
get encoding() {
2262+
return this[decDecoder].encoding;
2263+
}
2264+
get fatal() {
2265+
return this[decDecoder].fatal;
2266+
}
2267+
get ignoreBOM() {
2268+
return this[decDecoder].ignoreBOM;
2269+
}
2270+
get readable() {
2271+
return this[decTransform].readable;
2272+
}
2273+
get writable() {
2274+
return this[decTransform].writable;
2275+
}
2276+
};
2277+
__name(TextDecoderStream, "TextDecoderStream");
2278+
var encEncoder = Symbol("encEncoder");
2279+
var encTransform = Symbol("encTransform");
2280+
var TextEncodeTransformer = class {
2281+
constructor(encoder) {
2282+
this.encoder_ = encoder;
2283+
this.partial_ = void 0;
2284+
}
2285+
transform(chunk, controller) {
2286+
let stringChunk = String(chunk);
2287+
if (this.partial_ !== void 0) {
2288+
stringChunk = this.partial_ + stringChunk;
2289+
this.partial_ = void 0;
2290+
}
2291+
const lastCharIndex = stringChunk.length - 1;
2292+
const lastCodeUnit = stringChunk.charCodeAt(lastCharIndex);
2293+
if (lastCodeUnit >= 55296 && lastCodeUnit < 56320) {
2294+
this.partial_ = String.fromCharCode(lastCodeUnit);
2295+
stringChunk = stringChunk.substring(0, lastCharIndex);
2296+
}
2297+
const bytes = this.encoder_.encode(stringChunk);
2298+
if (bytes.length !== 0) {
2299+
controller.enqueue(bytes);
2300+
}
2301+
}
2302+
flush(controller) {
2303+
if (this.partial_) {
2304+
controller.enqueue(this.encoder_.encode(this.partial_));
2305+
this.partial_ = void 0;
2306+
}
2307+
}
2308+
};
2309+
__name(TextEncodeTransformer, "TextEncodeTransformer");
2310+
var TextEncoderStream = class {
2311+
constructor() {
2312+
this[encEncoder] = new TextEncoder();
2313+
this[encTransform] = new TransformStream(new TextEncodeTransformer(this[encEncoder]));
2314+
}
2315+
get encoding() {
2316+
return this[encEncoder].encoding;
2317+
}
2318+
get readable() {
2319+
return this[encTransform].readable;
2320+
}
2321+
get writable() {
2322+
return this[encTransform].writable;
2323+
}
2324+
};
2325+
__name(TextEncoderStream, "TextEncoderStream");
22292326
// Annotate the CommonJS export names for ESM import in node:
22302327
0 && (module.exports = {
22312328
ReadableStream,
22322329
ReadableStreamBYOBReader,
22332330
ReadableStreamDefaultReader,
2331+
TextDecoderStream,
2332+
TextEncoderStream,
22342333
TransformStream,
22352334
WritableStream,
22362335
WritableStreamDefaultWriter

packages/next/src/compiled/@edge-runtime/primitives/structured-clone.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ __export(structured_clone_exports, {
2525
});
2626
module.exports = __toCommonJS(structured_clone_exports);
2727

28-
// ../../node_modules/.pnpm/@ungap+structured-clone@1.0.1/node_modules/@ungap/structured-clone/esm/types.js
28+
// ../../node_modules/.pnpm/@ungap+structured-clone@1.0.2/node_modules/@ungap/structured-clone/esm/types.js
2929
var VOID = -1;
3030
var PRIMITIVE = 0;
3131
var ARRAY = 1;
@@ -37,7 +37,7 @@ var SET = 6;
3737
var ERROR = 7;
3838
var BIGINT = 8;
3939

40-
// ../../node_modules/.pnpm/@ungap+structured-clone@1.0.1/node_modules/@ungap/structured-clone/esm/deserialize.js
40+
// ../../node_modules/.pnpm/@ungap+structured-clone@1.0.2/node_modules/@ungap/structured-clone/esm/deserialize.js
4141
var env = typeof self === "object" ? self : globalThis;
4242
var deserializer = /* @__PURE__ */ __name(($, _) => {
4343
const as = /* @__PURE__ */ __name((out, index) => {
@@ -97,7 +97,7 @@ var deserializer = /* @__PURE__ */ __name(($, _) => {
9797
}, "deserializer");
9898
var deserialize = /* @__PURE__ */ __name((serialized) => deserializer(/* @__PURE__ */ new Map(), serialized)(0), "deserialize");
9999

100-
// ../../node_modules/.pnpm/@ungap+structured-clone@1.0.1/node_modules/@ungap/structured-clone/esm/serialize.js
100+
// ../../node_modules/.pnpm/@ungap+structured-clone@1.0.2/node_modules/@ungap/structured-clone/esm/serialize.js
101101
var EMPTY = "";
102102
var { toString } = {};
103103
var { keys } = Object;
@@ -221,7 +221,7 @@ var serialize = /* @__PURE__ */ __name((value, { json, lossy } = {}) => {
221221
return serializer(!(json || lossy), !!json, /* @__PURE__ */ new Map(), _)(value), _;
222222
}, "serialize");
223223

224-
// ../../node_modules/.pnpm/@ungap+structured-clone@1.0.1/node_modules/@ungap/structured-clone/esm/index.js
224+
// ../../node_modules/.pnpm/@ungap+structured-clone@1.0.2/node_modules/@ungap/structured-clone/esm/index.js
225225
var esm_default = typeof structuredClone === "function" ? (any, options) => options && ("json" in options || "lossy" in options) ? deserialize(serialize(any, options)) : structuredClone(any) : (any, options) => deserialize(serialize(any, options));
226226
// Annotate the CommonJS export names for ESM import in node:
227227
0 && (module.exports = {

packages/next/src/compiled/babel-packages/packages-bundle.js

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/next/src/compiled/edge-runtime/index.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)