-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbunsoir.js
97 lines (83 loc) · 2.61 KB
/
bunsoir.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
const commander = require('commander')
const chalk = require('chalk');
const { readdir } = require('fs/promises');
const path = require('path')
const {
initializeBunSetup,
frameworkSetup,
dockerSetup,
ormSetup,
databaseSetup,
gitHandler
} = require('./helpers/utils');
const {
projectNamePrompt,
frameworkPrompt,
ormPrompt,
databasePrompt,
dockerPrompt
} = require('./prompts')
const packageJson = require('./package.json');
const init = () => {
try {
new commander.Command()
.version(packageJson.version)
.argument('<project-directory>')
.usage(`${chalk.green('<project-directory>')} [options]`)
.action(async (name) => {
// check if project already exists
const directories = await readdir(process.cwd())
const exists = directories.includes(name)
if (exists) {
console.log(`Project with name ${chalk.blue(name)} already exists`)
process.exit(1)
}
// project name
const projectName = await projectNamePrompt(name)
// framework
const framework = await frameworkPrompt();
// orm
const orm = await ormPrompt()
// database
const database = await databasePrompt(orm.value)
// Docker?
const docker = await dockerPrompt()
createApp({ projectName: projectName.value, framework: framework.value, orm: orm.value, database: database.value, docker: docker.value })
})
.on('--help', () => {
console.log(
`Only ${chalk.green('<project-directory>')} is required.`
);
})
.parse(process.argv)
} catch (error) {
console.log(error)
process.exit(1);
}
}
const createApp = (payload) => {
const { projectName, framework, orm, database, docker } = payload
const newProjectPath = process.cwd() + '/' + projectName
const bunsoirRoot = path.resolve(__dirname);
// start
console.log('Started setup... ⏳ ')
// setup bun app
initializeBunSetup(bunsoirRoot, newProjectPath, projectName)
// Framework setup
frameworkSetup(bunsoirRoot, framework, newProjectPath)
// ORM setup
ormSetup(bunsoirRoot, orm, database, newProjectPath)
// Database setup
databaseSetup()
// include docker??
dockerSetup(docker, bunsoirRoot, newProjectPath)
// initial commit
gitHandler()
// done
console.log("Finished!!! 🎉🎉 \n");
console.log(chalk.green("Commands:"));
console.log(`${chalk.yellow("bun start:dev")} - development mode`);
console.log(`${chalk.yellow("bun run build")} - build app`);
console.log(`${chalk.yellow("bun start")} - build and serve build`);
}
module.exports = { init }