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.
Files changed (2) hide show
  1. package/index.mjs +99 -26
  2. 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 * as tar from "tar";
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 name = `@milkio/cookbook-${process.platform}-${os.arch()}`;
25
- let packageInfo;
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
- console.log("");
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}${name}`, {
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 !== name) continue;
39
- packageInfo = {
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 (!packageInfo) {
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 url = `${packageInfo.mirror}${name}/-/cookbook-${process.platform}-${os.arch()}-${packageInfo.json["dist-tags"].latest}.tgz`;
54
- console.log(url)
55
- consola.start(url);
56
- consola.start(color(`Downloading..`));
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 tar.extract({
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(`If you find that the co command does not exist, try restarting your Terminal or System`));
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
- mvToPathAndClean: async (workspace, filename, tempspace) => {
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)} && rm -rf ${join(tempspace)}`);
112
- else await utils.executeBash(`sudo mv ${join(workspace, filename)} ${pathChecked} && sudo chmod +x ${join(pathChecked, filename)} && sudo rm -rf ${join(tempspace)}`);
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)} && rm -rf ${join(tempspace)}`);
133
- else await utils.executeBash(`sudo mv ${join(workspace, filename)} ${pathChecked} && sudo chmod +x ${join(pathChecked, filename)} && sudo rm -rf ${join(tempspace)}`);
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.76",
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
  }