abao-cli 1.0.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.
package/bin/cli.js ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { program } = require("commander")
4
+
5
+ const packageConfig = require("../package.json")
6
+
7
+ const { showList } = require("../commands/list")
8
+
9
+ const { add } = require("../commands/add")
10
+
11
+ const { del } = require("../commands/del")
12
+
13
+ const { init } = require("../commands/init")
14
+
15
+ program.version(packageConfig.version).option("-v, --version")
16
+
17
+ program.name("my-command").usage("可执行命令")
18
+
19
+ program
20
+ .command("ls")
21
+ .description("查看模板列表")
22
+ .action(() => {
23
+ showList()
24
+ })
25
+
26
+ program
27
+ .command("add")
28
+ .description("添加模板")
29
+ .action(() => {
30
+ add()
31
+ })
32
+
33
+ program
34
+ .command("del")
35
+ .description("删除模板")
36
+ .action(() => {
37
+ del()
38
+ })
39
+
40
+ program
41
+ .command("init")
42
+ .description("初始化模板")
43
+ .action(() => {
44
+ init()
45
+ })
46
+
47
+ program.parse()
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env node
2
+
3
+
4
+ const inquirer = require("inquirer")
5
+ const { readFile, writeFile } = require("../utils/file")
6
+ const { showTable } = require("../utils/table")
7
+ exports.add = async () => {
8
+
9
+ const tempJson = await readFile()
10
+
11
+ const question = [
12
+ {
13
+ name: "name",
14
+ type: "input",
15
+ message: "请输入模板名称",
16
+ validate(val) {
17
+ if (val === '') return '模板名称必填'
18
+ else if (tempJson.some(item => item.name === val)) return '模板名称已存在'
19
+ else return true
20
+ }
21
+ },
22
+ {
23
+ name: "git_url",
24
+ type: "input",
25
+ message: "请输入git源地址",
26
+ validate(val) {
27
+ if (val === '') return '地址名称必填'
28
+ else return true
29
+ }
30
+ },
31
+ {
32
+ name: "branch",
33
+ type: "input",
34
+ message: "请输入分支(默认为master)",
35
+ filter: (val => {
36
+ if (val === "") return "master"
37
+ else return val
38
+ })
39
+ }
40
+ ]
41
+
42
+ inquirer.prompt(question).then(async answer => {
43
+ const result = tempJson.concat(answer)
44
+ const isComplete = await writeFile(result);
45
+ if (isComplete) showTable(result)
46
+ })
47
+ }
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env node
2
+
3
+ const inquirer = require("inquirer")
4
+ const { readFile, writeFile } = require("../utils/file")
5
+ const { showTable } = require("../utils/table")
6
+
7
+ exports.del = async () => {
8
+ const tempJson = await readFile()
9
+ const nameArray = (tempJson || []).map(item => item.name)
10
+
11
+ if (nameArray.length === 0) return console.log("不存在可以删除的模板")
12
+
13
+ const question = [
14
+ {
15
+ name: "name",
16
+ type: "list",
17
+ choices: nameArray,
18
+ message: "请选择你要删除的模板"
19
+ }
20
+ ]
21
+
22
+ inquirer.prompt(question).then(async answer => {
23
+ const { name } = answer
24
+ const result = (tempJson || []).filter(item => item.name !== name)
25
+ const isComplete = await writeFile(result)
26
+ if (isComplete) {
27
+ showTable(result)
28
+ }
29
+ })
30
+ }
@@ -0,0 +1,44 @@
1
+ #!/usr/bin/env node
2
+
3
+ const path = require("path")
4
+ const ora = require("ora")
5
+ const inquirer = require("inquirer")
6
+ const download = require("download-git-repo")
7
+ const { readFile } = require("../utils/file")
8
+ // 定义一个loading
9
+ const spinner = ora("Generate ing...");
10
+
11
+ exports.init = async () => {
12
+ const tempJson = await readFile()
13
+ const nameArray = (tempJson || []).map(item => item.name)
14
+
15
+ const question = [
16
+ {
17
+ name: "name",
18
+ type: "list",
19
+ choices: nameArray,
20
+ message: "请选择你要生成的模板"
21
+ }
22
+ ]
23
+
24
+ inquirer.prompt(question).then(async answer => {
25
+ const { name } = answer
26
+ const { git_url, branch } = tempJson.find(item => item.name === name)
27
+
28
+ console.log('\n');
29
+ // console.log(`direct:${git_url}#${branch}`);
30
+ spinner.start();
31
+ download(`direct:${git_url}#${branch}`, path.join(__dirname, '../test'), { clone: true }, err => {
32
+ if (err) {
33
+ console.log(err.message);
34
+ console.log('\n');
35
+ // loading 失败
36
+ spinner.fail("Generate failed");
37
+ } else {
38
+ console.log('\n');
39
+ // loading 成功
40
+ spinner.succeed("Generate success");
41
+ }
42
+ })
43
+ })
44
+ }
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+
3
+ const { readFile } = require("../utils/file")
4
+ const { showTable } = require("../utils/table")
5
+
6
+ exports.showList = async () => {
7
+ const result = await readFile()
8
+ showTable(result)
9
+ }
package/package.json ADDED
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "abao-cli",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "main": "index.js",
6
+ "bin": "./index.js",
7
+ "scripts": {
8
+ "publish": "npm publish"
9
+ },
10
+ "keywords": [],
11
+ "author": "",
12
+ "license": "ISC",
13
+ "dependencies": {
14
+ "cli-table": "0.3.11",
15
+ "commander": "10.0.0",
16
+ "download-git-repo": "3.0.2",
17
+ "inquirer": "8.2.5"
18
+ }
19
+ }
package/utils/file.js ADDED
@@ -0,0 +1,29 @@
1
+ const path = require("path")
2
+ const fs = require("fs")
3
+
4
+ exports.readFile = () => {
5
+ return new Promise((resolve, reject) => {
6
+ fs.readFile(path.join(__dirname, "./temp.json"), "utf-8", (err, data) => {
7
+ if (err) {
8
+ console.log(err.message)
9
+ reject()
10
+ }
11
+
12
+ const result = JSON.parse(data || null) || []
13
+ resolve(result)
14
+ })
15
+ })
16
+ }
17
+
18
+ exports.writeFile = (jsonData) => {
19
+ return new Promise((resolve, reject) => {
20
+
21
+ fs.writeFile(path.join(__dirname, "./temp.json"), JSON.stringify(jsonData), "utf-8", err => {
22
+ if (err) {
23
+ console.log(err.message);
24
+ reject()
25
+ }
26
+ resolve(true)
27
+ })
28
+ })
29
+ }
package/utils/table.js ADDED
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env node
2
+
3
+ const Table = require("cli-table")
4
+
5
+ const tableConfig = {
6
+ head: ['name', 'git_url', 'branch'],
7
+ style: {
8
+ head: ['green']
9
+ }
10
+ }
11
+
12
+ exports.showTable = (jsonData) => {
13
+ if (jsonData instanceof Array) {
14
+ const table = new Table(tableConfig)
15
+ for (const item of jsonData) {
16
+ const { name, git_url, branch } = item
17
+ table.push([name, git_url, branch])
18
+ }
19
+ console.log("\n");
20
+ console.log(table.toString())
21
+ console.log("\n");
22
+ }
23
+ }
File without changes