quick-scaffolds-cli 1.2.1 → 1.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -6,7 +6,7 @@ A lightweight interactive CLI for scaffolding starter web projects quickly.
6
6
 
7
7
  quick-scaffolds-cli generates a ready-to-use project from templates with a simple prompt flow.
8
8
 
9
- Current release: v1.2.1
9
+ Current release: v1.2.3
10
10
 
11
11
  ## Quick Start
12
12
 
@@ -16,7 +16,7 @@ Install once and use the command anywhere:
16
16
 
17
17
  ```bash
18
18
  npm install -g quick-scaffolds-cli
19
- ct-pro
19
+ ct-pro my-awesome-app
20
20
  ```
21
21
 
22
22
  ### Use with npx
@@ -24,16 +24,16 @@ ct-pro
24
24
  Run without installing globally:
25
25
 
26
26
  ```bash
27
- npx quick-scaffolds-cli
27
+ npx quick-scaffolds-cli my-awesome-app
28
28
  ```
29
29
 
30
30
  ## Usage
31
31
 
32
- Run the CLI and answer two prompts:
32
+ Run the CLI with an initial project name, then choose whether to keep it or change it:
33
33
 
34
34
  ```bash
35
- ct-pro
36
- ? What is your project name? my-awesome-app
35
+ ct-pro my-awesome-app
36
+ ? Your project name will be named "my-awesome-app". Do you want to keep it? (Y/n)
37
37
  ? What do you want to build?
38
38
  Static HTML/CSS/JS
39
39
  React starter
@@ -41,11 +41,19 @@ ct-pro
41
41
 
42
42
  Prompt details:
43
43
 
44
- 1. Project name (default: my-new-project)
44
+ 1. Confirm project name:
45
+ - Keep the provided name
46
+ - Change it by entering a new project name (default: `my-new-project`)
45
47
  2. Project type:
46
48
  - Static HTML/CSS/JS
47
49
  - React starter
48
50
 
51
+ If you choose not to keep the provided name, the CLI asks:
52
+
53
+ ```bash
54
+ ? What is your project name? my-updated-app
55
+ ```
56
+
49
57
  ## Templates
50
58
 
51
59
  ### 1. Static HTML/CSS/JS
@@ -71,9 +79,10 @@ Generated structure:
71
79
 
72
80
  ```text
73
81
  my-awesome-app/
82
+ ├── .gitignore
83
+ ├── index.html
74
84
  ├── package.json
75
85
  ├── public/
76
- │ ├── index.html
77
86
  │ └── index.css
78
87
  └── src/
79
88
  ├── App.css
@@ -101,8 +110,13 @@ npm run dev
101
110
 
102
111
  ```text
103
112
  quick-scaffolds-cli/
113
+ ├── .gitignore
114
+ ├── .npmignore
104
115
  ├── bin/
105
116
  │ └── cli.js
117
+ ├── package-lock.json
118
+ ├── package.json
119
+ ├── README.md
106
120
  ├── templates/
107
121
  │ ├── html-template/
108
122
  │ │ ├── index.html
@@ -111,17 +125,17 @@ quick-scaffolds-cli/
111
125
  │ │ └── js/
112
126
  │ │ └── app.js
113
127
  │ └── react-template/
128
+ │ ├── .gitignore
129
+ │ ├── index.html
114
130
  │ ├── package.json
115
131
  │ ├── public/
116
- │ │ ├── index.css
117
- │ │ └── index.html
132
+ │ │ └── index.css
118
133
  │ └── src/
119
134
  │ ├── App.css
120
135
  │ ├── App.jsx
121
136
  │ ├── index.css
122
137
  │ └── main.jsx
123
- ├── package.json
124
- └── README.md
138
+ └── LICENSE
125
139
  ```
126
140
 
127
141
  ## Dependencies
@@ -134,4 +148,4 @@ MIT
134
148
 
135
149
  ## Contributing
136
150
 
137
- Issues and pull requests are welcome on github.
151
+ Issues and pull requests are welcome on GitHub.
package/bin/cli.js CHANGED
@@ -3,14 +3,21 @@ import { execSync } from 'node:child_process';
3
3
  import fs from 'node:fs/promises';
4
4
  import path from 'node:path';
5
5
  import { fileURLToPath } from 'node:url';
6
- import { input, select } from '@inquirer/prompts';
6
+ import { input, select, confirm } from '@inquirer/prompts';
7
7
 
8
8
  const __filename = fileURLToPath(import.meta.url);
9
9
  const __dirname = path.dirname(__filename);
10
10
 
11
11
  async function main() {
12
- try {
13
- const name = await input(
12
+ let name = process.argv[2];
13
+
14
+ const keepName = await confirm({
15
+ message: `Your project name will be named "${name}". Do you want to keep it ?`,
16
+ default: true
17
+ });
18
+
19
+ if (!keepName) {
20
+ name = await input(
14
21
  {
15
22
  name: 'projectName',
16
23
  message: 'What is your project name?',
@@ -18,32 +25,34 @@ async function main() {
18
25
  default: 'my-new-project'
19
26
  }
20
27
  );
21
- const projectType = await select({
22
- message: 'What do you want to build?',
23
- type: "list",
24
- choices: [
25
- { name: 'Static HTML/CSS/JS', value: 'static' },
26
- { name: 'React starter', value: 'react' }
27
- ],
28
- });
29
- let templateFolder = '';
30
- if (projectType === 'static') {
31
- templateFolder = 'html-template';
32
- }
28
+ }
33
29
 
34
- if (projectType === 'react') {
35
- templateFolder = 'react-template';
36
- await reactApp(name, templateFolder);
37
- return;
38
- }
30
+ const projectType = await select({
31
+ message: 'What do you want to build?',
32
+ type: "list",
33
+ choices: [
34
+ { name: 'Static HTML/CSS/JS', value: 'static' },
35
+ { name: 'React starter', value: 'react' }
36
+ ],
37
+ });
38
+ let templateFolder = '';
39
+ if (projectType === 'static') {
40
+ templateFolder = 'html-template';
41
+ }
39
42
 
43
+ if (projectType === 'react') {
44
+ templateFolder = 'react-template';
45
+ await reactApp(name, templateFolder);
46
+ return;
47
+ }
48
+ try {
40
49
  const projectName = name;
41
50
  const targetPath = path.join(process.cwd(), projectName);
42
51
 
43
52
  const templatePath = path.join(__dirname, '../templates', templateFolder);
44
53
  await fs.mkdir(targetPath, { recursive: true });
45
54
  await fs.cp(templatePath, targetPath, { recursive: true });
46
- console.log(`Successfully scaffolded the HTMl project - ${projectName}`)
55
+ console.log(`\nSuccessfully scaffolded the HTMl project - ${projectName}\n`)
47
56
 
48
57
  } catch (err) {
49
58
  console.error(`Error - ${err.message}`)
@@ -59,7 +68,7 @@ async function reactApp(projectName, templateFolder) {
59
68
 
60
69
  const filesToUpdate = [
61
70
  path.join(targetPath, 'package.json'),
62
- path.join(targetPath, 'public','index.html')
71
+ path.join(targetPath, 'index.html')
63
72
  ];
64
73
  for (const filePath of filesToUpdate) {
65
74
  try {
@@ -72,17 +81,17 @@ async function reactApp(projectName, templateFolder) {
72
81
  }
73
82
  }
74
83
 
75
- console.log(`Successfully scaffolded the React starter project - ${projectName}`)
76
- console.log('📦 Installing dependencies... This may take a minute.');
84
+ console.log(`Successfully scaffolded the React starter project - ${projectName}\n`)
85
+ console.log('📦 Installing dependencies... This may take a minute.\n');
77
86
  try {
78
87
  execSync('npm install', {
79
88
  cwd: targetPath,
80
89
  stdio: 'inherit'
81
90
  });
82
- console.log('✅ Dependencies installed successfully!');
83
- } catch (err){
91
+ console.log('✅ Dependencies installed successfully!\n');
92
+ } catch (err) {
84
93
  console.error(err);
85
- console.log('⚠️ Could not install dependencies automatically.');
94
+ console.log('⚠️ Could not install dependencies automatically.\n');
86
95
  console.log('Please run "npm install" manually inside your project folder.');
87
96
  }
88
97
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "quick-scaffolds-cli",
3
- "version": "1.2.1",
3
+ "version": "1.2.3",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "ct-pro": "bin/cli.js"