fe3d6b7aed
Implements the first part of #33227 - Applies browserslist to JS transforms when `experimental.browsersListForSwc` is enabled. - You don't have to use browserslist, there's also `legacyBrowsers: false` which will be the new default in Next.js 13. See #33227 for which browsers and why. `legacyBrowsers` requires `browsersListForSwc: true` to function until it is the default. ```js module.exports = { experimental: { legacyBrowsers: false, browsersListForSwc: true, } } ``` I only implemented the JS part of the RFC, the CSS part should be handled in a follow-up PR. ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have helpful link attached, see `contributing.md` ## Feature - [x] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [x] Related issues linked using `fixes #number` - [x] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [x] Errors have helpful link attached, see `contributing.md` ## Documentation / Examples - [ ] Make sure the linting passes by running `yarn lint` Co-authored-by: JJ Kasper <22380829+ijjk@users.noreply.github.com>
52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import { createNext, FileRef } from 'e2e-utils'
|
|
import { NextInstance } from 'test/lib/next-modes/base'
|
|
import { renderViaHTTP, fetchViaHTTP } from 'next-test-utils'
|
|
import path from 'path'
|
|
import cheerio from 'cheerio'
|
|
const appDir = path.join(__dirname, 'app')
|
|
|
|
describe('legacyBrowsers: true', () => {
|
|
let next: NextInstance
|
|
|
|
beforeAll(async () => {
|
|
next = await createNext({
|
|
files: {
|
|
pages: new FileRef(path.join(appDir, 'pages')),
|
|
},
|
|
nextConfig: {
|
|
experimental: {
|
|
browsersListForSwc: true,
|
|
},
|
|
},
|
|
dependencies: {},
|
|
})
|
|
})
|
|
afterAll(() => next.destroy())
|
|
|
|
it('should apply legacyBrowsers: true by default', async () => {
|
|
const html = await renderViaHTTP(next.url, '/')
|
|
const $ = cheerio.load(html)
|
|
|
|
let finished = false
|
|
await Promise.all(
|
|
$('script')
|
|
.toArray()
|
|
.map(async (el) => {
|
|
const src = $(el).attr('src')
|
|
if (!src) return
|
|
if (src.includes('/index')) {
|
|
const code = await fetchViaHTTP(next.url, src).then((res) =>
|
|
res.text()
|
|
)
|
|
|
|
const isDev = (global as any).isNextDev
|
|
expect(
|
|
code.includes(isDev ? 'async ()=>{' : 'async()=>{console.log(')
|
|
).toBe(false)
|
|
finished = true
|
|
}
|
|
})
|
|
)
|
|
expect(finished).toBe(true)
|
|
})
|
|
})
|