-
Notifications
You must be signed in to change notification settings - Fork 0
/
init.js
executable file
·122 lines (105 loc) · 3.08 KB
/
init.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
#!/usr/bin/env node
const process = require("process");
const fs = require("fs");
const http = require("https");
const readline = require("readline");
let inSrc = false;
let inPublic = false;
async function writeFile(fileName) {
console.log(`Creating ${fileName} ...`);
let url;
if (!inSrc && !inPublic) {
url =
"https://raw.githubusercontent.com/RocketCommunicationsInc/astro/main/packages/starter-kits/react-starter/" +
fileName;
} else if (inSrc && !inPublic) {
url =
"https://raw.githubusercontent.com/RocketCommunicationsInc/astro/main/packages/starter-kits/react-starter/src/" +
fileName;
} else {
url =
"https://raw.githubusercontent.com/RocketCommunicationsInc/astro/main/packages/starter-kits/react-starter/public/" +
fileName;
}
const file = fs.createWriteStream(`${fileName}`);
await fetchFile(url)
.then((res) => {
res.pipe(file);
})
.catch((err) => {
throw new Error(err);
});
}
async function fetchFile(url) {
return new Promise((resolve, reject) => {
http.get(url, (res) => {
if (res.statusCode === 200) {
resolve(res);
} else reject(`${res.statusCode} - Could not fetch file from ${url}`);
});
});
}
function changeDir(dir) {
if (!fs.existsSync(dir)) {
fs.mkdirSync(dir);
process.chdir(dir);
} else {
process.chdir(dir);
}
console.log(`Now working in ${process.cwd()}`);
}
function getAppName(query) {
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout,
});
return new Promise((resolve) =>
rl.question(query, (ans) => {
rl.close();
resolve(ans);
})
);
}
async function init() {
let appName = process.argv[2];
if (!appName) {
appName = await getAppName("Please enter a root directory name: ");
}
console.log("***** Instializing Astro React starter kit *****");
changeDir(`./${appName}`);
console.log(`Root directory ${appName} created!`);
await writeFile("package.json");
await writeFile("README.md");
await writeFile(".gitignore");
//create src dir, or change into it if it exists
changeDir("./src");
inSrc = true;
await writeFile("App.css");
await writeFile("App.js");
await writeFile("App.test.js");
await writeFile("index.css");
await writeFile("index.js");
await writeFile("reportWebVitals.js");
await writeFile("setupTests.js");
console.log(`/src directory created in ${process.cwd()}`);
//create public dir or change into it if already exists
changeDir("../");
changeDir("./public");
inPublic = true;
await writeFile("favicon.ico");
await writeFile("index.html");
await writeFile("logo512.png");
await writeFile("logo192.png");
await writeFile("manifest.json");
await writeFile("robots.txt");
console.log(`./public directory created in ${process.cwd()}`);
console.log(`Finished!`);
console.log(`******************`);
console.log(`Please run: `);
console.log(`cd ${appName}`);
console.log(`npm install`);
console.log(`npm start`);
console.log(`Thanks for using AstroUXDS!`);
console.log(`******************`);
}
init();