Skip to content

Commit da08346

Browse files
macdonstcolepeters
andauthored
Add init command (#15)
* Add init command Signed-off-by: macdonst <[email protected]> * Apply suggestions from code review Co-authored-by: Cole Peters <[email protected]> --------- Signed-off-by: macdonst <[email protected]> Co-authored-by: Cole Peters <[email protected]>
1 parent 6c5a03e commit da08346

4 files changed

Lines changed: 105 additions & 1 deletion

File tree

src/commands/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
let dev = require('./dev')
22
let generate = require('./generate')
33
let help = require('./help')
4+
let init = require('./init')
45
let newProj = require('./new')
56
let version = require('./version')
67
let commands = [
7-
dev, generate, help, newProj, version
8+
dev, generate, help, init, newProj, version
89
]
910

1011
let helper = require('../helper')

src/commands/init/action.js

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
module.exports = async function (params) {
2+
let { closeSync, existsSync, mkdirSync, openSync, writeFileSync } = require('fs')
3+
let { join, resolve } = require('path')
4+
5+
let utils = require('../../lib')
6+
let error = require('./errors')(params, utils)
7+
let _inventory = require('@architect/inventory')
8+
let c = require('@colors/colors/safe')
9+
10+
let dest = resolve('.')
11+
12+
// Error out if folder already exists and it has an arc project already
13+
if (existsSync(dest)) {
14+
let inventory = await _inventory({ cwd: dest })
15+
let invalid = inventory.inv._project.manifest
16+
if (invalid) return error('project_found')
17+
}
18+
19+
// write arc file
20+
writeFileSync(join(dest, '.arc'),
21+
`@app
22+
enhance-app
23+
24+
@plugins
25+
enhance/arc-plugin-enhance
26+
enhance/arc-plugin-styles
27+
enhance/styles-cribsheet
28+
`
29+
)
30+
31+
const pkgFilePath = join(dest, 'package.json')
32+
if (!existsSync(pkgFilePath)) {
33+
writeFileSync(
34+
pkgFilePath,
35+
`{
36+
"name": "enhance-app",
37+
"version": "0.0.1",
38+
"scripts": {
39+
"start": "npx enhance dev"
40+
},
41+
"devDependencies": {
42+
"@enhance/cli": "latest",
43+
"@enhance/types": "latest"
44+
},
45+
"dependencies": {
46+
"@enhance/arc-plugin-enhance": "latest",
47+
"@enhance/arc-plugin-styles": "latest",
48+
"@enhance/styles-cribsheet": "latest"
49+
}
50+
}
51+
`
52+
)
53+
}
54+
else {
55+
return error('package_json_found')
56+
}
57+
58+
// Create an empty index.html page
59+
const dir = join(dest, 'app', 'pages')
60+
if (!existsSync(dir)){
61+
mkdirSync(dir, { recursive: true })
62+
}
63+
const index = join(dir, 'index.html')
64+
if (!existsSync(index)){
65+
closeSync(openSync(index, 'w'))
66+
}
67+
68+
// Success message
69+
console.error(`Project successfully initialized!\nTo get started, install the dependencies: ${c.bold(c.green(`npm install`))}\nThen start the local development server: ${c.bold(c.green(`npx enhance dev`))}`)
70+
}

src/commands/init/errors.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
module.exports = function error (params) {
2+
return function (err) {
3+
let { lang } = params
4+
let errors = {
5+
en: {
6+
project_found: 'Existing Enhance app already found in this directory',
7+
package_json_found: 'Existing package.json already found in this directory'
8+
}
9+
}
10+
return Error(errors[lang][err])
11+
}
12+
}

src/commands/init/index.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
let names = { en: [ 'init' ] }
2+
let action = require('./action')
3+
4+
module.exports = {
5+
names,
6+
action,
7+
help: () => {
8+
return {
9+
en: {
10+
usage: [ 'init' ],
11+
description: 'Initialize a new empty Enhance project',
12+
examples: [
13+
{
14+
name: 'Create a new project in the current folder',
15+
example: 'npx @enhance/cli init',
16+
},
17+
]
18+
},
19+
}
20+
}
21+
}

0 commit comments

Comments
 (0)