@@ -2,76 +2,74 @@ import * as fs from 'fs';
22import * as path from 'path' ;
33import { extractClassesFromTemplate , extractClassesFromCss } from './extractors' ;
44
5- interface FileInfo {
5+ export interface FileInfo {
66 name : string ;
77 path : string ;
88}
99
10- interface ExtractedClasses {
11- classes : string ;
10+ export interface ExtractedData {
11+ data : string [ ] | string ;
1212 path : string ;
1313}
1414
15- interface ExtractedSelectors {
16- selectors : string [ ] ;
17- path : string ;
15+ // Generic function to read file content
16+ function readFileContent ( filePath : string ) : string {
17+ return fs . readFileSync ( filePath , 'utf8' ) ;
1818}
1919
20- /**
21- * Processes template files to extract CSS classes
22- * @param templateFiles - Array of template file objects
23- * @returns Array of objects containing extracted classes and file paths
24- */
25- export function processTemplateFilesToExtractClasses ( templateFiles : FileInfo [ ] ) : ExtractedClasses [ ] {
26- return templateFiles . map ( ( file ) => {
27- const content = fs . readFileSync ( file . path , 'utf8' ) ;
28- const classes = extractClassesFromTemplate ( content ) ;
29- return {
30- classes : classes . join ( ' ' ) ,
31- path : file . path ,
32- } ;
33- } ) . filter ( ( item ) => item . classes . length > 0 ) ;
20+ // Generic function to process files
21+ function processFiles < T extends ExtractedData > (
22+ files : FileInfo [ ] ,
23+ extractorFn : ( content : string ) => string [ ] ,
24+ dataProcessor : ( data : string [ ] ) => T [ 'data' ]
25+ ) : T [ ] {
26+ return files
27+ . map ( ( file ) => {
28+ const content = readFileContent ( file . path ) ;
29+ try {
30+ const extractedData = extractorFn ( content ) ;
31+ return {
32+ data : dataProcessor ( extractedData ) ,
33+ path : file . path ,
34+ } as T ;
35+ } catch ( error ) {
36+ console . error ( `Error processing file ${ file . path } : ${ ( error as Error ) . message } ` ) ;
37+ return null ;
38+ }
39+ } )
40+ . filter ( ( item ) : item is T => item !== null && item . data . length > 0 ) ;
3441}
3542
36- /**
37- * Processes CSS files to extract classes
38- * @param cssFiles - Array of CSS file objects
39- * @returns Array of objects containing extracted selectors and file paths
40- */
41- export function processCssFilesToExtractClasses ( cssFiles : FileInfo [ ] ) : ExtractedSelectors [ ] {
42- return cssFiles . map ( ( file ) => {
43- const content = fs . readFileSync ( file . path , 'utf8' ) ;
44- try {
45- const selectors = extractClassesFromCss ( content , { extractOnly : 'classes' } ) ;
46- return {
47- selectors,
48- path : file . path ,
49- } ;
50- } catch ( error ) {
51- console . error ( `Error processing file ${ file . path } : ${ ( error as Error ) . message } ` ) ;
52- return null ;
53- }
54- } ) . filter ( ( item ) : item is ExtractedSelectors => item !== null && item . selectors . length > 0 ) ;
43+ // Process template files
44+ export function processTemplateFilesToExtractClasses ( templateFiles : FileInfo [ ] ) : ExtractedData [ ] {
45+ return processFiles < ExtractedData > (
46+ templateFiles ,
47+ extractClassesFromTemplate ,
48+ ( classes ) => classes . join ( ' ' )
49+ ) ;
5550}
5651
57- /**
58- * Writes extracted template classes to a file
59- * @param templateClasses - Array of objects containing extracted classes and file paths
60- * @param fileName - Name of the output file
61- * @param uncssTempDir - Temporary directory for uncss
62- */
63- export function writeTemplateClassesToFile ( templateClasses : ExtractedClasses [ ] , fileName : string , uncssTempDir : string ) : void {
64- const outputPath = path . join ( uncssTempDir , fileName ) ;
65- fs . writeFileSync ( outputPath , JSON . stringify ( templateClasses , null , 2 ) ) ;
52+ // Process CSS files
53+ export function processCssFilesToExtractClasses ( cssFiles : FileInfo [ ] ) : ExtractedData [ ] {
54+ return processFiles < ExtractedData > (
55+ cssFiles ,
56+ ( content ) => extractClassesFromCss ( content , { extractOnly : 'classes' } ) ,
57+ ( selectors ) => selectors
58+ ) ;
6659}
6760
68- /**
69- * Writes extracted CSS selectors to a file
70- * @param cssSelectors - Array of objects containing extracted selectors and file paths
71- * @param fileName - Name of the output file
72- * @param uncssTempDir - Temporary directory for uncss
73- */
74- export function writeCssSelectorsToFile ( cssSelectors : ExtractedSelectors [ ] , fileName : string , uncssTempDir : string ) : void {
61+ // Generic function to write data to file
62+ function writeDataToFile ( data : ExtractedData [ ] , fileName : string , uncssTempDir : string ) : void {
7563 const outputPath = path . join ( uncssTempDir , fileName ) ;
76- fs . writeFileSync ( outputPath , JSON . stringify ( cssSelectors , null , 2 ) ) ;
64+ fs . writeFileSync ( outputPath , JSON . stringify ( data , null , 2 ) ) ;
65+ }
66+
67+ // Write template classes to file
68+ export function writeTemplateClassesToFile ( templateClasses : ExtractedData [ ] , fileName : string , uncssTempDir : string ) : void {
69+ writeDataToFile ( templateClasses , fileName , uncssTempDir ) ;
70+ }
71+
72+ // Write CSS selectors to file
73+ export function writeCssSelectorsToFile ( cssSelectors : ExtractedData [ ] , fileName : string , uncssTempDir : string ) : void {
74+ writeDataToFile ( cssSelectors , fileName , uncssTempDir ) ;
7775}
0 commit comments