forked from ember-cli/ember-cli
/
index.js
118 lines (99 loc) · 3.33 KB
/
index.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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
'use strict';
const stringUtil = require('ember-cli-string-utils');
const chalk = require('chalk');
const { isExperimentEnabled } = require('../../lib/experiments');
const directoryForPackageName = require('../../lib/utilities/directory-for-package-name');
module.exports = {
description: 'The default blueprint for ember-cli projects.',
shouldTransformTypeScript: true,
filesToRemove: [
'app/styles/.gitkeep',
'app/templates/.gitkeep',
'app/views/.gitkeep',
'public/.gitkeep',
'Brocfile.js',
'testem.json',
],
locals(options) {
let entity = options.entity;
let rawName = entity.name;
let name = stringUtil.dasherize(rawName);
let namespace = stringUtil.classify(rawName);
let embroider = isExperimentEnabled('EMBROIDER') || options.embroider;
let hasOptions = !options.welcome || options.packageManager || embroider || options.ciProvider;
let blueprintOptions = '';
if (hasOptions) {
let indent = `\n `;
let outdent = `\n `;
blueprintOptions =
indent +
[
!options.welcome && '"--no-welcome"',
options.packageManager === 'yarn' && '"--yarn"',
options.packageManager === 'pnpm' && '"--pnpm"',
embroider && '"--embroider"',
options.ciProvider && `"--ci-provider=${options.ciProvider}"`,
options.typescript && `"--typescript"`,
]
.filter(Boolean)
.join(',\n ') +
outdent;
}
let invokeScriptPrefix = 'npm run';
let execBinPrefix = 'npm exec';
if (options.packageManager === 'yarn') {
invokeScriptPrefix = 'yarn';
execBinPrefix = 'yarn';
}
if (options.packageManager === 'pnpm') {
invokeScriptPrefix = 'pnpm';
execBinPrefix = 'pnpm';
}
return {
appDirectory: directoryForPackageName(name),
name,
modulePrefix: name,
namespace,
emberCLIVersion: require('../../package').version,
yarn: options.packageManager === 'yarn',
pnpm: options.packageManager === 'pnpm',
npm: options.packageManager !== 'yarn' && options.packageManager !== 'pnpm',
invokeScriptPrefix,
execBinPrefix,
welcome: options.welcome,
blueprint: 'app',
blueprintOptions,
embroider,
lang: options.lang,
ciProvider: options.ciProvider,
typescript: options.typescript,
packageManager: options.packageManager ?? 'npm',
};
},
files(options) {
if (this._files) {
return this._files;
}
let files = this._super();
if (options.ciProvider !== 'travis') {
files = files.filter((file) => file !== '.travis.yml');
}
if (options.ciProvider !== 'github') {
files = files.filter((file) => file.indexOf('.github') < 0);
}
if (!options.typescript) {
files = files.filter(
(file) => !['tsconfig.json', 'app/config/', 'types/'].includes(file) && !file.endsWith('.d.ts')
);
}
this._files = files;
return this._files;
},
beforeInstall() {
const version = require('../../package.json').version;
const prependEmoji = require('../../lib/utilities/prepend-emoji');
this.ui.writeLine(chalk.blue(`Ember CLI v${version}`));
this.ui.writeLine('');
this.ui.writeLine(prependEmoji('✨', `Creating a new Ember app in ${chalk.yellow(process.cwd())}:`));
},
};