UNPKG

enka-network-api

Version:

Enka-network API wrapper for Genshin Impact.

81 lines (80 loc) 3.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ExcelTransformer = exports.excels = exports.excelKeyMap = exports.excelJsonOptions = void 0; exports.indexBy = indexBy; exports.singleBy = singleBy; const config_file_js_1 = require("config_file.js"); exports.excelJsonOptions = { allowBigint: true, }; exports.excelKeyMap = { "AvatarExcelConfigData": ["id"], // Characters "FetterInfoExcelConfigData": ["avatarId"], // Characters Profile Info "AvatarCostumeExcelConfigData": ["characterId", "skinId"], // Costumes "AvatarSkillDepotExcelConfigData": ["id"], // Skill Depot "AvatarSkillExcelConfigData": ["id"], // Skills "ProudSkillExcelConfigData": ["proudSkillGroupId", "level"], // Passive Talents and Leveled Talents "AvatarTalentExcelConfigData": ["talentId"], // Constellations "AvatarPromoteExcelConfigData": ["avatarPromoteId", ["promoteLevel", 0]], // Character Ascensions "AvatarCurveExcelConfigData": ["level"], // Character Basic Stats Curves "AvatarCodexExcelConfigData": ["avatarId"], // Character Release Information "WeaponExcelConfigData": ["id"], // Weapons "WeaponPromoteExcelConfigData": ["weaponPromoteId", ["promoteLevel", 0]], // Weapon Ascensions "WeaponCurveExcelConfigData": ["level"], // Weapon Basic Stats Curves "WeaponCodexExcelConfigData": ["weaponId"], // Weapon Release Information "EquipAffixExcelConfigData": ["id", ["level", 0]], // Artifact Set Bonus and Weapon Refinements "ReliquaryExcelConfigData": ["id"], // Artifacts "ReliquaryLevelExcelConfigData": [["rank", 0], "level"], // Artifact Main Affix "ReliquaryAffixExcelConfigData": ["id"], // Artifact Sub Affix "ReliquarySetExcelConfigData": ["setId"], // Artifact Sets "ReliquaryCodexExcelConfigData": ["suitId", "level"], // Artifact valid rarities "ManualTextMapConfigData": ["textMapId"], // Fight Props and Other TextMaps "AvatarHeroEntityExcelConfigData": ["avatarId"], // Travelers "TrialAvatarFetterDataConfigData": ["avatarId"], // Archons "MaterialExcelConfigData": ["id"], // Materials (including NameCards) "FetterCharacterCardExcelConfigData": ["avatarId"], // Friendship Rewards "RewardExcelConfigData": ["rewardId"], // Rewards Data for Friendship Cards "ProfilePictureExcelConfigData": ["id"], // User pfp "RoleCombatDifficultyExcelConfigData": ["difficultyId"], // Theater seasonal difficulty }; exports.excels = Object.keys(exports.excelKeyMap); class ExcelTransformer { transform(excel, data) { return singleBy(data, ...exports.excelKeyMap[excel]); } } exports.ExcelTransformer = ExcelTransformer; function indexBy(data, ...keys) { if (keys.length === 0) return data; const v = data[keys[0]]; if (!(0, config_file_js_1.isFlexJsonObject)(exports.excelJsonOptions, v)) return undefined; return indexBy(v, ...keys.slice(1)); } function singleBy(array, ...keys) { var _a; if (keys.length === 0) { if (array.length > 1) throw Error("Cannot have multiple elements"); return array[0]; } const grouped = {}; for (const e of array) { const key = Array.isArray(keys[0]) ? keys[0][0] : keys[0]; if (!(key in e) && Array.isArray(keys[0])) e[key] = keys[0][1]; const id = (_a = e[key]) === null || _a === void 0 ? void 0 : _a.toString(); if (!id) throw new Error("Some elements don't have specified keys"); if (!(id in grouped)) grouped[id] = []; grouped[id].push(e); } const recursiveGrouped = {}; for (const key in grouped) { const arr = grouped[key]; recursiveGrouped[key] = singleBy(arr, ...keys.slice(1)); } return recursiveGrouped; }