Skip to content

Commit

Permalink
fix: edge runtime with next/legacy/image (#50343)
Browse files Browse the repository at this point in the history
- Fixes #50307
- Related to #45601

fix #50307
fix NEXT-1237
  • Loading branch information
styfle committed May 26, 2023
1 parent 5d95978 commit 68b34de
Show file tree
Hide file tree
Showing 6 changed files with 77 additions and 1 deletion.
6 changes: 5 additions & 1 deletion packages/next/src/client/legacy/image.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,11 @@ function defaultLoader({
)
}

if (process.env.NODE_ENV !== 'test') {
if (
process.env.NODE_ENV !== 'test' &&
// micromatch isn't compatible with edge runtime
process.env.NEXT_RUNTIME !== 'edge'
) {
// We use dynamic require because this should only error in development
const { hasMatch } = require('../../shared/lib/match-remote-pattern')
if (!hasMatch(config.domains, config.remotePatterns, parsedSrc)) {
Expand Down
14 changes: 14 additions & 0 deletions test/e2e/app-dir/next-image/app/legacy-edge-runtime/layout.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import Image from 'next/legacy/image'
import testPng from '../../images/test.png'

export const runtime = 'experimental-edge'

export default function LegacyEdgeLayout({ children }) {
return (
<>
<h2>app-legacy-edge-layout</h2>
<Image id="app-legacy-edge-layout" src={testPng} loading="eager" />
{children}
</>
)
}
11 changes: 11 additions & 0 deletions test/e2e/app-dir/next-image/app/legacy-edge-runtime/page.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import Image from 'next/legacy/image'
import testPng from '../../images/test.png'

export default function LegacyEdgePage() {
return (
<>
<h2>app-legacy-edge-page</h2>
<Image id="app-legacy-edge-page" src={testPng} loading="eager" />
</>
)
}
12 changes: 12 additions & 0 deletions test/e2e/app-dir/next-image/app/legacy/layout.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import Image from 'next/legacy/image'
import testPng from '../../images/test.png'

export default function LegacyLayout({ children }) {
return (
<>
<h2>app-legacy-layout</h2>
<Image id="app-legacy-layout" src={testPng} loading="eager" />
{children}
</>
)
}
11 changes: 11 additions & 0 deletions test/e2e/app-dir/next-image/app/legacy/page.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import Image from 'next/legacy/image'
import testPng from '../../images/test.png'

export default function LegacyPage() {
return (
<>
<h2>app-legacy-page</h2>
<Image id="app-legacy-page" src={testPng} loading="eager" />
</>
)
}
24 changes: 24 additions & 0 deletions test/e2e/app-dir/next-image/next-image.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,30 @@ createNextDescribe(
expect(res4.status).toBe(200)
expect(res4.headers.get('content-type')).toBe('image/jpeg')
})

it('should render legacy images under /legacy route', async () => {
const $ = await next.render$('/legacy')

const res2 = await next.fetch($('#app-legacy-layout').attr('src'))
expect(res2.status).toBe(200)
expect(res2.headers.get('content-type')).toBe('image/png')

const res3 = await next.fetch($('#app-legacy-page').attr('src'))
expect(res3.status).toBe(200)
expect(res3.headers.get('content-type')).toBe('image/png')
})

it('should render legacy images in edge runtime on /legacy-edge-runtime route', async () => {
const $ = await next.render$('/legacy-edge-runtime')

const res2 = await next.fetch($('#app-legacy-edge-layout').attr('src'))
expect(res2.status).toBe(200)
expect(res2.headers.get('content-type')).toBe('image/png')

const res3 = await next.fetch($('#app-legacy-edge-page').attr('src'))
expect(res3.status).toBe(200)
expect(res3.headers.get('content-type')).toBe('image/png')
})
})
}
)

0 comments on commit 68b34de

Please sign in to comment.