1+ import webpack from 'webpack' ;
12import webpackMerge from 'webpack-merge' ;
23import { CreateWebpackConfig } from '../../src/config/CreateWebpackConfig' ;
34import { ProjectConfig } from '../../src/config/project.config.default' ;
45import { initConfig , projectConfig , serverConfig } from '../helpers/testConfig' ;
6+ import { findWpackIoBabelOnTJs } from '../helpers/testUtils' ;
57
68jest . mock ( 'webpack-merge' ) ;
79( ( webpackMerge as unknown ) as jest . Mock ) . mockImplementation ( ( ) => ( {
@@ -23,6 +25,62 @@ describe('CreateWebpackConfig', () => {
2325 expect ( cwc ) . not . toBeFalsy ( ) ;
2426 } ) ;
2527
28+ test ( 'entry level useBabelConfig overrides project level config' , ( ) => {
29+ const newProjectConfig = { ...projectConfig } ;
30+ newProjectConfig . files = [
31+ {
32+ name : 'config1' ,
33+ entry : { foo : 'bar.js' , biz : [ 'baz.js' ] } ,
34+ useBabelConfig : false ,
35+ } ,
36+ ] ;
37+ newProjectConfig . useBabelConfig = true ;
38+ const config = new CreateWebpackConfig (
39+ newProjectConfig ,
40+ serverConfig ,
41+ '/foo/bar' ,
42+ true
43+ ) . getWebpackConfig ( ) as webpack . Configuration ;
44+ const module = config . module ;
45+ if ( Array . isArray ( module . rules ) ) {
46+ const jsTsRules = findWpackIoBabelOnTJs ( module ) ;
47+ expect ( jsTsRules ) . toHaveLength ( 2 ) ;
48+ jsTsRules . forEach ( rule => {
49+ if ( rule && rule . use && rule . use [ 0 ] . options ) {
50+ expect ( rule . use [ 0 ] . options ) . toHaveProperty ( 'babelrc' , false ) ;
51+ expect ( rule . use [ 0 ] . options ) . toHaveProperty ( 'configFile' , false ) ;
52+ } else {
53+ throw new Error ( 'JavaScript rule is undefined' ) ;
54+ }
55+ } ) ;
56+ } else {
57+ throw new Error ( 'Invalid module.rules' ) ;
58+ }
59+ newProjectConfig . files [ 0 ] . useBabelConfig = true ;
60+ newProjectConfig . useBabelConfig = false ;
61+ const config2 = new CreateWebpackConfig (
62+ newProjectConfig ,
63+ serverConfig ,
64+ '/foo/bar' ,
65+ true
66+ ) . getWebpackConfig ( ) as webpack . Configuration ;
67+ const module2 = config2 . module ;
68+ if ( Array . isArray ( module2 . rules ) ) {
69+ const jsTsRules = findWpackIoBabelOnTJs ( module2 ) ;
70+ expect ( jsTsRules ) . toHaveLength ( 2 ) ;
71+ jsTsRules . forEach ( rule => {
72+ if ( rule && rule . use && rule . use [ 0 ] . options ) {
73+ expect ( rule . use [ 0 ] . options ) . not . toHaveProperty ( 'babelrc' , false ) ;
74+ expect ( rule . use [ 0 ] . options ) . not . toHaveProperty ( 'configFile' , false ) ;
75+ } else {
76+ throw new Error ( 'JavaScript rule is undefined' ) ;
77+ }
78+ } ) ;
79+ } else {
80+ throw new Error ( 'Invalid module.rules' ) ;
81+ }
82+ } ) ;
83+
2684 describe ( 'getWebpackConfig & isMultiCompiler' , ( ) => {
2785 test ( 'works with single-compiler mode' , ( ) => {
2886 const multiProjectConfig : ProjectConfig = {
0 commit comments