@@ -37,6 +37,13 @@ const pascalToKebabCase = (name) =>
37
37
. replace ( / ( [ A - Z ] ) / , '-$1' )
38
38
. toLowerCase ( ) ;
39
39
40
+ const pascalToKebabCaseCarbonIcons = ( name ) =>
41
+ name . charAt ( 0 ) . toLowerCase ( ) +
42
+ name
43
+ . slice ( 1 )
44
+ . replace ( / ( [ A - Z ] ) / g, '--$1' )
45
+ . toLowerCase ( ) ;
46
+
40
47
const createSuirCJSTransform = ( env = 'commonjs' ) => [
41
48
'transform-imports' ,
42
49
{
@@ -168,13 +175,20 @@ const createAntTransform = (env) => [
168
175
`ant-${ env } `
169
176
]
170
177
178
+ const carbonMapper = ( importName ) => ( {
179
+ StructuredListWrapper : 'StructuredList' ,
180
+ StructuredListBody : 'StructuredList' ,
181
+ StructuredListRow : 'StructuredList' ,
182
+ StructuredListCell : 'StructuredList' ,
183
+ } [ importName ] || importName )
184
+
171
185
const createCarbonCJSTransform = ( env ) => [
172
186
'transform-imports' ,
173
187
{
174
188
'carbon-components-react' : {
175
189
transform : ( importName ) => {
176
190
let res ;
177
- const files = glob . sync ( path . resolve ( __dirname , `../../node_modules/carbon-components-react/${ env === 'cjs' ? 'lib' : 'es' } /**/${ importName } .js` ) ) ;
191
+ const files = glob . sync ( path . resolve ( __dirname , `../../node_modules/carbon-components-react/${ env === 'cjs' ? 'lib' : 'es' } /**/${ carbonMapper ( importName ) } .js` ) ) ;
178
192
if ( files . length > 0 ) {
179
193
res = files [ 0 ] ;
180
194
} else {
@@ -191,6 +205,32 @@ const createCarbonCJSTransform = (env) => [
191
205
`carbon-components-react-${ env } `
192
206
] ;
193
207
208
+ const createCarbonIconsCJSTransform = ( env ) => [
209
+ 'transform-imports' ,
210
+ {
211
+ '@carbon/icons-react' : {
212
+ transform : ( importName ) => {
213
+ let size = importName . match ( / \d + / ) [ 0 ] ;
214
+ let iconName = pascalToKebabCaseCarbonIcons ( importName . replace ( / \d + / , '' ) ) ;
215
+
216
+ let res ;
217
+ const files = glob . sync ( path . resolve ( __dirname , `../../node_modules/@carbon/icons-react/${ env === 'cjs' ? 'lib' : 'es' } /${ iconName } /${ size } .js` ) ) ;
218
+ if ( files . length > 0 ) {
219
+ res = files [ 0 ] ;
220
+ } else {
221
+ throw new Error ( `File with importName ${ importName } does not exist` ) ;
222
+ }
223
+ res = res . replace ( path . resolve ( __dirname , '../../node_modules/' ) , '' ) ;
224
+ res = res . replace ( / ^ \/ / , '' ) ;
225
+ return res ;
226
+ } ,
227
+ preventFullImport : false ,
228
+ skipDefaultConversion : false
229
+ }
230
+ } ,
231
+ `@carbon/icons-react-${ env } `
232
+ ] ;
233
+
194
234
module . exports = {
195
235
extends : '../../babel.config.js' ,
196
236
env : {
@@ -201,7 +241,8 @@ module.exports = {
201
241
createPfReactTransform ( 'js' ) ,
202
242
createBluePrintTransform ( 'cjs' ) ,
203
243
createAntTransform ( 'cjs' ) ,
204
- createCarbonCJSTransform ( 'cjs' )
244
+ createCarbonCJSTransform ( 'cjs' ) ,
245
+ createCarbonIconsCJSTransform ( 'cjs' )
205
246
]
206
247
} ,
207
248
esm : {
@@ -211,7 +252,8 @@ module.exports = {
211
252
createPfReactTransform ( 'esm' ) ,
212
253
createBluePrintTransform ( 'esm' ) ,
213
254
createAntTransform ( 'esm' ) ,
214
- createCarbonCJSTransform ( 'esm' )
255
+ createCarbonCJSTransform ( 'esm' ) ,
256
+ createCarbonIconsCJSTransform ( 'esm' )
215
257
]
216
258
}
217
259
}
0 commit comments