-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwizard.js
129 lines (127 loc) · 4.02 KB
/
wizard.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
/*-----------------------------------------------------------------------------------------------------------\
| _____ _ _____ _ _ _ _____ _____ _____ __ _______ _____ _____ _____ |
| |_ _| (_) / ___| | | (_) / __ \| _ |/ __ \/ | / / __ \| _ |/ __ \|____ | |
| | | __ _ _ \ `--.| |_ _ _ __| |_ ___ `' / /'| |/' |`' / /'`| | / /`' / /'| |/' |`' / /' / / |
| | |/ _` | | `--. \ __| | | |/ _` | |/ _ \ / / | /| | / / | | / / / / | /| | / / \ \ |
| | | (_| | | /\__/ / |_| |_| | (_| | | (_) | ./ /___\ |_/ /./ /____| |_/ / ./ /___\ |_/ /./ /___.___/ / |
| \_/\__,_|_| \____/ \__|\__,_|\__,_|_|\___/ \_____/ \___/ \_____/\___/_/ \_____/ \___/ \_____/\____/ |
\-----------------------------------------------------------------------------------------------------------*/
const categories = require("./lib/extensions-categories");
const inquirer = require("inquirer");
const isUrl = require("is-url");
const path = require("path");
const fs = require("fs");
const slugify = require("slugg");
const mkdirp = require("mkdirp");
const cleanDeep = require("clean-deep");
const existingSlugs = fs.readdirSync(path.join(__dirname, "extensions"));
var createFile = require("create-file");
const questions = [
{
type: "input",
name: "name",
message: "What is the name of the extension?",
validate: function (value) {
if (!value) return "Please enter a name";
const slug = slugify(value);
if (existingSlugs.includes(slug))
return `There is already an extension directory named '${slug}'.`;
return true;
},
},
{
type: "input",
name: "description",
message: "Short description",
validate: function (value) {
if (!value) return "Please enter a description";
if (value.length > 100) return `Too long! Try shortening: ${value}`;
return true;
},
},
{
type: "input",
name: "author",
message: "Author name",
validate: function (value) {
if (!value) return "Please enter a author name";
return true;
},
},
{
type: "input",
name: "version",
message: "Version number (example: 1.0.0)",
validate: function (value) {
if (!value) return "Please enter a version number";
return true;
},
},
{
type: "input",
name: "website",
message: "Website (can be repository URL if extension has no website)",
validate: function (value) {
if (!isUrl(value)) return "Please enter a fully-qualified URL";
return true;
},
},
{
type: "list",
name: "category",
message: "Extension category",
choices: categories,
validate: function (value) {
if (!value) return "Please select a category";
},
},
{
type: "input",
name: "repository",
message: "Repository (optional)",
},
{
type: "input",
name: "keywords",
message: "Keywords (optional, comma-delimited)",
filter: function (value) {
return value.split(",").map((keyword) => keyword.trim());
},
},
{
type: "input",
name: "license",
message: "License (optional)",
},
];
inquirer
.prompt(questions)
.then(function (answers) {
const extension = cleanDeep(answers);
const slug = slugify(extension.name);
const basepath = path.join(__dirname, `extensions/${slug}`);
const jsonPath = path.join(basepath, `${slug}.json`);
mkdirp(basepath);
mkdirp(path.join(basepath, "files"));
createFile(
jsonPath,
`${JSON.stringify(extension)} \r\n`,
function (err) {},
);
console.log();
console.log(`Yay! Created ${path.relative(process.cwd(), jsonPath)}`);
console.log(`Now you just need to add an icon named ${slug}-icon.png\n`);
console.log(
`And add your extension files in ${path.relative(
process.cwd(),
basepath,
)}\n`,
);
console.log(
`Once you're done, run \`npm test\` to verify. Then open your pull request!`,
);
console.log();
})
.catch((error) => {
console.error(error);
});