/
init.ts
69 lines (60 loc) · 2 KB
/
init.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
64
65
66
67
68
69
import { asyncOra } from '@electron-forge/async-ora';
import debug from 'debug';
import fs from 'fs-extra';
import path from 'path';
import findTemplate from './init-scripts/find-template';
import initDirectory from './init-scripts/init-directory';
import initGit from './init-scripts/init-git';
import initNPM from './init-scripts/init-npm';
import installDepList, { DepType } from '../util/install-dependencies';
import { readRawPackageJson } from '../util/read-package-json';
import { setInitialForgeConfig } from '../util/forge-config';
const d = debug('electron-forge:init');
export interface InitOptions {
/**
* The path to the app to be initialized
*/
dir?: string;
/**
* Whether to use sensible defaults or prompt the user visually
*/
interactive?: boolean;
/**
* Whether to copy Travis and AppVeyor CI files
*/
copyCIFiles?: boolean;
/**
* Whether to overwrite an existing directory
*/
force?: boolean;
/**
* The custom template to use. If left empty, the default template is used
*/
template?: string;
}
export default async ({
dir = process.cwd(),
interactive = false,
copyCIFiles = false,
force = false,
template = 'base',
}: InitOptions) => {
asyncOra.interactive = interactive;
d(`Initializing in: ${dir}`);
await initDirectory(dir, force);
await initGit(dir);
const templateModule = await findTemplate(dir, template);
if (typeof templateModule.initializeTemplate === 'function') {
await templateModule.initializeTemplate(dir, { copyCIFiles });
const packageJSON = await readRawPackageJson(dir);
setInitialForgeConfig(packageJSON);
await fs.writeJson(path.join(dir, 'package.json'), packageJSON, { spaces: 2 });
}
await asyncOra('Installing Template Dependencies', async () => {
d('installing dependencies');
await installDepList(dir, templateModule.dependencies || []);
d('installing devDependencies');
await installDepList(dir, templateModule.devDependencies || [], DepType.DEV);
});
await initNPM(dir);
};