-
-
Notifications
You must be signed in to change notification settings - Fork 506
/
init-custom.ts
63 lines (56 loc) · 2.37 KB
/
init-custom.ts
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
import { asyncOra } from '@electron-forge/async-ora';
import debug from 'debug';
import fs from 'fs-extra';
import glob from 'glob';
import resolvePackage from 'resolve-package';
import path from 'path';
import { ForgeTemplate } from '@electron-forge/shared-types';
import { copy } from './init-starter-files';
import installDepList, { DepType } from '../../util/install-dependencies';
// https://github.com/benmosher/eslint-plugin-import/issues/1120
// eslint-disable-next-line import/named
import { PossibleModule } from '../../util/require-search';
const d = debug('electron-forge:init:custom');
export default async (dir: string, template: string) => {
let templateModulePath!: string;
await asyncOra(`Locating custom template: "${template}"`, async () => {
try {
templateModulePath = await resolvePackage(`electron-forge-template-${template}`);
d('using global template');
} catch (err) {
try {
templateModulePath = await resolvePackage(`@electron-forge/template-${template}`);
d('using global template');
} catch (err2) {
try {
templateModulePath = require.resolve(`electron-forge-template-${template}`);
d('using local template');
} catch (err3) {
try {
templateModulePath = require.resolve(`@electron-forge/template-${template}`);
d('using local template');
} catch (err4) {
try {
templateModulePath = require.resolve(template);
d('using absolute template');
} catch (err5) {
throw new Error(`Failed to locate custom template: "${template}"\n\nTry \`npm install -g @electron-forge-template-${template}\``);
}
}
}
}
}
});
// eslint-disable-next-line import/no-dynamic-require, global-require
let templateModule: PossibleModule<ForgeTemplate> = 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 || [], DepType.DEV);
});
if (typeof templateModule.initializeTemplate === 'function') {
await Promise.resolve(templateModule.initializeTemplate(dir));
}
};