UNPKG

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