All files / packages/sds-subsystems/scripts buildSubThemes.js

0% Statements 0/19
0% Branches 0/2
100% Functions 0/0
0% Lines 0/19

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74                                                                                                                                                   
/* eslint-env node */
'use strict';
import * as glob from 'glob';
import path from 'path';
import fs from 'fs-extra';
import { fileURLToPath } from 'url';
import postcss from 'postcss';
import postcssNesting from 'postcss-nested';
import postcssFor from 'postcss-for';
import postcssEach from 'postcss-each';
import postcssRemoveComments from 'postcss-discard-comments';
import postCssDeprecatedSelector from './plugins/postcss-deprecated-selector.js';
 
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const root = path.resolve(__dirname, '../');
const dist = path.resolve(root, 'dist');
 
const plugins = [
  postcssEach(),
  postcssFor(),
  postcssNesting(),
  postCssDeprecatedSelector(),
  postcssRemoveComments(),
];
 
/**
 * Process CSS with PostCSS
 */
const processCss = async (inputPath, outputPath) => {
  try {
    const css = fs.readFileSync(inputPath, 'utf8');
    const result = await postcss(plugins).process(css, { from: inputPath, to: outputPath });
 
    // Ensure the output directory exists
    fs.ensureDirSync(path.dirname(outputPath));
    fs.writeFileSync(outputPath, result.css);
 
    console.log(
      `Processed sub-theme: ${path.relative(root, inputPath)} -> ${path.relative(root, outputPath)}`,
    );
  } catch (error) {
    console.error(`Error processing ${inputPath}:`, error);
  }
};
 
/**
 * Build sub-themes by processing CSS and copying to dist
 */
const buildSubThemes = async () => {
  console.log('Building sub-themes...');
 
  // Find all CSS files in sub-themes directory
  const subThemeFiles = glob.sync(path.resolve(root, 'src/sub-themes/**/*.css'));
 
  if (subThemeFiles.length === 0) {
    console.log('No sub-theme files found.');
    return;
  }
 
  // Process each sub-theme file
  for (const filePath of subThemeFiles) {
    const relativePath = path.relative(path.resolve(root, 'src/sub-themes'), filePath);
    const outputPath = path.resolve(dist, 'sub-themes', relativePath);
 
    await processCss(filePath, outputPath);
  }
 
  console.log(`Successfully built ${subThemeFiles.length} sub-theme file(s).`);
};
 
// Run the build
buildSubThemes().catch(console.error);