Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Custom Server with bodyParser, don't parse body again in API Route #16169

Merged
merged 2 commits into from Dec 7, 2020

Conversation

dkempner
Copy link

@dkempner dkempner commented Aug 13, 2020

Why

Some users prefer to use a custom server implementation that handles body parsing. If they do this, they have no way to opt out of all body parsing in API Routes. Requests with bodies die if next's bodyParser is not disabled. Requests just hang forever.

Instead of adding this config to every API Route, we do a simple check to avoid parsing the body twice.

Fixes #8315
Fixes #7960

@dkempner dkempner changed the title if we have a custom server with a body-parsing middleware, we dont want to parse the body again in an API route [Fix] Custom Server with body parsing middleware - don't parse body in API routes Aug 13, 2020
@dkempner dkempner changed the title [Fix] Custom Server with body parsing middleware - don't parse body in API routes [Fix] Custom Server with body parsing middleware - don't parse body in API Routes Aug 13, 2020
@ijjk
Copy link
Member

ijjk commented Aug 13, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 13.9s 14s ⚠️ +163ms
nodeModulesSize 57.3 MB 57.3 MB ⚠️ +59 B
Page Load Tests Overall decrease ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
/ failed reqs 0 0
/ total time (seconds) 2.418 2.631 ⚠️ +0.21
/ avg req/sec 1034.1 950.18 ⚠️ -83.92
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.5 1.582 ⚠️ +0.08
/error-in-render avg req/sec 1666.62 1579.8 ⚠️ -86.82
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..c139.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
main-50e55c1..9850.js gzip 6.73 kB 6.73 kB
webpack-ccf5..276a.js gzip 751 B 751 B
Overall change 56.9 kB 56.9 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..dule.js gzip 6.12 kB 6.12 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-7c4b50e..dule.js gzip 5.82 kB 5.82 kB
webpack-10c7..dule.js gzip 751 B 751 B
Overall change 51.8 kB 51.8 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-75..1629.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-874bd8a..0103.js gzip 1.28 kB 1.28 kB
_error-fa39c..ec40.js gzip 3.45 kB 3.45 kB
hooks-585f07..95a3.js gzip 887 B 887 B
index-c7b63f..fc02.js gzip 227 B 227 B
link-4c2bd9b..eadd.js gzip 1.29 kB 1.29 kB
routerDirect..ebc7.js gzip 284 B 284 B
withRouter-2..db68.js gzip 284 B 284 B
Overall change 7.71 kB 7.71 kB
Client Pages Modern
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-97e743e..dule.js gzip 626 B 626 B
_error-b4004..dule.js gzip 2.3 kB 2.3 kB
hooks-696209..dule.js gzip 387 B 387 B
index-a4dd74..dule.js gzip 226 B 226 B
link-236a801..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-1..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 321 B 321 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 650 B 650 B
Rendered Page Sizes
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
index.html gzip 946 B 946 B
link.html gzip 953 B 953 B
withRouter.html gzip 940 B 940 B
Overall change 2.84 kB 2.84 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 15.6s 16.4s ⚠️ +728ms
nodeModulesSize 57.3 MB 57.3 MB ⚠️ +59 B
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..c139.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
main-50e55c1..9850.js gzip 6.73 kB 6.73 kB
webpack-ccf5..276a.js gzip 751 B 751 B
Overall change 56.9 kB 56.9 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..dule.js gzip 6.12 kB 6.12 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-7c4b50e..dule.js gzip 5.82 kB 5.82 kB
webpack-10c7..dule.js gzip 751 B 751 B
Overall change 51.8 kB 51.8 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-75..1629.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-874bd8a..0103.js gzip 1.28 kB 1.28 kB
_error-fa39c..ec40.js gzip 3.45 kB 3.45 kB
hooks-585f07..95a3.js gzip 887 B 887 B
index-c7b63f..fc02.js gzip 227 B 227 B
link-4c2bd9b..eadd.js gzip 1.29 kB 1.29 kB
routerDirect..ebc7.js gzip 284 B 284 B
withRouter-2..db68.js gzip 284 B 284 B
Overall change 7.71 kB 7.71 kB
Client Pages Modern
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-97e743e..dule.js gzip 626 B 626 B
_error-b4004..dule.js gzip 2.3 kB 2.3 kB
hooks-696209..dule.js gzip 387 B 387 B
index-a4dd74..dule.js gzip 226 B 226 B
link-236a801..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-1..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 321 B 321 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 650 B 650 B
Serverless bundles Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_error.js 1.03 MB 1.03 MB ⚠️ +14 B
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.03 MB 1.03 MB ⚠️ +14 B
link.js 1.07 MB 1.07 MB ⚠️ +14 B
routerDirect.js 1.06 MB 1.06 MB ⚠️ +14 B
withRouter.js 1.06 MB 1.06 MB ⚠️ +14 B
Overall change 5.26 MB 5.26 MB ⚠️ +70 B
Commit: 0ab53bb

@ijjk
Copy link
Member

ijjk commented Aug 13, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 9.9s 9.8s -112ms
nodeModulesSize 57.3 MB 57.3 MB ⚠️ +59 B
Page Load Tests Overall decrease ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
/ failed reqs 0 0
/ total time (seconds) 1.755 1.771 ⚠️ +0.02
/ avg req/sec 1424.56 1411.33 ⚠️ -13.23
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 0.952 0.968 ⚠️ +0.02
/error-in-render avg req/sec 2627.07 2583.39 ⚠️ -43.68
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..c139.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
main-e664fd6..72f3.js gzip 6.74 kB 6.74 kB
webpack-ccf5..276a.js gzip 751 B 751 B
Overall change 56.9 kB 56.9 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..dule.js gzip 6.12 kB 6.12 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-9e8666e..dule.js gzip 5.82 kB 5.82 kB
webpack-10c7..dule.js gzip 751 B 751 B
Overall change 51.8 kB 51.8 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-75..1629.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-874bd8a..0103.js gzip 1.28 kB 1.28 kB
_error-fa39c..ec40.js gzip 3.45 kB 3.45 kB
hooks-585f07..95a3.js gzip 887 B 887 B
index-c7b63f..fc02.js gzip 227 B 227 B
link-4c2bd9b..eadd.js gzip 1.29 kB 1.29 kB
routerDirect..ebc7.js gzip 284 B 284 B
withRouter-2..db68.js gzip 284 B 284 B
Overall change 7.71 kB 7.71 kB
Client Pages Modern
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-97e743e..dule.js gzip 626 B 626 B
_error-b4004..dule.js gzip 2.3 kB 2.3 kB
hooks-696209..dule.js gzip 387 B 387 B
index-a4dd74..dule.js gzip 226 B 226 B
link-236a801..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-1..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 321 B 321 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 650 B 650 B
Rendered Page Sizes
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
index.html gzip 945 B 945 B
link.html gzip 953 B 953 B
withRouter.html gzip 940 B 940 B
Overall change 2.84 kB 2.84 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 11.2s 11.8s ⚠️ +654ms
nodeModulesSize 57.3 MB 57.3 MB ⚠️ +59 B
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..c139.js gzip 10.2 kB 10.2 kB
framework.HASH.js gzip 39.1 kB 39.1 kB
main-e664fd6..72f3.js gzip 6.74 kB 6.74 kB
webpack-ccf5..276a.js gzip 751 B 751 B
Overall change 56.9 kB 56.9 kB
Client Bundles (main, webpack, commons) Modern
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..dule.js gzip 6.12 kB 6.12 kB
framework.HA..dule.js gzip 39.1 kB 39.1 kB
main-9e8666e..dule.js gzip 5.82 kB 5.82 kB
webpack-10c7..dule.js gzip 751 B 751 B
Overall change 51.8 kB 51.8 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-75..1629.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-874bd8a..0103.js gzip 1.28 kB 1.28 kB
_error-fa39c..ec40.js gzip 3.45 kB 3.45 kB
hooks-585f07..95a3.js gzip 887 B 887 B
index-c7b63f..fc02.js gzip 227 B 227 B
link-4c2bd9b..eadd.js gzip 1.29 kB 1.29 kB
routerDirect..ebc7.js gzip 284 B 284 B
withRouter-2..db68.js gzip 284 B 284 B
Overall change 7.71 kB 7.71 kB
Client Pages Modern
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-97e743e..dule.js gzip 626 B 626 B
_error-b4004..dule.js gzip 2.3 kB 2.3 kB
hooks-696209..dule.js gzip 387 B 387 B
index-a4dd74..dule.js gzip 226 B 226 B
link-236a801..dule.js gzip 1.26 kB 1.26 kB
routerDirect..dule.js gzip 284 B 284 B
withRouter-1..dule.js gzip 282 B 282 B
Overall change 5.37 kB 5.37 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 321 B 321 B
_buildManife..dule.js gzip 329 B 329 B
Overall change 650 B 650 B
Serverless bundles Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_error.js 1.03 MB 1.03 MB ⚠️ +14 B
404.html 4.18 kB 4.18 kB
hooks.html 3.82 kB 3.82 kB
index.js 1.03 MB 1.03 MB ⚠️ +14 B
link.js 1.07 MB 1.07 MB ⚠️ +14 B
routerDirect.js 1.06 MB 1.06 MB ⚠️ +14 B
withRouter.js 1.06 MB 1.06 MB ⚠️ +14 B
Overall change 5.26 MB 5.26 MB ⚠️ +70 B
Commit: 42a1ca1

@dkempner
Copy link
Author

@Timer @timneutkens

first time PR contribution. how does one request feedback? i read through the contributing guide but came up short. thanks!

@timneutkens
Copy link
Member

@Timer @timneutkens

first time PR contribution. how does one request feedback? i read through the contributing guide but came up short. thanks!

We've recently had an influx in new PRs so we're slowly working our way through them. Will give feedback soon.

@styxlab
Copy link
Contributor

styxlab commented Oct 14, 2020

What's the current status of this PR? This PR would help a lot for my current use case. The bodyParser config option is great, but needs to be more fine-graining in many use cases. For example, I have the following API route

/file/[...id].tsx

which channels into two different endpoints:

/file/{id}/transform
/file/{id}/upload

and I want to disable bodyParasing for only one of the two endpoints. As I have to put the config option into /file/[...id].tsx, this is currently not possible.

@timneutkens
Copy link
Member

What's the current status of this PR? This PR would help a lot for my current use case. The bodyParser config option is great, but needs to be more fine-graining in many use cases. For example, I have the following API route

/file/[...id].tsx

which channels into two different endpoints:

/file/{id}/transform
/file/{id}/upload

and I want to disable bodyParasing for only one of the two endpoints. As I have to put the config option into /file/[...id].tsx, this is currently not possible.

In that case you should create more files that cover different patterns.

Copy link
Member

@timneutkens timneutkens left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you add integration tests and documentation for this change given it's a change in behavior from what we currently have. It could potentially also be confusing if we suddenly pass through req.body from the custom server 🤔

@styxlab
Copy link
Contributor

styxlab commented Oct 14, 2020

In that case you should create more files that cover different patterns.

@timneutkens: That's possible, but I don't think the endpoint pattern design should be driven by missing configuration options. If there is a way to preserve the above mentioned endpoint patterns, fine, but I think you are suggesting something like:

/file/transform/[id].tsx 
/file/upload/[id].tsx -> opt out from `bodyParser` with config option

My current workaround is to opt out from bodyParser for both endpoints, and do a custom body parsing on one endpoint. However, I'd much prefer to use standard functionality provided by the Next API.

@vercel vercel bot temporarily deployed to Preview December 4, 2020 16:53 Inactive
@ijjk
Copy link
Member

ijjk commented Dec 4, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 9s 8.9s -128ms
nodeModulesSize 82.4 MB 82.4 MB ⚠️ +59 B
Page Load Tests Overall decrease ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
/ failed reqs 0 0
/ total time (seconds) 2.133 2.207 ⚠️ +0.07
/ avg req/sec 1171.81 1132.54 ⚠️ -39.27
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.133 1.14 ⚠️ +0.01
/error-in-render avg req/sec 2206.22 2193.23 ⚠️ -12.99
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..34b9.js gzip 12.8 kB 12.8 kB
framework.HASH.js gzip 39 kB 39 kB
main-f501b4a..c42e.js gzip 6.56 kB 6.56 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 59 kB 59 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-7231d4b..5856.js gzip 1.28 kB 1.28 kB
_error-01375..90b6.js gzip 3.69 kB 3.69 kB
hooks-d4591d..e7c2.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-db223d9..dbd7.js gzip 1.61 kB 1.61 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 8.27 kB 8.27 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 322 B 322 B
Overall change 322 B 322 B
Rendered Page Sizes
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
index.html gzip 614 B 614 B
link.html gzip 621 B 621 B
withRouter.html gzip 608 B 608 B
Overall change 1.84 kB 1.84 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 10.8s 10.4s -322ms
nodeModulesSize 82.4 MB 82.4 MB ⚠️ +59 B
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..34b9.js gzip 12.8 kB 12.8 kB
framework.HASH.js gzip 39 kB 39 kB
main-f501b4a..c42e.js gzip 6.56 kB 6.56 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 59 kB 59 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-7231d4b..5856.js gzip 1.28 kB 1.28 kB
_error-01375..90b6.js gzip 3.69 kB 3.69 kB
hooks-d4591d..e7c2.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-db223d9..dbd7.js gzip 1.61 kB 1.61 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 8.27 kB 8.27 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 322 B 322 B
Overall change 322 B 322 B
Serverless bundles Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_error.js 1 MB 1 MB ⚠️ +14 B
404.html 2.67 kB 2.67 kB
hooks.html 1.92 kB 1.92 kB
index.js 1 MB 1 MB ⚠️ +14 B
link.js 1.06 MB 1.06 MB ⚠️ +14 B
routerDirect.js 1.05 MB 1.05 MB ⚠️ +14 B
withRouter.js 1.05 MB 1.05 MB ⚠️ +14 B
Overall change 5.16 MB 5.16 MB ⚠️ +70 B
Commit: 99a0265

@vercel vercel bot temporarily deployed to Preview December 4, 2020 17:59 Inactive
@ijjk
Copy link
Member

ijjk commented Dec 4, 2020

Stats from current PR

Default Server Mode (Decrease detected ✓)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 10s 9.9s -136ms
nodeModulesSize 82.4 MB 82.4 MB ⚠️ +59 B
Page Load Tests Overall decrease ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
/ failed reqs 0 0
/ total time (seconds) 2.385 2.443 ⚠️ +0.06
/ avg req/sec 1048.13 1023.37 ⚠️ -24.76
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.243 1.277 ⚠️ +0.03
/error-in-render avg req/sec 2011.04 1958.19 ⚠️ -52.85
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..34b9.js gzip 12.8 kB 12.8 kB
framework.HASH.js gzip 39 kB 39 kB
main-f501b4a..c42e.js gzip 6.56 kB 6.56 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 59 kB 59 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-7231d4b..5856.js gzip 1.28 kB 1.28 kB
_error-01375..90b6.js gzip 3.69 kB 3.69 kB
hooks-d4591d..e7c2.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-db223d9..dbd7.js gzip 1.61 kB 1.61 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 8.27 kB 8.27 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 322 B 322 B
Overall change 322 B 322 B
Rendered Page Sizes
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
index.html gzip 614 B 614 B
link.html gzip 621 B 621 B
withRouter.html gzip 608 B 608 B
Overall change 1.84 kB 1.84 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 11.6s 12s ⚠️ +335ms
nodeModulesSize 82.4 MB 82.4 MB ⚠️ +59 B
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..34b9.js gzip 12.8 kB 12.8 kB
framework.HASH.js gzip 39 kB 39 kB
main-f501b4a..c42e.js gzip 6.56 kB 6.56 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 59 kB 59 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-7231d4b..5856.js gzip 1.28 kB 1.28 kB
_error-01375..90b6.js gzip 3.69 kB 3.69 kB
hooks-d4591d..e7c2.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-db223d9..dbd7.js gzip 1.61 kB 1.61 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 8.27 kB 8.27 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 322 B 322 B
Overall change 322 B 322 B
Serverless bundles Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_error.js 1 MB 1 MB ⚠️ +14 B
404.html 2.67 kB 2.67 kB
hooks.html 1.92 kB 1.92 kB
index.js 1 MB 1 MB ⚠️ +14 B
link.js 1.06 MB 1.06 MB ⚠️ +14 B
routerDirect.js 1.05 MB 1.05 MB ⚠️ +14 B
withRouter.js 1.05 MB 1.05 MB ⚠️ +14 B
Overall change 5.16 MB 5.16 MB ⚠️ +70 B
Commit: d118dec

@ijjk
Copy link
Member

ijjk commented Dec 4, 2020

Failing test suites

Commit: d118dec

test/integration/image-optimizer/test/index.test.js

  • Image Optimizer > Server support w/o next.config.js > should return home page
  • Image Optimizer > Server support w/o next.config.js > should maintain animated gif
  • Image Optimizer > Server support w/o next.config.js > should maintain animated png
  • Image Optimizer > Server support w/o next.config.js > should maintain animated webp
  • Image Optimizer > Server support w/o next.config.js > should maintain vector svg
  • Image Optimizer > Server support w/o next.config.js > should maintain ico format
  • Image Optimizer > Server support w/o next.config.js > should maintain jpg format for old Safari
  • Image Optimizer > Server support w/o next.config.js > should maintain png format for old Safari
  • Image Optimizer > Server support w/o next.config.js > should fail when url is missing
  • Image Optimizer > Server support w/o next.config.js > should fail when w is missing
  • Image Optimizer > Server support w/o next.config.js > should fail when q is missing
  • Image Optimizer > Server support w/o next.config.js > should fail when q is greater than 100
  • Image Optimizer > Server support w/o next.config.js > should fail when q is less than 1
  • Image Optimizer > Server support w/o next.config.js > should fail when w is 0 or less
  • Image Optimizer > Server support w/o next.config.js > should fail when w is not a number
  • Image Optimizer > Server support w/o next.config.js > should fail when q is not a number
  • Image Optimizer > Server support w/o next.config.js > should fail when domain is not defined in next.config.js
  • Image Optimizer > Server support w/o next.config.js > should fail when width is not in next.config.js
  • Image Optimizer > Server support w/o next.config.js > should resize relative url and webp Firefox accept header
  • Image Optimizer > Server support w/o next.config.js > should resize relative url and png accept header
  • Image Optimizer > Server support w/o next.config.js > should resize relative url with invalid accept header as png
  • Image Optimizer > Server support w/o next.config.js > should resize relative url with invalid accept header as gif
  • Image Optimizer > Server support w/o next.config.js > should resize relative url with invalid accept header as tiff
  • Image Optimizer > Server support w/o next.config.js > should resize relative url and Chrome accept header as webp
  • Image Optimizer > Server support w/o next.config.js > should fail when url has file protocol
  • Image Optimizer > Server support w/o next.config.js > should fail when url has ftp protocol
  • Image Optimizer > Server support w/o next.config.js > should use cached image file when parameters are the same
  • Image Optimizer > Server support w/o next.config.js > should set 304 status without body when etag matches if-none-match
  • Image Optimizer > Server support w/o next.config.js > should proxy-pass unsupported image types and should not cache file
  • Image Optimizer > Server support w/o next.config.js > should not resize if requested width is larger than original source image
  • Image Optimizer > Server support with next.config.js > should return home page
  • Image Optimizer > Server support with next.config.js > should maintain animated gif
  • Image Optimizer > Server support with next.config.js > should maintain animated png
  • Image Optimizer > Server support with next.config.js > should maintain animated webp
  • Image Optimizer > Server support with next.config.js > should maintain vector svg
  • Image Optimizer > Server support with next.config.js > should maintain ico format
  • Image Optimizer > Server support with next.config.js > should maintain jpg format for old Safari
  • Image Optimizer > Server support with next.config.js > should maintain png format for old Safari
  • Image Optimizer > Server support with next.config.js > should fail when url is missing
  • Image Optimizer > Server support with next.config.js > should fail when w is missing
  • Image Optimizer > Server support with next.config.js > should fail when q is missing
  • Image Optimizer > Server support with next.config.js > should fail when q is greater than 100
  • Image Optimizer > Server support with next.config.js > should fail when q is less than 1
  • Image Optimizer > Server support with next.config.js > should fail when w is 0 or less
  • Image Optimizer > Server support with next.config.js > should fail when w is not a number
  • Image Optimizer > Server support with next.config.js > should fail when q is not a number
  • Image Optimizer > Server support with next.config.js > should fail when domain is not defined in next.config.js
  • Image Optimizer > Server support with next.config.js > should fail when width is not in next.config.js
  • Image Optimizer > Server support with next.config.js > should resize relative url and webp Firefox accept header
  • Image Optimizer > Server support with next.config.js > should resize relative url and png accept header
  • Image Optimizer > Server support with next.config.js > should resize relative url with invalid accept header as png
  • Image Optimizer > Server support with next.config.js > should resize relative url with invalid accept header as gif
  • Image Optimizer > Server support with next.config.js > should resize relative url with invalid accept header as tiff
  • Image Optimizer > Server support with next.config.js > should resize relative url and Chrome accept header as webp
  • Image Optimizer > Server support with next.config.js > should resize absolute url from localhost
  • Image Optimizer > Server support with next.config.js > should fail when url has file protocol
  • Image Optimizer > Server support with next.config.js > should fail when url has ftp protocol
  • Image Optimizer > Server support with next.config.js > should fail when url fails to load an image
  • Image Optimizer > Server support with next.config.js > should use cached image file when parameters are the same
  • Image Optimizer > Server support with next.config.js > should set 304 status without body when etag matches if-none-match
  • Image Optimizer > Server support with next.config.js > should proxy-pass unsupported image types and should not cache file
  • Image Optimizer > Server support with next.config.js > should not resize if requested width is larger than original source image
  • Image Optimizer > Serverless support with next.config.js > should return home page
  • Image Optimizer > Serverless support with next.config.js > should maintain animated gif
  • Image Optimizer > Serverless support with next.config.js > should maintain animated png
  • Image Optimizer > Serverless support with next.config.js > should maintain animated webp
  • Image Optimizer > Serverless support with next.config.js > should maintain vector svg
  • Image Optimizer > Serverless support with next.config.js > should maintain ico format
  • Image Optimizer > Serverless support with next.config.js > should maintain jpg format for old Safari
  • Image Optimizer > Serverless support with next.config.js > should maintain png format for old Safari
  • Image Optimizer > Serverless support with next.config.js > should fail when url is missing
  • Image Optimizer > Serverless support with next.config.js > should fail when w is missing
  • Image Optimizer > Serverless support with next.config.js > should fail when q is missing
  • Image Optimizer > Serverless support with next.config.js > should fail when q is greater than 100
  • Image Optimizer > Serverless support with next.config.js > should fail when q is less than 1
  • Image Optimizer > Serverless support with next.config.js > should fail when w is 0 or less
  • Image Optimizer > Serverless support with next.config.js > should fail when w is not a number
  • Image Optimizer > Serverless support with next.config.js > should fail when q is not a number
  • Image Optimizer > Serverless support with next.config.js > should fail when domain is not defined in next.config.js
  • Image Optimizer > Serverless support with next.config.js > should fail when width is not in next.config.js
  • Image Optimizer > Serverless support with next.config.js > should resize relative url and webp Firefox accept header
  • Image Optimizer > Serverless support with next.config.js > should resize relative url and png accept header
  • Image Optimizer > Serverless support with next.config.js > should resize relative url with invalid accept header as png
  • Image Optimizer > Serverless support with next.config.js > should resize relative url with invalid accept header as gif
  • Image Optimizer > Serverless support with next.config.js > should resize relative url with invalid accept header as tiff
  • Image Optimizer > Serverless support with next.config.js > should resize relative url and Chrome accept header as webp
  • Image Optimizer > Serverless support with next.config.js > should resize absolute url from localhost
  • Image Optimizer > Serverless support with next.config.js > should fail when url has file protocol
  • Image Optimizer > Serverless support with next.config.js > should fail when url has ftp protocol
  • Image Optimizer > Serverless support with next.config.js > should fail when url fails to load an image
  • Image Optimizer > Serverless support with next.config.js > should use cached image file when parameters are the same
  • Image Optimizer > Serverless support with next.config.js > should set 304 status without body when etag matches if-none-match
  • Image Optimizer > Serverless support with next.config.js > should proxy-pass unsupported image types and should not cache file
  • Image Optimizer > Serverless support with next.config.js > should not resize if requested width is larger than original source image
  • Image Optimizer > config checks > should error when domains length exceeds 50
  • Image Optimizer > config checks > should error when sizes length exceeds 25
  • Image Optimizer > config checks > should error when deviceSizes contains invalid widths
  • Image Optimizer > config checks > should error when imageSizes contains invalid widths
  • Image Optimizer > config checks > should error when loader contains invalid value
  • Image Optimizer > dev support next.config.js cloudinary loader > should 404 when loader is not default
  • Image Optimizer > dev support w/o next.config.js > should return home page
  • Image Optimizer > dev support w/o next.config.js > should maintain animated gif
  • Image Optimizer > dev support w/o next.config.js > should maintain animated png
  • Image Optimizer > dev support w/o next.config.js > should maintain animated webp
  • Image Optimizer > dev support w/o next.config.js > should maintain vector svg
  • Image Optimizer > dev support w/o next.config.js > should maintain ico format
  • Image Optimizer > dev support w/o next.config.js > should maintain jpg format for old Safari
  • Image Optimizer > dev support w/o next.config.js > should maintain png format for old Safari
  • Image Optimizer > dev support w/o next.config.js > should fail when url is missing
  • Image Optimizer > dev support w/o next.config.js > should fail when w is missing
  • Image Optimizer > dev support w/o next.config.js > should fail when q is missing
  • Image Optimizer > dev support w/o next.config.js > should fail when q is greater than 100
  • Image Optimizer > dev support w/o next.config.js > should fail when q is less than 1
  • Image Optimizer > dev support w/o next.config.js > should fail when w is 0 or less
  • Image Optimizer > dev support w/o next.config.js > should fail when w is not a number
  • Image Optimizer > dev support w/o next.config.js > should fail when q is not a number
  • Image Optimizer > dev support w/o next.config.js > should fail when domain is not defined in next.config.js
  • Image Optimizer > dev support w/o next.config.js > should fail when width is not in next.config.js
  • Image Optimizer > dev support w/o next.config.js > should resize relative url and webp Firefox accept header
  • Image Optimizer > dev support w/o next.config.js > should resize relative url and png accept header
  • Image Optimizer > dev support w/o next.config.js > should resize relative url with invalid accept header as png
  • Image Optimizer > dev support w/o next.config.js > should resize relative url with invalid accept header as gif
  • Image Optimizer > dev support w/o next.config.js > should resize relative url with invalid accept header as tiff
  • Image Optimizer > dev support w/o next.config.js > should resize relative url and Chrome accept header as webp
  • Image Optimizer > dev support w/o next.config.js > should fail when url has file protocol
  • Image Optimizer > dev support w/o next.config.js > should fail when url has ftp protocol
  • Image Optimizer > dev support w/o next.config.js > should use cached image file when parameters are the same
  • Image Optimizer > dev support w/o next.config.js > should set 304 status without body when etag matches if-none-match
  • Image Optimizer > dev support w/o next.config.js > should proxy-pass unsupported image types and should not cache file
  • Image Optimizer > dev support w/o next.config.js > should not resize if requested width is larger than original source image
  • Image Optimizer > dev support with next.config.js > should return home page
  • Image Optimizer > dev support with next.config.js > should maintain animated gif
  • Image Optimizer > dev support with next.config.js > should maintain animated png
  • Image Optimizer > dev support with next.config.js > should maintain animated webp
  • Image Optimizer > dev support with next.config.js > should maintain vector svg
  • Image Optimizer > dev support with next.config.js > should maintain ico format
  • Image Optimizer > dev support with next.config.js > should maintain jpg format for old Safari
  • Image Optimizer > dev support with next.config.js > should maintain png format for old Safari
  • Image Optimizer > dev support with next.config.js > should fail when url is missing
  • Image Optimizer > dev support with next.config.js > should fail when w is missing
  • Image Optimizer > dev support with next.config.js > should fail when q is missing
  • Image Optimizer > dev support with next.config.js > should fail when q is greater than 100
  • Image Optimizer > dev support with next.config.js > should fail when q is less than 1
  • Image Optimizer > dev support with next.config.js > should fail when w is 0 or less
  • Image Optimizer > dev support with next.config.js > should fail when w is not a number
  • Image Optimizer > dev support with next.config.js > should fail when q is not a number
  • Image Optimizer > dev support with next.config.js > should fail when domain is not defined in next.config.js
  • Image Optimizer > dev support with next.config.js > should fail when width is not in next.config.js
  • Image Optimizer > dev support with next.config.js > should resize relative url and webp Firefox accept header
  • Image Optimizer > dev support with next.config.js > should resize relative url and png accept header
  • Image Optimizer > dev support with next.config.js > should resize relative url with invalid accept header as png
  • Image Optimizer > dev support with next.config.js > should resize relative url with invalid accept header as gif
  • Image Optimizer > dev support with next.config.js > should resize relative url with invalid accept header as tiff
  • Image Optimizer > dev support with next.config.js > should resize relative url and Chrome accept header as webp
  • Image Optimizer > dev support with next.config.js > should resize absolute url from localhost
  • Image Optimizer > dev support with next.config.js > should fail when url has file protocol
  • Image Optimizer > dev support with next.config.js > should fail when url has ftp protocol
  • Image Optimizer > dev support with next.config.js > should fail when url fails to load an image
  • Image Optimizer > dev support with next.config.js > should use cached image file when parameters are the same
  • Image Optimizer > dev support with next.config.js > should set 304 status without body when etag matches if-none-match
  • Image Optimizer > dev support with next.config.js > should proxy-pass unsupported image types and should not cache file
  • Image Optimizer > dev support with next.config.js > should not resize if requested width is larger than original source image
Expand output

● Image Optimizer › config checks › should error when domains length exceeds 50

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at Object.<anonymous> (integration/image-optimizer/test/index.test.js:451:24)

● Image Optimizer › config checks › should error when sizes length exceeds 25

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at Object.<anonymous> (integration/image-optimizer/test/index.test.js:476:24)

● Image Optimizer › config checks › should error when deviceSizes contains invalid widths

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at Object.<anonymous> (integration/image-optimizer/test/index.test.js:501:24)

● Image Optimizer › config checks › should error when imageSizes contains invalid widths

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at Object.<anonymous> (integration/image-optimizer/test/index.test.js:526:24)

● Image Optimizer › config checks › should error when loader contains invalid value

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at Object.<anonymous> (integration/image-optimizer/test/index.test.js:551:24)

● Image Optimizer › dev support w/o next.config.js › should return home page

FetchError: request to http://localhost:37591/ failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain animated gif

FetchError: request to http://localhost:37591/_next/image?w=384&q=90&url=%2Fanimated.gif failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain animated png

FetchError: request to http://localhost:37591/_next/image?w=384&q=90&url=%2Fanimated.png failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain animated webp

FetchError: request to http://localhost:37591/_next/image?w=384&q=90&url=%2Fanimated.webp failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain vector svg

FetchError: request to http://localhost:37591/_next/image?w=384&q=90&url=%2Ftest.svg failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain ico format

FetchError: request to http://localhost:37591/_next/image?w=384&q=90&url=%2Ftest.ico failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain jpg format for old Safari

FetchError: request to http://localhost:37591/_next/image?w=384&q=90&url=%2Ftest.jpg failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain png format for old Safari

FetchError: request to http://localhost:37591/_next/image?w=384&q=75&url=%2Ftest.png failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when url is missing

FetchError: request to http://localhost:37591/_next/image?w=384&q=100 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when w is missing

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&q=100 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when q is missing

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&w=384 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when q is greater than 100

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&w=384&q=101 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when q is less than 1

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&w=384&q=0 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when w is 0 or less

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&w=0&q=100 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when w is not a number

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&w=foo&q=100 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when q is not a number

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&w=384&q=foo failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when domain is not defined in next.config.js

FetchError: request to http://localhost:37591/_next/image?url=http%3A%2F%2Fvercel.com%2Fbutton&w=384&q=100 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when width is not in next.config.js

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&w=1000&q=100 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should resize relative url and webp Firefox accept header

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should resize relative url and png accept header

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should resize relative url with invalid accept header as png

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should resize relative url with invalid accept header as gif

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.gif&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should resize relative url with invalid accept header as tiff

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.tiff&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should resize relative url and Chrome accept header as webp

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when url has file protocol

FetchError: request to http://localhost:37591/_next/image?url=file%3A%2F%2Flocalhost%3A37591%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when url has ftp protocol

FetchError: request to http://localhost:37591/_next/image?url=ftp%3A%2F%2Flocalhost%3A37591%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should use cached image file when parameters are the same

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should set 304 status without body when etag matches if-none-match

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.jpg&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should proxy-pass unsupported image types and should not cache file

ENOENT: no such file or directory, scandir '/home/runner/work/next.js/next.js/test/integration/image-optimizer/.next/cache/images'

● Image Optimizer › dev support w/o next.config.js › should not resize if requested width is larger than original source image

FetchError: request to http://localhost:37591/_next/image?url=%2Ftest.jpg&w=1080&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:37591

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support with next.config.js › should return home page

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain animated gif

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain animated png

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain animated webp

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain vector svg

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain ico format

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain jpg format for old Safari

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain png format for old Safari

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when url is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when w is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when q is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when q is greater than 100

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when q is less than 1

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when w is 0 or less

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when w is not a number

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when q is not a number

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when domain is not defined in next.config.js

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when width is not in next.config.js

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize relative url and webp Firefox accept header

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize relative url and png accept header

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize relative url with invalid accept header as png

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize relative url with invalid accept header as gif

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize relative url with invalid accept header as tiff

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize relative url and Chrome accept header as webp

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize absolute url from localhost

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when url has file protocol

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when url has ftp protocol

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when url fails to load an image

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should use cached image file when parameters are the same

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should set 304 status without body when etag matches if-none-match

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should proxy-pass unsupported image types and should not cache file

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should not resize if requested width is larger than original source image

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › Server support w/o next.config.js › should return home page

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain animated gif

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain animated png

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain animated webp

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain vector svg

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain ico format

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain jpg format for old Safari

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain png format for old Safari

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when url is missing

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when w is missing

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when q is missing

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when q is greater than 100

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when q is less than 1

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when w is 0 or less

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when w is not a number

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when q is not a number

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when domain is not defined in next.config.js

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when width is not in next.config.js

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should resize relative url and webp Firefox accept header

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should resize relative url and png accept header

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should resize relative url with invalid accept header as png

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should resize relative url with invalid accept header as gif

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should resize relative url with invalid accept header as tiff

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should resize relative url and Chrome accept header as webp

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when url has file protocol

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when url has ftp protocol

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should use cached image file when parameters are the same

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should set 304 status without body when etag matches if-none-match

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should proxy-pass unsupported image types and should not cache file

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should not resize if requested width is larger than original source image

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support with next.config.js › should return home page

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain animated gif

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain animated png

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain animated webp

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain vector svg

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain ico format

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain jpg format for old Safari

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain png format for old Safari

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when url is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when w is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when q is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when q is greater than 100

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when q is less than 1

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when w is 0 or less

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when w is not a number

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when q is not a number

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when domain is not defined in next.config.js

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when width is not in next.config.js

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize relative url and webp Firefox accept header

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize relative url and png accept header

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize relative url with invalid accept header as png

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize relative url with invalid accept header as gif

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize relative url with invalid accept header as tiff

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize relative url and Chrome accept header as webp

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize absolute url from localhost

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when url has file protocol

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when url has ftp protocol

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when url fails to load an image

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should use cached image file when parameters are the same

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should set 304 status without body when etag matches if-none-match

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should proxy-pass unsupported image types and should not cache file

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should not resize if requested width is larger than original source image

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Serverless support with next.config.js › should return home page

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain animated gif

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain animated png

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain animated webp

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain vector svg

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain ico format

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain jpg format for old Safari

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain png format for old Safari

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when url is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when w is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when q is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when q is greater than 100

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when q is less than 1

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when w is 0 or less

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when w is not a number

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when q is not a number

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when domain is not defined in next.config.js

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when width is not in next.config.js

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize relative url and webp Firefox accept header

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize relative url and png accept header

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize relative url with invalid accept header as png

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize relative url with invalid accept header as gif

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize relative url with invalid accept header as tiff

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize relative url and Chrome accept header as webp

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize absolute url from localhost

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when url has file protocol

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when url has ftp protocol

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when url fails to load an image

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should use cached image file when parameters are the same

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should set 304 status without body when etag matches if-none-match

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should proxy-pass unsupported image types and should not cache file

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should not resize if requested width is larger than original source image

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › dev support next.config.js cloudinary loader › should 404 when loader is not default

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:686:18

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  282 | export async function killApp(instance) {
  283 |   await new Promise((resolve, reject) => {
> 284 |     treeKill(instance.pid, (err) => {
      |                       ^
  285 |       if (err) {
  286 |         if (
  287 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:284:23
  at killApp (lib/next-test-utils.js:283:9)
  at integration/image-optimizer/test/index.test.js:586:13

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  282 | export async function killApp(instance) {
  283 |   await new Promise((resolve, reject) => {
> 284 |     treeKill(instance.pid, (err) => {
      |                       ^
  285 |       if (err) {
  286 |         if (
  287 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:284:23
  at killApp (lib/next-test-utils.js:283:9)
  at integration/image-optimizer/test/index.test.js:608:13

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  282 | export async function killApp(instance) {
  283 |   await new Promise((resolve, reject) => {
> 284 |     treeKill(instance.pid, (err) => {
      |                       ^
  285 |       if (err) {
  286 |         if (
  287 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:284:23
  at killApp (lib/next-test-utils.js:283:9)
  at integration/image-optimizer/test/index.test.js:624:13

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  282 | export async function killApp(instance) {
  283 |   await new Promise((resolve, reject) => {
> 284 |     treeKill(instance.pid, (err) => {
      |                       ^
  285 |       if (err) {
  286 |         if (
  287 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:284:23
  at killApp (lib/next-test-utils.js:283:9)
  at integration/image-optimizer/test/index.test.js:646:13

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  282 | export async function killApp(instance) {
  283 |   await new Promise((resolve, reject) => {
> 284 |     treeKill(instance.pid, (err) => {
      |                       ^
  285 |       if (err) {
  286 |         if (
  287 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:284:23
  at killApp (lib/next-test-utils.js:283:9)
  at integration/image-optimizer/test/index.test.js:670:13

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  282 | export async function killApp(instance) {
  283 |   await new Promise((resolve, reject) => {
> 284 |     treeKill(instance.pid, (err) => {
      |                       ^
  285 |       if (err) {
  286 |         if (
  287 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:284:23
  at killApp (lib/next-test-utils.js:283:9)
  at integration/image-optimizer/test/index.test.js:691:13

@vercel vercel bot temporarily deployed to Preview December 5, 2020 03:52 Inactive
@vercel vercel bot temporarily deployed to Preview December 5, 2020 03:59 Inactive
@dkempner
Copy link
Author

dkempner commented Dec 5, 2020

@timneutkens I added integration tests for this. PS heard you on a podcast today, nice job ;)

@ijjk
Copy link
Member

ijjk commented Dec 5, 2020

Failing test suites

Commit: 6f8008f

test/integration/image-optimizer/test/index.test.js

  • Image Optimizer > Server support w/o next.config.js > should return home page
  • Image Optimizer > Server support w/o next.config.js > should maintain animated gif
  • Image Optimizer > Server support w/o next.config.js > should maintain animated png
  • Image Optimizer > Server support w/o next.config.js > should maintain animated webp
  • Image Optimizer > Server support w/o next.config.js > should maintain vector svg
  • Image Optimizer > Server support w/o next.config.js > should maintain ico format
  • Image Optimizer > Server support w/o next.config.js > should maintain jpg format for old Safari
  • Image Optimizer > Server support w/o next.config.js > should maintain png format for old Safari
  • Image Optimizer > Server support w/o next.config.js > should fail when url is missing
  • Image Optimizer > Server support w/o next.config.js > should fail when w is missing
  • Image Optimizer > Server support w/o next.config.js > should fail when q is missing
  • Image Optimizer > Server support w/o next.config.js > should fail when q is greater than 100
  • Image Optimizer > Server support w/o next.config.js > should fail when q is less than 1
  • Image Optimizer > Server support w/o next.config.js > should fail when w is 0 or less
  • Image Optimizer > Server support w/o next.config.js > should fail when w is not a number
  • Image Optimizer > Server support w/o next.config.js > should fail when q is not a number
  • Image Optimizer > Server support w/o next.config.js > should fail when domain is not defined in next.config.js
  • Image Optimizer > Server support w/o next.config.js > should fail when width is not in next.config.js
  • Image Optimizer > Server support w/o next.config.js > should resize relative url and webp Firefox accept header
  • Image Optimizer > Server support w/o next.config.js > should resize relative url and png accept header
  • Image Optimizer > Server support w/o next.config.js > should resize relative url with invalid accept header as png
  • Image Optimizer > Server support w/o next.config.js > should resize relative url with invalid accept header as gif
  • Image Optimizer > Server support w/o next.config.js > should resize relative url with invalid accept header as tiff
  • Image Optimizer > Server support w/o next.config.js > should resize relative url and Chrome accept header as webp
  • Image Optimizer > Server support w/o next.config.js > should fail when url has file protocol
  • Image Optimizer > Server support w/o next.config.js > should fail when url has ftp protocol
  • Image Optimizer > Server support w/o next.config.js > should use cached image file when parameters are the same
  • Image Optimizer > Server support w/o next.config.js > should set 304 status without body when etag matches if-none-match
  • Image Optimizer > Server support w/o next.config.js > should proxy-pass unsupported image types and should not cache file
  • Image Optimizer > Server support w/o next.config.js > should not resize if requested width is larger than original source image
  • Image Optimizer > Server support with next.config.js > should return home page
  • Image Optimizer > Server support with next.config.js > should maintain animated gif
  • Image Optimizer > Server support with next.config.js > should maintain animated png
  • Image Optimizer > Server support with next.config.js > should maintain animated webp
  • Image Optimizer > Server support with next.config.js > should maintain vector svg
  • Image Optimizer > Server support with next.config.js > should maintain ico format
  • Image Optimizer > Server support with next.config.js > should maintain jpg format for old Safari
  • Image Optimizer > Server support with next.config.js > should maintain png format for old Safari
  • Image Optimizer > Server support with next.config.js > should fail when url is missing
  • Image Optimizer > Server support with next.config.js > should fail when w is missing
  • Image Optimizer > Server support with next.config.js > should fail when q is missing
  • Image Optimizer > Server support with next.config.js > should fail when q is greater than 100
  • Image Optimizer > Server support with next.config.js > should fail when q is less than 1
  • Image Optimizer > Server support with next.config.js > should fail when w is 0 or less
  • Image Optimizer > Server support with next.config.js > should fail when w is not a number
  • Image Optimizer > Server support with next.config.js > should fail when q is not a number
  • Image Optimizer > Server support with next.config.js > should fail when domain is not defined in next.config.js
  • Image Optimizer > Server support with next.config.js > should fail when width is not in next.config.js
  • Image Optimizer > Server support with next.config.js > should resize relative url and webp Firefox accept header
  • Image Optimizer > Server support with next.config.js > should resize relative url and png accept header
  • Image Optimizer > Server support with next.config.js > should resize relative url with invalid accept header as png
  • Image Optimizer > Server support with next.config.js > should resize relative url with invalid accept header as gif
  • Image Optimizer > Server support with next.config.js > should resize relative url with invalid accept header as tiff
  • Image Optimizer > Server support with next.config.js > should resize relative url and Chrome accept header as webp
  • Image Optimizer > Server support with next.config.js > should resize absolute url from localhost
  • Image Optimizer > Server support with next.config.js > should fail when url has file protocol
  • Image Optimizer > Server support with next.config.js > should fail when url has ftp protocol
  • Image Optimizer > Server support with next.config.js > should fail when url fails to load an image
  • Image Optimizer > Server support with next.config.js > should use cached image file when parameters are the same
  • Image Optimizer > Server support with next.config.js > should set 304 status without body when etag matches if-none-match
  • Image Optimizer > Server support with next.config.js > should proxy-pass unsupported image types and should not cache file
  • Image Optimizer > Server support with next.config.js > should not resize if requested width is larger than original source image
  • Image Optimizer > Serverless support with next.config.js > should return home page
  • Image Optimizer > Serverless support with next.config.js > should maintain animated gif
  • Image Optimizer > Serverless support with next.config.js > should maintain animated png
  • Image Optimizer > Serverless support with next.config.js > should maintain animated webp
  • Image Optimizer > Serverless support with next.config.js > should maintain vector svg
  • Image Optimizer > Serverless support with next.config.js > should maintain ico format
  • Image Optimizer > Serverless support with next.config.js > should maintain jpg format for old Safari
  • Image Optimizer > Serverless support with next.config.js > should maintain png format for old Safari
  • Image Optimizer > Serverless support with next.config.js > should fail when url is missing
  • Image Optimizer > Serverless support with next.config.js > should fail when w is missing
  • Image Optimizer > Serverless support with next.config.js > should fail when q is missing
  • Image Optimizer > Serverless support with next.config.js > should fail when q is greater than 100
  • Image Optimizer > Serverless support with next.config.js > should fail when q is less than 1
  • Image Optimizer > Serverless support with next.config.js > should fail when w is 0 or less
  • Image Optimizer > Serverless support with next.config.js > should fail when w is not a number
  • Image Optimizer > Serverless support with next.config.js > should fail when q is not a number
  • Image Optimizer > Serverless support with next.config.js > should fail when domain is not defined in next.config.js
  • Image Optimizer > Serverless support with next.config.js > should fail when width is not in next.config.js
  • Image Optimizer > Serverless support with next.config.js > should resize relative url and webp Firefox accept header
  • Image Optimizer > Serverless support with next.config.js > should resize relative url and png accept header
  • Image Optimizer > Serverless support with next.config.js > should resize relative url with invalid accept header as png
  • Image Optimizer > Serverless support with next.config.js > should resize relative url with invalid accept header as gif
  • Image Optimizer > Serverless support with next.config.js > should resize relative url with invalid accept header as tiff
  • Image Optimizer > Serverless support with next.config.js > should resize relative url and Chrome accept header as webp
  • Image Optimizer > Serverless support with next.config.js > should resize absolute url from localhost
  • Image Optimizer > Serverless support with next.config.js > should fail when url has file protocol
  • Image Optimizer > Serverless support with next.config.js > should fail when url has ftp protocol
  • Image Optimizer > Serverless support with next.config.js > should fail when url fails to load an image
  • Image Optimizer > Serverless support with next.config.js > should use cached image file when parameters are the same
  • Image Optimizer > Serverless support with next.config.js > should set 304 status without body when etag matches if-none-match
  • Image Optimizer > Serverless support with next.config.js > should proxy-pass unsupported image types and should not cache file
  • Image Optimizer > Serverless support with next.config.js > should not resize if requested width is larger than original source image
  • Image Optimizer > config checks > should error when domains length exceeds 50
  • Image Optimizer > config checks > should error when sizes length exceeds 25
  • Image Optimizer > config checks > should error when deviceSizes contains invalid widths
  • Image Optimizer > config checks > should error when imageSizes contains invalid widths
  • Image Optimizer > config checks > should error when loader contains invalid value
  • Image Optimizer > dev support next.config.js cloudinary loader > should 404 when loader is not default
  • Image Optimizer > dev support w/o next.config.js > should return home page
  • Image Optimizer > dev support w/o next.config.js > should maintain animated gif
  • Image Optimizer > dev support w/o next.config.js > should maintain animated png
  • Image Optimizer > dev support w/o next.config.js > should maintain animated webp
  • Image Optimizer > dev support w/o next.config.js > should maintain vector svg
  • Image Optimizer > dev support w/o next.config.js > should maintain ico format
  • Image Optimizer > dev support w/o next.config.js > should maintain jpg format for old Safari
  • Image Optimizer > dev support w/o next.config.js > should maintain png format for old Safari
  • Image Optimizer > dev support w/o next.config.js > should fail when url is missing
  • Image Optimizer > dev support w/o next.config.js > should fail when w is missing
  • Image Optimizer > dev support w/o next.config.js > should fail when q is missing
  • Image Optimizer > dev support w/o next.config.js > should fail when q is greater than 100
  • Image Optimizer > dev support w/o next.config.js > should fail when q is less than 1
  • Image Optimizer > dev support w/o next.config.js > should fail when w is 0 or less
  • Image Optimizer > dev support w/o next.config.js > should fail when w is not a number
  • Image Optimizer > dev support w/o next.config.js > should fail when q is not a number
  • Image Optimizer > dev support w/o next.config.js > should fail when domain is not defined in next.config.js
  • Image Optimizer > dev support w/o next.config.js > should fail when width is not in next.config.js
  • Image Optimizer > dev support w/o next.config.js > should resize relative url and webp Firefox accept header
  • Image Optimizer > dev support w/o next.config.js > should resize relative url and png accept header
  • Image Optimizer > dev support w/o next.config.js > should resize relative url with invalid accept header as png
  • Image Optimizer > dev support w/o next.config.js > should resize relative url with invalid accept header as gif
  • Image Optimizer > dev support w/o next.config.js > should resize relative url with invalid accept header as tiff
  • Image Optimizer > dev support w/o next.config.js > should resize relative url and Chrome accept header as webp
  • Image Optimizer > dev support w/o next.config.js > should fail when url has file protocol
  • Image Optimizer > dev support w/o next.config.js > should fail when url has ftp protocol
  • Image Optimizer > dev support w/o next.config.js > should use cached image file when parameters are the same
  • Image Optimizer > dev support w/o next.config.js > should set 304 status without body when etag matches if-none-match
  • Image Optimizer > dev support w/o next.config.js > should proxy-pass unsupported image types and should not cache file
  • Image Optimizer > dev support w/o next.config.js > should not resize if requested width is larger than original source image
  • Image Optimizer > dev support with next.config.js > should return home page
  • Image Optimizer > dev support with next.config.js > should maintain animated gif
  • Image Optimizer > dev support with next.config.js > should maintain animated png
  • Image Optimizer > dev support with next.config.js > should maintain animated webp
  • Image Optimizer > dev support with next.config.js > should maintain vector svg
  • Image Optimizer > dev support with next.config.js > should maintain ico format
  • Image Optimizer > dev support with next.config.js > should maintain jpg format for old Safari
  • Image Optimizer > dev support with next.config.js > should maintain png format for old Safari
  • Image Optimizer > dev support with next.config.js > should fail when url is missing
  • Image Optimizer > dev support with next.config.js > should fail when w is missing
  • Image Optimizer > dev support with next.config.js > should fail when q is missing
  • Image Optimizer > dev support with next.config.js > should fail when q is greater than 100
  • Image Optimizer > dev support with next.config.js > should fail when q is less than 1
  • Image Optimizer > dev support with next.config.js > should fail when w is 0 or less
  • Image Optimizer > dev support with next.config.js > should fail when w is not a number
  • Image Optimizer > dev support with next.config.js > should fail when q is not a number
  • Image Optimizer > dev support with next.config.js > should fail when domain is not defined in next.config.js
  • Image Optimizer > dev support with next.config.js > should fail when width is not in next.config.js
  • Image Optimizer > dev support with next.config.js > should resize relative url and webp Firefox accept header
  • Image Optimizer > dev support with next.config.js > should resize relative url and png accept header
  • Image Optimizer > dev support with next.config.js > should resize relative url with invalid accept header as png
  • Image Optimizer > dev support with next.config.js > should resize relative url with invalid accept header as gif
  • Image Optimizer > dev support with next.config.js > should resize relative url with invalid accept header as tiff
  • Image Optimizer > dev support with next.config.js > should resize relative url and Chrome accept header as webp
  • Image Optimizer > dev support with next.config.js > should resize absolute url from localhost
  • Image Optimizer > dev support with next.config.js > should fail when url has file protocol
  • Image Optimizer > dev support with next.config.js > should fail when url has ftp protocol
  • Image Optimizer > dev support with next.config.js > should fail when url fails to load an image
  • Image Optimizer > dev support with next.config.js > should use cached image file when parameters are the same
  • Image Optimizer > dev support with next.config.js > should set 304 status without body when etag matches if-none-match
  • Image Optimizer > dev support with next.config.js > should proxy-pass unsupported image types and should not cache file
  • Image Optimizer > dev support with next.config.js > should not resize if requested width is larger than original source image
Expand output

● Image Optimizer › config checks › should error when domains length exceeds 50

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at Object.<anonymous> (integration/image-optimizer/test/index.test.js:451:24)

● Image Optimizer › config checks › should error when sizes length exceeds 25

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at Object.<anonymous> (integration/image-optimizer/test/index.test.js:476:24)

● Image Optimizer › config checks › should error when deviceSizes contains invalid widths

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at Object.<anonymous> (integration/image-optimizer/test/index.test.js:501:24)

● Image Optimizer › config checks › should error when imageSizes contains invalid widths

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at Object.<anonymous> (integration/image-optimizer/test/index.test.js:526:24)

● Image Optimizer › config checks › should error when loader contains invalid value

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at Object.<anonymous> (integration/image-optimizer/test/index.test.js:551:24)

● Image Optimizer › dev support w/o next.config.js › should return home page

FetchError: request to http://localhost:42273/ failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain animated gif

FetchError: request to http://localhost:42273/_next/image?w=384&q=90&url=%2Fanimated.gif failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain animated png

FetchError: request to http://localhost:42273/_next/image?w=384&q=90&url=%2Fanimated.png failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain animated webp

FetchError: request to http://localhost:42273/_next/image?w=384&q=90&url=%2Fanimated.webp failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain vector svg

FetchError: request to http://localhost:42273/_next/image?w=384&q=90&url=%2Ftest.svg failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain ico format

FetchError: request to http://localhost:42273/_next/image?w=384&q=90&url=%2Ftest.ico failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain jpg format for old Safari

FetchError: request to http://localhost:42273/_next/image?w=384&q=90&url=%2Ftest.jpg failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should maintain png format for old Safari

FetchError: request to http://localhost:42273/_next/image?w=384&q=75&url=%2Ftest.png failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when url is missing

FetchError: request to http://localhost:42273/_next/image?w=384&q=100 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when w is missing

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&q=100 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when q is missing

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&w=384 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when q is greater than 100

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&w=384&q=101 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when q is less than 1

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&w=384&q=0 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when w is 0 or less

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&w=0&q=100 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when w is not a number

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&w=foo&q=100 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when q is not a number

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&w=384&q=foo failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when domain is not defined in next.config.js

FetchError: request to http://localhost:42273/_next/image?url=http%3A%2F%2Fvercel.com%2Fbutton&w=384&q=100 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when width is not in next.config.js

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&w=1000&q=100 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should resize relative url and webp Firefox accept header

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should resize relative url and png accept header

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should resize relative url with invalid accept header as png

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should resize relative url with invalid accept header as gif

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.gif&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should resize relative url with invalid accept header as tiff

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.tiff&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should resize relative url and Chrome accept header as webp

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when url has file protocol

FetchError: request to http://localhost:42273/_next/image?url=file%3A%2F%2Flocalhost%3A42273%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should fail when url has ftp protocol

FetchError: request to http://localhost:42273/_next/image?url=ftp%3A%2F%2Flocalhost%3A42273%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should use cached image file when parameters are the same

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.png&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should set 304 status without body when etag matches if-none-match

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.jpg&w=384&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support w/o next.config.js › should proxy-pass unsupported image types and should not cache file

ENOENT: no such file or directory, scandir '/home/runner/work/next.js/next.js/test/integration/image-optimizer/.next/cache/images'

● Image Optimizer › dev support w/o next.config.js › should not resize if requested width is larger than original source image

FetchError: request to http://localhost:42273/_next/image?url=%2Ftest.jpg&w=1080&q=80 failed, reason: connect ECONNREFUSED 127.0.0.1:42273

  at ClientRequest.<anonymous> (../node_modules/node-fetch/lib/index.js:1461:11)

● Image Optimizer › dev support with next.config.js › should return home page

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain animated gif

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain animated png

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain animated webp

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain vector svg

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain ico format

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain jpg format for old Safari

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should maintain png format for old Safari

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when url is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when w is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when q is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when q is greater than 100

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when q is less than 1

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when w is 0 or less

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when w is not a number

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when q is not a number

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when domain is not defined in next.config.js

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when width is not in next.config.js

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize relative url and webp Firefox accept header

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize relative url and png accept header

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize relative url with invalid accept header as png

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize relative url with invalid accept header as gif

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize relative url with invalid accept header as tiff

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize relative url and Chrome accept header as webp

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should resize absolute url from localhost

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when url has file protocol

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when url has ftp protocol

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should fail when url fails to load an image

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should use cached image file when parameters are the same

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should set 304 status without body when etag matches if-none-match

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should proxy-pass unsupported image types and should not cache file

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › dev support with next.config.js › should not resize if requested width is larger than original source image

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:603:18

● Image Optimizer › Server support w/o next.config.js › should return home page

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain animated gif

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain animated png

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain animated webp

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain vector svg

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain ico format

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain jpg format for old Safari

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should maintain png format for old Safari

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when url is missing

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when w is missing

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when q is missing

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when q is greater than 100

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when q is less than 1

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when w is 0 or less

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when w is not a number

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when q is not a number

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when domain is not defined in next.config.js

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when width is not in next.config.js

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should resize relative url and webp Firefox accept header

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should resize relative url and png accept header

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should resize relative url with invalid accept header as png

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should resize relative url with invalid accept header as gif

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should resize relative url with invalid accept header as tiff

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should resize relative url and Chrome accept header as webp

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when url has file protocol

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should fail when url has ftp protocol

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should use cached image file when parameters are the same

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should set 304 status without body when etag matches if-none-match

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should proxy-pass unsupported image types and should not cache file

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support w/o next.config.js › should not resize if requested width is larger than original source image

command failed with code 1

  138 |         code !== 0
  139 |       ) {
> 140 |         return reject(new Error(`command failed with code ${code}`))
      |                       ^
  141 |       }
  142 | 
  143 |       resolve({

  at ChildProcess.<anonymous> (lib/next-test-utils.js:140:23)

● Image Optimizer › Server support with next.config.js › should return home page

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain animated gif

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain animated png

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain animated webp

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain vector svg

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain ico format

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain jpg format for old Safari

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should maintain png format for old Safari

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when url is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when w is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when q is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when q is greater than 100

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when q is less than 1

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when w is 0 or less

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when w is not a number

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when q is not a number

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when domain is not defined in next.config.js

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when width is not in next.config.js

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize relative url and webp Firefox accept header

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize relative url and png accept header

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize relative url with invalid accept header as png

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize relative url with invalid accept header as gif

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize relative url with invalid accept header as tiff

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize relative url and Chrome accept header as webp

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should resize absolute url from localhost

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when url has file protocol

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when url has ftp protocol

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should fail when url fails to load an image

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should use cached image file when parameters are the same

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should set 304 status without body when etag matches if-none-match

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should proxy-pass unsupported image types and should not cache file

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Server support with next.config.js › should not resize if requested width is larger than original source image

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:640:18

● Image Optimizer › Serverless support with next.config.js › should return home page

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain animated gif

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain animated png

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain animated webp

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain vector svg

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain ico format

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain jpg format for old Safari

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should maintain png format for old Safari

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when url is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when w is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when q is missing

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when q is greater than 100

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when q is less than 1

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when w is 0 or less

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when w is not a number

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when q is not a number

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when domain is not defined in next.config.js

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when width is not in next.config.js

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize relative url and webp Firefox accept header

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize relative url and png accept header

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize relative url with invalid accept header as png

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize relative url with invalid accept header as gif

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize relative url with invalid accept header as tiff

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize relative url and Chrome accept header as webp

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should resize absolute url from localhost

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when url has file protocol

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when url has ftp protocol

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should fail when url fails to load an image

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should use cached image file when parameters are the same

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should set 304 status without body when etag matches if-none-match

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should proxy-pass unsupported image types and should not cache file

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › Serverless support with next.config.js › should not resize if requested width is larger than original source image

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:664:18

● Image Optimizer › dev support next.config.js cloudinary loader › should 404 when loader is not default

Failed to replace content.

Pattern: { /* replaceme */ }

Content: // prettier-ignore
module.exports = {"images":{"domains":["google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com","google.com"]}}

  414 |     } else if (typeof pattern === 'string') {
  415 |       if (!currentContent.includes(pattern)) {
> 416 |         throw new Error(
      |               ^
  417 |           `Failed to replace content.\n\nPattern: ${pattern}\n\nContent: ${currentContent}`
  418 |         )
  419 |       }

  at File.replace (lib/next-test-utils.js:416:15)
  at integration/image-optimizer/test/index.test.js:686:18

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  282 | export async function killApp(instance) {
  283 |   await new Promise((resolve, reject) => {
> 284 |     treeKill(instance.pid, (err) => {
      |                       ^
  285 |       if (err) {
  286 |         if (
  287 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:284:23
  at killApp (lib/next-test-utils.js:283:9)
  at integration/image-optimizer/test/index.test.js:586:13

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  282 | export async function killApp(instance) {
  283 |   await new Promise((resolve, reject) => {
> 284 |     treeKill(instance.pid, (err) => {
      |                       ^
  285 |       if (err) {
  286 |         if (
  287 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:284:23
  at killApp (lib/next-test-utils.js:283:9)
  at integration/image-optimizer/test/index.test.js:608:13

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  282 | export async function killApp(instance) {
  283 |   await new Promise((resolve, reject) => {
> 284 |     treeKill(instance.pid, (err) => {
      |                       ^
  285 |       if (err) {
  286 |         if (
  287 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:284:23
  at killApp (lib/next-test-utils.js:283:9)
  at integration/image-optimizer/test/index.test.js:624:13

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  282 | export async function killApp(instance) {
  283 |   await new Promise((resolve, reject) => {
> 284 |     treeKill(instance.pid, (err) => {
      |                       ^
  285 |       if (err) {
  286 |         if (
  287 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:284:23
  at killApp (lib/next-test-utils.js:283:9)
  at integration/image-optimizer/test/index.test.js:646:13

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  282 | export async function killApp(instance) {
  283 |   await new Promise((resolve, reject) => {
> 284 |     treeKill(instance.pid, (err) => {
      |                       ^
  285 |       if (err) {
  286 |         if (
  287 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:284:23
  at killApp (lib/next-test-utils.js:283:9)
  at integration/image-optimizer/test/index.test.js:670:13

● Test suite failed to run

TypeError: Cannot read property 'pid' of undefined

  282 | export async function killApp(instance) {
  283 |   await new Promise((resolve, reject) => {
> 284 |     treeKill(instance.pid, (err) => {
      |                       ^
  285 |       if (err) {
  286 |         if (
  287 |           process.platform === 'win32' &&

  at lib/next-test-utils.js:284:23
  at killApp (lib/next-test-utils.js:283:9)
  at integration/image-optimizer/test/index.test.js:691:13

@ijjk
Copy link
Member

ijjk commented Dec 5, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 10.5s 10.2s -349ms
nodeModulesSize 77.7 MB 82.4 MB ⚠️ +4.67 MB
Page Load Tests Overall increase ✓
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
/ failed reqs 0 0
/ total time (seconds) 2.474 2.457 -0.02
/ avg req/sec 1010.51 1017.36 +6.85
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.333 1.263 -0.07
/error-in-render avg req/sec 1875.56 1979.51 +103.95
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..34b9.js gzip 12.8 kB 12.8 kB
framework.HASH.js gzip 39 kB 39 kB
main-f501b4a..c42e.js gzip 6.56 kB 6.56 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 59 kB 59 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-7231d4b..5856.js gzip 1.28 kB 1.28 kB
_error-01375..90b6.js gzip 3.69 kB 3.69 kB
hooks-d4591d..e7c2.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-db223d9..dbd7.js gzip 1.61 kB 1.61 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 8.27 kB 8.27 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 322 B 322 B
Overall change 322 B 322 B
Rendered Page Sizes
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
index.html gzip 614 B 614 B
link.html gzip 621 B 621 B
withRouter.html gzip 608 B 608 B
Overall change 1.84 kB 1.84 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 13.5s 13.3s -280ms
nodeModulesSize 82.4 MB 82.4 MB ⚠️ +59 B
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..34b9.js gzip 12.8 kB 12.8 kB
framework.HASH.js gzip 39 kB 39 kB
main-f501b4a..c42e.js gzip 6.56 kB 6.56 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 59 kB 59 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-7231d4b..5856.js gzip 1.28 kB 1.28 kB
_error-01375..90b6.js gzip 3.69 kB 3.69 kB
hooks-d4591d..e7c2.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-db223d9..dbd7.js gzip 1.61 kB 1.61 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 8.27 kB 8.27 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 322 B 322 B
Overall change 322 B 322 B
Serverless bundles Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_error.js 1 MB 1 MB ⚠️ +14 B
404.html 2.67 kB 2.67 kB
hooks.html 1.92 kB 1.92 kB
index.js 1 MB 1 MB ⚠️ +14 B
link.js 1.06 MB 1.06 MB ⚠️ +14 B
routerDirect.js 1.05 MB 1.05 MB ⚠️ +14 B
withRouter.js 1.05 MB 1.05 MB ⚠️ +14 B
Overall change 5.16 MB 5.16 MB ⚠️ +70 B
Commit: 6f8008f

@dkempner dkempner changed the title [Fix] Custom Server with body parsing middleware - don't parse body in API Routes Custom Server with bodyParser, don't parse body again in API Route Dec 5, 2020
@ijjk
Copy link
Member

ijjk commented Dec 5, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 8.9s 8.9s -34ms
nodeModulesSize 82.4 MB 82.4 MB ⚠️ +59 B
Page Load Tests Overall increase ✓
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
/ failed reqs 0 0
/ total time (seconds) 2.227 2.165 -0.06
/ avg req/sec 1122.37 1154.93 +32.56
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.174 1.143 -0.03
/error-in-render avg req/sec 2128.61 2187.06 +58.45
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..34b9.js gzip 12.8 kB 12.8 kB
framework.HASH.js gzip 39 kB 39 kB
main-f501b4a..c42e.js gzip 6.56 kB 6.56 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 59 kB 59 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-7231d4b..5856.js gzip 1.28 kB 1.28 kB
_error-01375..90b6.js gzip 3.69 kB 3.69 kB
hooks-d4591d..e7c2.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-db223d9..dbd7.js gzip 1.61 kB 1.61 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 8.27 kB 8.27 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 322 B 322 B
Overall change 322 B 322 B
Rendered Page Sizes
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
index.html gzip 614 B 614 B
link.html gzip 621 B 621 B
withRouter.html gzip 608 B 608 B
Overall change 1.84 kB 1.84 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 10.9s 11s ⚠️ +65ms
nodeModulesSize 82.4 MB 82.4 MB ⚠️ +59 B
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..34b9.js gzip 12.8 kB 12.8 kB
framework.HASH.js gzip 39 kB 39 kB
main-f501b4a..c42e.js gzip 6.56 kB 6.56 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 59 kB 59 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-7231d4b..5856.js gzip 1.28 kB 1.28 kB
_error-01375..90b6.js gzip 3.69 kB 3.69 kB
hooks-d4591d..e7c2.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-db223d9..dbd7.js gzip 1.61 kB 1.61 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 8.27 kB 8.27 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 322 B 322 B
Overall change 322 B 322 B
Serverless bundles Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_error.js 1 MB 1 MB ⚠️ +14 B
404.html 2.67 kB 2.67 kB
hooks.html 1.92 kB 1.92 kB
index.js 1 MB 1 MB ⚠️ +14 B
link.js 1.06 MB 1.06 MB ⚠️ +14 B
routerDirect.js 1.05 MB 1.05 MB ⚠️ +14 B
withRouter.js 1.05 MB 1.05 MB ⚠️ +14 B
Overall change 5.16 MB 5.16 MB ⚠️ +70 B
Commit: 57c5081

Daniel Kempner added 2 commits December 4, 2020 20:13
@vercel vercel bot temporarily deployed to Preview December 5, 2020 04:14 Inactive
@ijjk
Copy link
Member

ijjk commented Dec 5, 2020

Stats from current PR

Default Server Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 9.9s 10s ⚠️ +52ms
nodeModulesSize 82.4 MB 82.4 MB ⚠️ +59 B
Page Load Tests Overall increase ✓
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
/ failed reqs 0 0
/ total time (seconds) 2.432 2.361 -0.07
/ avg req/sec 1027.98 1058.83 +30.85
/error-in-render failed reqs 0 0
/error-in-render total time (seconds) 1.279 1.281 0
/error-in-render avg req/sec 1955.25 1951.53 ⚠️ -3.72
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..34b9.js gzip 12.8 kB 12.8 kB
framework.HASH.js gzip 39 kB 39 kB
main-f501b4a..c42e.js gzip 6.56 kB 6.56 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 59 kB 59 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-7231d4b..5856.js gzip 1.28 kB 1.28 kB
_error-01375..90b6.js gzip 3.69 kB 3.69 kB
hooks-d4591d..e7c2.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-db223d9..dbd7.js gzip 1.61 kB 1.61 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 8.27 kB 8.27 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 322 B 322 B
Overall change 322 B 322 B
Rendered Page Sizes
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
index.html gzip 614 B 614 B
link.html gzip 621 B 621 B
withRouter.html gzip 608 B 608 B
Overall change 1.84 kB 1.84 kB

Serverless Mode (Increase detected ⚠️)
General Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
buildDuration 11.7s 11.7s -34ms
nodeModulesSize 82.4 MB 82.4 MB ⚠️ +59 B
Client Bundles (main, webpack, commons)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
677f882d2ed8..34b9.js gzip 12.8 kB 12.8 kB
framework.HASH.js gzip 39 kB 39 kB
main-f501b4a..c42e.js gzip 6.56 kB 6.56 kB
webpack-e067..f178.js gzip 751 B 751 B
Overall change 59 kB 59 kB
Legacy Client Bundles (polyfills)
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
polyfills-4b..e242.js gzip 31 kB 31 kB
Overall change 31 kB 31 kB
Client Pages
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_app-7231d4b..5856.js gzip 1.28 kB 1.28 kB
_error-01375..90b6.js gzip 3.69 kB 3.69 kB
hooks-d4591d..e7c2.js gzip 887 B 887 B
index-17468f..5d83.js gzip 227 B 227 B
link-db223d9..dbd7.js gzip 1.61 kB 1.61 kB
routerDirect..924c.js gzip 284 B 284 B
withRouter-7..c13d.js gzip 284 B 284 B
Overall change 8.27 kB 8.27 kB
Client Build Manifests
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_buildManifest.js gzip 322 B 322 B
Overall change 322 B 322 B
Serverless bundles Overall increase ⚠️
vercel/next.js canary dkempner/next.js dont-parse-body-twice Change
_error.js 1 MB 1 MB ⚠️ +14 B
404.html 2.67 kB 2.67 kB
hooks.html 1.92 kB 1.92 kB
index.js 1 MB 1 MB ⚠️ +14 B
link.js 1.06 MB 1.06 MB ⚠️ +14 B
routerDirect.js 1.05 MB 1.05 MB ⚠️ +14 B
withRouter.js 1.05 MB 1.05 MB ⚠️ +14 B
Overall change 5.16 MB 5.16 MB ⚠️ +70 B
Commit: f70fd15

@kodiakhq kodiakhq bot merged commit 90e97b5 into vercel:canary Dec 7, 2020
@timneutkens
Copy link
Member

Thanks @dkempner great PR 💯

@vercel vercel locked as resolved and limited conversation to collaborators Jan 29, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
4 participants