dev@138
|
1 /**
|
dev@138
|
2 * Created by lucas on 20/03/2017.
|
dev@138
|
3 */
|
dev@138
|
4 'use strict';
|
dev@138
|
5 const webpack = require('webpack');
|
dev@506
|
6 const cli = require('@angular/cli').default;
|
dev@138
|
7 const fs = require('fs');
|
dev@138
|
8 webpack.optimize = Object.assign({}, webpack.optimize, {
|
dev@138
|
9 UglifyJsPlugin: function () { this.apply = () => {}; }
|
dev@138
|
10 });
|
dev@138
|
11
|
dev@138
|
12 const bundlePrefixes = [
|
dev@138
|
13 'main',
|
dev@138
|
14 'polyfills',
|
dev@138
|
15 'scripts',
|
dev@138
|
16 'styles',
|
dev@138
|
17 'vendor',
|
dev@138
|
18 'inline'
|
dev@138
|
19 ];
|
dev@138
|
20
|
dev@138
|
21 const distDir = './dist';
|
dev@138
|
22 const tmpDir = `${distDir}/gh-pages`;
|
dev@138
|
23
|
dev@138
|
24 const getGeneratedBundleNames = () => {
|
dev@138
|
25 return new Promise((res, rej) => {
|
dev@138
|
26 fs.readdir(distDir, (err, files) => {
|
dev@138
|
27 if (err) {
|
dev@138
|
28 rej(1);
|
dev@138
|
29 } else {
|
dev@138
|
30 res(files.filter(file => bundlePrefixes.find(
|
dev@138
|
31 prefix => file.startsWith(prefix)
|
dev@138
|
32 )));
|
dev@138
|
33 }
|
dev@138
|
34 })
|
dev@138
|
35 });
|
dev@138
|
36 };
|
dev@138
|
37
|
dev@138
|
38 const throwIfBuildReportedError = (result) => {
|
dev@138
|
39 return new Promise((res, rej) => {
|
dev@138
|
40 if (typeof result === 'object' && result.exitCode != null) {
|
dev@138
|
41 if (result.exitCode === 0) {
|
dev@138
|
42 res();
|
dev@138
|
43 } else {
|
dev@138
|
44 rej(result.exitCode);
|
dev@138
|
45 }
|
dev@138
|
46 } else if(typeof result === 'number') {
|
dev@138
|
47 if (result === 0) {
|
dev@138
|
48 res();
|
dev@138
|
49 } else {
|
dev@138
|
50 rej(result);
|
dev@138
|
51 }
|
dev@138
|
52 } else {
|
dev@138
|
53 res();
|
dev@138
|
54 }
|
dev@138
|
55 });
|
dev@138
|
56 };
|
dev@138
|
57
|
dev@138
|
58 const copyToTmpDir = (bundles) => {
|
dev@138
|
59 // TODO should really handle errors for all of this
|
dev@138
|
60 // and it could be async but i'm too lazy & it doesn't really matter for this
|
dev@138
|
61 if (!fs.existsSync(tmpDir)){
|
dev@138
|
62 fs.mkdirSync(tmpDir);
|
dev@138
|
63 }
|
dev@138
|
64 for (let bundle of bundles) {
|
dev@138
|
65 const parts = bundle.split('.');
|
dev@138
|
66 const bundlePrefix = parts[0];
|
dev@138
|
67 const bundleExtension = parts[parts.length - 1];
|
dev@138
|
68 const contents = fs.readFileSync(`${distDir}/${bundle}`);
|
dev@138
|
69 fs.writeFileSync(
|
dev@138
|
70 `${tmpDir}/${bundlePrefix}.bundle.${bundleExtension}`,
|
dev@138
|
71 contents
|
dev@138
|
72 );
|
dev@138
|
73 }
|
dev@138
|
74 };
|
dev@138
|
75
|
dev@138
|
76 cli({
|
dev@138
|
77 cliArgs: ['build', '--prod', '--aot', 'false', '-bh', '/ugly-duckling/'],
|
dev@138
|
78 inputStream: process.stdin,
|
dev@138
|
79 outputStream: process.stdout
|
dev@138
|
80 })
|
dev@138
|
81 .then(throwIfBuildReportedError)
|
dev@138
|
82 .then(getGeneratedBundleNames)
|
dev@138
|
83 .then(copyToTmpDir)
|
dev@138
|
84 .then(process.exit)
|
dev@138
|
85 .catch(process.exit);
|