next
Version:
The React Framework
203 lines (202 loc) • 9.38 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getParserOptions = getParserOptions;
exports.getJestSWCOptions = getJestSWCOptions;
exports.getLoaderSWCOptions = getLoaderSWCOptions;
const nextDistPath = /(next[\\/]dist[\\/]shared[\\/]lib)|(next[\\/]dist[\\/]client)|(next[\\/]dist[\\/]pages)/;
const regeneratorRuntimePath = require.resolve('next/dist/compiled/regenerator-runtime');
function getParserOptions({ filename , jsConfig , ...rest }) {
var ref;
const isTSFile = filename.endsWith('.ts');
const isTypeScript = isTSFile || filename.endsWith('.tsx');
const enableDecorators = Boolean(jsConfig === null || jsConfig === void 0 ? void 0 : (ref = jsConfig.compilerOptions) === null || ref === void 0 ? void 0 : ref.experimentalDecorators);
return {
...rest,
syntax: isTypeScript ? 'typescript' : 'ecmascript',
dynamicImport: true,
decorators: enableDecorators,
// 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,
importAssertions: true
};
}
function getBaseSWCOptions({ filename , jest , development , hasReactRefresh , globalWindow , nextConfig , resolvedBaseUrl , jsConfig , }) {
var ref, ref1, ref2, ref3, ref4, ref5, ref6, ref7, ref8, ref9;
const parserConfig = getParserOptions({
filename,
jsConfig
});
const paths = jsConfig === null || jsConfig === void 0 ? void 0 : (ref = jsConfig.compilerOptions) === null || ref === void 0 ? void 0 : ref.paths;
const enableDecorators = Boolean(jsConfig === null || jsConfig === void 0 ? void 0 : (ref1 = jsConfig.compilerOptions) === null || ref1 === void 0 ? void 0 : ref1.experimentalDecorators);
const emitDecoratorMetadata = Boolean(jsConfig === null || jsConfig === void 0 ? void 0 : (ref2 = jsConfig.compilerOptions) === null || ref2 === void 0 ? void 0 : ref2.emitDecoratorMetadata);
return {
jsc: {
...resolvedBaseUrl && paths ? {
baseUrl: resolvedBaseUrl,
paths
} : {},
parser: parserConfig,
experimental: {
keepImportAssertions: true
},
transform: {
// Enables https://github.com/swc-project/swc/blob/0359deb4841be743d73db4536d4a22ac797d7f65/crates/swc_ecma_ext_transforms/src/jest.rs
...jest ? {
hidden: {
jest: true
}
} : {},
legacyDecorator: enableDecorators,
decoratorMetadata: emitDecoratorMetadata,
react: {
importSource: (nextConfig === null || nextConfig === void 0 ? void 0 : (ref3 = nextConfig.experimental) === null || ref3 === void 0 ? void 0 : ref3.emotion) ? '@emotion/react' : (jsConfig === null || jsConfig === void 0 ? void 0 : (ref4 = jsConfig.compilerOptions) === null || ref4 === void 0 ? void 0 : ref4.jsxImportSource) || 'react',
runtime: 'automatic',
pragma: 'React.createElement',
pragmaFrag: 'React.Fragment',
throwIfNamespace: true,
development: !!development,
useBuiltins: true,
refresh: !!hasReactRefresh
},
optimizer: {
simplify: false,
globals: jest ? null : {
typeofs: {
window: globalWindow ? 'object' : 'undefined'
},
envs: {
NODE_ENV: development ? '"development"' : '"production"'
}
}
},
regenerator: {
importPath: regeneratorRuntimePath
}
}
},
sourceMaps: jest ? 'inline' : undefined,
styledComponents: (nextConfig === null || nextConfig === void 0 ? void 0 : (ref5 = nextConfig.compiler) === null || ref5 === void 0 ? void 0 : ref5.styledComponents) ? {
displayName: Boolean(development)
} : null,
removeConsole: nextConfig === null || nextConfig === void 0 ? void 0 : (ref6 = nextConfig.compiler) === null || ref6 === void 0 ? void 0 : ref6.removeConsole,
reactRemoveProperties: nextConfig === null || nextConfig === void 0 ? void 0 : (ref7 = nextConfig.compiler) === null || ref7 === void 0 ? void 0 : ref7.reactRemoveProperties,
modularizeImports: nextConfig === null || nextConfig === void 0 ? void 0 : (ref8 = nextConfig.experimental) === null || ref8 === void 0 ? void 0 : ref8.modularizeImports,
relay: nextConfig === null || nextConfig === void 0 ? void 0 : (ref9 = nextConfig.compiler) === null || ref9 === void 0 ? void 0 : ref9.relay,
emotion: getEmotionOptions(nextConfig, development)
};
}
function getEmotionOptions(nextConfig, development) {
var ref, ref10, ref11, ref12, ref13, ref14, ref15;
if (!(nextConfig === null || nextConfig === void 0 ? void 0 : (ref = nextConfig.experimental) === null || ref === void 0 ? void 0 : ref.emotion)) {
return null;
}
let autoLabel = false;
switch(nextConfig === null || nextConfig === void 0 ? void 0 : (ref10 = nextConfig.experimental) === null || ref10 === void 0 ? void 0 : (ref11 = ref10.emotion) === null || ref11 === void 0 ? void 0 : ref11.autoLabel){
case 'never':
autoLabel = false;
break;
case 'always':
autoLabel = true;
break;
case 'dev-only':
default:
autoLabel = !!development;
break;
}
var ref16;
return {
enabled: true,
autoLabel,
labelFormat: nextConfig === null || nextConfig === void 0 ? void 0 : (ref12 = nextConfig.experimental) === null || ref12 === void 0 ? void 0 : (ref13 = ref12.emotion) === null || ref13 === void 0 ? void 0 : ref13.labelFormat,
sourcemap: development ? (ref16 = nextConfig === null || nextConfig === void 0 ? void 0 : (ref14 = nextConfig.experimental) === null || ref14 === void 0 ? void 0 : (ref15 = ref14.emotion) === null || ref15 === void 0 ? void 0 : ref15.sourceMap) !== null && ref16 !== void 0 ? ref16 : true : false
};
}
function getJestSWCOptions({ isServer , filename , esm , nextConfig , jsConfig , }) {
let baseOptions = getBaseSWCOptions({
filename,
jest: true,
development: false,
hasReactRefresh: false,
globalWindow: !isServer,
nextConfig,
jsConfig
});
const isNextDist = nextDistPath.test(filename);
return {
...baseOptions,
env: {
targets: {
// Targets the current version of Node.js
node: process.versions.node
},
// we always transpile optional chaining and nullish coalescing
// since it can cause issues with webpack even if the node target
// supports them
include: [
'proposal-optional-chaining',
'proposal-nullish-coalescing-operator',
]
},
module: {
type: esm && !isNextDist ? 'es6' : 'commonjs'
},
disableNextSsg: true,
disablePageConfig: true
};
}
function getLoaderSWCOptions({ filename , development , isServer , pagesDir , isPageFile , hasReactRefresh , nextConfig , jsConfig , }) {
let baseOptions = getBaseSWCOptions({
filename,
development,
globalWindow: !isServer,
hasReactRefresh,
nextConfig,
jsConfig
});
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,
isServer,
pagesDir,
isPageFile,
env: {
targets: {
// Targets the current version of Node.js
node: process.versions.node
},
// we always transpile optional chaining and nullish coalescing
// since it can cause issues with webpack even if the node target
// supports them
include: [
'proposal-optional-chaining',
'proposal-nullish-coalescing-operator',
]
}
};
} 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,
isServer,
pagesDir,
isPageFile
};
}
}
//# sourceMappingURL=options.js.map
;