This repository was archived by the owner on Apr 14, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathslushfile.js
More file actions
113 lines (101 loc) · 3.43 KB
/
slushfile.js
File metadata and controls
113 lines (101 loc) · 3.43 KB
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
'use strict'
const path = require('path')
const gulp = require('gulp')
const rename = require('gulp-rename')
const template = require('gulp-template')
const conflict = require('gulp-conflict')
const inquirer = require('inquirer')
const git = require('gulp-git')
const _ = require('underscore.string')
function getSuggestName () {
return path.basename(process.cwd())
}
gulp.task('default', () => {
return new Promise((resolve, reject) => {
inquirer.prompt([
{
type: 'input',
name: 'name',
message: 'What do you want to name your component?',
default: getSuggestName()
},
{
type: 'input',
name: 'description',
message: 'Please, enter a description about that.',
default: ''
},
{
type: 'input',
name: 'version',
message: 'Version',
default: '1.0.0'
},
{
type: 'list',
name: 'ci',
message: 'What Continuous Integration do you want to use?',
default: 'scrutinizer',
choices: [
{ name: 'Scrutinizer', value: 'scrutinizer' },
{ name: 'Travis', value: 'travis' },
{ name: 'Circle', value: 'circle' }
]
},
{
type: 'confirm',
name: 'confirm',
message: 'It\'s all correct?'
}
]).then((answers) => {
if (answers.confirm === false) {
return reject()
}
let files = [
path.join(__dirname, 'templates', '**'),
`!${path.join(__dirname, 'templates', 'src')}`
]
if (answers.ci === 'circle') {
files.push(`!${path.join(__dirname, 'templates', '_scrutinizer.yml')}`)
files.push(`!${path.join(__dirname, 'templates', '_travis.yml')}`)
} else if (answers.ci === 'travis') {
files.push(`!${path.join(__dirname, 'templates', '_scrutinizer.yml')}`)
files.push(`!${path.join(__dirname, 'templates', 'circle.yml')}`)
} else {
files.push(`!${path.join(__dirname, 'templates', '_travis.yml')}`)
files.push(`!${path.join(__dirname, 'templates', 'circle.yml')}`)
}
const isToAddReactPrefix = (
answers.name.indexOf('react-') === -1 ||
answers.name.indexOf('react-') !== 0
)
answers.name = _.humanize(answers.name)
answers.slugName = _.slugify(answers.name)
if (isToAddReactPrefix) {
answers.slugName = 'react-' + answers.slugName
}
answers.camelName = _.camelize(answers.name)
git.init({ args: '--quiet' })
return gulp.src(files)
.pipe(template(answers, { interpolate: /<%=([\s\S]+?)%>/g }))
.on('error', (error) => console.log('template(answers) error:', error))
.pipe(rename(file => {
if (file.basename[0] === '_') {
file.basename = '.' + file.basename.slice(1)
} else if (file.dirname[0] === '_') {
file.dirname = '.' + file.dirname.slice(1)
}
if (file.basename.indexOf('MyComponent') > -1) {
file.basename = file.basename.replace('MyComponent', answers.camelName)
}
}))
.on('error', (error) => console.log('rename(file) error:', error))
.pipe(conflict('./', { defaultChoice: 'd' }))
.on('error', (error) => console.log('conflict error:', error))
.pipe(gulp.dest('./'))
.on('error', (error) => console.log('gulp.dest error:', error))
.on('finish', () => resolve())
.resume()
})
})
})