|
- const path = require('path');
- const fs = require('fs');
-
- const {
- get_build_json_path,
- get_app_path,
- apps_list,
- assets_path,
- get_public_path,
- bench_path
- } = require('./rollup.utils');
-
- const less = require('rollup-plugin-less');
- const multi_entry = require('rollup-plugin-multi-entry');
- const commonjs = require('rollup-plugin-commonjs');
- const node_resolve = require('rollup-plugin-node-resolve');
- const buble = require('rollup-plugin-buble');
- const uglify = require('rollup-plugin-uglify');
- const frappe_html = require('./frappe-html-plugin');
-
- const production = process.env.FRAPPE_ENV === 'production';
-
- ensure_js_css_dirs();
- build_libs();
-
- function get_app_config(app) {
- const build_map = get_build_json(app);
- if (!build_map) return [];
-
- const js_config = Object.keys(build_map)
- .filter(output_file =>
- output_file.endsWith('.js') &&
- // libs is built separately (to be deprecated)
- !output_file.endsWith('libs.min.js')
- )
- .map(output_file => {
-
- const input_files = build_map[output_file].map(
- // make paths absolute
- input_path => path.resolve(get_app_path(app), input_path)
- );
-
- return get_js_config(output_file, input_files);
- });
-
- const less_config = Object.keys(build_map)
- .filter(output_file =>
- output_file.endsWith('.css')
- )
- .map(output_file => {
-
- const input_files = build_map[output_file].map(
- input_path => path.resolve(get_app_path(app), input_path)
- );
-
- return get_css_config(output_file, input_files);
- });
-
- return [].concat(js_config, less_config);
- }
-
- function get_js_config(output_file, input_files) {
-
- const css_output_file = path.resolve(assets_path, 'css', path.basename(output_file).split('.js')[0] + '.css');
-
- const plugins = [
- // enables array of inputs
- multi_entry(),
- // .html -> .js
- frappe_html(),
- // less -> css
- less({
- output: css_output_file,
- option: {
- // so that other .less files can import variables.less from frappe directly
- paths: [path.resolve(get_public_path('frappe'), 'less'), path.resolve(get_app_path('frappe'), '..')],
- compress: production
- },
- // include: [path.resolve(bench_path, '**/*.less'), path.resolve(bench_path, '**/*.css')],
- exclude: []
- }),
- // ES6 -> ES5
- buble({
- objectAssign: 'Object.assign',
- transforms: {
- dangerousForOf: true
- },
- exclude: [path.resolve(bench_path, '**/*.css'), path.resolve(bench_path, '**/*.less')]
- }),
- commonjs(),
- node_resolve(),
- production && uglify()
- ];
-
- return {
- input: input_files,
- plugins: plugins,
- output: {
- file: path.resolve(assets_path, output_file),
- format: 'iife',
- name: 'Rollup',
- // globals: {
- // 'sortablejs': 'window.Sortable',
- // 'clusterize.js': 'window.Clusterize'
- // },
- sourcemap: true
- },
- context: 'window',
- external: ['jquery']
- };
- }
-
- function get_css_config(output_file, input_files) {
-
- const plugins = [
- // enables array of inputs
- multi_entry(),
- // less -> css
- less({
- output: path.resolve(assets_path, output_file),
- option: {
- // so that other .less files can import variables.less from frappe directly
- paths: [path.resolve(get_public_path('frappe'), 'less')],
- compress: production
- },
- include: [path.resolve(bench_path, '**/*.less'), path.resolve(bench_path, '**/*.css')]
- })
- ];
-
- return {
- input: input_files,
- plugins: plugins,
- output: {
- // this file is always empty, remove it later?
- file: path.resolve(assets_path, `css/rollup.manifest.css`),
- format: 'cjs',
- }
- };
- }
-
- function ensure_js_css_dirs() {
- const paths = [
- path.resolve(assets_path, 'js'),
- path.resolve(assets_path, 'css')
- ];
- paths.forEach(path => {
- if (!fs.existsSync(path)) {
- fs.mkdirSync(path);
- }
- });
-
- // clear files in css folder
- const css_path = path.resolve(assets_path, 'css');
- const files = fs.readdirSync(css_path);
-
- files.forEach(file => {
- fs.unlinkSync(path.resolve(css_path, file));
- });
- }
-
- function build_libs() {
- const libs_path = 'js/libs.min.js';
- const input_files = get_build_json('frappe')[libs_path];
-
- const libs_content = input_files.map(file_name => {
- const full_path = path.resolve(get_app_path('frappe'), file_name);
- return `/* ${file_name} */\n` + fs.readFileSync(full_path);
- }).join('\n\n');
-
- const target_path = path.resolve(assets_path, libs_path);
- fs.writeFileSync(target_path, libs_content);
- console.log('✨ Built libs.min.js'); // eslint-disable-line
- }
-
- function get_all_apps_config() {
- let configs = [];
- apps_list.forEach(app => {
- configs = configs.concat(get_app_config(app));
- });
- return configs;
- }
-
- function get_build_json(app) {
- try {
- return require(get_build_json_path(app));
- } catch (e) {
- // build.json does not exist
- return null;
- }
- }
-
- module.exports = get_all_apps_config();
|