UNPKG

electron-forge

Version:

A complete tool for building modern Electron applications

471 lines (470 loc) 15.9 kB
<!doctype 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">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</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">&nbsp;</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">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-no">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-yes">2x</span> <span class="cline-any cline-neutral">&nbsp;</span> <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import 'colors'; import fs from 'fs-promise'; import path from 'path'; &nbsp; 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'; &nbsp; import packager from './package'; &nbsp; /** * @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&lt;string&gt;} [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 */ &nbsp; /** * 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> =&gt; { // 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; &nbsp; let forgeConfig; await asyncOra('Resolving Forge Config', async () =&gt; { 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> } &nbsp; forgeConfig = await getForgeConfig(dir); }); &nbsp; <span class="missing-if-branch" title="if path not taken" >I</span>if (platform &amp;&amp; platform !== process.platform &amp;&amp; <span class="branch-2 cbranch-no" title="branch not covered" >!(process.platform === 'darwin' &amp;&amp; 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> } &nbsp; <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); } &nbsp; const declaredArch = arch; const declaredPlatform = platform; &nbsp; 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> } &nbsp; console.info('Making for the following targets:', `${targets.join(', ')}`.cyan); &nbsp; 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> } } &nbsp; const packageJSON = await readPackageJSON(dir); const appName = packageJSON.productName || <span class="branch-1 cbranch-no" title="branch not covered" >packageJSON.name;</span> const outputs = []; &nbsp; 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> } &nbsp; 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 () =&gt; { 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> } } }); } } &nbsp; return outputs; }; &nbsp;</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>