1 | const { BaseTemplate } = require('@electron-forge/template-base');
|
2 | const { promisify } = require('util');
|
3 | const path = require('path');
|
4 | const readFile = promisify(require('fs').readFile);
|
5 | const writeFile = promisify(require('fs').writeFile);
|
6 | const rimraf = promisify(require('rimraf'));
|
7 | const ncp = promisify(require('ncp'));
|
8 | const {
|
9 | emberBuildDir,
|
10 | emberTestBuildDir,
|
11 | packageOutDir,
|
12 | } = require('../lib/utils/build-paths');
|
13 |
|
14 | async function updateGitIgnore(dir) {
|
15 |
|
16 | let gitIgnorePath = path.join(dir, '.gitignore');
|
17 | let contents = await readFile(gitIgnorePath);
|
18 | await writeFile(
|
19 | gitIgnorePath,
|
20 | [
|
21 | contents.toString(),
|
22 | '# Ember build',
|
23 | `${emberBuildDir}/`,
|
24 | `${emberTestBuildDir}/`,
|
25 |
|
26 |
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | '# package/make output directory',
|
32 | `${packageOutDir}/`,
|
33 | '',
|
34 | ].join('\n')
|
35 | );
|
36 | }
|
37 |
|
38 | async function updatePackageJson(dir) {
|
39 |
|
40 |
|
41 | let packageJsonPath = path.join(dir, 'package.json');
|
42 | let packageJson = JSON.parse(await readFile(packageJsonPath));
|
43 | packageJson.config.forge.packagerConfig.ignore = [
|
44 | emberTestBuildDir,
|
45 | 'tests',
|
46 | ].map((dir) => `/${dir}(/|$)`);
|
47 |
|
48 |
|
49 | let parentPackageJson = JSON.parse(
|
50 | await readFile(path.join(dir, '../package.json'))
|
51 | );
|
52 | const keysToCopy = ['name', 'version', 'description', 'author', 'license'];
|
53 | for (let key of keysToCopy) {
|
54 | if (Object.keys(parentPackageJson).includes(key)) {
|
55 | packageJson[key] = parentPackageJson[key];
|
56 | }
|
57 | }
|
58 |
|
59 |
|
60 | packageJson.productName = parentPackageJson.productName || packageJson.name;
|
61 | await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
62 | }
|
63 |
|
64 | class EmberElectronTemplates extends BaseTemplate {
|
65 | constructor() {
|
66 | super(...arguments);
|
67 | this.templateDir = path.join(__dirname, 'files');
|
68 | }
|
69 |
|
70 | get devDependencies() {
|
71 | return ['devtron'];
|
72 | }
|
73 | get dependencies() {
|
74 | return ['electron-devtools-installer', 'electron-is-dev'];
|
75 | }
|
76 |
|
77 | async initializeTemplate(dir) {
|
78 | await super.initializeTemplate(...arguments);
|
79 |
|
80 |
|
81 | await rimraf(path.join(dir, 'src'));
|
82 |
|
83 |
|
84 | await ncp(this.templateDir, dir);
|
85 |
|
86 | await updateGitIgnore(dir);
|
87 | await updatePackageJson(dir);
|
88 | }
|
89 | }
|
90 |
|
91 | module.exports = new EmberElectronTemplates();
|