Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 
 
 

98 linhas
2.3 KiB

  1. const path = require('path');
  2. const fs = require('fs');
  3. const frappe_path = process.cwd();
  4. const bench_path = path.resolve(frappe_path, '..', '..');
  5. const sites_path = path.resolve(bench_path, 'sites');
  6. const apps_list =
  7. fs.readFileSync(
  8. path.resolve(sites_path, 'apps.txt'), { encoding: 'utf-8' }
  9. ).split('\n').filter(Boolean);
  10. const assets_path = path.resolve(sites_path, 'assets');
  11. const app_paths = apps_list.reduce((out, app) => {
  12. out[app] = path.resolve(bench_path, 'apps', app, app)
  13. return out;
  14. }, {});
  15. const public_paths = apps_list.reduce((out, app) => {
  16. out[app] = path.resolve(app_paths[app], 'public');
  17. return out;
  18. }, {});
  19. const public_js_paths = apps_list.reduce((out, app) => {
  20. out[app] = path.resolve(app_paths[app], 'public/js');
  21. return out;
  22. }, {});
  23. const bundle_map = apps_list.reduce((out, app) => {
  24. const public_js_path = public_js_paths[app];
  25. if ( fs.existsSync(public_js_path) ) {
  26. const all_files = fs.readdirSync(public_js_path);
  27. const js_files = all_files.filter(file => file.endsWith('.js'));
  28. for (let js_file of js_files) {
  29. const filename = path.basename(js_file).split('.')[0];
  30. out[path.join(app, 'js', filename)] = path.resolve(public_js_path, js_file);
  31. }
  32. }
  33. return out;
  34. }, {});
  35. const get_public_path = app => public_paths[app];
  36. const get_build_json_path = app => path.resolve(get_public_path(app), 'build.json');
  37. function get_build_json(app) {
  38. try {
  39. return require(get_build_json_path(app));
  40. } catch (e) {
  41. // build.json does not exist
  42. return null;
  43. }
  44. }
  45. function delete_file(path) {
  46. if (fs.existsSync(path)) {
  47. fs.unlinkSync(path);
  48. }
  49. }
  50. function run_serially(tasks) {
  51. let result = Promise.resolve();
  52. tasks.forEach(task => {
  53. if(task) {
  54. result = result.then ? result.then(task) : Promise.resolve();
  55. }
  56. });
  57. return result;
  58. }
  59. const get_app_path = app => app_paths[app];
  60. const get_options_for_scss = () => {
  61. const node_modules_path = path.resolve(get_app_path('frappe'), '..', 'node_modules');
  62. const app_paths = apps_list.map(get_app_path).map(app_path => path.resolve(app_path, '..'));
  63. return {
  64. includePaths: [
  65. node_modules_path,
  66. ...app_paths
  67. ]
  68. };
  69. };
  70. module.exports = {
  71. sites_path,
  72. bundle_map,
  73. get_public_path,
  74. get_build_json_path,
  75. get_build_json,
  76. get_app_path,
  77. apps_list,
  78. assets_path,
  79. bench_path,
  80. delete_file,
  81. run_serially,
  82. get_options_for_scss
  83. };