@docubook/create 1.6.9 → 1.7.5

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.
Files changed (3) hide show
  1. package/README.md +0 -31
  2. package/create.js +105 -64
  3. package/package.json +4 -1
package/README.md CHANGED
@@ -37,35 +37,4 @@ Next steps:
37
37
  npm run dev
38
38
  ```
39
39
 
40
- ## Update
41
- ### How to Update DocuBook?
42
- - **Open a New Terminal**: Please open a new terminal on the desktop that has DocuBook installed.
43
- - **Move Directory**: for example, if the directory name is docubook, then write `cd docubook` and press enter.
44
-
45
- ```bash
46
- npx @docubook/update@latest
47
- ```
48
-
49
- #### command output
50
-
51
- ```bash
52
- 📂 Updating Docubook project in /Users/wildan/Public/docubook...
53
-
54
- ℹ ⚡ Skipped public
55
- ℹ ⚡ Skipped contents
56
- ℹ ⚡ Skipped app/page.tsx
57
- ℹ ⚡ Skipped docu.json
58
- ℹ ⚡ Skipped CHANGELOG.md
59
- ✨ Replacing styles folder...
60
- ✨ Replaced all CSS files in styles folder
61
- ✔ ✅ Docubook v1.4.2 successfully updated in /Users/wildan/Public/docubook!
62
-
63
- 🎯 Next steps:
64
- 1. Verify your changes in the current directory.
65
- 2. Run the install script to check for package updates:
66
- npm install
67
- 3. Run the development server:
68
- npm run dev
69
- ```
70
-
71
40
  Access the app on => http://localhost:3000
package/create.js CHANGED
@@ -1,12 +1,14 @@
1
1
  #!/usr/bin/env node
2
2
 
3
3
  import { program } from "commander";
4
- // import degit from "degit";
5
4
  import path from "path";
6
5
  import fs from "fs";
7
6
  import ora from "ora";
8
7
  import chalk from "chalk";
9
8
  import inquirer from "inquirer";
9
+ import boxen from "boxen";
10
+ import figlet from "figlet";
11
+ import cliProgress from "cli-progress";
10
12
  import { execSync } from "child_process";
11
13
 
12
14
  // Cek apakah Node.js sudah terinstal
@@ -33,107 +35,146 @@ function checkBunInstalled() {
33
35
  function updatePostcssConfig(projectPath) {
34
36
  const oldConfigPath = path.join(projectPath, "postcss.config.js");
35
37
  const newConfigPath = path.join(projectPath, "postcss.config.cjs");
36
-
37
38
  if (fs.existsSync(oldConfigPath)) {
38
39
  fs.renameSync(oldConfigPath, newConfigPath);
39
- console.log(chalk.green("Renamed postcss.config.js to postcss.config.cjs for Bun compatibility."));
40
+ console.log(chalk.yellow("Renamed postcss.config.js to postcss.config.cjs for Bun compatibility."));
40
41
  } else {
41
42
  console.log(chalk.yellow("No postcss.config.js file found. Skipping rename."));
42
43
  }
43
44
  }
44
45
 
46
+ // Menampilkan ASCII Art untuk branding
47
+ function displayAsciiArt() {
48
+ console.log(
49
+ chalk.green(
50
+ figlet.textSync("DocuBook", {
51
+ horizontalLayout: "full",
52
+ })
53
+ )
54
+ );
55
+ }
56
+
57
+ // Menampilkan kotak pesan selamat datang
58
+ function displayWelcomeMessage() {
59
+ const welcomeMessage = boxen("DocuBook CLI Installer!", {
60
+ padding: 1,
61
+ margin: 1,
62
+ borderStyle: "round",
63
+ borderColor: "green",
64
+ });
65
+ console.log(welcomeMessage);
66
+ }
67
+
68
+ // Simulasi progress bar untuk instalasi
69
+ async function simulateInstallation() {
70
+ const progressBar = new cliProgress.SingleBar(
71
+ {
72
+ format: 'Installation |' + chalk.green('{bar}') + '| {percentage}% || {value}/{total}',
73
+ barCompleteChar: '\u2588',
74
+ barIncompleteChar: '\u2591',
75
+ },
76
+ cliProgress.Presets.shades_classic
77
+ );
78
+
79
+ progressBar.start(100, 0);
80
+
81
+ for (let i = 0; i <= 100; i++) {
82
+ await new Promise((resolve) => setTimeout(resolve, 50));
83
+ progressBar.update(i);
84
+ }
85
+
86
+ progressBar.stop();
87
+ }
88
+
45
89
  program
46
- .version("1.6.9")
90
+ .version("1.7.5")
47
91
  .description("CLI to create a new Docubook project")
48
92
  .argument("[project-directory]", "Directory to create the new Docubook project")
49
93
  .action(async (projectDirectory) => {
94
+ displayAsciiArt();
95
+ displayWelcomeMessage();
96
+
50
97
  if (!projectDirectory) {
51
98
  const { directoryName } = await inquirer.prompt([
52
99
  {
53
100
  type: "input",
54
101
  name: "directoryName",
55
- message: "Enter a name for your project directory:",
102
+ message: "Enter your project directory name:",
56
103
  default: "docubook",
57
104
  },
58
105
  ]);
59
106
  projectDirectory = directoryName;
60
107
  }
61
- // --- clone from github ---
62
- // const repo = "github:mywildancloud/docubook#starter";
63
- // const emitter = degit(repo);
64
- // const projectPath = path.resolve(process.cwd(), projectDirectory);
65
-
66
- // const spinner = ora(`Cloning ${chalk.green("starter")}...`).start();
67
- // try {
68
- // await emitter.clone(projectPath);
69
- // spinner.succeed(`Docubook project successfully created in ${projectPath}!`);
70
- // --- clone from github ---
71
-
72
- // --- clone from gitlab ---
108
+
109
+ const { packageManager } = await inquirer.prompt([
110
+ {
111
+ type: "list",
112
+ name: "packageManager",
113
+ message: "Choose a package manager:",
114
+ choices: ["npm", "pnpm", "yarn", "bun"],
115
+ default: "npm",
116
+ },
117
+ ]);
118
+ // --- cloning from gitlab ---
73
119
  const repo = "https://gitlab.com/mywildancloud/docubook.git";
74
120
  const branch = "starter";
75
121
  const projectPath = path.resolve(process.cwd(), projectDirectory);
76
122
  const cloneCommand = `git clone --branch ${branch} ${repo} ${projectPath}`;
123
+ const spinner = ora(`Cloning ${chalk.yellow(branch)} from GitLab...`).start();
77
124
 
78
- const spinner = ora(`Cloning ${chalk.green(branch)} from GitLab...`).start();
79
125
  try {
80
- execSync(cloneCommand, { stdio: "inherit" });
81
- spinner.succeed(`Docubook project successfully created in ${projectPath}!`);
82
- // --- clone from gitlab ---
126
+ execSync(cloneCommand, { stdio: "inherit" });
127
+ spinner.succeed(`Docubook project successfully created in ${projectPath}!`);
83
128
 
84
- // Jalankan rename hanya jika Bun terdeteksi
85
129
  if (checkBunInstalled()) {
86
130
  updatePostcssConfig(projectPath);
87
131
  } else {
88
- console.log(chalk.yellow("Skipping postcss.config.js rename because Bun is not installed."));
89
- }
90
-
91
- // const { enter } = await inquirer.prompt([
92
- // {
93
- // type: "confirm",
94
- // name: "enter",
95
- // message: "Install dependencies in the current project directory?",
96
- // default: true,
97
- // },
98
- // ]);
99
-
100
- // if (enter) {
101
- // if (checkBunInstalled()) {
102
- // console.log(chalk.green("\nBun detected. Installing dependencies with Bun..."));
103
- // execSync("bun install", { stdio: "inherit", cwd: projectPath });
104
- // } else {
105
- // console.log(chalk.green("\nInstalling dependencies with npm..."));
106
- // execSync("npm install", { stdio: "inherit", cwd: projectPath });
107
- // }
108
- // }
109
-
110
- const packageJsonPath = path.join(projectPath, "package.json");
111
- if (fs.existsSync(packageJsonPath)) {
112
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
113
- console.log(chalk.green(`\nDocubook version: ${packageJson.version}\n`));
132
+ console.log(chalk.yellow("Skipping rename postcss.config.js because Bun is not installed."));
114
133
  }
115
134
 
116
- console.log(chalk.green("\nNext steps:"));
117
- console.log(`1. Navigate to your project directory:`);
118
- console.log(` ${chalk.green(`cd ${projectDirectory}`)}`);
119
- console.log(`2. Install dependencies:`);
120
-
121
- if (checkBunInstalled()) {
122
- console.log(` ${chalk.green("bun install")}`);
123
- } else {
124
- console.log(` ${chalk.green("npm install")}`);
135
+ // Baca versi Docubook dari package.json
136
+ const packageJsonPath = path.join(projectPath, "package.json");
137
+ if (fs.existsSync(packageJsonPath)) {
138
+ const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf-8"));
139
+ const versionMessage = boxen(
140
+ chalk.yellow("DocuBook Version") + "\n\n" + chalk.white(`v${packageJson.version}`),
141
+ {
142
+ padding: 1,
143
+ margin: 1,
144
+ borderStyle: "round",
145
+ borderColor: "yellow",
146
+ }
147
+ );
148
+ console.log(versionMessage);
149
+ }
150
+
151
+ console.log(chalk.yellow("\nStarting the installation process..."));
152
+ await simulateInstallation();
153
+
154
+ try {
155
+ execSync(`${packageManager} install`, { cwd: projectPath, stdio: "inherit" });
156
+ console.log(chalk.green(`Dependencies installed successfully using ${packageManager}!`));
157
+ } catch (err) {
158
+ console.error(chalk.red(`Failed to install dependencies using ${packageManager}.`));
125
159
  }
126
- console.log(`3. Start the development server:`);
127
160
 
128
- if (checkBunInstalled()) {
129
- console.log(` ${chalk.green("bun run dev")}`);
130
- } else {
131
- console.log(` ${chalk.green("npm run dev")}`);
132
- }
161
+ const nextStepsMessage = boxen(
162
+ `Next Steps:\n\n` +
163
+ `1. Navigate to your project directory:\n ${chalk.green(`cd ${projectDirectory}`)}\n\n` +
164
+ `2. Install dependencies (if not installed automatically):\n ${chalk.green(`${packageManager} install`)}\n\n` +
165
+ `3. Start the development server:\n ${chalk.green(`${packageManager} run dev`)}`,
166
+ {
167
+ padding: 1,
168
+ margin: 1,
169
+ borderStyle: "round",
170
+ borderColor: "blue",
171
+ }
172
+ );
173
+ console.log(nextStepsMessage);
133
174
 
134
175
  process.exit(0);
135
176
  } catch (err) {
136
- spinner.fail("Error creating project:");
177
+ spinner.fail("Failed to create project:");
137
178
  console.error(err.message);
138
179
  process.exit(1);
139
180
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@docubook/create",
3
- "version": "1.6.9",
3
+ "version": "1.7.5",
4
4
  "main": "index.js",
5
5
  "type": "module",
6
6
  "bin": {
@@ -15,9 +15,12 @@
15
15
  "license": "MIT",
16
16
  "description": "CLI to create DocuBook projects",
17
17
  "dependencies": {
18
+ "boxen": "^8.0.1",
18
19
  "chalk": "^5.3.0",
20
+ "cli-progress": "^3.12.0",
19
21
  "commander": "^12.1.0",
20
22
  "degit": "^2.8.4",
23
+ "figlet": "^1.8.0",
21
24
  "inquirer": "^11.0.2",
22
25
  "ora": "^8.1.0"
23
26
  }