All files / init init-custom.js

92.86% Statements 26/28
64.29% Branches 9/14
100% Functions 4/4
92.86% Lines 26/28
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                      1x       4x 4x 4x 2x   2x 2x     2x         2x   2x   2x 2x 2x 2x 2x     2x 2x 2x 2x 2x       2x   2x 14x 12x           2x 2x      
import debug from 'debug';
import fs from 'fs-promise';
import glob from 'glob';
import resolvePackage from 'resolve-package';
import path from 'path';
 
import { copy } from './init-starter-files';
import asyncOra from '../util/ora-handler';
import installDepList from '../util/install-dependencies';
import ora from '../util/ora';
 
const d = debug('electron-forge:init:custom');
 
export default async (dir, template, lintStyle) => {
  let templateModulePath;
  await asyncOra(`Locating custom template: "${template}"`, async () => {
    try {
      templateModulePath = await resolvePackage(`electron-forge-template-${template}`);
      d('using global template');
    } catch (err) {
      try {
        templateModulePath = require.resolve(`electron-forge-template-${template}`);
        d('using local template');
      } catch (err2) {
        throw `Failed to locate custom template: "${template}"\n\nTry \`npm install -g electron-forge-template-${template}\``;
      }
    }
  });
 
  let templateModule = require(templateModulePath);
 
  templateModule = templateModule.default || templateModule;
 
  await asyncOra('Installing Template Dependencies', async () => {
    d('installing dependencies');
    await installDepList(dir, templateModule.dependencies || []);
    d('installing devDependencies');
    await installDepList(dir, templateModule.devDependencies || [], true);
  });
 
  await asyncOra('Copying Template Files', async () => {
    const templateDirectory = templateModule.templateDirectory;
    Eif (templateDirectory) {
      const tmplPath = templateDirectory;
      Iif (!path.isAbsolute(templateDirectory)) {
        throw `Custom template path needs to be absolute, this is an issue with "electron-forge-template-${template}"`;
      }
 
      const files = glob.sync(path.resolve(tmplPath, '**/*'));
 
      for (const file of files) {
        if ((await fs.stat(file)).isFile()) {
          await copy(file, path.resolve(dir, path.relative(tmplPath, file).replace(/^_/, '.')));
        }
      }
    }
  });
 
  Eif (typeof templateModule.postCopy === 'function') {
    await Promise.resolve(templateModule.postCopy(dir, ora, lintStyle));
  }
};