create-metaving 1.0.0-alpha.0

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.
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
package/dist/index.js ADDED
@@ -0,0 +1,73 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ const node_fs_1 = __importDefault(require("node:fs"));
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const promises_1 = __importDefault(require("node:readline/promises"));
10
+ const giget_1 = require("giget");
11
+ const args = process.argv.slice(2);
12
+ if (args.includes("-h") || args.includes("--help")) {
13
+ console.log("Usage: create-metaving <project-name>");
14
+ process.exit(0);
15
+ }
16
+ const askProjectName = async () => {
17
+ const rl = promises_1.default.createInterface({ input: process.stdin, output: process.stdout });
18
+ const answer = (await rl.question("项目名称: ")).trim();
19
+ rl.close();
20
+ if (!answer) {
21
+ console.error("项目名称不能为空");
22
+ process.exit(1);
23
+ }
24
+ return answer;
25
+ };
26
+ const resolveProjectName = async () => {
27
+ if (args[0])
28
+ return args[0];
29
+ return await askProjectName();
30
+ };
31
+ const updatePackageName = (dir, name) => {
32
+ const pkgPath = node_path_1.default.join(dir, "package.json");
33
+ if (!node_fs_1.default.existsSync(pkgPath))
34
+ return;
35
+ const pkg = JSON.parse(node_fs_1.default.readFileSync(pkgPath, "utf8"));
36
+ pkg.name = name;
37
+ node_fs_1.default.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n", "utf8");
38
+ };
39
+ const cloneTemplate = async (targetDir, projectName) => {
40
+ const source = "gh:elecmonkey/metaving/playground/basic";
41
+ await (0, giget_1.downloadTemplate)(source, { dir: targetDir });
42
+ updatePackageName(targetDir, projectName);
43
+ };
44
+ const ensureDir = (dir) => {
45
+ node_fs_1.default.mkdirSync(dir, { recursive: true });
46
+ };
47
+ const isEmptyDir = (dir) => {
48
+ if (!node_fs_1.default.existsSync(dir))
49
+ return true;
50
+ const items = node_fs_1.default.readdirSync(dir);
51
+ return items.length === 0;
52
+ };
53
+ const main = async () => {
54
+ const projectName = await resolveProjectName();
55
+ const targetDir = node_path_1.default.resolve(process.cwd(), projectName);
56
+ if (!isEmptyDir(targetDir)) {
57
+ console.error(`目录非空:${targetDir}`);
58
+ process.exit(1);
59
+ }
60
+ ensureDir(targetDir);
61
+ try {
62
+ await cloneTemplate(targetDir, projectName);
63
+ }
64
+ catch (error) {
65
+ console.error(error instanceof Error ? error.message : String(error));
66
+ process.exit(1);
67
+ }
68
+ console.log(`已创建项目:${projectName}`);
69
+ };
70
+ main().catch((error) => {
71
+ console.error(error instanceof Error ? error.message : String(error));
72
+ process.exit(1);
73
+ });
package/package.json ADDED
@@ -0,0 +1,25 @@
1
+ {
2
+ "name": "create-metaving",
3
+ "version": "1.0.0-alpha.0",
4
+ "type": "commonjs",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "create-metaving": "dist/index.js"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "devDependencies": {
14
+ "@types/node": "^20.11.30"
15
+ },
16
+ "dependencies": {
17
+ "giget": "3.1.2"
18
+ },
19
+ "publishConfig": {
20
+ "access": "public"
21
+ },
22
+ "scripts": {
23
+ "build": "pnpm exec tsc -p tsconfig.json"
24
+ }
25
+ }