// const typescript = require('@rollup/plugin-typescript'); 
 | 
const typescript = require('rollup-plugin-typescript2'); 
 | 
const replace = require('@rollup/plugin-replace'); 
 | 
const rollup = require('rollup'); 
 | 
const path = require('path'); 
 | 
const processs = require('process'); 
 | 
const chalk = require('chalk'); 
 | 
const progress = require('./progress'); 
 | 
const UglifyJS = require('uglify-js'); 
 | 
const fs = require('fs'); 
 | 
  
 | 
function current() { 
 | 
    return (new Date()).toLocaleString(); 
 | 
} 
 | 
  
 | 
function createInputOption(env, isWatch) { 
 | 
    return { 
 | 
        input: path.resolve(__dirname, '../index.ts'), 
 | 
        plugins: [ 
 | 
            typescript({ 
 | 
                clean: !isWatch, 
 | 
                tsconfigOverride: { 
 | 
                    compilerOptions: { 
 | 
                        // Rollup don't use CommonJS by default. 
 | 
                        module: 'ES2015', 
 | 
                        sourceMap: true, 
 | 
                        // Use the esm d.ts 
 | 
                        declaration: false 
 | 
                    } 
 | 
                } 
 | 
            }), 
 | 
            replace({ 
 | 
                preventAssignment: true, 
 | 
                'process.env.NODE_ENV': JSON.stringify(env) 
 | 
            }), 
 | 
            progress({ 
 | 
                scope: { 
 | 
                    total: 0 
 | 
                } 
 | 
            }) 
 | 
        ] 
 | 
    }; 
 | 
} 
 | 
  
 | 
const outputOption = { 
 | 
    format: 'umd', 
 | 
    file: path.resolve(__dirname, '../dist/zrender.js'), 
 | 
    sourcemap: true, 
 | 
    name: 'zrender' 
 | 
}; 
 | 
  
 | 
function minify(outPath) { 
 | 
    const code = fs.readFileSync(outPath, 'utf-8'); 
 | 
    const uglifyResult = UglifyJS.minify(code); 
 | 
    if (uglifyResult.error) { 
 | 
        throw new Error(uglifyResult.error); 
 | 
    } 
 | 
    fs.writeFileSync(outPath, uglifyResult.code, 'utf-8'); 
 | 
} 
 | 
  
 | 
if (processs.argv.includes('--watch')) { 
 | 
    const watcher = rollup.watch({ 
 | 
        ...createInputOption('development', true), 
 | 
        output: [outputOption], 
 | 
        watch: { 
 | 
            clearScreen: true 
 | 
        } 
 | 
    }); 
 | 
    watcher.on('event', event => { 
 | 
        switch(event.code) { 
 | 
            // case 'START': 
 | 
            //     console.log(chalk.green('Begin to watch')); 
 | 
            //     break; 
 | 
            case 'BUNDLE_START': 
 | 
                console.log( 
 | 
                    chalk.gray(current()), 
 | 
                    chalk.blue('File changed. Begin to bundle') 
 | 
                ); 
 | 
                break; 
 | 
            case 'BUNDLE_END': 
 | 
                console.log( 
 | 
                    chalk.gray(current()), 
 | 
                    chalk.green('Finished bundle') 
 | 
                ); 
 | 
                break; 
 | 
            case 'ERROR': 
 | 
                console.log( 
 | 
                    chalk.gray(current()), 
 | 
                    chalk.red(event.error) 
 | 
                ); 
 | 
                break; 
 | 
        } 
 | 
    }); 
 | 
} 
 | 
else { 
 | 
    // Unminified 
 | 
    rollup.rollup({ 
 | 
        ...createInputOption('development', false) 
 | 
    }).then(bundle => { 
 | 
        bundle.write(outputOption) 
 | 
            .then(() => { 
 | 
                // Minified 
 | 
                if (process.argv.indexOf('--minify') >= 0) { 
 | 
                    rollup.rollup({ 
 | 
                        ...createInputOption('production', false) 
 | 
                    }).then(bundle => { 
 | 
                        const file = outputOption.file.replace(/.js$/, '.min.js'); 
 | 
                        bundle.write(Object.assign(outputOption, { 
 | 
                            file, 
 | 
                            sourcemap: false 
 | 
                        })).then(function () { 
 | 
                            minify(file); 
 | 
                        }); 
 | 
                    }); 
 | 
                } 
 | 
            }); 
 | 
    }); 
 | 
} 
 |