11const { execSync } = require ( 'child_process' ) ;
22const { readdirSync, statSync, readFileSync, writeFileSync, existsSync, unlinkSync } = require ( 'fs' ) ;
3- const { join, dirname } = require ( 'path' ) ;
3+ const { join, dirname, resolve , extname } = require ( 'path' ) ;
44const { mkdirSync } = require ( 'fs' ) ;
55
6+ // Parse command line arguments.
7+ const args = process . argv . slice ( 2 ) ;
8+ const specificFiles = args . filter ( arg => ! arg . startsWith ( '--' ) ) ;
9+ const processSpecificFiles = specificFiles . length > 0 ;
10+
611/**
712 * Configuration for asset processing.
813 */
@@ -255,8 +260,22 @@ function combineFiles( outputFile, inputFiles, isJs = false ) {
255260 }
256261}
257262
263+ // Display usage information if specific files are being processed.
264+ if ( processSpecificFiles ) {
265+ console . log ( '==================================' ) ;
266+ console . log ( 'Processing specific files:' ) ;
267+ specificFiles . forEach ( file => console . log ( ` - ${ file } ` ) ) ;
268+ console . log ( '==================================' ) ;
269+ } else {
270+ console . log ( '==================================' ) ;
271+ console . log ( 'Processing all assets in project' ) ;
272+ console . log ( 'Tip: Pass specific files to process only those:' ) ;
273+ console . log ( ' node build-assets.js path/to/file.js path/to/file.css' ) ;
274+ console . log ( '==================================' ) ;
275+ }
276+
258277// Step 1: Combine CSS files.
259- console . log ( '=== Combining CSS Files ===' ) ;
278+ console . log ( '\n === Combining CSS Files ===' ) ;
260279Object . entries ( config . combineCss ) . forEach ( ( [ output , inputs ] ) => {
261280 combineFiles ( output , inputs , false ) ;
262281} ) ;
@@ -279,38 +298,54 @@ const combinedOutputFiles = [
279298] ;
280299
281300// Step 4: Find all CSS and JS files.
282- // Note: This includes .min files to allow re-minification of existing minified files.
283- const allCssFiles = findFiles ( '.' , '.css' ) ;
284- const allJsFiles = findFiles ( '.' , '.js' ) ;
301+ let allCssFiles = [ ] ;
302+ let allJsFiles = [ ] ;
303+
304+ if ( processSpecificFiles ) {
305+ console . log ( '\n=== Processing Specific Files ===' ) ;
306+ specificFiles . forEach ( file => {
307+ const resolvedPath = resolve ( file ) ;
308+ const ext = extname ( file ) ;
309+ if ( existsSync ( resolvedPath ) ) {
310+ if ( ext === '.css' ) {
311+ allCssFiles . push ( file ) ;
312+ console . log ( ` ✓ Found CSS: ${ file } ` ) ;
313+ } else if ( ext === '.js' ) {
314+ allJsFiles . push ( file ) ;
315+ console . log ( ` ✓ Found JS: ${ file } ` ) ;
316+ } else {
317+ console . log ( ` ✗ Skipped (not CSS/JS): ${ file } ` ) ;
318+ }
319+ } else {
320+ console . log ( ` ✗ File not found: ${ file } ` ) ;
321+ }
322+ } ) ;
323+ } else {
324+ allCssFiles = findFiles ( '.' , '.css' ) ;
325+ allJsFiles = findFiles ( '.' , '.js' ) ;
326+ }
285327
286328// Filter out source files used in combinations.
287- // Also filter out .min and combined output files based on config.
288329const cssFilesToMinify = allCssFiles . filter ( ( file ) => {
289- // Skip source files that are part of combinations.
290330 if ( combinedSourceFiles . includes ( file ) ) {
291331 return false ;
292332 }
293- // Skip already-minified files (we don't want to minify .min.css again).
294333 if ( file . endsWith ( '.min.css' ) ) {
295334 return false ;
296335 }
297- // Skip combined output files if not creating minified versions.
298336 if ( ! config . createMinifiedCombinedFiles && combinedOutputFiles . includes ( file ) ) {
299337 return false ;
300338 }
301339 return true ;
302340} ) ;
303341
304342const jsFilesToMinify = allJsFiles . filter ( ( file ) => {
305- // Skip source files that are part of combinations.
306343 if ( combinedSourceFiles . includes ( file ) ) {
307344 return false ;
308345 }
309- // Skip already-minified files (we don't want to minify .min.js again).
310346 if ( file . endsWith ( '.min.js' ) ) {
311347 return false ;
312348 }
313- // Skip combined output files if not creating minified versions.
314349 if ( ! config . createMinifiedCombinedFiles && combinedOutputFiles . includes ( file ) ) {
315350 return false ;
316351 }
@@ -336,10 +371,14 @@ jsFilesToMinify.forEach( ( file ) => {
336371 minifyJs ( file , minFile ) ;
337372} ) ;
338373
339- // Step 7: Generate RTL versions for all CSS files (including minified and combined) .
374+ // Step 7: Generate RTL versions for CSS files.
340375console . log ( '\n=== Generating RTL CSS ===' ) ;
341376const cssFilesForRtl = allCssFiles . filter ( ( file ) => ! file . includes ( '-rtl.' ) && ! file . endsWith ( '-rtl.css' ) ) ;
342377
378+ if ( processSpecificFiles && cssFilesForRtl . length === 0 ) {
379+ console . log ( ' No CSS files to process for RTL.' ) ;
380+ }
381+
343382const rtlFilesGenerated = [ ] ;
344383cssFilesForRtl . forEach ( ( file ) => {
345384 // Handle .min.css files correctly: name.min.css → name-rtl.min.css
0 commit comments