Skip to content

Commit bd33595

Browse files
authored
refactor: extract function 'copyStarter', improve vairables name (#28)
* refactor: reorganize imports * refactor: rename blog-related variables to site-related * refactor: extract function 'copyStarter' and improve function name
1 parent f9204e1 commit bd33595

File tree

2 files changed

+56
-48
lines changed

2 files changed

+56
-48
lines changed

src/log.ts

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import { Console, ConsoleConstructorOptions } from "node:console";
2+
23
import { default as picocolors } from "picocolors";
4+
35
const { bold, bgWhite, gray, bgCyan, bgYellow, bgRed, bgBlue, underline } =
46
picocolors;
57

src/main.ts

+54-48
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
1-
import { dirname, sep, resolve as pathResolve } from "node:path";
1+
import { dirname, resolve as pathResolve, sep } from "node:path";
22
import { fileURLToPath } from "node:url";
33

4-
import { Command, Option } from "commander";
54
import { spawn } from "node:child_process";
65
import { existsSync } from "node:fs";
7-
import { readdir, readFile, cp, rm, mkdir, writeFile } from "node:fs/promises";
6+
import { cp, mkdir, readdir, readFile, rm, writeFile } from "node:fs/promises";
7+
8+
import { Command, Option } from "commander";
9+
810
import { Logger } from "./log.js";
911

1012
const __filename = fileURLToPath(import.meta.url);
1113
const __dirname = dirname(__filename);
1214

1315
const logger = new Logger();
1416
logger.time("create-hexo");
17+
1518
const STARTER = "hexo-starter";
1619
const STARTER_DIR = pathResolve(__dirname, `../${STARTER}/`);
1720
const RM_FILES = [".git", ".github"];
@@ -20,50 +23,34 @@ const ADD_FILES = ["scripts/.gitkeep", "source/_drafts/.gitkeep"];
2023
type PM = "pnpm" | "npm" | "yarn" | "bun";
2124

2225
interface InitOptions {
23-
blogName: string;
24-
blogPath: string;
26+
siteName: string;
27+
sitePath: string;
2528
packageManager: PM | "auto";
2629
force: boolean;
2730
}
2831

2932
let packageJson: any;
3033
let starterVersion: string;
3134
let initOptions: InitOptions = {
32-
blogName: "hexo-site",
33-
blogPath: "./",
35+
siteName: "hexo-site",
36+
sitePath: "./",
3437
packageManager: "npm",
3538
force: false,
3639
};
3740

3841
const main = async () => {
3942
[packageJson, starterVersion] = await pre();
4043

41-
init();
44+
parseArgs();
4245

43-
checkInfo();
46+
printInfo();
4447

4548
initOptions.force
4649
? logger.warn("Running in force mode. It's dangerous!")
47-
: await checkPath(initOptions.blogPath);
50+
: await checkPath(initOptions.sitePath);
4851

4952
logger.group(`Copying \`${STARTER}\``);
50-
const [voidd, pm] = await Promise.all([
51-
cp(STARTER_DIR, initOptions.blogPath, {
52-
force: initOptions.force,
53-
recursive: true,
54-
})
55-
.then(() => {
56-
logger.log(`Copied \`${STARTER}\` to "${initOptions.blogPath}"`);
57-
})
58-
.catch((err) => {
59-
logger.error("Copy failed: ", err);
60-
process.exit(1);
61-
})
62-
.finally(() => {
63-
logger.groupEnd();
64-
}),
65-
checkPackageManager(),
66-
]);
53+
const [_, pm] = await Promise.all([copyStarter(), checkPackageManager()]);
6754
logger.groupEnd();
6855

6956
logger.group(`Installing packages via \`${pm}\``);
@@ -96,16 +83,17 @@ const pre = () => {
9683
logger.groupEnd();
9784
return Promise.all([packageJson, starterVersion]);
9885
};
99-
const init = () => {
86+
87+
const parseArgs = () => {
10088
const program = new Command(packageJson.name)
101-
.argument("[blog_directory]", "the folder that you want to load Hexo")
102-
.usage(`[blog_directory]`)
103-
.action((blog_directory: string) => {
104-
const path = blog_directory
105-
? (initOptions.blogPath = pathResolve(blog_directory))
106-
: pathResolve(initOptions.blogPath);
107-
initOptions.blogPath = path;
108-
initOptions.blogName = path.split(sep).reverse()[0];
89+
.argument("[site_directory]", "the folder that you want to load Hexo")
90+
.usage(`[site_directory]`)
91+
.action((site_directory: string) => {
92+
const path = site_directory
93+
? (initOptions.sitePath = pathResolve(site_directory))
94+
: pathResolve(initOptions.sitePath);
95+
initOptions.sitePath = path;
96+
initOptions.siteName = path.split(sep).reverse()[0];
10997
})
11098
.addOption(
11199
new Option(
@@ -132,14 +120,14 @@ const init = () => {
132120

133121
const printUsage = () => {
134122
logger.group("Usage: ");
135-
logger.l(" npm init hexo [blog_directory]", "\n");
136-
logger.l(` pnpm create hexo [blog_directory]`, "\n");
137-
logger.l(" yarn create hexo [blog_directory]", "\n");
138-
logger.l(" bun create hexo [blog_directory]", "\n");
123+
logger.l(" npm init hexo [site_directory]", "\n");
124+
logger.l(` pnpm create hexo [site_directory]`, "\n");
125+
logger.l(" yarn create hexo [site_directory]", "\n");
126+
logger.l(" bun create hexo [site_directory]", "\n");
139127
logger.groupEnd();
140128
};
141129

142-
const checkInfo = () => {
130+
const printInfo = () => {
143131
logger.group("Env Info");
144132
logger.log("runtime path: ", process.argv[0]);
145133
logger.log("runtime version: ", process.versions.node);
@@ -151,6 +139,23 @@ const checkInfo = () => {
151139
logger.groupEnd();
152140
};
153141

142+
const copyStarter = () => {
143+
return cp(STARTER_DIR, initOptions.sitePath, {
144+
force: initOptions.force,
145+
recursive: true,
146+
})
147+
.then(() => {
148+
logger.log(`Copied \`${STARTER}\` to "${initOptions.sitePath}"`);
149+
})
150+
.catch((err) => {
151+
logger.error("Copy failed: ", err);
152+
process.exit(1);
153+
})
154+
.finally(() => {
155+
logger.groupEnd();
156+
});
157+
};
158+
154159
const checkPath = (path: string) => {
155160
return readdir(path)
156161
.then((files) => {
@@ -160,11 +165,11 @@ const checkPath = (path: string) => {
160165
);
161166
process.exit(1);
162167
} else {
163-
logger.info(`Your hexo blog will be initialized in "${path}"`);
168+
logger.info(`Your hexo site will be initialized in "${path}"`);
164169
}
165170
})
166171
.catch((err) => {
167-
logger.info(`Your hexo blog will be initialized in "${path}"`);
172+
logger.info(`Your hexo site will be initialized in "${path}"`);
168173
});
169174
};
170175

@@ -196,7 +201,7 @@ const checkPackageManager = (): Promise<PM> => {
196201
const installPackage = (pm: string) => {
197202
return new Promise((resolve, reject) => {
198203
const child = spawn(pm, ["install"], {
199-
cwd: initOptions.blogPath,
204+
cwd: initOptions.sitePath,
200205
shell: true,
201206
});
202207
child.stdout?.setEncoding("utf8");
@@ -224,11 +229,11 @@ const installPackage = (pm: string) => {
224229
};
225230

226231
const post = () => {
227-
const ls: any[] = [];
232+
const ls: Array<Promise<unknown>> = [];
228233

229234
RM_FILES.forEach((item) => {
230235
ls.push(
231-
rm(pathResolve(initOptions.blogPath, item), {
236+
rm(pathResolve(initOptions.sitePath, item), {
232237
force: true,
233238
recursive: true,
234239
})
@@ -242,7 +247,7 @@ const post = () => {
242247
});
243248

244249
ADD_FILES.forEach((item) => {
245-
const file = pathResolve(initOptions.blogPath, item);
250+
const file = pathResolve(initOptions.sitePath, item);
246251
const dir = dirname(file);
247252

248253
ls.push(
@@ -263,8 +268,9 @@ const post = () => {
263268

264269
return Promise.all(ls);
265270
};
271+
266272
const end = async () => {
267-
logger.group("Finshed!");
273+
logger.group("Finished!");
268274
logger.info("Enjoy yourself!", "\n");
269275
logger.groupEnd();
270276
logger.timeEnd("create-hexo");

0 commit comments

Comments
 (0)