@wfcd/relics 1.0.0 → 2.0.0

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.
package/dist/index.mjs ADDED
@@ -0,0 +1,231 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/Generator.ts
5
+ import fetch from "node-fetch";
6
+ import fs from "fs/promises";
7
+ import path from "path";
8
+
9
+ // src/Config.ts
10
+ var Config = {
11
+ warframeRelicDropUrl: "https://drops.warframestat.us/data/relics.json",
12
+ warframeMarketItemUrl: "https://api.warframe.market/v1/items",
13
+ warframeItemsUrl: "https://api.warframestat.us/items/search/Relics?by=category",
14
+ warframeRelicDropInfoUrl: "https://drops.warframestat.us/data/info.json",
15
+ warframePatchlogsUrl: "https://raw.githubusercontent.com/WFCD/warframe-patchlogs/master/data/patchlogs.json"
16
+ };
17
+ var Config_default = Config;
18
+
19
+ // src/Logger.ts
20
+ import * as console from "console";
21
+ var fromString = /* @__PURE__ */ __name((logLevelIsh) => {
22
+ switch (logLevelIsh == null ? void 0 : logLevelIsh.toLowerCase()) {
23
+ case "fatal":
24
+ return -1 /* FATAL */;
25
+ case "error":
26
+ case "bad":
27
+ return 0 /* ERROR */;
28
+ case "info":
29
+ case "log":
30
+ return 1 /* LOG */;
31
+ case "debug":
32
+ return 2 /* DEBUG */;
33
+ default:
34
+ return -1 /* FATAL */;
35
+ }
36
+ }, "fromString");
37
+ var Logger = class {
38
+ logLevel = fromString(process.env.LOG_LEVEL || "fatal");
39
+ log(message) {
40
+ if (this.logLevel >= 1 /* LOG */)
41
+ console.log(message);
42
+ }
43
+ error(message) {
44
+ if (this.logLevel >= 0 /* ERROR */)
45
+ console.error(message);
46
+ }
47
+ debug(message) {
48
+ if (this.logLevel === 2 /* DEBUG */)
49
+ console.debug(message);
50
+ }
51
+ fatal(message) {
52
+ if (this.logLevel >= -1 /* FATAL */) {
53
+ console.error(`FATAL: ${message}`);
54
+ throw new Error(message);
55
+ }
56
+ }
57
+ };
58
+ __name(Logger, "Logger");
59
+ var Logger_default = new Logger();
60
+
61
+ // src/Generator.ts
62
+ var Generator = class {
63
+ relicsRaw;
64
+ wfcdItems;
65
+ wfmItems;
66
+ relics;
67
+ constructor() {
68
+ this.relics = [];
69
+ }
70
+ async generate() {
71
+ Logger_default.log("Starting Generation");
72
+ await this.fetchRawData();
73
+ this.filterWFCDRelics();
74
+ this.generateTitaniaRelics();
75
+ return this.relics;
76
+ }
77
+ async fetchRawData() {
78
+ var _a;
79
+ const relicRequest = await fetch(Config_default.warframeRelicDropUrl);
80
+ if (!relicRequest.ok) {
81
+ Logger_default.error("Failed to fetch Warframe relics from WFCD!");
82
+ return;
83
+ }
84
+ this.relicsRaw = (_a = await relicRequest.json()) == null ? void 0 : _a.relics;
85
+ const wfmRequest = await fetch(Config_default.warframeMarketItemUrl);
86
+ if (!wfmRequest.ok) {
87
+ Logger_default.error("Failed to fetch items from WFM!");
88
+ return;
89
+ }
90
+ this.wfmItems = await wfmRequest.json();
91
+ const wfcdItemRequest = await fetch(Config_default.warframeItemsUrl);
92
+ if (!wfcdItemRequest.ok) {
93
+ Logger_default.error("Failed to fetch items from WFCD! ");
94
+ return;
95
+ }
96
+ this.wfcdItems = await wfcdItemRequest.json();
97
+ }
98
+ generateTitaniaRelics() {
99
+ if (typeof this.relicsRaw === "undefined" || typeof this.wfmItems === "undefined") {
100
+ Logger_default.log("Failed to load relics/item data");
101
+ return;
102
+ }
103
+ const { length } = this.relicsRaw;
104
+ for (let i = 0; i < length; i += 1) {
105
+ const rawRelic = this.relicsRaw[i];
106
+ Logger_default.debug(`[${i + 1}/${length}] ${rawRelic.tier} ${rawRelic.relicName}`);
107
+ const relic = this.generateTitaniaRelic(rawRelic);
108
+ this.relics.push(relic);
109
+ }
110
+ Logger_default.debug(`Finished parsing ${this.relics.length} relics`);
111
+ }
112
+ async writeData(dataDir, fileName, generateMin) {
113
+ const DataDir = dataDir ?? path.join(__dirname, "..", "data");
114
+ const RelicPath = fileName ? path.join(DataDir, `${fileName}.json`) : path.join(DataDir, "Relics.json");
115
+ await fs.writeFile(RelicPath, JSON.stringify(this.relics, void 0, 4));
116
+ if (generateMin) {
117
+ const RelicMinPath = fileName ? path.join(DataDir, `${fileName}.min.json`) : path.join(DataDir, "Relics.min.json");
118
+ await fs.writeFile(RelicMinPath, JSON.stringify(this.relics));
119
+ }
120
+ }
121
+ generateTitaniaRelic(rawRelic) {
122
+ var _a, _b;
123
+ const name = `${rawRelic.tier} ${rawRelic.relicName}`;
124
+ const rewards = rawRelic.rewards.map((rawReward) => {
125
+ var _a2, _b2, _c;
126
+ const { chance } = rawReward;
127
+ const { rarity } = rawReward;
128
+ const wfmInfo = (_a2 = this.wfmItems) == null ? void 0 : _a2.payload.items.find((x) => x.item_name === rawReward.itemName);
129
+ const isSpecial = ["Forma", "Kuva", "Exilus", "Riven"].find(
130
+ (x) => rawReward.itemName.toLowerCase().includes(x.toLowerCase())
131
+ );
132
+ if (!(wfmInfo || isSpecial)) {
133
+ Logger_default.debug(`Failed to find wfm item for ${rawReward.itemName}`);
134
+ }
135
+ const item = {
136
+ name: rawReward.itemName,
137
+ uniqueName: ((_c = (_b2 = this.wfcdItems) == null ? void 0 : _b2.find((x) => x.name.toLowerCase() === `${name.trim()} Intact`.toLowerCase())) == null ? void 0 : _c.uniqueName) || "",
138
+ warframeMarket: void 0
139
+ };
140
+ if (wfmInfo) {
141
+ item.warframeMarket = { id: wfmInfo.id, urlName: wfmInfo.url_name };
142
+ }
143
+ return { rarity, chance, item };
144
+ });
145
+ let drops = [];
146
+ const wfcdItem = (_a = this.wfcdItems) == null ? void 0 : _a.find((x) => x.name.toLowerCase() === `${name.trim()} Intact`.toLowerCase());
147
+ if (!wfcdItem) {
148
+ Logger_default.error(`Failed to get WFCD item for relic: ${name}`);
149
+ }
150
+ if (wfcdItem && wfcdItem.drops) {
151
+ drops = wfcdItem.drops.map((rawDrop) => {
152
+ return { rarity: rawDrop.rarity, chance: rawDrop.chance, location: rawDrop.location };
153
+ });
154
+ }
155
+ const wfm = (_b = this.wfmItems) == null ? void 0 : _b.payload.items.find((x) => x.item_name === `${name.trim()} Relic`);
156
+ if (!wfm) {
157
+ Logger_default.error(`Failed to get relic item from wfm: ${name}`);
158
+ }
159
+ return {
160
+ name,
161
+ rewards,
162
+ locations: drops,
163
+ uniqueName: (wfcdItem == null ? void 0 : wfcdItem.uniqueName) || "",
164
+ vaultInfo: { vaulted: drops.length === 0 },
165
+ ...(wfm == null ? void 0 : wfm.id) && (wfm == null ? void 0 : wfm.url_name) && { warframeMarket: { id: wfm == null ? void 0 : wfm.id, urlName: wfm == null ? void 0 : wfm.url_name } }
166
+ };
167
+ }
168
+ filterWFCDRelics() {
169
+ var _a, _b, _c;
170
+ const before = ((_a = this.relicsRaw) == null ? void 0 : _a.length) || 0;
171
+ this.relicsRaw = (_b = this.relicsRaw) == null ? void 0 : _b.filter((x) => x.state === "Intact");
172
+ Logger_default.log(`Filtered relics to intact variants. Before: ${before} After: ${((_c = this.relicsRaw) == null ? void 0 : _c.length) || 0}`);
173
+ }
174
+ };
175
+ __name(Generator, "Generator");
176
+
177
+ // src/VersionManager.ts
178
+ import path2 from "path";
179
+ import fs2 from "fs/promises";
180
+ import fetch2 from "node-fetch";
181
+ var VersionManager = class {
182
+ versionPath;
183
+ versionRawPath;
184
+ hashPath;
185
+ constructor(dataDir) {
186
+ const DataDir = dataDir ?? path2.join(__dirname, "..", "data");
187
+ this.versionPath = path2.join(DataDir, "version.json");
188
+ this.versionRawPath = path2.join(DataDir, "version.txt");
189
+ this.hashPath = path2.join(DataDir, "hash.json");
190
+ }
191
+ async updateNeeded() {
192
+ const infoReq = await fetch2(Config_default.warframeRelicDropInfoUrl);
193
+ if (!infoReq.ok) {
194
+ Logger_default.fatal("Failed to fetch version info!");
195
+ }
196
+ const info = await infoReq.json();
197
+ try {
198
+ await fs2.access(this.hashPath);
199
+ const infoFile = JSON.parse(await fs2.readFile(this.hashPath, "utf-8"));
200
+ return infoFile.hash !== info.hash;
201
+ } catch (ex) {
202
+ return true;
203
+ }
204
+ }
205
+ async writeVersion(timestamp) {
206
+ const patchLogsReq = await fetch2(Config_default.warframePatchlogsUrl);
207
+ if (!patchLogsReq.ok) {
208
+ Logger_default.error("Failed to fetch patchlogs");
209
+ return;
210
+ }
211
+ const patchlogs = await patchLogsReq.json();
212
+ const version = patchlogs[0].name.replace(/ \+ /g, "--").replace(/[^0-9\-.]/g, "").trim();
213
+ const hashReq = await fetch2(Config_default.warframeRelicDropInfoUrl);
214
+ if (!hashReq.ok) {
215
+ Logger_default.error("Failed to fetch hashInfo");
216
+ return;
217
+ }
218
+ const hashInfo = await hashReq.json();
219
+ const versionInfo = { version, title: patchlogs[0].name };
220
+ const hashFile = { hash: hashInfo.hash, deUpdated: hashInfo.modified, timestamp };
221
+ await fs2.writeFile(this.hashPath, JSON.stringify(hashFile, void 0, 2), "utf-8");
222
+ await fs2.writeFile(this.versionPath, JSON.stringify(versionInfo, void 0, 2), "utf-8");
223
+ await fs2.writeFile(this.versionRawPath, version, "utf-8");
224
+ Logger_default.debug("Finished writing version info");
225
+ }
226
+ };
227
+ __name(VersionManager, "VersionManager");
228
+ export {
229
+ Generator,
230
+ VersionManager
231
+ };
package/package.json CHANGED
@@ -1,17 +1,20 @@
1
1
  {
2
2
  "name": "@wfcd/relics",
3
- "version": "1.0.0",
3
+ "version": "2.0.0",
4
4
  "description": "Relic Data for Warframe",
5
5
  "main": "dist/index.js",
6
6
  "files": [
7
- "dist/*",
8
- "!dist/*.ts",
9
- "!dist/spec/**",
10
- "dist/**.d.ts"
7
+ "dist/index.d.ts",
8
+ "dist/index.mjs",
9
+ "dist/index.js"
11
10
  ],
11
+ "exports": {
12
+ "import": "./dist/index.mjs",
13
+ "require": "./dist/index.js"
14
+ },
12
15
  "types": "dist/index.d.ts",
13
16
  "scripts": {
14
- "build": "tsc",
17
+ "build": "tsup ./src/index.ts ./src/Build.ts",
15
18
  "coverage": "npm test && nyc report --reporter=text-lcov | coveralls",
16
19
  "lint": "eslint .",
17
20
  "lint:fix": "eslint . --fix",
@@ -19,7 +22,7 @@
19
22
  "prepack": "npm run build",
20
23
  "start": "npm run build && node dist/Build.js",
21
24
  "test": "nyc mocha",
22
- "validate": "tsc --build --dry"
25
+ "validate": "tsc --noEmit"
23
26
  },
24
27
  "repository": {
25
28
  "type": "git",
@@ -37,19 +40,20 @@
37
40
  "homepage": "https://github.com/WFCD/warframe-relic-data#readme",
38
41
  "devDependencies": {
39
42
  "@types/chai": "^4.3.3",
40
- "@types/mocha": "^9.1.1",
41
- "@types/node": "^18.6.4",
43
+ "@types/mocha": "^10.0.0",
44
+ "@types/node": "^18.7.23",
42
45
  "@types/node-fetch": "^2.6.2",
43
46
  "@wfcd/eslint-config": "^1.2.0",
44
47
  "chai": "^4.3.6",
45
48
  "coveralls": "^3.1.1",
46
- "install-peerdeps": "^2.0.2",
49
+ "install-peerdeps": "^3.0.3",
47
50
  "mocha": "^10.0.0",
48
51
  "nyc": "^15.1.0",
49
52
  "precommit-hook": "^3.0.0",
50
53
  "ts-mocha": "^10.0.0",
51
54
  "ts-node": "^10.9.1",
52
55
  "tsconfig-paths": "^4.1.0",
56
+ "tsup": "^6.3.0",
53
57
  "typescript": "^4.7.4"
54
58
  },
55
59
  "dependencies": {
@@ -126,5 +130,16 @@
126
130
  "lint",
127
131
  "test",
128
132
  "validate"
129
- ]
133
+ ],
134
+ "tsup": {
135
+ "dts": true,
136
+ "clean": true,
137
+ "keepNames": true,
138
+ "target": "node14",
139
+ "splitting": false,
140
+ "format": [
141
+ "cjs",
142
+ "esm"
143
+ ]
144
+ }
130
145
  }
package/dist/Build.d.ts DELETED
@@ -1 +0,0 @@
1
- export {};
package/dist/Build.js DELETED
@@ -1,30 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const Generator_1 = require("./Generator");
7
- const VersionManager_1 = require("./VersionManager");
8
- const Logger_1 = __importDefault(require("./Logger"));
9
- /**
10
- * Entrypoint for the build process.
11
- */
12
- async function run() {
13
- const generator = new Generator_1.Generator();
14
- const versionManager = new VersionManager_1.VersionManager();
15
- const date = Date.now();
16
- Logger_1.default.log(`Starting build ${date}`);
17
- const needsUpdate = await versionManager.updateNeeded();
18
- if (needsUpdate) {
19
- Logger_1.default.log('Found update, starting generation');
20
- await generator.generate();
21
- await generator.writeData();
22
- await versionManager.writeVersion(date);
23
- }
24
- else {
25
- Logger_1.default.log('No updates found !');
26
- }
27
- Logger_1.default.log('Build finished.');
28
- }
29
- run().catch(Logger_1.default.error.bind(Logger_1.default));
30
- //# sourceMappingURL=Build.js.map
package/dist/Build.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"Build.js","sourceRoot":"","sources":["../src/Build.ts"],"names":[],"mappings":";;;;;AAAA,2CAAwC;AACxC,qDAAkD;AAClD,sDAA8B;AAE9B;;GAEG;AACH,KAAK,UAAU,GAAG;IAChB,MAAM,SAAS,GAAG,IAAI,qBAAS,EAAE,CAAC;IAClC,MAAM,cAAc,GAAG,IAAI,+BAAc,EAAE,CAAC;IAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,gBAAM,CAAC,GAAG,CAAC,kBAAkB,IAAI,EAAE,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,MAAM,cAAc,CAAC,YAAY,EAAE,CAAC;IACxD,IAAI,WAAW,EAAE;QACf,gBAAM,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAChD,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,SAAS,CAAC,SAAS,EAAE,CAAC;QAC5B,MAAM,cAAc,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;KACzC;SAAM;QACL,gBAAM,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;KAClC;IACD,gBAAM,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AAChC,CAAC;AAED,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAM,CAAC,CAAC,CAAC"}
package/dist/Config.d.ts DELETED
@@ -1,8 +0,0 @@
1
- declare const Config: {
2
- warframeRelicDropUrl: string;
3
- warframeMarketItemUrl: string;
4
- warframeItemsUrl: string;
5
- warframeRelicDropInfoUrl: string;
6
- warframePatchlogsUrl: string;
7
- };
8
- export default Config;
package/dist/Config.js DELETED
@@ -1,11 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const Config = {
4
- warframeRelicDropUrl: 'https://drops.warframestat.us/data/relics.json',
5
- warframeMarketItemUrl: 'https://api.warframe.market/v1/items',
6
- warframeItemsUrl: 'https://api.warframestat.us/items/search/Relics?by=category',
7
- warframeRelicDropInfoUrl: 'https://drops.warframestat.us/data/info.json',
8
- warframePatchlogsUrl: 'https://raw.githubusercontent.com/WFCD/warframe-patchlogs/master/data/patchlogs.json',
9
- };
10
- exports.default = Config;
11
- //# sourceMappingURL=Config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Config.js","sourceRoot":"","sources":["../src/Config.ts"],"names":[],"mappings":";;AAAA,MAAM,MAAM,GAAG;IACb,oBAAoB,EAAE,gDAAgD;IACtE,qBAAqB,EAAE,sCAAsC;IAC7D,gBAAgB,EAAE,6DAA6D;IAC/E,wBAAwB,EAAE,8CAA8C;IACxE,oBAAoB,EAAE,sFAAsF;CAC7G,CAAC;AAEF,kBAAe,MAAM,CAAC"}
@@ -1,41 +0,0 @@
1
- import { TitaniaRelic, WarframeMarketRoot, WFCDItem, WFCDRelic } from './Types';
2
- export declare class Generator {
3
- relicsRaw: Array<WFCDRelic> | undefined;
4
- wfcdItems: Array<WFCDItem> | undefined;
5
- wfmItems: WarframeMarketRoot | undefined;
6
- relics: Array<TitaniaRelic>;
7
- constructor();
8
- /**
9
- * Main function to fetch and generate the relic data
10
- * @returns {Promise<Array<TitaniaRelic>>} The Relics data array
11
- */
12
- generate(): Promise<Array<TitaniaRelic>>;
13
- /**
14
- * Fetches all required data from WFCD and WFM.
15
- */
16
- fetchRawData(): Promise<void>;
17
- /**
18
- * Generates the relic data
19
- * uses WFCD/warframe-drop-data to check what relics exist,
20
- * and adds information from WFCD/warframe-items and WFM
21
- */
22
- generateTitaniaRelics(): void;
23
- /**
24
- * Writes the fully generated data to disk.
25
- * @param {string} dataDir Directory to store the relic data in. Default: ../data/
26
- * @param {string} fileName Filename base ex: "Relics" becomes "Relics.json" and "Relics.min.json". Default: "Relics"
27
- * @param {boolean} generateMin True if a minified json should be generated too. Default: true
28
- */
29
- writeData(dataDir?: string, fileName?: string, generateMin?: boolean): Promise<void>;
30
- /**
31
- * Generates a single relic from all available data
32
- * @param {WFCDRelic} rawRelic relic to pull Titania data from
33
- * @returns {TitaniaRelicReward}
34
- */
35
- private generateTitaniaRelic;
36
- /**
37
- * Filters WFCD's relic data to only include Intact variants, since we just need the base.
38
- */
39
- private filterWFCDRelics;
40
- }
41
- export default Generator;
package/dist/Generator.js DELETED
@@ -1,151 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Generator = void 0;
7
- const node_fetch_1 = __importDefault(require("node-fetch"));
8
- const promises_1 = __importDefault(require("node:fs/promises"));
9
- const node_path_1 = __importDefault(require("node:path"));
10
- const Config_1 = __importDefault(require("./Config"));
11
- const Logger_1 = __importDefault(require("./Logger"));
12
- class Generator {
13
- relicsRaw;
14
- wfcdItems;
15
- wfmItems;
16
- relics;
17
- constructor() {
18
- this.relics = [];
19
- }
20
- /**
21
- * Main function to fetch and generate the relic data
22
- * @returns {Promise<Array<TitaniaRelic>>} The Relics data array
23
- */
24
- async generate() {
25
- Logger_1.default.log('Starting Generation');
26
- await this.fetchRawData();
27
- this.filterWFCDRelics();
28
- this.generateTitaniaRelics();
29
- return this.relics;
30
- }
31
- /**
32
- * Fetches all required data from WFCD and WFM.
33
- */
34
- async fetchRawData() {
35
- const relicRequest = await (0, node_fetch_1.default)(Config_1.default.warframeRelicDropUrl);
36
- if (!relicRequest.ok) {
37
- Logger_1.default.error('Failed to fetch Warframe relics from WFCD!');
38
- return;
39
- }
40
- this.relicsRaw = (await relicRequest.json())?.relics;
41
- const wfmRequest = await (0, node_fetch_1.default)(Config_1.default.warframeMarketItemUrl);
42
- if (!wfmRequest.ok) {
43
- Logger_1.default.error('Failed to fetch items from WFM!');
44
- return;
45
- }
46
- this.wfmItems = (await wfmRequest.json());
47
- const wfcdItemRequest = await (0, node_fetch_1.default)(Config_1.default.warframeItemsUrl);
48
- if (!wfcdItemRequest.ok) {
49
- Logger_1.default.error('Failed to fetch items from WFCD! ');
50
- return;
51
- }
52
- this.wfcdItems = (await wfcdItemRequest.json());
53
- }
54
- /**
55
- * Generates the relic data
56
- * uses WFCD/warframe-drop-data to check what relics exist,
57
- * and adds information from WFCD/warframe-items and WFM
58
- */
59
- generateTitaniaRelics() {
60
- if (typeof this.relicsRaw === 'undefined' || typeof this.wfmItems === 'undefined') {
61
- Logger_1.default.log('Failed to load relics/item data');
62
- return;
63
- }
64
- const { length } = this.relicsRaw;
65
- for (let i = 0; i < length; i += 1) {
66
- const rawRelic = this.relicsRaw[i];
67
- Logger_1.default.debug(`[${i + 1}/${length}] ${rawRelic.tier} ${rawRelic.relicName}`);
68
- const relic = this.generateTitaniaRelic(rawRelic);
69
- this.relics.push(relic);
70
- }
71
- Logger_1.default.debug(`Finished parsing ${this.relics.length} relics`);
72
- }
73
- /**
74
- * Writes the fully generated data to disk.
75
- * @param {string} dataDir Directory to store the relic data in. Default: ../data/
76
- * @param {string} fileName Filename base ex: "Relics" becomes "Relics.json" and "Relics.min.json". Default: "Relics"
77
- * @param {boolean} generateMin True if a minified json should be generated too. Default: true
78
- */
79
- async writeData(dataDir, fileName, generateMin) {
80
- const DataDir = dataDir ?? node_path_1.default.join(__dirname, '..', 'data');
81
- const RelicPath = fileName ? node_path_1.default.join(DataDir, `${fileName}.json`) : node_path_1.default.join(DataDir, 'Relics.json');
82
- await promises_1.default.writeFile(RelicPath, JSON.stringify(this.relics, undefined, 4));
83
- if (generateMin) {
84
- const RelicMinPath = fileName
85
- ? node_path_1.default.join(DataDir, `${fileName}.min.json`)
86
- : node_path_1.default.join(DataDir, 'Relics.min.json');
87
- await promises_1.default.writeFile(RelicMinPath, JSON.stringify(this.relics));
88
- }
89
- }
90
- /**
91
- * Generates a single relic from all available data
92
- * @param {WFCDRelic} rawRelic relic to pull Titania data from
93
- * @returns {TitaniaRelicReward}
94
- */
95
- generateTitaniaRelic(rawRelic) {
96
- const name = `${rawRelic.tier} ${rawRelic.relicName}`;
97
- const rewards = rawRelic.rewards.map((rawReward) => {
98
- const { chance } = rawReward;
99
- const { rarity } = rawReward;
100
- const wfmInfo = this.wfmItems?.payload.items.find((x) => x.item_name === rawReward.itemName);
101
- const isSpecial = ['Forma', 'Kuva', 'Exilus', 'Riven'].find((x) =>
102
- // eslint-disable-next-line @typescript-eslint/comma-dangle
103
- rawReward.itemName.toLowerCase().includes(x.toLowerCase()));
104
- if (!(wfmInfo || isSpecial)) {
105
- Logger_1.default.debug(`Failed to find wfm item for ${rawReward.itemName}`);
106
- }
107
- const item = {
108
- name: rawReward.itemName,
109
- uniqueName: this.wfcdItems?.find((x) => x.name.toLowerCase() === `${name.trim()} Intact`.toLowerCase())?.uniqueName || '',
110
- warframeMarket: undefined,
111
- };
112
- if (wfmInfo) {
113
- item.warframeMarket = { id: wfmInfo.id, urlName: wfmInfo.url_name };
114
- }
115
- return { rarity, chance, item };
116
- });
117
- let drops = [];
118
- const wfcdItem = this.wfcdItems?.find((x) => x.name.toLowerCase() === `${name.trim()} Intact`.toLowerCase());
119
- if (!wfcdItem) {
120
- Logger_1.default.error(`Failed to get WFCD item for relic: ${name}`);
121
- }
122
- if (wfcdItem && wfcdItem.drops) {
123
- drops = wfcdItem.drops.map((rawDrop) => {
124
- return { rarity: rawDrop.rarity, chance: rawDrop.chance, location: rawDrop.location };
125
- });
126
- }
127
- const wfm = this.wfmItems?.payload.items.find((x) => x.item_name === `${name.trim()} Relic`);
128
- if (!wfm) {
129
- Logger_1.default.error(`Failed to get relic item from wfm: ${name}`);
130
- }
131
- return {
132
- name,
133
- rewards,
134
- locations: drops,
135
- uniqueName: wfcdItem?.uniqueName || '',
136
- vaultInfo: { vaulted: drops.length === 0, vaultDate: '' },
137
- ...(wfm?.id && wfm?.url_name && { warframeMarket: { id: wfm?.id, urlName: wfm?.url_name } }),
138
- };
139
- }
140
- /**
141
- * Filters WFCD's relic data to only include Intact variants, since we just need the base.
142
- */
143
- filterWFCDRelics() {
144
- const before = this.relicsRaw?.length || 0;
145
- this.relicsRaw = this.relicsRaw?.filter((x) => x.state === 'Intact');
146
- Logger_1.default.log(`Filtered relics to intact variants. Before: ${before} After: ${this.relicsRaw?.length || 0}`);
147
- }
148
- }
149
- exports.Generator = Generator;
150
- exports.default = Generator;
151
- //# sourceMappingURL=Generator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Generator.js","sourceRoot":"","sources":["../src/Generator.ts"],"names":[],"mappings":";;;;;;AAAA,4DAA+B;AAC/B,gEAAkC;AAClC,0DAA6B;AAU7B,sDAA8B;AAC9B,sDAA8B;AAE9B,MAAa,SAAS;IACpB,SAAS,CAA+B;IAExC,SAAS,CAA8B;IAEvC,QAAQ,CAAiC;IAEzC,MAAM,CAAsB;IAE5B;QACE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ;QACnB,gBAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;QAClC,MAAM,IAAI,CAAC,YAAY,EAAE,CAAC;QAC1B,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACxB,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,YAAY;QACvB,MAAM,YAAY,GAAG,MAAM,IAAA,oBAAK,EAAC,gBAAM,CAAC,oBAAoB,CAAC,CAAC;QAC9D,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE;YACpB,gBAAM,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;YAC3D,OAAO;SACR;QACD,IAAI,CAAC,SAAS,GAAI,CAAC,MAAM,YAAY,CAAC,IAAI,EAAE,CAAkC,EAAE,MAAM,CAAC;QAEvF,MAAM,UAAU,GAAG,MAAM,IAAA,oBAAK,EAAC,gBAAM,CAAC,qBAAqB,CAAC,CAAC;QAC7D,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE;YAClB,gBAAM,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YAChD,OAAO;SACR;QACD,IAAI,CAAC,QAAQ,GAAG,CAAC,MAAM,UAAU,CAAC,IAAI,EAAE,CAAuB,CAAC;QAEhE,MAAM,eAAe,GAAG,MAAM,IAAA,oBAAK,EAAC,gBAAM,CAAC,gBAAgB,CAAC,CAAC;QAC7D,IAAI,CAAC,eAAe,CAAC,EAAE,EAAE;YACvB,gBAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAClD,OAAO;SACR;QACD,IAAI,CAAC,SAAS,GAAG,CAAC,MAAM,eAAe,CAAC,IAAI,EAAE,CAAoB,CAAC;IACrE,CAAC;IAED;;;;OAIG;IACI,qBAAqB;QAC1B,IAAI,OAAO,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,OAAO,IAAI,CAAC,QAAQ,KAAK,WAAW,EAAE;YACjF,gBAAM,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;YAC9C,OAAO;SACR;QACD,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;QAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YACnC,gBAAM,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC;YAE5E,MAAM,KAAK,GAAG,IAAI,CAAC,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACzB;QACD,gBAAM,CAAC,KAAK,CAAC,oBAAoB,IAAI,CAAC,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;IAChE,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,SAAS,CAAC,OAAgB,EAAE,QAAiB,EAAE,WAAqB;QAC/E,MAAM,OAAO,GAAG,OAAO,IAAI,mBAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,QAAQ,OAAO,CAAC,CAAC,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QACxG,MAAM,kBAAE,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC;QAEzE,IAAI,WAAW,EAAE;YACf,MAAM,YAAY,GAAG,QAAQ;gBAC3B,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,QAAQ,WAAW,CAAC;gBAC5C,CAAC,CAAC,mBAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;YAC1C,MAAM,kBAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;SAC/D;IACH,CAAC;IAED;;;;OAIG;IACK,oBAAoB,CAAC,QAAmB;QAC9C,MAAM,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAEtD,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE;YACjD,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;YAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;YAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,QAAQ,CAAC,CAAC;YAC7F,MAAM,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YAChE,2DAA2D;YAC3D,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAC3D,CAAC;YACF,IAAI,CAAC,CAAC,OAAO,IAAI,SAAS,CAAC,EAAE;gBAC3B,gBAAM,CAAC,KAAK,CAAC,+BAA+B,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC;aACnE;YAED,MAAM,IAAI,GAA2B;gBACnC,IAAI,EAAE,SAAS,CAAC,QAAQ;gBACxB,UAAU,EACR,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE;gBAC/G,cAAc,EAAE,SAAS;aAC1B,CAAC;YACF,IAAI,OAAO,EAAE;gBACX,IAAI,CAAC,cAAc,GAAG,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;aACrE;YACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAwB,CAAC;QACxD,CAAC,CAAC,CAAC;QAEH,IAAI,KAAK,GAAgC,EAAE,CAAC;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC;QAE7G,IAAI,CAAC,QAAQ,EAAE;YACb,gBAAM,CAAC,KAAK,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAC;SAC5D;QAED,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;YAC9B,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;gBACrC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC;YACxF,CAAC,CAAC,CAAC;SACJ;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC7F,IAAI,CAAC,GAAG,EAAE;YACR,gBAAM,CAAC,KAAK,CAAC,sCAAsC,IAAI,EAAE,CAAC,CAAC;SAC5D;QAED,OAAO;YACL,IAAI;YACJ,OAAO;YACP,SAAS,EAAE,KAAK;YAChB,UAAU,EAAE,QAAQ,EAAE,UAAU,IAAI,EAAE;YACtC,SAAS,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE;YACzD,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,GAAG,EAAE,QAAQ,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,CAAC;SAC7F,CAAC;IACJ,CAAC;IAED;;OAEG;IACK,gBAAgB;QACtB,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC;QACrE,gBAAM,CAAC,GAAG,CAAC,+CAA+C,MAAM,WAAW,IAAI,CAAC,SAAS,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;IAC5G,CAAC;CACF;AAhKD,8BAgKC;AAED,kBAAe,SAAS,CAAC"}
package/dist/Logger.d.ts DELETED
@@ -1,9 +0,0 @@
1
- declare class Logger {
2
- private readonly logLevel;
3
- log(message: string | unknown): void;
4
- error(message: string | unknown): void;
5
- debug(message: string | unknown): void;
6
- fatal(message: string): void;
7
- }
8
- declare const _default: Logger;
9
- export default _default;
package/dist/Logger.js DELETED
@@ -1,72 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- Object.defineProperty(exports, "__esModule", { value: true });
26
- const console = __importStar(require("node:console"));
27
- var LogLevel;
28
- (function (LogLevel) {
29
- LogLevel[LogLevel["FATAL"] = -1] = "FATAL";
30
- LogLevel[LogLevel["ERROR"] = 0] = "ERROR";
31
- LogLevel[LogLevel["LOG"] = 1] = "LOG";
32
- LogLevel[LogLevel["DEBUG"] = 2] = "DEBUG";
33
- })(LogLevel || (LogLevel = {}));
34
- const fromString = (logLevelIsh) => {
35
- switch (logLevelIsh?.toLowerCase()) {
36
- case 'fatal':
37
- return LogLevel.FATAL;
38
- case 'error':
39
- case 'bad':
40
- return LogLevel.ERROR;
41
- case 'info':
42
- case 'log':
43
- return LogLevel.LOG;
44
- case 'debug':
45
- return LogLevel.DEBUG;
46
- default:
47
- return LogLevel.FATAL;
48
- }
49
- };
50
- class Logger {
51
- logLevel = fromString(process.env.LOG_LEVEL || 'fatal');
52
- log(message) {
53
- if (this.logLevel >= LogLevel.LOG)
54
- console.log(message);
55
- }
56
- error(message) {
57
- if (this.logLevel >= LogLevel.ERROR)
58
- console.error(message);
59
- }
60
- debug(message) {
61
- if (this.logLevel === LogLevel.DEBUG)
62
- console.debug(message);
63
- }
64
- fatal(message) {
65
- if (this.logLevel >= LogLevel.FATAL) {
66
- console.error(`FATAL: ${message}`);
67
- throw new Error(message);
68
- }
69
- }
70
- }
71
- exports.default = new Logger();
72
- //# sourceMappingURL=Logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Logger.js","sourceRoot":"","sources":["../src/Logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sDAAwC;AAExC,IAAK,QAKJ;AALD,WAAK,QAAQ;IACX,0CAAU,CAAA;IACV,yCAAK,CAAA;IACL,qCAAG,CAAA;IACH,yCAAK,CAAA;AACP,CAAC,EALI,QAAQ,KAAR,QAAQ,QAKZ;AAED,MAAM,UAAU,GAAG,CAAC,WAAmB,EAAY,EAAE;IACnD,QAAQ,WAAW,EAAE,WAAW,EAAE,EAAE;QAClC,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC,KAAK,CAAC;QACxB,KAAK,OAAO,CAAC;QACb,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC,KAAK,CAAC;QACxB,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACR,OAAO,QAAQ,CAAC,GAAG,CAAC;QACtB,KAAK,OAAO;YACV,OAAO,QAAQ,CAAC,KAAK,CAAC;QACxB;YACE,OAAO,QAAQ,CAAC,KAAK,CAAC;KACzB;AACH,CAAC,CAAC;AAEF,MAAM,MAAM;IACO,QAAQ,GAAa,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,OAAO,CAAC,CAAC;IAEnF,GAAG,CAAC,OAAyB;QAC3B,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,GAAG;YAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,OAAyB;QAC7B,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,OAAyB;QAC7B,IAAI,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK,CAAC,OAAe;QACnB,IAAI,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,KAAK,EAAE;YACnC,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;SAC1B;IACH,CAAC;CACF;AAED,kBAAe,IAAI,MAAM,EAAE,CAAC"}