1 | "use strict";
|
2 | var __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 | };
|
9 | Object.defineProperty(exports, "__esModule", { value: true });
|
10 | const net_1 = require("@xmcl/net");
|
11 | const parser = __importStar(require("fast-html-parser"));
|
12 | const index_1 = require("./index");
|
13 | var ForgeWebPage;
|
14 | (function (ForgeWebPage) {
|
15 | |
16 |
|
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 |
|
82 |
|
83 |
|
84 |
|
85 |
|
86 |
|
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 = {}));
|
108 | index_1.ForgeInstaller.VersionMeta = index_1.ForgeInstaller.VersionMeta || {};
|
109 | index_1.ForgeInstaller.VersionMeta.from = ForgeWebPage.Version.to;
|
110 |
|
\ | No newline at end of file |