build.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. const fs = require( 'fs' );
  2. const chokidar = require( 'chokidar' );
  3. const merge = require( 'deepmerge' );
  4. const childThemeName = process.argv[ 2 ];
  5. const watch = 'watch' === process.argv[ 3 ];
  6. const parentThemeJsonFileName = __dirname + '/experimental-theme.json';
  7. const childThemeJsonFileName =
  8. __dirname + '/../' + childThemeName + '/child-experimental-theme.json';
  9. const overwriteMerge = ( destinationArray, sourceArray, options ) =>
  10. sourceArray;
  11. const buildChildTheme = () => {
  12. try {
  13. const parentThemeJsonFile = fs.readFileSync(
  14. parentThemeJsonFileName,
  15. 'utf8'
  16. ),
  17. childThemeJsonFile = fs.readFileSync(
  18. childThemeJsonFileName,
  19. 'utf8'
  20. ),
  21. parentThemeJson = JSON.parse( parentThemeJsonFile ),
  22. childThemeJson = JSON.parse( childThemeJsonFile ),
  23. mergedThemeJson = merge( parentThemeJson, childThemeJson, {
  24. arrayMerge: overwriteMerge,
  25. } );
  26. fs.writeFile(
  27. '../' + childThemeName + '/experimental-theme.json',
  28. JSON.stringify( mergedThemeJson, null, '\t' ),
  29. 'utf8',
  30. () => {
  31. console.log(
  32. '\x1b[32m' +
  33. childThemeName +
  34. '/experimental-theme.json created successfully.'
  35. );
  36. }
  37. );
  38. } catch ( error ) {
  39. console.error( '\x1b[31m' + error );
  40. }
  41. };
  42. if ( ! fs.existsSync( childThemeJsonFileName ) ) {
  43. console.log( '\x1b[31m' + childThemeJsonFileName + ' not found :(' );
  44. return;
  45. }
  46. if ( watch ) {
  47. chokidar
  48. .watch( [ parentThemeJsonFileName, childThemeJsonFileName ] )
  49. .on( 'all', buildChildTheme );
  50. } else {
  51. buildChildTheme();
  52. }