1+ require . extensions [ '.css' ] = ( ) => undefined ;
2+ const path = require ( 'path' ) ;
3+ const glob = require ( 'glob' ) ;
4+
5+ const mapper = {
6+ ContentVariants : 'Content' ,
7+ ButtonVariant : 'Button' ,
8+ TextListVariants : 'TextList' ,
9+ TextListItemVariants : 'TextListItem' ,
10+ FlexItem : 'Flex' ,
11+ FormFieldGroup : 'Form' ,
12+ FormFieldGroupHeader : 'Form' ,
13+ FormHelperText : 'Form' ,
14+ FormGroup : 'Form' ,
15+ GridItem : 'Grid' ,
16+ Content : 'Content' ,
17+ HelperTextItem : 'HelperText' ,
18+ ActionGroup : 'Form' ,
19+ Tab : 'Tabs' ,
20+ TabTitleText : 'Tabs' ,
21+ WizardNavItem : 'Wizard' ,
22+ WizardNav : 'Wizard' ,
23+ WizardBody : 'Wizard' ,
24+ WizardHeader : 'Wizard' ,
25+ ActionListGroup : 'ActionList' ,
26+ ActionListItem : 'ActionList' ,
27+ } ;
28+
29+ const blueprintMapper = {
30+ Checkbox : 'components/forms/controls' ,
31+ FormGroup : 'components/forms/formGroup' ,
32+ Intent : 'common/intent' ,
33+ Button : 'components/button/buttons' ,
34+ H1 : 'components/html/html' ,
35+ H2 : 'components/html/html' ,
36+ H3 : 'components/html/html' ,
37+ H4 : 'components/html/html' ,
38+ RadioGroup : 'components/forms/radioGroup' ,
39+ MenuItem : 'components/menu/menuItem' ,
40+ Switch : 'components/forms/controls' ,
41+ Tab : 'components/tabs/tab' ,
42+ InputGroup : 'components/forms/inputGroup' ,
43+ TextArea : 'components/forms/textArea' ,
44+ Menu : 'components/menu/menu' ,
45+ ButtonGroup : 'components/button/buttonGroup' ,
46+ ControlGroup : 'components/forms/controlGroup'
47+ } ;
48+
49+ const pascaltoCamelCase = ( name ) => name . charAt ( 0 ) . toLowerCase ( ) + name . slice ( 1 ) ;
50+ const pascalToKebabCase = ( name ) =>
51+ name . charAt ( 0 ) . toLowerCase ( ) +
52+ name
53+ . slice ( 1 )
54+ . replace ( / ( [ A - Z ] ) / , '-$1' )
55+ . toLowerCase ( ) ;
56+
57+ const pascalToKebabCaseCarbonIcons = ( name ) =>
58+ name . charAt ( 0 ) . toLowerCase ( ) +
59+ name
60+ . slice ( 1 )
61+ . replace ( / ( [ A - Z ] ) / g, '--$1' )
62+ . toLowerCase ( ) ;
63+
64+ const createSuirCJSTransform = ( env = 'commonjs' ) => [
65+ 'transform-imports' ,
66+ {
67+ 'semantic-ui-react' : {
68+ transform : ( importName ) => {
69+ let res ;
70+ const files = glob . sync ( path . resolve ( __dirname , `../{..,suir-component-mapper}/node_modules/semantic-ui-react/dist/${ env } /**/${ importName } .js` ) ) ;
71+
72+ if ( files . length > 0 ) {
73+ res = files [ 0 ] ;
74+ } else {
75+ throw new Error ( `File with importName ${ importName } does not exist` ) ;
76+ }
77+
78+ res = res . replace ( / ^ .* n o d e _ m o d u l e s \/ / , '' ) ;
79+ res = res . replace ( / ^ \/ / , '' ) ;
80+ return res ;
81+ } ,
82+ preventFullImport : false ,
83+ skipDefaultConversion : false
84+ }
85+ } ,
86+ `semantic-ui-react-${ env } `
87+ ] ;
88+
89+ const createMuiTransform = ( env ) => [
90+ 'transform-imports' ,
91+ {
92+ '@mui/x-date-pickers' : {
93+ transform : ( importName ) => ( env ? `@mui/x-date-pickers/${ env } /${ importName } ` : `@mui/x-date-pickers/${ importName } ` ) ,
94+ preventFullImport : false ,
95+ skipDefaultConversion : true
96+ } ,
97+ '@mui/material' : {
98+ transform : ( importName ) => ( env ? `@mui/material/${ env } /${ importName } ` : `@mui/material/${ importName } ` ) ,
99+ preventFullImport : false ,
100+ skipDefaultConversion : false
101+ }
102+ } ,
103+ `MUI-${ env || 'commonjs' } `
104+ ] ;
105+
106+ const createPfReactTransform = ( env ) => [
107+ 'transform-imports' ,
108+ {
109+ '@patternfly/react-core' : {
110+ transform : ( importName ) => {
111+ let res ;
112+ const files = glob . sync (
113+ path . resolve ( __dirname , `../{..,pf4-component-mapper}//node_modules/@patternfly/react-core/dist/dynamic/**/${ mapper [ importName ] || importName } ` )
114+ ) ;
115+ if ( files . length > 0 ) {
116+ res = files [ 0 ] ;
117+ } else {
118+ throw new Error ( `File with importName ${ importName } does not exist` ) ;
119+ }
120+
121+ res = res . replace ( / ^ .* n o d e _ m o d u l e s \/ / , '' ) ;
122+ res = res . replace ( / ^ \/ / , '' ) ;
123+ return res ;
124+ } ,
125+ preventFullImport : false ,
126+ skipDefaultConversion : true
127+ } ,
128+ '@patternfly/react-icons' : {
129+ transform : ( importName ) =>
130+ `@patternfly/react-icons/dist/dynamic/icons/${ importName
131+ . split ( / (? = [ A - Z ] ) / )
132+ . join ( '-' )
133+ . toLowerCase ( ) } `,
134+ preventFullImport : true
135+ } ,
136+ } ,
137+ `pf-react-${ env } `
138+ ] ;
139+
140+ const createBluePrintTransform = ( env ) => [
141+ 'transform-imports' ,
142+ {
143+ '@blueprintjs/core' : {
144+ transform : ( importName ) =>
145+ `@blueprintjs/core/lib/${ env } /${ blueprintMapper [ importName ] ||
146+ `components/${ pascalToKebabCase ( importName ) } /${ pascaltoCamelCase ( importName ) } ` } .js`,
147+ preventFullImport : false ,
148+ skipDefaultConversion : true
149+ }
150+ } ,
151+ `BLUEPRINT-${ env } `
152+ ] ;
153+
154+ const createAntTransform = ( env ) => [
155+ 'transform-imports' ,
156+ {
157+ antd : {
158+ transform : ( importName ) => {
159+ let res ;
160+ const files = glob . sync (
161+ path . resolve (
162+ __dirname ,
163+ `../{..,ant-component-mapper}/node_modules/antd/${ env === 'cjs' ? 'lib' : 'es' } /${ importName
164+ . split ( / (? = [ A - Z ] ) / )
165+ . join ( '-' )
166+ . toLowerCase ( ) } /index.js`
167+ )
168+ ) ;
169+ if ( files . length > 0 ) {
170+ res = files [ 0 ] ;
171+ } else {
172+ throw new Error ( `File with importName ${ importName } does not exist` ) ;
173+ }
174+
175+ res = res . replace ( / ^ .* n o d e _ m o d u l e s \/ / , '' ) ;
176+ res = res . replace ( / ^ \/ / , '' ) ;
177+ return res ;
178+ }
179+ }
180+ } ,
181+ `ant-${ env } `
182+ ] ;
183+
184+ const createReactJSSTransform = ( env ) => [
185+ 'transform-imports' ,
186+ {
187+ 'react-jss' : {
188+ skipDefaultConversion : true ,
189+ transform : ( importName ) => {
190+ let res ;
191+ const files = glob . sync (
192+ path . resolve (
193+ __dirname ,
194+ `../../node_modules/react-jss/dist/react-jss.${ env } .js`
195+ )
196+ ) ;
197+ if ( files . length > 0 ) {
198+ res = files [ 0 ] ;
199+ } else {
200+ throw new Error ( `File with importName ${ importName } does not exist` ) ;
201+ }
202+
203+ res = res . replace ( path . resolve ( __dirname , '../../node_modules/' ) , '' ) ;
204+ res = res . replace ( / ^ \/ / , '' ) ;
205+ return res ;
206+ }
207+ }
208+ } ,
209+ `react-jss-${ env } `
210+ ] ;
211+
212+ module . exports = {
213+ extends : '../../babel.config.js' ,
214+ env : {
215+ cjs : {
216+ presets : [ [ '@babel/preset-env' , { modules : 'commonjs' } ] ] ,
217+ plugins : [
218+ createSuirCJSTransform ( 'commonjs' ) ,
219+ createMuiTransform ( ) ,
220+ createPfReactTransform ( 'js' ) ,
221+ createBluePrintTransform ( 'cjs' ) ,
222+ createAntTransform ( 'cjs' ) ,
223+ createReactJSSTransform ( 'cjs' )
224+ ]
225+ } ,
226+ esm : {
227+ presets : [ [ '@babel/preset-env' , { modules : false } ] ] ,
228+ plugins : [
229+ createSuirCJSTransform ( 'es' ) ,
230+ createMuiTransform ( ) ,
231+ createPfReactTransform ( 'esm' ) ,
232+ createBluePrintTransform ( 'esm' ) ,
233+ createAntTransform ( 'esm' ) ,
234+ createReactJSSTransform ( 'esm' )
235+ ]
236+ }
237+ }
238+ } ;
0 commit comments