@@ -16,6 +16,19 @@ jest.mock("../../../package/config", () => {
1616} )
1717
1818const babelConfig = require ( "../../../package/rules/babel" )
19+ const shakapackerBabelPreset = require ( "../../../package/babel/preset" )
20+ const shakapackerManifest = require ( "../../../package.json" )
21+ const shakapackerWebpackManifest = require ( "../../../packages/shakapacker-webpack/package.json" )
22+
23+ const createBabelApi = ( envName , version ) => ( {
24+ version,
25+ env : jest . fn ( ( name ) => ( name ? name === envName : envName ) )
26+ } )
27+
28+ const presetEnvOptions = ( config ) =>
29+ config . presets . find (
30+ ( preset ) => Array . isArray ( preset ) && preset [ 0 ] === "@babel/preset-env"
31+ ) [ 1 ]
1932
2033// Skip tests if babel config is not available (not the active transpiler)
2134if ( ! babelConfig ) {
@@ -83,3 +96,54 @@ if (!babelConfig) {
8396 } )
8497 } )
8598} // end of else block for babelConfig check
99+
100+ describe ( "babel preset" , ( ) => {
101+ test ( "keeps Babel 7 preset-env and transform-runtime options" , ( ) => {
102+ const config = shakapackerBabelPreset (
103+ createBabelApi ( "production" , "7.29.0" )
104+ )
105+
106+ expect ( presetEnvOptions ( config ) ) . toMatchObject ( {
107+ useBuiltIns : "entry" ,
108+ corejs : "3.8" ,
109+ modules : "auto" ,
110+ bugfixes : true ,
111+ exclude : [ "transform-typeof-symbol" ]
112+ } )
113+ expect ( config . plugins ) . toContainEqual ( [
114+ "@babel/plugin-transform-runtime" ,
115+ { helpers : false }
116+ ] )
117+ } )
118+
119+ test ( "omits options Babel 8 removed" , ( ) => {
120+ const config = shakapackerBabelPreset ( createBabelApi ( "production" , "8.0.1" ) )
121+ const options = presetEnvOptions ( config )
122+
123+ expect ( options ) . toMatchObject ( {
124+ modules : "auto" ,
125+ exclude : [ "transform-typeof-symbol" ]
126+ } )
127+ expect ( options ) . not . toHaveProperty ( "useBuiltIns" )
128+ expect ( options ) . not . toHaveProperty ( "corejs" )
129+ expect ( options ) . not . toHaveProperty ( "bugfixes" )
130+ expect ( config . plugins ) . toContain ( "@babel/plugin-transform-runtime" )
131+ expect ( config . plugins ) . not . toContainEqual ( [
132+ "@babel/plugin-transform-runtime" ,
133+ { helpers : false }
134+ ] )
135+ } )
136+
137+ test ( "allows Babel 8 peers without changing Babel 7 development pins" , ( ) => {
138+ expect ( shakapackerManifest . devDependencies [ "@babel/core" ] ) . toBe ( "7.29.0" )
139+ expect ( shakapackerManifest . peerDependencies ) . toMatchObject ( {
140+ "@babel/core" : "^7.17.9 || ^8.0.0" ,
141+ "@babel/plugin-transform-runtime" : "^7.17.0 || ^8.0.0" ,
142+ "@babel/preset-env" : "^7.16.11 || ^8.0.0" ,
143+ "@babel/runtime" : "^7.17.9 || ^8.0.0"
144+ } )
145+ expect ( shakapackerWebpackManifest . peerDependencies [ "@babel/core" ] ) . toBe (
146+ "^7.17.9 || ^8.0.0"
147+ )
148+ } )
149+ } )
0 commit comments