packages/kotlin-webpack-plugin/dce-plugin.js (40 lines of code) (raw):

'use strict'; const spawn = require('child_process').spawn; const isWindows = /^win/.test(process.platform); const extension = isWindows ? '.bat' : ''; function eliminateDeadCode(args) { return new Promise((resolve, reject) => { const compilation = spawn( require.resolve(`kotlin-compiler/bin/kotlin-dce-js${extension}`), args, { stdio: [process.stdin, process.stdout, 'pipe'] } ); let hasErrors = false; let errors = ''; compilation.stderr.on('data', (data) => { hasErrors = true; errors += data.toString(); }); compilation.on('error', (err) => { hasErrors = true; errors += 'kotlin-dce-js failed'; errors += JSON.stringify(err); }); compilation.on('close', () => (hasErrors ? reject(errors) : resolve())); }); } function optimize(options) { const args = [ '-output-dir', options.outputDir, '-keep', options.moduleName, options.outputPath, options.runtimePath || require.resolve('kotlin'), ].concat(options.librariesPaths); return eliminateDeadCode(args); } module.exports = { eliminateDeadCode: eliminateDeadCode, optimize: optimize, };