enka-network-api
Version:
Enka-network API wrapper for Genshin Impact.
81 lines (80 loc) • 3.8 kB
JavaScript
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;
}
;