@polymer505/msc 1.3.0 → 1.3.1

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.js +126 -114
  2. package/package.json +1 -1
package/index.js CHANGED
@@ -50,84 +50,102 @@ if (!ramMatch) {
50
50
  }
51
51
 
52
52
  // Get vanilla kernel link
53
- function getVanillaUrl(version) {
54
- return fetch(api_link.vanilla)
55
- .then((response) => response.json())
56
- .then((data) => {
57
- const info = data.versions.find((item) => item.id === version);
58
- if (!info) {
59
- console.log(pc.red(`Error: version ${version} not found`));
60
- process.exit(1);
61
- }
62
- return info;
63
- })
64
- .then((info) => fetch(info.url))
65
- .then((response) => response.json())
66
- .then((data) => data.downloads.server.url);
53
+ async function getVanillaUrl(version) {
54
+ try {
55
+ const response = await fetch(api_link.vanilla);
56
+ const data = await response.json();
57
+ const info = data.versions.find((item) => item.id === version);
58
+ if (!info) {
59
+ console.log(pc.red(`Error: version ${version} not found`));
60
+ process.exit(1);
61
+ }
62
+ const infoUrl = await fetch(info.url);
63
+ const infoUrlData = await infoUrl.json();
64
+ return infoUrlData.downloads.server.url;
65
+ } catch (error) {
66
+ console.log(pc.red(error));
67
+ }
67
68
  }
68
69
 
69
70
  // Get paper kernel link
70
- function getPaperUrl(version) {
71
- return fetch(`${api_link.paper}/versions/${version}/builds`)
72
- .then((response) => response.json())
73
- .then((ids) => {
74
- if (ids.ok === false) {
75
- console.log(pc.red(`Error: version ${version} not found`));
76
- process.exit(1);
77
- }
78
- return ids[0].id;
79
- })
80
- .then((latestId) =>
81
- fetch(`${api_link.paper}/versions/${version}/builds/${latestId}`),
82
- )
83
- .then((response) => response.json())
84
- .then((data) => data.downloads["server:default"].url);
71
+ async function getPaperUrl(version) {
72
+ try {
73
+ const response = await fetch(
74
+ `${api_link.paper}/versions/${version}/builds`,
75
+ );
76
+ const data = await response.json();
77
+ if (data.ok === false) {
78
+ console.log(pc.red(`Error: version ${version} not found`));
79
+ process.exit(1);
80
+ }
81
+ const latestId = data[0].id;
82
+
83
+ const latestBuild = await fetch(
84
+ `${api_link.paper}/versions/${version}/builds/${latestId}`,
85
+ );
86
+
87
+ const dowloadUrlData = await latestBuild.json();
88
+ return dowloadUrlData.downloads["server:default"].url;
89
+ } catch (error) {
90
+ console.log(pc.red(error));
91
+ }
85
92
  }
86
93
 
87
94
  // Get purpur kernel link
88
- function getPurpurUrl(version) {
89
- return fetch(`${api_link.purpur}/${version}`)
90
- .then((response) => response.json())
91
- .then((data) => {
92
- if (!data.builds) {
93
- console.log(pc.red(`Error: version ${version} not found`));
94
- process.exit(1);
95
- }
96
- const latestBuild = data.builds.latest;
97
- return `${api_link.purpur}/${version}/${latestBuild}/download`;
98
- });
95
+ async function getPurpurUrl(version) {
96
+ try {
97
+ const response = await fetch(`${api_link.purpur}/${version}`);
98
+ const data = await response.json();
99
+
100
+ if (!data.builds) {
101
+ console.log(pc.red(`Error: version ${version} not found`));
102
+ process.exit(1);
103
+ }
104
+ const latestBuild = data.builds.latest;
105
+ return `${api_link.purpur}/${version}/${latestBuild}/download`;
106
+ } catch (error) {
107
+ console.log(pc.red(error));
108
+ }
99
109
  }
100
110
 
101
111
  // Get fabric kernel link
102
- function getFabricUrl(version) {
103
- return Promise.all([
104
- fetch(`${api_link.fabric}/loader/${version}`).then((response) =>
105
- response.json(),
106
- ),
107
- fetch(`${api_link.fabric}/installer`).then((response) => response.json()),
108
- ]).then(([loaderData, installerData]) => {
109
- if (!loaderData || loaderData.length === 0) {
112
+ async function getFabricUrl(version) {
113
+ try {
114
+ const [loaderData, installerData] = await Promise.all([
115
+ fetch(`${api_link.fabric}/loader/${version}`),
116
+ fetch(`${api_link.fabric}/installer`),
117
+ ]);
118
+
119
+ const loaderDataObj = await loaderData.json();
120
+ const installerDataObj = await installerData.json();
121
+
122
+ if (!loaderDataObj || loaderDataObj.length === 0) {
110
123
  console.log(pc.red(`Error: version ${version} not found`));
111
124
  process.exit(1);
112
125
  }
113
- const latestBuild = loaderData[0].loader.version;
114
- const installerVersion = installerData[0].version;
126
+ const latestBuild = loaderDataObj[0].loader.version;
127
+ const installerVersion = installerDataObj[0].version;
115
128
  return `${api_link.fabric}/loader/${version}/${latestBuild}/${installerVersion}/server/jar`;
116
- });
129
+ } catch (error) {
130
+ console.log(pc.red(error));
131
+ }
117
132
  }
118
133
 
119
134
  // Get forge kernel link
120
- function getForgeUrl(version) {
121
- return fetch(`${api_link.forge}/promotions_slim.json`)
122
- .then((response) => response.json())
123
- .then((data) => {
124
- const latestBuild = data.promos[`${version}-latest`];
125
- if (!latestBuild) {
126
- console.log(pc.red(`Error: version ${version} not found`));
127
- process.exit(1);
128
- }
129
- return `https://maven.minecraftforge.net/net/minecraftforge/forge/${version}-${latestBuild}/forge-${version}-${latestBuild}-installer.jar`;
130
- });
135
+ async function getForgeUrl(version) {
136
+ try {
137
+ const response = await fetch(`${api_link.forge}/promotions_slim.json`);
138
+ const data = await response.json();
139
+
140
+ const latestBuild = data.promos[`${version}-latest`];
141
+ if (!latestBuild) {
142
+ console.log(pc.red(`Error: version ${version} not found`));
143
+ process.exit(1);
144
+ }
145
+ return `https://maven.minecraftforge.net/net/minecraftforge/forge/${version}-${latestBuild}/forge-${version}-${latestBuild}-installer.jar`;
146
+ } catch (error) {
147
+ console.log(pc.red(error));
148
+ }
131
149
  }
132
150
 
133
151
  // Create start.sh or start.bat
@@ -137,17 +155,16 @@ function createStartSh(kernelName) {
137
155
  const ramInMb =
138
156
  unit.toUpperCase() === "G" ? parseInt(amount) * 1024 : parseInt(amount);
139
157
 
158
+ const javaFlags = `java -Xms${ramInMb}M -Xmx${ramInMb}M --add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -jar ${kernelName}.jar nogui`;
159
+
140
160
  if (process.platform === "win32") {
141
- fs.writeFileSync(
142
- "start.bat",
143
- `java -Xms${ramInMb}M -Xmx${ramInMb}M --add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -jar ${kernelName}.jar nogui`,
144
- );
145
- console.log("File start.bat created successful");
161
+ fs.writeFileSync("start.bat", `${javaFlags}`);
162
+ console.log(pc.green("File start.bat created successful"));
146
163
  } else {
147
164
  fs.writeFileSync(
148
165
  "start.sh",
149
166
  `#!/bin/bash
150
- java -Xms${ramInMb}M -Xmx${ramInMb}M --add-modules=jdk.incubator.vector -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -jar ${kernelName}.jar nogui`,
167
+ ${javaFlags}`,
151
168
  );
152
169
  fs.chmodSync("start.sh", 0o755);
153
170
  console.log(pc.green("File start.sh created successful"));
@@ -160,55 +177,50 @@ function createEulaTxt() {
160
177
  console.log(pc.green("File eula.txt created successful"));
161
178
  }
162
179
 
163
- function downloadKernel(kernelName, version, getUrlFn) {
164
- getUrlFn(version)
165
- .then((downloadUrl) => {
166
- console.log(`Downloading ${kernelName}...`);
167
- return fetch(downloadUrl);
168
- })
169
- .then((response) => {
170
- if (response.status !== 200) {
171
- console.log(
172
- pc.red(`Error downloading: server return code ${response.status}`),
173
- );
174
- process.exit(1);
175
- }
176
- const totalSize =
177
- parseInt(response.headers.get("content-length"), 10) || 0;
178
- const progressBar = new cliProgress.SingleBar(
179
- {},
180
- cliProgress.Presets.shades_classic,
181
- );
182
- progressBar.start(totalSize, 0);
183
-
184
- const nodeStream = Readable.fromWeb(response.body);
185
- nodeStream.on("data", (chunk) => {
186
- progressBar.increment(chunk.length);
187
- });
180
+ async function downloadKernel(kernelName, version, getUrlFn) {
181
+ try {
182
+ console.log(`Downloading ${kernelName}...`);
183
+ const downloadUrl = await getUrlFn(version);
184
+ const response = await fetch(downloadUrl);
188
185
 
189
- return pipeline(
190
- nodeStream,
191
- fs.createWriteStream(`${kernelName}.jar`),
192
- ).then(() => progressBar.stop());
193
- })
194
- .then(() => console.log(pc.green(`${kernelName}.jar download successful`)))
195
- .then(() => {
196
- if (kernelName === "forge") {
197
- console.log("Starting the forge installation");
198
- child_process.execSync("java -jar forge.jar --installServer", {
199
- stdio: "inherit",
200
- });
201
- fs.rmSync("forge.jar");
202
- fs.rmSync("forge.jar.log", { force: true });
203
- } else {
204
- createStartSh(kernelName);
205
- }
206
- createEulaTxt();
207
- })
208
- .catch((error) => {
209
- console.error(pc.red("Error downloading:"), error);
186
+ if (response.status !== 200) {
187
+ console.log(
188
+ pc.red(`Error downloading: server return code ${response.status}`),
189
+ );
210
190
  process.exit(1);
191
+ }
192
+ const totalSize = parseInt(response.headers.get("content-length"), 10) || 0;
193
+ const progressBar = new cliProgress.SingleBar(
194
+ {},
195
+ cliProgress.Presets.shades_classic,
196
+ );
197
+ progressBar.start(totalSize, 0);
198
+
199
+ const nodeStream = Readable.fromWeb(response.body);
200
+ nodeStream.on("data", (chunk) => {
201
+ progressBar.increment(chunk.length);
211
202
  });
203
+
204
+ await pipeline(nodeStream, fs.createWriteStream(`${kernelName}.jar`));
205
+ progressBar.stop();
206
+
207
+ console.log(pc.green(`${kernelName}.jar download successful`));
208
+
209
+ if (kernelName === "forge") {
210
+ console.log("Starting the forge installation");
211
+ child_process.execSync("java -jar forge.jar --installServer", {
212
+ stdio: "inherit",
213
+ });
214
+ fs.rmSync("forge.jar");
215
+ fs.rmSync("forge.jar.log", { force: true });
216
+ } else {
217
+ createStartSh(kernelName);
218
+ }
219
+ createEulaTxt();
220
+ } catch (error) {
221
+ console.error(pc.red("Error downloading:"), error);
222
+ process.exit(1);
223
+ }
212
224
  }
213
225
 
214
226
  switch (kernel) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polymer505/msc",
3
- "version": "1.3.0",
3
+ "version": "1.3.1",
4
4
  "description": "Command-line tool for downloading popular Minecraft server jars.",
5
5
  "repository": {
6
6
  "type": "git",