/
init-custom.js
62 lines (52 loc) · 2.12 KB
/
init-custom.js
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
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;
if (templateDirectory) {
const tmplPath = templateDirectory;
if (!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(/^_/, '.')));
}
}
}
});
if (typeof templateModule.postCopy === 'function') {
await Promise.resolve(templateModule.postCopy(dir, ora, lintStyle));
}
};