create-cookbook 1.0.0-alpha.76 → 1.0.0-alpha.78
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/index.mjs +99 -26
- package/package.json +3 -3
package/index.mjs
CHANGED
|
@@ -10,33 +10,40 @@ import { mkdirSync, existsSync, createWriteStream, rmSync } from "node:fs";
|
|
|
10
10
|
import { remove } from "fs-extra";
|
|
11
11
|
import consola from "consola";
|
|
12
12
|
import gradient from "gradient-string";
|
|
13
|
-
import
|
|
13
|
+
import compressing from "compressing";
|
|
14
14
|
|
|
15
15
|
const colorLong = gradient(["cyan", "green"]);
|
|
16
16
|
const color = gradient(["cyan", "#2d9b87"]);
|
|
17
17
|
|
|
18
18
|
(async () => {
|
|
19
|
+
const args = process.argv.slice(2);
|
|
20
|
+
let version = "latest";
|
|
21
|
+
if (args[0] && args[0].startsWith("--version=")) {
|
|
22
|
+
version = args[0].slice(10);
|
|
23
|
+
}
|
|
19
24
|
let workspace = process.platform === "win32" ? join(process.env.USERPROFILE, ".cookbook") : join(process.env.HOME, ".cookbook");
|
|
20
25
|
let tempspace = process.platform === "win32" ? join(process.env.USERPROFILE, ".cookbook", ".temp") : join(process.env.HOME, ".cookbook", ".temp");
|
|
21
26
|
if (!existsSync(workspace)) mkdirSync(workspace);
|
|
22
27
|
if (!existsSync(tempspace)) mkdirSync(tempspace);
|
|
23
28
|
|
|
24
|
-
const
|
|
25
|
-
|
|
29
|
+
const uiName = `@milkio/cookbook-ui`;
|
|
30
|
+
const cookbookName = `@milkio/cookbook-${process.platform}-${os.arch()}`;
|
|
31
|
+
let uiPackageInfo;
|
|
32
|
+
let cookbookPackageInfo;
|
|
33
|
+
console.log("");
|
|
26
34
|
for (const mirror of ["https://registry.npmjs.org/", "https://registry.npmmirror.com/", "https://mirrors.cloud.tencent.com/npm/", "https://cdn.jsdelivr.net/npm/"]) {
|
|
27
35
|
try {
|
|
28
|
-
|
|
29
|
-
consola.start(color(`Checking (${mirror}${name})..`));
|
|
36
|
+
consola.start(color(`Checking (${mirror}${uiName})..`));
|
|
30
37
|
const controller = new AbortController();
|
|
31
38
|
const timeout = setTimeout(() => controller.abort(), 8000);
|
|
32
|
-
const response = await fetch(`${mirror}${
|
|
39
|
+
const response = await fetch(`${mirror}${uiName}`, {
|
|
33
40
|
signal: controller.signal
|
|
34
41
|
});
|
|
35
42
|
clearTimeout(timeout);
|
|
36
43
|
if (response.status !== 200) continue;
|
|
37
44
|
const json = await response.json();
|
|
38
|
-
if (json.name !==
|
|
39
|
-
|
|
45
|
+
if (json.name !== uiName) continue;
|
|
46
|
+
uiPackageInfo = {
|
|
40
47
|
mirror,
|
|
41
48
|
json,
|
|
42
49
|
};
|
|
@@ -45,29 +52,68 @@ const color = gradient(["cyan", "#2d9b87"]);
|
|
|
45
52
|
continue;
|
|
46
53
|
}
|
|
47
54
|
}
|
|
48
|
-
if (!
|
|
55
|
+
if (!uiPackageInfo) {
|
|
49
56
|
consola.error(color("Network connection failed!"));
|
|
50
57
|
exit(1);
|
|
51
58
|
}
|
|
59
|
+
for (const mirror of ["https://registry.npmjs.org/", "https://registry.npmmirror.com/", "https://mirrors.cloud.tencent.com/npm/", "https://cdn.jsdelivr.net/npm/"]) {
|
|
60
|
+
try {
|
|
61
|
+
consola.start(color(`Checking (${mirror}${cookbookName})..`));
|
|
62
|
+
const controller = new AbortController();
|
|
63
|
+
const timeout = setTimeout(() => controller.abort(), 8000);
|
|
64
|
+
const response = await fetch(`${mirror}${cookbookName}`, {
|
|
65
|
+
signal: controller.signal
|
|
66
|
+
});
|
|
67
|
+
clearTimeout(timeout);
|
|
68
|
+
if (response.status !== 200) continue;
|
|
69
|
+
const json = await response.json();
|
|
70
|
+
if (json.name !== cookbookName) continue;
|
|
71
|
+
cookbookPackageInfo = {
|
|
72
|
+
mirror,
|
|
73
|
+
json,
|
|
74
|
+
};
|
|
75
|
+
break;
|
|
76
|
+
} catch (error) {
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (!cookbookPackageInfo) {
|
|
81
|
+
consola.error(color("Network connection failed!"));
|
|
82
|
+
exit(1);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
const uiUrl = `${cookbookPackageInfo.mirror}${uiName}/-/cookbook-ui-${version === 'latest' ? uiPackageInfo.json["dist-tags"].latest : version}.tgz`;
|
|
86
|
+
consola.start(uiUrl);
|
|
87
|
+
consola.start(color(`Downloading Cookbook UI (${uiUrl})..`));
|
|
88
|
+
await utils.downloadFile(uiUrl, tempspace, "ui.tgz");
|
|
89
|
+
consola.success(color("Downloaded!"));
|
|
90
|
+
const uiExtractPromise = ((async () => {
|
|
91
|
+
if (!existsSync(join(tempspace, "ui"))) mkdirSync(join(tempspace, "ui"))
|
|
92
|
+
await compressing.tgz.uncompress(join(tempspace, "ui.tgz"), join(tempspace, "ui"));
|
|
93
|
+
}))();
|
|
52
94
|
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
consola.start(
|
|
56
|
-
|
|
57
|
-
await utils.downloadFile(url, tempspace, "cookbook.tgz");
|
|
95
|
+
const cookbookUrl = `${cookbookPackageInfo.mirror}${cookbookName}/-/cookbook-${process.platform}-${os.arch()}-${version === 'latest' ? cookbookPackageInfo.json["dist-tags"].latest : version}.tgz`;
|
|
96
|
+
consola.start(cookbookUrl);
|
|
97
|
+
consola.start(color(`Downloading Cookbook Core (${cookbookUrl})..`));
|
|
98
|
+
await utils.downloadFile(cookbookUrl, tempspace, "cookbook.tgz");
|
|
58
99
|
consola.success(color("Downloaded!"));
|
|
100
|
+
const cookbookExtractPromise = ((async () => {
|
|
101
|
+
await compressing.tgz.uncompress(join(tempspace, "cookbook.tgz"), tempspace);
|
|
102
|
+
}))();
|
|
59
103
|
|
|
60
104
|
consola.start(color(`Extracting..`));
|
|
61
|
-
await
|
|
62
|
-
file: join(tempspace, "cookbook.tgz"),
|
|
63
|
-
cwd: tempspace,
|
|
64
|
-
});
|
|
65
|
-
await utils.mvToPathAndClean(join(tempspace, "package"), process.platform === "win32" ? "co.exe" : "co", tempspace);
|
|
105
|
+
await Promise.all([uiExtractPromise, cookbookExtractPromise]);
|
|
66
106
|
consola.success(color("Extracted!"));
|
|
67
107
|
|
|
108
|
+
consola.success(color("Installing.."));
|
|
109
|
+
await utils.mvToPathAndInstall(join(tempspace, "package"), process.platform === "win32" ? "co.exe" : "co", tempspace);
|
|
110
|
+
await utils.mvUIDir(join(tempspace, "ui", "package"));
|
|
111
|
+
await utils.tempspaceClean(tempspace);
|
|
112
|
+
consola.success(color("Installed!"));
|
|
113
|
+
|
|
68
114
|
console.log("");
|
|
69
115
|
consola.info(color(`Try run: co version`));
|
|
70
|
-
consola.info(colorLong(
|
|
116
|
+
consola.info(colorLong(`* If you find that the co command does not exist, try restarting your Terminal or System`));
|
|
71
117
|
})();
|
|
72
118
|
|
|
73
119
|
const utils = {
|
|
@@ -78,7 +124,35 @@ const utils = {
|
|
|
78
124
|
const fileStream = createWriteStream(destination, { flags: "wx" });
|
|
79
125
|
await finished(Readable.fromWeb(res.body).pipe(fileStream));
|
|
80
126
|
},
|
|
81
|
-
|
|
127
|
+
mvUIDir: async (tempspace) => {
|
|
128
|
+
if (!existsSync(process.env.HOME || process.env.USERPROFILE, ".cookbook")) mkdirSync(join(process.env.HOME || process.env.USERPROFILE, ".cookbook"));
|
|
129
|
+
if (process.platform === "win32") {
|
|
130
|
+
if (existsSync(join(process.env.USERPROFILE, ".cookbook", 'ui'))) await utils.executePowershell(`Remove-Item -Recurse -Force "${join(process.env.USERPROFILE, ".cookbook", 'ui')}";`);
|
|
131
|
+
await utils.executePowershell(`Move-Item -Path "${join(tempspace)}" -Destination "${join(process.env.USERPROFILE, ".cookbook", 'ui')}" -Force;`);
|
|
132
|
+
return;
|
|
133
|
+
}
|
|
134
|
+
if (process.platform === "linux") {
|
|
135
|
+
if (existsSync(join(process.env.HOME, ".cookbook", 'ui'))) await utils.executeBash(`rm -rf "${join(process.env.HOME, ".cookbook", 'ui')}";`);
|
|
136
|
+
await utils.executeBash(`mv "${join(tempspace)}" "${join(process.env.HOME, ".cookbook", 'ui')}"`);
|
|
137
|
+
}
|
|
138
|
+
if (process.platform === "darwin") {
|
|
139
|
+
if (existsSync(join(process.env.HOME, ".cookbook", 'ui'))) await utils.executeBash(`rm -rf "${join(process.env.HOME, ".cookbook", 'ui')}";`);
|
|
140
|
+
await utils.executeBash(`mv "${join(tempspace)}" "${join(process.env.HOME, ".cookbook", 'ui')}"`);
|
|
141
|
+
}
|
|
142
|
+
},
|
|
143
|
+
tempspaceClean: async (tempspace) => {
|
|
144
|
+
if (process.platform === "win32") {
|
|
145
|
+
if (existsSync(join(tempspace))) await utils.executePowershell(`Remove-Item -Recurse -Force "${join(tempspace)}";`);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
if (process.platform === "linux") {
|
|
149
|
+
if (existsSync(join(tempspace))) await utils.executeBash(`rm -rf "${join(tempspace)}"`);
|
|
150
|
+
}
|
|
151
|
+
if (process.platform === "darwin") {
|
|
152
|
+
if (existsSync(join(tempspace))) await utils.executeBash(`rm -rf "${join(tempspace)}"`);
|
|
153
|
+
}
|
|
154
|
+
},
|
|
155
|
+
mvToPathAndInstall: async (workspace, filename, tempspace) => {
|
|
82
156
|
if (process.platform === "win32") {
|
|
83
157
|
await new Promise((resolve) => setTimeout(resolve, 500));
|
|
84
158
|
if (!(process.env.PATH.includes(`${join(process.env.USERPROFILE, ".cookbook")};`) || process.env.PATH.includes(`;${join(process.env.USERPROFILE, ".cookbook")}`) || process.env.PATH === `${join(process.env.USERPROFILE, ".cookbook")}`)) {
|
|
@@ -87,7 +161,6 @@ const utils = {
|
|
|
87
161
|
if (!existsSync(process.env.USERPROFILE, ".cookbook")) mkdirSync(process.env.USERPROFILE, ".cookbook");
|
|
88
162
|
if (existsSync(join(process.env.USERPROFILE, ".cookbook", filename))) rmSync(join(process.env.USERPROFILE, ".cookbook", filename));
|
|
89
163
|
await utils.executePowershell(`Move-Item -Path "${join(workspace, filename)}" -Destination "${join(process.env.USERPROFILE, ".cookbook")}";`);
|
|
90
|
-
await utils.executePowershell(`Remove-Item -Recurse -Force "${join(tempspace)}";`);
|
|
91
164
|
return;
|
|
92
165
|
}
|
|
93
166
|
if (process.platform === "linux") {
|
|
@@ -108,8 +181,8 @@ const utils = {
|
|
|
108
181
|
if (pathChecked.startsWith("/home")) await utils.executeBash(`rm -f ${join(pathChecked, filename)}`);
|
|
109
182
|
else await utils.executeBash(`sudo rm -f ${join(pathChecked, filename)}`);
|
|
110
183
|
}
|
|
111
|
-
if (pathChecked.startsWith("/home")) await utils.executeBash(`mv ${join(workspace, filename)} ${pathChecked} && chmod +x ${join(pathChecked, filename)}
|
|
112
|
-
else await utils.executeBash(`sudo mv ${join(workspace, filename)} ${pathChecked} && sudo chmod +x ${join(pathChecked, filename)}
|
|
184
|
+
if (pathChecked.startsWith("/home")) await utils.executeBash(`mv ${join(workspace, filename)} ${pathChecked} && chmod +x ${join(pathChecked, filename)}`);
|
|
185
|
+
else await utils.executeBash(`sudo mv ${join(workspace, filename)} ${pathChecked} && sudo chmod +x ${join(pathChecked, filename)}`);
|
|
113
186
|
}
|
|
114
187
|
if (process.platform === "darwin") {
|
|
115
188
|
const paths = [join(process.env.HOME, "bin"), join(process.env.HOME, ".bin"), join(process.env.HOME, ".local", "bin"), "/usr/local/bin"];
|
|
@@ -129,8 +202,8 @@ const utils = {
|
|
|
129
202
|
if (pathChecked.startsWith("/Users")) await utils.executeBash(`rm -f ${join(pathChecked, filename)}`);
|
|
130
203
|
else await utils.executeBash(`sudo rm -f ${join(pathChecked, filename)}`);
|
|
131
204
|
}
|
|
132
|
-
if (pathChecked.startsWith("/Users")) await utils.executeBash(`mv ${join(workspace, filename)} ${pathChecked} && chmod +x ${join(pathChecked, filename)}
|
|
133
|
-
else await utils.executeBash(`sudo mv ${join(workspace, filename)} ${pathChecked} && sudo chmod +x ${join(pathChecked, filename)}
|
|
205
|
+
if (pathChecked.startsWith("/Users")) await utils.executeBash(`mv ${join(workspace, filename)} ${pathChecked} && chmod +x ${join(pathChecked, filename)}`);
|
|
206
|
+
else await utils.executeBash(`sudo mv ${join(workspace, filename)} ${pathChecked} && sudo chmod +x ${join(pathChecked, filename)}`);
|
|
134
207
|
}
|
|
135
208
|
},
|
|
136
209
|
executePowershell: async (script) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-cookbook",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
3
|
+
"version": "1.0.0-alpha.78",
|
|
4
4
|
"main": "index.mjs",
|
|
5
5
|
"bin": {
|
|
6
6
|
"create-cookbook": "./index.mjs"
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
"create-cookbook": "./index.mjs"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
+
"compressing": "^1.10.1",
|
|
12
13
|
"consola": "^3.2.3",
|
|
13
14
|
"fs-extra": "^11.2.0",
|
|
14
|
-
"gradient-string": "^3.0.0"
|
|
15
|
-
"tar": "^7.4.3"
|
|
15
|
+
"gradient-string": "^3.0.0"
|
|
16
16
|
}
|
|
17
17
|
}
|