seitime-frappe/rollup/rollup.utils.js
2019-03-02 14:07:12 +05:30

97 lines
2.3 KiB
JavaScript

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
};