build.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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 + '/theme.json';
  7. const childThemeJsonFileName =
  8. __dirname + '/../' + childThemeName + '/child-theme.json';
  9. const keysToMerge = [ 'customTemplates' ];
  10. const overwriteMerge = ( destinationArray, sourceArray, options ) => {
  11. return sourceArray;
  12. };
  13. const combineMerge = ( destinationArray, sourceArray, options ) =>
  14. destinationArray.concat( sourceArray );
  15. const combineCustomTemplates = ( key ) => {
  16. if ( keysToMerge.indexOf( key ) > -1 ) {
  17. return combineMerge;
  18. }
  19. };
  20. const buildChildTheme = () => {
  21. try {
  22. const parentThemeJsonFile = fs.readFileSync(
  23. parentThemeJsonFileName,
  24. 'utf8'
  25. ),
  26. childThemeJsonFile = fs.readFileSync(
  27. childThemeJsonFileName,
  28. 'utf8'
  29. ),
  30. parentThemeJson = JSON.parse( parentThemeJsonFile ),
  31. childThemeJson = JSON.parse( childThemeJsonFile ),
  32. mergedThemeJson = merge( parentThemeJson, childThemeJson, {
  33. customMerge: combineCustomTemplates,
  34. arrayMerge: overwriteMerge,
  35. } );
  36. fs.writeFile(
  37. '../' + childThemeName + '/theme.json',
  38. JSON.stringify( mergedThemeJson, null, '\t' ),
  39. 'utf8',
  40. () => {
  41. console.log(
  42. '\x1b[32m' +
  43. childThemeName +
  44. '/theme.json created successfully.'
  45. );
  46. }
  47. );
  48. } catch ( error ) {
  49. console.error( '\x1b[31m' + error );
  50. }
  51. };
  52. if ( ! fs.existsSync( childThemeJsonFileName ) ) {
  53. console.log( '\x1b[31m' + childThemeJsonFileName + ' not found :(' );
  54. return;
  55. }
  56. if ( watch ) {
  57. chokidar
  58. .watch( [ parentThemeJsonFileName, childThemeJsonFileName ] )
  59. .on( 'all', buildChildTheme );
  60. } else {
  61. buildChildTheme();
  62. }