11// updated on june 11
22/* eslint-disable import/no-extraneous-dependencies */
33/* eslint-disable no-console */
4- const fs = require ( 'fs' ) ;
5- const path = require ( 'path' ) ;
4+ const fs = require ( 'node: fs' ) ;
5+ const path = require ( 'node: path' ) ;
66const postcss = require ( 'postcss' ) ;
77const safeParser = require ( 'postcss-safe-parser' ) ;
88
99// Helper to convert kebab-case, snake_case, pascalcase to camelCase
1010const toCamelCase = str => {
11- const formatted = str . replace ( / [ - _ ] ( \w ) / g , ( _ , char ) => char . toUpperCase ( ) ) ;
11+ const formatted = str . replaceAll ( / [ - _ ] ( \w ) / gu , ( _ , char ) => char . toUpperCase ( ) ) ;
1212 return formatted . charAt ( 0 ) . toLowerCase ( ) + formatted . slice ( 1 ) ;
1313} ;
1414
@@ -21,7 +21,7 @@ const convertCSSFile = filePath => {
2121
2222 root . walkRules ( rule => {
2323 const updated = rule . selectors . map ( selector => {
24- return selector . replace ( / \. ( \w [ \w - ] * ) / g , ( _ , className ) => {
24+ return selector . replaceAll ( / \. ( \w [ \w - ] * ) / gu , ( _ , className ) => {
2525 const camel = toCamelCase ( className ) ;
2626 classMap [ className ] = camel ;
2727 return `.${ camel } ` ;
@@ -32,15 +32,12 @@ const convertCSSFile = filePath => {
3232 } ) ;
3333
3434 fs . writeFileSync ( filePath , root . toString ( ) ) ;
35- // eslint-disable-next-line no-console
3635 console . log ( `✅ Updated CSS: ${ filePath } ` ) ;
37- // eslint-disable-next-line no-console
38- // console.log('classMap after CSS processing:', classMap);
3936} ;
4037
4138// Step 2: Replace import statement for CSS module in JSX
4239const replaceImportStatement = code => {
43- const importRegex = / i m p o r t \s + [ ' " ] ( .+ \/ ) ? ( [ a - z A - Z 0 - 9 _ - ] + ) \. c s s [ ' " ] ; / ;
40+ const importRegex = / i m p o r t \s + [ ' " ] ( .+ \/ ) ? ( [ a - z A - Z 0 - 9 _ - ] + ) \. c s s [ ' " ] ; / u ;
4441 // eslint-disable-next-line default-param-last
4542 return code . replace ( importRegex , ( _ , pathPrefix = '' , cssFileName ) => {
4643 return `import styles from '${ pathPrefix } ${ cssFileName } .module.css';` ;
@@ -64,8 +61,8 @@ const replaceInCodeFile = filePath => {
6461 }
6562
6663 // Step 2: Replace className="text-light input-file-upload" → className={styles.textLight + " " + styles.inputFileUpload}
67- code = code . replace ( / c l a s s N a m e \s * = \s * [ " ' ] ( [ ^ " ' ] + ) [ " ' ] / g , ( _ , classStr ) => {
68- const classList = classStr . trim ( ) . split ( / \s + / ) ;
64+ code = code . replaceAll ( / c l a s s N a m e \s * = \s * [ " ' ] ( [ ^ " ' ] + ) [ " ' ] / gu , ( _ , classStr ) => {
65+ const classList = classStr . trim ( ) . split ( / \s + / u ) ;
6966
7067 // Skip transforming if no class in classList exists in classMap
7168 if ( classList . every ( cls => ! classMap [ cls ] ) ) {
@@ -98,36 +95,31 @@ const walkDir = dir => {
9895 if ( stats . isDirectory ( ) ) {
9996 walkDir ( fullPath ) ;
10097 } else if ( file . endsWith ( '.css' ) ) {
101- cssFiles . push ( fullPath ) ; // Add CSS file path to the array
98+ cssFiles . push ( fullPath ) ;
10299 } else if (
103100 file . endsWith ( '.js' ) ||
104101 file . endsWith ( '.jsx' ) ||
105102 file . endsWith ( '.ts' ) ||
106103 file . endsWith ( '.tsx' ) ||
107104 file . endsWith ( '.html' )
108105 ) {
109- codeFiles . push ( fullPath ) ; // Add JS/JSX file path to the array
106+ codeFiles . push ( fullPath ) ;
110107 }
111108 } ) ;
112109
113110 // Now process CSS files first
114111 cssFiles . forEach ( cssFile => {
115112 console . log ( 'Processing CSS file:' , cssFile ) ;
116- convertCSSFile ( cssFile ) ; // Process CSS files
113+ convertCSSFile ( cssFile ) ;
117114 } ) ;
118115
119116 // Then process code files (JS/JSX, etc.)
120117 codeFiles . forEach ( codeFile => {
121118 console . log ( 'Processing code file:' , codeFile ) ;
122- replaceInCodeFile ( codeFile ) ; // Process JS/JSX files
119+ replaceInCodeFile ( codeFile ) ;
123120 } ) ;
124121} ;
125122
126123// 🚀 Start here: Replace with your actual project folder path
127124const rootDir = 'src/components/HGNForm' ;
128125walkDir ( rootDir ) ;
129-
130- // const mapPath = path.join(__dirname, 'class-map.json');
131- // fs.writeFileSync(mapPath, JSON.stringify(classMap, null, 2));
132- // // eslint-disable-next-line no-console
133- // console.log(`🗺️ Class map written to ${mapPath}`);
0 commit comments