const path = require('path'); const fs = require('fs'); const frappe_path = process.cwd(); const bench_path = path.resolve(frappe_path, '..', '..'); const sites_path = path.resolve(bench_path, 'sites'); const apps_list = fs.readFileSync( path.resolve(sites_path, 'apps.txt'), { encoding: 'utf-8' } ).split('\n').filter(Boolean); const assets_path = path.resolve(sites_path, 'assets'); const app_paths = apps_list.reduce((out, app) => { out[app] = path.resolve(bench_path, 'apps', app, app) return out; }, {}); const public_paths = apps_list.reduce((out, app) => { out[app] = path.resolve(app_paths[app], 'public'); return out; }, {}); const public_js_paths = apps_list.reduce((out, app) => { out[app] = path.resolve(app_paths[app], 'public/js'); return out; }, {}); const bundle_map = apps_list.reduce((out, app) => { const public_js_path = public_js_paths[app]; if ( fs.existsSync(public_js_path) ) { const all_files = fs.readdirSync(public_js_path); const js_files = all_files.filter(file => file.endsWith('.js')); for (let js_file of js_files) { const filename = path.basename(js_file).split('.')[0]; out[path.join(app, 'js', filename)] = path.resolve(public_js_path, js_file); } } return out; }, {}); const get_public_path = app => public_paths[app]; const get_build_json_path = app => path.resolve(get_public_path(app), 'build.json'); function get_build_json(app) { try { return require(get_build_json_path(app)); } catch (e) { // build.json does not exist return null; } } function delete_file(path) { if (fs.existsSync(path)) { fs.unlinkSync(path); } } function run_serially(tasks) { let result = Promise.resolve(); tasks.forEach(task => { if(task) { result = result.then ? result.then(task) : Promise.resolve(); } }); return result; } const get_app_path = app => app_paths[app]; const get_options_for_scss = () => { const node_modules_path = path.resolve(get_app_path('frappe'), '..', 'node_modules'); const app_paths = apps_list.map(get_app_path).map(app_path => path.resolve(app_path, '..')); return { includePaths: [ node_modules_path, ...app_paths ] }; }; module.exports = { sites_path, bundle_map, get_public_path, get_build_json_path, get_build_json, get_app_path, apps_list, assets_path, bench_path, delete_file, run_serially, get_options_for_scss };