UNPKG

4.93 kBJavaScriptView Raw
1"use strict";
2var __importStar = (this && this.__importStar) || function (mod) {
3 if (mod && mod.__esModule) return mod;
4 var result = {};
5 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
6 result["default"] = mod;
7 return result;
8};
9Object.defineProperty(exports, "__esModule", { value: true });
10const net_1 = require("@xmcl/net");
11const parser = __importStar(require("fast-html-parser"));
12const index_1 = require("./index");
13var ForgeWebPage;
14(function (ForgeWebPage) {
15 function parseWebPage(content) {
16 const dom = parser.parse(content);
17 const selected = dom.querySelector(".elem-active");
18 const mcversion = selected.text;
19 return {
20 timestamp: "",
21 mcversion,
22 versions: dom.querySelector(".download-list").querySelector("tbody").querySelectorAll("tr")
23 .map((e) => {
24 const links = e.querySelector(".download-links").childNodes
25 .filter((elem) => elem.tagName === "li")
26 .map((elem) => {
27 const tt = elem.querySelector(".info-tooltip");
28 const url = tt.querySelector("a") || elem.querySelector("a");
29 return {
30 name: url.childNodes[2].rawText.trim(),
31 md5: tt.childNodes[2].text.trim(),
32 sha1: tt.childNodes[6].text.trim(),
33 path: url.attributes.href,
34 };
35 });
36 const downloadVersionElem = e.querySelector(".download-version");
37 let version;
38 let type = "common";
39 const icon = downloadVersionElem.querySelector("i");
40 if (icon) {
41 if (icon.classNames.indexOf("promo-recommended") !== -1) {
42 type = "recommended";
43 }
44 else if (icon.classNames.indexOf("promo-latest") !== -1) {
45 type = "latest";
46 }
47 else if (icon.classNames.indexOf("fa-bug") !== -1) {
48 type = "buggy";
49 }
50 version = downloadVersionElem.firstChild.text.trim();
51 }
52 else {
53 version = downloadVersionElem.text.trim();
54 }
55 const installer = links.find((l) => l.name === "Installer");
56 const universal = links.find((l) => l.name === "Universal");
57 if (installer === undefined || universal === undefined) {
58 throw new Error(`Cannot parse forge web since it missing installer and universal jar info.`);
59 }
60 const result = {
61 version,
62 "date": e.querySelector(".download-time").text.trim(),
63 "changelog": links[0],
64 installer,
65 "installer-win": links.find((l) => l.name === "Installer-win"),
66 "mdk": links.find((l) => l.name === "Mdk"),
67 universal,
68 "mcversion": mcversion,
69 type,
70 };
71 return result;
72 }),
73 };
74 }
75 /**
76 * Query the webpage content from files.minecraftforge.net.
77 *
78 * You can put the last query result to the fallback option. It will check if your old result is up-to-date.
79 * It will request a new page only when the fallback option is outdated.
80 *
81 * @param option The option can control querying minecraft version, and page caching.
82 */
83 async function getWebPage(option = {}) {
84 const mcversion = option.mcversion || "";
85 const url = mcversion === "" ? `http://files.minecraftforge.net/maven/net/minecraftforge/forge/index.html` : `http://files.minecraftforge.net/maven/net/minecraftforge/forge/index_${mcversion}.html`;
86 const page = await net_1.getIfUpdate(url, parseWebPage, option.fallback);
87 return page;
88 }
89 ForgeWebPage.getWebPage = getWebPage;
90 let Version;
91 (function (Version) {
92 function to(webPageVersion) {
93 return {
94 universal: webPageVersion.universal,
95 installer: webPageVersion.installer,
96 mcversion: webPageVersion.mcversion,
97 version: webPageVersion.version,
98 };
99 }
100 Version.to = to;
101 })(Version = ForgeWebPage.Version || (ForgeWebPage.Version = {}));
102})(ForgeWebPage = exports.ForgeWebPage || (exports.ForgeWebPage = {}));
103index_1.ForgeInstaller.VersionMeta = index_1.ForgeInstaller.VersionMeta || {};
104index_1.ForgeInstaller.VersionMeta.from = ForgeWebPage.Version.to;
105//# sourceMappingURL=forgeweb.js.map
\No newline at end of file