45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			45 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @file
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Watch changes to *.pcss.css files and compile them to CSS during development.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * @internal This file is part of the core CSS build process and is only
							 | 
						||
| 
								 | 
							
								 * designed to be used in that context.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const { watch } = require('chokidar');
							 | 
						||
| 
								 | 
							
								const { stat, unlink } = require('node:fs');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const changeOrAdded = require('./changeOrAdded');
							 | 
						||
| 
								 | 
							
								const log = require('./log');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Initialize watcher.
							 | 
						||
| 
								 | 
							
								const watcher = watch(['./themes', './modules', './profiles'], {
							 | 
						||
| 
								 | 
							
								  ignoreInitial: true,
							 | 
						||
| 
								 | 
							
								  ignored: (filePath, stats) =>
							 | 
						||
| 
								 | 
							
								    stats?.isFile() && !filePath.endsWith('.pcss.css') || filePath.includes('node_modules'),
							 | 
						||
| 
								 | 
							
								  usePolling: true,
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const unlinkHandler = (err) => {
							 | 
						||
| 
								 | 
							
								  if (err) {
							 | 
						||
| 
								 | 
							
								    log(err);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Watch for filesystem changes.
							 | 
						||
| 
								 | 
							
								watcher
							 | 
						||
| 
								 | 
							
								  .on('add', changeOrAdded)
							 | 
						||
| 
								 | 
							
								  .on('change', changeOrAdded)
							 | 
						||
| 
								 | 
							
								  .on('unlink', (filePath) => {
							 | 
						||
| 
								 | 
							
								    const fileName = filePath.slice(0, -9);
							 | 
						||
| 
								 | 
							
								    stat(`${fileName}.css`, (err) => {
							 | 
						||
| 
								 | 
							
								      if (!err) {
							 | 
						||
| 
								 | 
							
								        unlink(`${fileName}.css`, unlinkHandler);
							 | 
						||
| 
								 | 
							
								      }
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  })
							 | 
						||
| 
								 | 
							
								  .on('ready', () => log(`Watching '**/*.pcss.css' for changes.`));
							 |