9faf14e0b7
Found that when the target is `jsdom` instead of `node` the "typeof window" transform is incorrect. This was causing an unexpected failure in on of the tests for vercel.com. ## Bug - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Errors have helpful link attached, see `contributing.md` ## Feature - [ ] Implements an existing feature request or RFC. Make sure the feature request has been accepted for implementation before opening a PR. - [ ] Related issues linked using `fixes #number` - [ ] Integration tests added - [ ] Documentation added - [ ] Telemetry added. In case of a feature if it's used or not. - [ ] Errors have helpful link attached, see `contributing.md` ## Documentation / Examples - [ ] Make sure the linting passes by running `yarn lint`
152 lines
3.3 KiB
JavaScript
152 lines
3.3 KiB
JavaScript
const nextDistPath =
|
|
/(next[\\/]dist[\\/]shared[\\/]lib)|(next[\\/]dist[\\/]client)|(next[\\/]dist[\\/]pages)/
|
|
|
|
function getBaseSWCOptions({
|
|
filename,
|
|
development,
|
|
hasReactRefresh,
|
|
globalWindow,
|
|
styledComponents,
|
|
paths,
|
|
baseUrl,
|
|
}) {
|
|
const isTSFile = filename.endsWith('.ts')
|
|
const isTypeScript = isTSFile || filename.endsWith('.tsx')
|
|
|
|
return {
|
|
jsc: {
|
|
...(baseUrl && paths
|
|
? {
|
|
baseUrl,
|
|
paths,
|
|
}
|
|
: {}),
|
|
parser: {
|
|
syntax: isTypeScript ? 'typescript' : 'ecmascript',
|
|
dynamicImport: true,
|
|
// Exclude regular TypeScript files from React transformation to prevent e.g. generic parameters and angle-bracket type assertion from being interpreted as JSX tags.
|
|
[isTypeScript ? 'tsx' : 'jsx']: isTSFile ? false : true,
|
|
},
|
|
|
|
transform: {
|
|
react: {
|
|
runtime: 'automatic',
|
|
pragma: 'React.createElement',
|
|
pragmaFrag: 'React.Fragment',
|
|
throwIfNamespace: true,
|
|
development: development,
|
|
useBuiltins: true,
|
|
refresh: hasReactRefresh,
|
|
},
|
|
optimizer: {
|
|
simplify: false,
|
|
globals: {
|
|
typeofs: {
|
|
window: globalWindow ? 'object' : 'undefined',
|
|
},
|
|
},
|
|
},
|
|
regenerator: {
|
|
importPath: require.resolve('regenerator-runtime'),
|
|
},
|
|
},
|
|
},
|
|
styledComponents: styledComponents
|
|
? {
|
|
displayName: Boolean(development),
|
|
}
|
|
: null,
|
|
}
|
|
}
|
|
|
|
export function getJestSWCOptions({
|
|
isServer,
|
|
filename,
|
|
esm,
|
|
styledComponents,
|
|
paths,
|
|
baseUrl,
|
|
}) {
|
|
let baseOptions = getBaseSWCOptions({
|
|
filename,
|
|
development: false,
|
|
hasReactRefresh: false,
|
|
globalWindow: !isServer,
|
|
styledComponents,
|
|
paths,
|
|
baseUrl,
|
|
})
|
|
|
|
const isNextDist = nextDistPath.test(filename)
|
|
|
|
return {
|
|
...baseOptions,
|
|
env: {
|
|
targets: {
|
|
// Targets the current version of Node.js
|
|
node: process.versions.node,
|
|
},
|
|
},
|
|
module: {
|
|
type: esm && !isNextDist ? 'es6' : 'commonjs',
|
|
},
|
|
disableNextSsg: true,
|
|
disablePageConfig: true,
|
|
}
|
|
}
|
|
|
|
export function getLoaderSWCOptions({
|
|
filename,
|
|
development,
|
|
isServer,
|
|
pagesDir,
|
|
isPageFile,
|
|
hasReactRefresh,
|
|
styledComponents,
|
|
}) {
|
|
let baseOptions = getBaseSWCOptions({
|
|
filename,
|
|
development,
|
|
globalWindow: !isServer,
|
|
hasReactRefresh,
|
|
styledComponents,
|
|
})
|
|
|
|
const isNextDist = nextDistPath.test(filename)
|
|
|
|
if (isServer) {
|
|
return {
|
|
...baseOptions,
|
|
// Disables getStaticProps/getServerSideProps tree shaking on the server compilation for pages
|
|
disableNextSsg: true,
|
|
disablePageConfig: true,
|
|
isDevelopment: development,
|
|
pagesDir,
|
|
isPageFile,
|
|
env: {
|
|
targets: {
|
|
// Targets the current version of Node.js
|
|
node: process.versions.node,
|
|
},
|
|
},
|
|
}
|
|
} else {
|
|
// Matches default @babel/preset-env behavior
|
|
baseOptions.jsc.target = 'es5'
|
|
return {
|
|
...baseOptions,
|
|
// Ensure Next.js internals are output as commonjs modules
|
|
...(isNextDist
|
|
? {
|
|
module: {
|
|
type: 'commonjs',
|
|
},
|
|
}
|
|
: {}),
|
|
disableNextSsg: !isPageFile,
|
|
isDevelopment: development,
|
|
pagesDir,
|
|
isPageFile,
|
|
}
|
|
}
|
|
}
|