Skip to content
This repository was archived by the owner on May 9, 2023. It is now read-only.

Commit 4e4be90

Browse files
Update export
1 parent 49885de commit 4e4be90

File tree

7 files changed

+137
-148
lines changed

7 files changed

+137
-148
lines changed

.github/workflows/search_versions.yaml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,10 @@ jobs:
5757
with:
5858
node-version: 18.x
5959

60-
- name: Install Index-pages
61-
run: sudo npm i -g index-pages@latest
60+
- run: npm ci
6261

6362
- name: Update files
64-
run: node static_version.mjs
65-
66-
- name: Create index.html
67-
run: apindex versions/
63+
run: npm run export
6864

6965
- name: Upload artifact
7066
uses: actions/upload-pages-artifact@v1

package-lock.json

Lines changed: 25 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
"scripts": {
1919
"dev": "nodemon -e ts,js -w src/**/* src/api.ts",
2020
"search": "ts-node src/fetchVersion/index.ts",
21-
"export": "ts-node src/export.ts",
21+
"export": "ts-node src/exports.ts && apindex versions/",
2222
"build": "tsc"
2323
},
2424
"repository": {
@@ -52,6 +52,7 @@
5252
"@types/yargs": "^17.0.11",
5353
"adm-zip": "^0.5.9",
5454
"cli-color": "^2.0.3",
55+
"index-pages": "^1.0.4",
5556
"nodemon": "^2.0.19",
5657
"ts-node": "^10.9.1",
5758
"typescript": "^4.7.4"

src/db/paper.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,20 @@ app.get("/", ({res}) => paper.find().lean().then(data => res.json(data)));
2323
app.get("/latest", ({res}) => paper.findOne({latest: true}).lean().then(data => res.json(data)));
2424
app.get("/search", async (req, res) => {
2525
let version = req.query.version as string;
26-
if (!version) return res.status(400).json({error: "No version specified"});
27-
const versionDB = await paper.findOne({version}).lean();
28-
if (!versionDB) return res.status(404).json({error: "Version not found"});
29-
return res.json(versionDB);
26+
if (!version) return res.status(400).json({erro: "Not allowd blank version"});
27+
let build = parseInt(req.query.build as string);
28+
if (isNaN(build)) build = undefined;
29+
if (!!build) {
30+
const info = await paper.findOne({
31+
version,
32+
build
33+
});
34+
if (!info) return res.status(400).json({error: "version and build not exists"});
35+
return res.json(info);
36+
}
37+
const info = await paper.findOne({
38+
version
39+
});
40+
if (!info) return res.status(400).json({error: "version not exists"});
41+
return res.json(info);
3042
});

src/exports.ts

Lines changed: 76 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,76 @@
1-
import * as path from "node:path";
2-
import { writeFile } from "node:fs/promises";
3-
import { bedrock } from "./db/bedrock";
4-
import { java } from "./db/java";
5-
import { pocketmine } from "./db/pocketmine";
6-
import { spigot } from "./db/spigot";
7-
import { powernukkit } from "./db/powernukkit";
8-
import { paper } from "./db/paper";
9-
10-
const exportVersions = () => Promise.all([
11-
bedrock.find().lean(),
12-
java.find().lean(),
13-
pocketmine.find().lean(),
14-
spigot.find().lean(),
15-
paper.find().lean(),
16-
powernukkit.find().lean()
17-
]).then(([bedrock, java, pocketmine, spigot, paper, powernukkit]) => JSON.stringify({bedrock, java, pocketmine, spigot, paper, powernukkit}, (key, value)=>key==="__v"?undefined:key==="_id"?undefined:value, 2));
18-
19-
const outputFile = process.env.OUTPUT?path.resolve(process.env.OUTPUT):path.join(process.cwd(), "versions.json");
20-
exportVersions().then(res => writeFile(outputFile, /\.md$/.test(outputFile)?`#Result\n\n\`\`\`json\n${res}\n\`\`\`\n`:res)).then(() => {console.log("File save in '%s' path.", outputFile); process.exit(0)});
1+
import fsOld from "node:fs";
2+
import path from "node:path";
3+
import fs from "node:fs/promises";
4+
import { findVersion as getVersions, bedrock, java, paper, pocketmine, powernukkit, spigot } from "./index";
5+
6+
const rootVersions = path.join(process.cwd(), "versions");
7+
const Bedrock = path.join(rootVersions, "bedrock");
8+
const Pocketmine = path.join(rootVersions, "pocketmine");
9+
const Powernukkit = path.join(rootVersions, "powernukkit");
10+
const Java = path.join(rootVersions, "java");
11+
const Spigot = path.join(rootVersions, "spigot");
12+
const Paper = path.join(rootVersions, "paper");
13+
14+
(async function(){
15+
if (!fsOld.existsSync(rootVersions)) await fs.mkdir(rootVersions, {recursive: true});
16+
if (!fsOld.existsSync(Bedrock)) await fs.mkdir(Bedrock, {recursive: true});
17+
if (!fsOld.existsSync(Pocketmine)) await fs.mkdir(Pocketmine, {recursive: true});
18+
if (!fsOld.existsSync(Powernukkit)) await fs.mkdir(Powernukkit, {recursive: true});
19+
if (!fsOld.existsSync(Java)) await fs.mkdir(Java, {recursive: true});
20+
if (!fsOld.existsSync(Spigot)) await fs.mkdir(Spigot, {recursive: true});
21+
if (!fsOld.existsSync(Paper)) await fs.mkdir(Paper, {recursive: true});
22+
23+
const bedrockData = await getVersions<bedrock[]>("bedrock", "all", true);
24+
fs.writeFile(path.join(Bedrock, "latest.json"), JSON.stringify(bedrockData.find(release => release.latest), null, 2));
25+
fs.writeFile(path.join(Bedrock, "all.json"), JSON.stringify(bedrockData, null, 2));
26+
await Promise.all(bedrockData.map(async releases => {
27+
const version = path.join(Bedrock, `${releases.version}.json`);
28+
await fs.writeFile(version, JSON.stringify(releases, null, 2));
29+
await fs.utimes(version, new Date(releases.date), new Date(releases.date));
30+
}));
31+
32+
const PocketmineData = await getVersions<pocketmine[]>("pocketmine", "all", true);
33+
fs.writeFile(path.join(Pocketmine, "latest.json"), JSON.stringify(PocketmineData.find(release => release.latest), null, 2));
34+
fs.writeFile(path.join(Pocketmine, "all.json"), JSON.stringify(PocketmineData, null, 2));
35+
await Promise.all(PocketmineData.map(async releases => {
36+
const version = path.join(Pocketmine, `${releases.version}.json`);
37+
await fs.writeFile(version, JSON.stringify(releases, null, 2));
38+
await fs.utimes(version, new Date(releases.date), new Date(releases.date));
39+
}));
40+
41+
const PowernukkitData = await getVersions<powernukkit[]>("powernukkit", "all", true);
42+
fs.writeFile(path.join(Powernukkit, "latest.json"), JSON.stringify(PowernukkitData.find(release => release.latest), null, 2));
43+
fs.writeFile(path.join(Powernukkit, "all.json"), JSON.stringify(PowernukkitData, null, 2));
44+
await Promise.all(PowernukkitData.map(async releases => {
45+
const version = path.join(Powernukkit, `${releases.version}.json`);
46+
await fs.writeFile(version, JSON.stringify(releases, null, 2));
47+
await fs.utimes(version, new Date(releases.date), new Date(releases.date));
48+
}));
49+
50+
const JavaData = await getVersions<java[]>("java", "all", true);
51+
fs.writeFile(path.join(Java, "latest.json"), JSON.stringify(JavaData.find(release => release.latest), null, 2));
52+
fs.writeFile(path.join(Java, "all.json"), JSON.stringify(JavaData, null, 2));
53+
await Promise.all(JavaData.map(async releases => {
54+
const version = path.join(Java, `${releases.version}.json`);
55+
await fs.writeFile(version, JSON.stringify(releases, null, 2));
56+
await fs.utimes(version, new Date(releases.date), new Date(releases.date));
57+
}));
58+
59+
const SpigotData = await getVersions<spigot[]>("spigot", "all", true);
60+
fs.writeFile(path.join(Spigot, "latest.json"), JSON.stringify(SpigotData.find(release => release.latest), null, 2));
61+
fs.writeFile(path.join(Spigot, "all.json"), JSON.stringify(SpigotData, null, 2));
62+
await Promise.all(SpigotData.map(async releases => {
63+
const version = path.join(Spigot, `${releases.version}.json`);
64+
await fs.writeFile(version, JSON.stringify(releases, null, 2));
65+
await fs.utimes(version, new Date(releases.date), new Date(releases.date));
66+
}));
67+
68+
const PaperData = await getVersions<paper[]>("paper", "all", true);
69+
fs.writeFile(path.join(Paper, "latest.json"), JSON.stringify(PaperData.find(release => release.latest), null, 2));
70+
fs.writeFile(path.join(Paper, "all.json"), JSON.stringify(PaperData, null, 2));
71+
await Promise.all(PaperData.map(async releases => {
72+
const version = path.join(Paper, `${releases.version}_${releases.build}.json`);
73+
await fs.writeFile(version, JSON.stringify(releases, null, 2));
74+
await fs.utimes(version, new Date(releases.date), new Date(releases.date));
75+
}));
76+
})();

src/index.ts

Lines changed: 16 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import type { paperSchema } from "./db/paper";
55
import type { powernukkitSchema } from "./db/powernukkit";
66
import type { pocketminemmpSchema } from "./db/pocketmine";
77
import type { spigotSchema } from "./db/spigot";
8-
const versionURLs = ["https://mcpeversion-static.sirherobrine23.org/", "https://mcpeversions.sirherobrine23.org", "https://mcpeversions_backup.sirherobrine23.org"];
98

109
export type BdsCorePlatforms = "bedrock"|"java"|"paper"|"powernukkit"|"pocketmine"|"spigot";
1110
export type all = bedrockSchema|javaSchema|powernukkitSchema|paperSchema|pocketminemmpSchema|spigotSchema
@@ -20,16 +19,19 @@ export type {
2019

2120
export async function findVersion<PlatformSchema = all[]>(bdsPlaform: BdsCorePlatforms): Promise<PlatformSchema>;
2221
export async function findVersion<PlatformSchema = all>(bdsPlaform: BdsCorePlatforms, version: string|boolean): Promise<PlatformSchema>;
23-
export async function findVersion<PlatformSchema = all|all[]>(bdsPlaform: BdsCorePlatforms, version?: string|boolean): Promise<PlatformSchema> {
24-
for (let url of versionURLs) {
22+
export async function findVersion<PlatformSchema = all>(bdsPlaform: BdsCorePlatforms, version: string|boolean, ignoreStatic: boolean): Promise<PlatformSchema>;
23+
export async function findVersion<PlatformSchema = all|all[]>(bdsPlaform: BdsCorePlatforms, version?: string|boolean, ignoreStatic?: boolean): Promise<PlatformSchema> {
24+
const versionURLs = ["https://mcpeversions_backup.sirherobrine23.org", "https://mcpeversions.sirherobrine23.org"];
25+
if (!ignoreStatic) versionURLs.push("https://mcpeversion-static.sirherobrine23.org/"); else console.warn("Using dynamic APIs, some may be down!");
26+
for (let url of versionURLs.reverse()) {
2527
url += "/"+bdsPlaform;
2628
if (/static/.test(url)) {
2729
if (version === undefined) url += "/all.json";
2830
else if (typeof version === "boolean") url += "/latest.json";
2931
else url += `/${version}.json`;
30-
3132
} else {
32-
if (typeof version !== "undefined") {
33+
if (version === undefined||version === "all") url += "/";
34+
else {
3335
if (typeof version === "boolean"||version === "latest") url += "/latest";
3436
else url += `/search?version=${version}`;
3537
}
@@ -46,51 +48,29 @@ export async function findVersion<PlatformSchema = all|all[]>(bdsPlaform: BdsCor
4648
export const platformManeger = {
4749
bedrock: {
4850
async all(){return findVersion<bedrockSchema[]>("bedrock");},
49-
async find(version: string|boolean){return findVersion<bedrockSchema>("bedrock", version);},
50-
async getBedrockZip(version: string|boolean, options: {platform?: NodeJS.Platform}) {
51-
return platformManeger.bedrock.find(version).then(res => {
52-
const plaftorm = options?.platform||process.platform;
53-
if (res.url[plaftorm] === undefined) throw new Error("Platform not avaible");
54-
return httpRequests.fetchBuffer(res.url[plaftorm]);
55-
});
56-
}
51+
async find(version: string|boolean){return findVersion<bedrockSchema>("bedrock", version);}
5752
},
5853
pocketmine: {
5954
async all(){return findVersion<pocketminemmpSchema[]>("pocketmine");},
60-
async find(version: string|boolean){return findVersion<pocketminemmpSchema>("pocketmine", version);},
61-
async getPhar(version: string|boolean){
62-
return platformManeger.pocketmine.find(version).then(res => httpRequests.fetchBuffer(res.url));
63-
},
64-
async getPhp(query?: {os?: string, arch?: string}){
65-
let os = RegExp(query?.os||"(win32|windows|linux|macos|mac)");
66-
let arch = RegExp(query?.arch||".*");
67-
const rele = await httpRequests.GithubRelease("The-Bds-Maneger/Build-PHP-Bins");
68-
for (const release of rele) {
69-
for (const asset of release.assets) {
70-
if (os.test(asset.name) && arch.test(asset.name)) return {buffer: await httpRequests.fetchBuffer(asset.browser_download_url), name: asset.name};
71-
}
72-
}
73-
throw new Error("No bin found");
74-
}
55+
async find(version: string|boolean){return findVersion<pocketminemmpSchema>("pocketmine", version);}
7556
},
7657
powernukkit: {
7758
async all(){return findVersion<powernukkitSchema[]>("powernukkit");},
78-
async find(version: string|boolean){return findVersion<powernukkitSchema>("powernukkit", version);},
79-
async getJar(version: string|boolean){return platformManeger.powernukkit.find(version).then(res => httpRequests.fetchBuffer(res.url))}
59+
async find(version: string|boolean){return findVersion<powernukkitSchema>("powernukkit", version);}
8060
},
8161
java: {
8262
async all(){return findVersion<javaSchema[]>("java");},
83-
async find(version: string|boolean){return findVersion<javaSchema>("java", version);},
84-
async getJar(version: string|boolean){return platformManeger.java.find(version).then(res => httpRequests.fetchBuffer(res.url))}
63+
async find(version: string|boolean){return findVersion<javaSchema>("java", version);}
8564
},
8665
spigot: {
8766
async all(){return findVersion<spigotSchema[]>("spigot");},
88-
async find(version: string|boolean){return findVersion<spigotSchema>("spigot", version);},
89-
async getJar(version: string|boolean){return platformManeger.spigot.find(version).then(res => httpRequests.fetchBuffer(res.url))}
67+
async find(version: string|boolean){return findVersion<spigotSchema>("spigot", version);}
9068
},
9169
paper: {
9270
async all(){return findVersion<paperSchema[]>("paper");},
93-
async find(version: string|boolean){return findVersion<paperSchema>("paper", version);},
94-
async getJar(version: string|boolean){return platformManeger.paper.find(version).then(res => httpRequests.fetchBuffer(res.url))}
71+
async find(version: string|boolean, build?: number|string){
72+
if (!build) build = (await findVersion<paperSchema[]>("paper")).find(ver => ver.version === version)?.build;
73+
return findVersion<paperSchema>("paper", `${version}${!!build?"_"+build:""}`);
74+
}
9575
}
9676
};

static_version.mjs

Lines changed: 0 additions & 81 deletions
This file was deleted.

0 commit comments

Comments
 (0)