dev@138: /** dev@138: * Created by lucas on 20/03/2017. dev@138: */ dev@138: 'use strict'; dev@138: const webpack = require('webpack'); dev@506: const cli = require('@angular/cli').default; dev@138: const fs = require('fs'); dev@138: webpack.optimize = Object.assign({}, webpack.optimize, { dev@138: UglifyJsPlugin: function () { this.apply = () => {}; } dev@138: }); dev@138: dev@138: const bundlePrefixes = [ dev@138: 'main', dev@138: 'polyfills', dev@138: 'scripts', dev@138: 'styles', dev@138: 'vendor', dev@138: 'inline' dev@138: ]; dev@138: dev@138: const distDir = './dist'; dev@138: const tmpDir = `${distDir}/gh-pages`; dev@138: dev@138: const getGeneratedBundleNames = () => { dev@138: return new Promise((res, rej) => { dev@138: fs.readdir(distDir, (err, files) => { dev@138: if (err) { dev@138: rej(1); dev@138: } else { dev@138: res(files.filter(file => bundlePrefixes.find( dev@138: prefix => file.startsWith(prefix) dev@138: ))); dev@138: } dev@138: }) dev@138: }); dev@138: }; dev@138: dev@138: const throwIfBuildReportedError = (result) => { dev@138: return new Promise((res, rej) => { dev@138: if (typeof result === 'object' && result.exitCode != null) { dev@138: if (result.exitCode === 0) { dev@138: res(); dev@138: } else { dev@138: rej(result.exitCode); dev@138: } dev@138: } else if(typeof result === 'number') { dev@138: if (result === 0) { dev@138: res(); dev@138: } else { dev@138: rej(result); dev@138: } dev@138: } else { dev@138: res(); dev@138: } dev@138: }); dev@138: }; dev@138: dev@138: const copyToTmpDir = (bundles) => { dev@138: // TODO should really handle errors for all of this dev@138: // and it could be async but i'm too lazy & it doesn't really matter for this dev@138: if (!fs.existsSync(tmpDir)){ dev@138: fs.mkdirSync(tmpDir); dev@138: } dev@138: for (let bundle of bundles) { dev@138: const parts = bundle.split('.'); dev@138: const bundlePrefix = parts[0]; dev@138: const bundleExtension = parts[parts.length - 1]; dev@138: const contents = fs.readFileSync(`${distDir}/${bundle}`); dev@138: fs.writeFileSync( dev@138: `${tmpDir}/${bundlePrefix}.bundle.${bundleExtension}`, dev@138: contents dev@138: ); dev@138: } dev@138: }; dev@138: dev@138: cli({ dev@138: cliArgs: ['build', '--prod', '--aot', 'false', '-bh', '/ugly-duckling/'], dev@138: inputStream: process.stdin, dev@138: outputStream: process.stdout dev@138: }) dev@138: .then(throwIfBuildReportedError) dev@138: .then(getGeneratedBundleNames) dev@138: .then(copyToTmpDir) dev@138: .then(process.exit) dev@138: .catch(process.exit);