electron-forge
Version:
A complete tool for building modern Electron applications
471 lines (470 loc) • 15.9 kB
HTML
<html lang="en">
<head>
<title>Code coverage report for api/make.js</title>
<meta charset="utf-8" />
<link rel="stylesheet" href="../prettify.css" />
<link rel="stylesheet" href="../base.css" />
<meta name="viewport" content="width=device-width, initial-scale=1">
<style type='text/css'>
.coverage-summary .sorter {
background-image: url(../sort-arrow-sprite.png);
}
</style>
</head>
<body>
<div class='wrapper'>
<div class='pad1'>
<h1>
<a href="../index.html">All files</a> / <a href="index.html">api</a> make.js
</h1>
<div class='clearfix'>
<div class='fl pad1y space-right2'>
<span class="strong">61.7% </span>
<span class="quiet">Statements</span>
<span class='fraction'>29/47</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">40% </span>
<span class="quiet">Branches</span>
<span class='fraction'>12/30</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">100% </span>
<span class="quiet">Functions</span>
<span class='fraction'>3/3</span>
</div>
<div class='fl pad1y space-right2'>
<span class="strong">61.7% </span>
<span class="quiet">Lines</span>
<span class='fraction'>29/47</span>
</div>
</div>
</div>
<div class='status-line medium'></div>
<pre><table class="coverage">
<tr><td class="line-count quiet">1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136</td><td class="line-coverage quiet"><span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-no"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-yes">2x</span>
<span class="cline-any cline-neutral"> </span>
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">import 'colors';
import fs from 'fs-promise';
import path from 'path';
import asyncOra from '../util/ora-handler';
import electronHostArch from '../util/electron-host-arch';
import getForgeConfig from '../util/forge-config';
import readPackageJSON from '../util/read-package-json';
import requireSearch from '../util/require-search';
import resolveDir from '../util/resolve-dir';
import packager from './package';
/**
* @typedef {Object} MakeOptions
* @property {string} [dir=process.cwd()] The path to the app from which distributables are generated
* @property {boolean} [interactive=false] Whether to use sensible defaults or prompt the user visually
* @property {boolean} [skipPackage=false] Whether to skip the pre-make packaging step
* @property {Array<string>} [overrideTargets] An array of make targets to override your forge config
* @property {string} [arch=host architecture] The target architecture
* @property {string} [platform=process.platform] The target platform. NOTE: This is limited to be the current platform at the moment
*/
/**
* Make distributables for an Electron application.
*
* @param {MakeOptions} providedOptions - Options for the make method
* @return {Promise} Will resolve when the make process is complete
*/
export default async (providedOptions = <span class="branch-0 cbranch-no" title="branch not covered" >{})</span> => {
// eslint-disable-next-line prefer-const, no-unused-vars
let { dir, interactive, skipPackage, overrideTargets, arch, platform } = Object.assign({
dir: process.cwd(),
interactive: false,
skipPackage: false,
arch: electronHostArch(),
platform: process.platform,
}, providedOptions);
asyncOra.interactive = interactive;
let forgeConfig;
await asyncOra('Resolving Forge Config', async () => {
dir = await resolveDir(dir);
<span class="missing-if-branch" title="if path not taken" >I</span>if (!dir) {
// eslint-disable-next-line no-throw-literal
<span class="cstat-no" title="statement not covered" > throw 'Failed to locate makeable Electron application';</span>
}
forgeConfig = await getForgeConfig(dir);
});
<span class="missing-if-branch" title="if path not taken" >I</span>if (platform && platform !== process.platform && <span class="branch-2 cbranch-no" title="branch not covered" >!(process.platform === 'darwin' && platform === 'mas'))</span> {
<span class="cstat-no" title="statement not covered" > console.error('You can not "make" for a platform other than your systems platform'.red);</span>
<span class="cstat-no" title="statement not covered" > process.exit(1);</span>
}
<span class="missing-if-branch" title="if path not taken" >I</span>if (!skipPackage) {
<span class="cstat-no" title="statement not covered" > console.info('We need to package your application before we can make it'.green);</span>
<span class="cstat-no" title="statement not covered" > await packager({</span>
dir,
interactive,
arch,
platform,
});
} else {
console.warn('WARNING: Skipping the packaging step, this could result in an out of date build'.red);
}
const declaredArch = arch;
const declaredPlatform = platform;
let targets = forgeConfig.make_targets[declaredPlatform];
<span class="missing-if-branch" title="if path not taken" >I</span>if (overrideTargets) {
<span class="cstat-no" title="statement not covered" > targets = overrideTargets;</span>
}
console.info('Making for the following targets:', `${targets.join(', ')}`.cyan);
let targetArchs = [declaredArch];
<span class="missing-if-branch" title="if path not taken" >I</span>if (declaredArch === 'all') {
<span class="cstat-no" title="statement not covered" > switch (process.platform) {</span>
case 'darwin':
<span class="cstat-no" title="statement not covered" > targetArchs = ['x64'];</span>
<span class="cstat-no" title="statement not covered" > break;</span>
case 'linux':
<span class="cstat-no" title="statement not covered" > targetArchs = ['ia32', 'x64', 'armv7l'];</span>
<span class="cstat-no" title="statement not covered" > break;</span>
case 'win32':
default:
<span class="cstat-no" title="statement not covered" > targetArchs = ['ia32', 'x64'];</span>
<span class="cstat-no" title="statement not covered" > break;</span>
}
}
const packageJSON = await readPackageJSON(dir);
const appName = packageJSON.productName || <span class="branch-1 cbranch-no" title="branch not covered" >packageJSON.name;</span>
const outputs = [];
for (const targetArch of targetArchs) {
const packageDir = path.resolve(dir, `out/${appName}-${declaredPlatform}-${targetArch}`);
<span class="missing-if-branch" title="if path not taken" >I</span>if (!(await fs.exists(packageDir))) {
<span class="cstat-no" title="statement not covered" > throw new Error(`Couldn't find packaged app at: ${packageDir}`);</span>
}
for (const target of targets) {
// eslint-disable-next-line no-loop-func
await asyncOra(`Making for target: ${target.cyan} - On platform: ${declaredPlatform.cyan} - For arch: ${targetArch.cyan}`, async () => {
const maker = requireSearch(__dirname, [
`../makers/${process.platform}/${target}.js`,
`../makers/generic/${target}.js`,
`electron-forge-maker-${target}`,
]);
<span class="missing-if-branch" title="if path not taken" >I</span>if (!maker) {
// eslint-disable-next-line no-throw-literal
<span class="cstat-no" title="statement not covered" > throw `Could not find a build target with the name: ${target} for the platform: ${declaredPlatform}`;</span>
}
try {
outputs.push(await (maker.default || maker)(packageDir, appName, targetArch, forgeConfig, packageJSON));
} catch (err) {
<span class="cstat-no" title="statement not covered" > if (err) {</span>
// eslint-disable-next-line no-throw-literal
<span class="cstat-no" title="statement not covered" > throw {</span>
message: `An error occured while making for target: ${target}`,
stack: `${err.message}\n${err.stack}`,
};
} else {
<span class="cstat-no" title="statement not covered" > throw new Error(`An unknown error occured while making for target: ${target}`);</span>
}
}
});
}
}
return outputs;
};
</pre></td></tr>
</table></pre>
<div class='push'></div><!-- for sticky footer -->
</div><!-- /wrapper -->
<div class='footer quiet pad2 space-top1 center small'>
Code coverage
generated by <a href="http://istanbul-js.org/" target="_blank">istanbul</a> at Sun Jan 15 2017 17:22:43 GMT+1100 (AEDT)
</div>
</div>
<script src="../prettify.js"></script>
<script>
window.onload = function () {
if (typeof prettyPrint === 'function') {
prettyPrint();
}
};
</script>
<script src="../sorter.js"></script>
</body>
</html>