Skip to content

Commit

Permalink
Merge pull request #449 from zikeji/dev
Browse files Browse the repository at this point in the history
Fixes TypeError on null array result, fixes type hinting on the v2/player endpoint
  • Loading branch information
zikeji committed Sep 16, 2024
2 parents d2608e6 + 569d245 commit dbb0baa
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 25 deletions.
2 changes: 1 addition & 1 deletion src/helpers/BedwarsLevelInfo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ export function getBedwarsLevelInfo(
const currentExp =
typeof data === "number"
? data
: data.stats.Bedwars?.Experience ?? data.stats.Bedwars?.Experience_new;
: data.stats?.Bedwars?.Experience ?? data.stats?.Bedwars?.Experience_new;
if (typeof currentExp !== "number" || Number.isNaN(currentExp)) {
throw new TypeError(
"Data supplied does not contain player Bedwars experience."
Expand Down
2 changes: 1 addition & 1 deletion src/helpers/SkyWarsLevelInfo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ export function getSkyWarsLevelInfo(
const currentExp =
typeof data === "number"
? data
: (data.stats.SkyWars?.skywars_experience as number);
: (data.stats?.SkyWars?.skywars_experience as number);
if (typeof currentExp !== "number" || Number.isNaN(currentExp)) {
throw new TypeError(
"Data supplied does not contain player SkyWars experience."
Expand Down
36 changes: 18 additions & 18 deletions src/types/Augmented/Player.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
export type Player = {
_id: string;
uuid: string;
firstLogin: number;
playername: string;
displayname: string;
_id?: string;
uuid?: string;
firstLogin?: number;
playername?: string;
displayname?: string;
lastLogin?: number;
achievementPoints?: number;
achievementRewardsNew: {
achievementRewardsNew?: {
[key: `for_points_${number}`]: number | undefined;
};
achievementSync?: { quake_tiered: number };
Expand All @@ -23,12 +23,12 @@ export type Player = {
};
};
achievementTracking?: string[];
achievements: { [key: string]: number };
achievementsOneTime: string[];
achievements?: { [key: string]: number };
achievementsOneTime?: string[];
adsense_tokens?: number;
channel: string;
challenges: {
all_time: {
channel?: string;
challenges?: {
all_time?: {
[key: string]: number | undefined;
};
[key: string]: unknown;
Expand All @@ -41,7 +41,7 @@ export type Player = {
disabledProjectileTrails?: boolean;
eugene?: { dailyTwoKExp?: number };
fortuneBuff?: number;
giftingMeta: {
giftingMeta?: {
bundlesReceived?: number;
realBundlesReceived?: number;
bundlesGiven?: number;
Expand Down Expand Up @@ -75,7 +75,7 @@ export type Player = {
levelUp_VIP?: number;
levelUp_VIP_PLUS?: number;
leveling?: { claimedRewards: number };
monthlycrates: {
monthlycrates?: {
/** keys are in the format of M-YYYY (month is non zero leading, so april 2024 would be 4-2024) */
[key: `${number}-${number}`]:
| {
Expand All @@ -91,9 +91,9 @@ export type Player = {
monthlyRankColor?: string;
mostRecentGameType?: string;
mostRecentMonthlyPackageRank?: string;
networkExp: number;
networkExp?: number;
network_update_book?: string;
newPackageRank: string;
newPackageRank?: string;
onetime_achievement_menu_sort?: string;
outfit?: {
BOOTS?: string;
Expand Down Expand Up @@ -193,7 +193,7 @@ export type Player = {
}
| undefined;
};
quests: {
quests?: {
[key: string]:
| {
active?: {
Expand All @@ -209,7 +209,7 @@ export type Player = {
| undefined;
};
questSettings?: { autoActivate: boolean };
rankPlusColor: string;
rankPlusColor?: string;
rewardHighScore?: number;
rewardScore?: number;
rewardStreak?: number;
Expand All @@ -223,7 +223,7 @@ export type Player = {
prompt?: boolean;
};
spec_first_person?: boolean;
stats: PlayerStats;
stats?: PlayerStats;
totalDailyRewards?: number;
totalRewards?: number;
tourney?: {
Expand Down
2 changes: 1 addition & 1 deletion src/types/AugmentedTypes.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ export type LeaderboardsResponse = Paths.V2Leaderboards.Get.Responses.$200 &

export type PlayerResponse = Paths.V2Player.Get.Responses.$200 &
Record<string, unknown> & {
player: Player;
player: Player | null;
};

export type PunishmentStatsResponse = Paths.V2Punishmentstats.Get.Responses.$200 &
Expand Down
11 changes: 8 additions & 3 deletions src/util/ResultArray.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,13 +27,18 @@ export function getResultArray<
if (!(key in clonedResponse)) {
throw new TypeError(`Key "${String(key)}" was not in the response.`);
}
const items = clonedResponse[key];
let items = clonedResponse[key];
const { ratelimit, cached, cloudflareCache } = clonedResponse;
if (!Array.isArray(items)) {
throw new TypeError(`Key "${String(key)}" is not an array.`);
if (items !== null) {
throw new TypeError(
`Key "${String(key)}" has an unexpected type ${typeof items}.`
);
}
items = [] as never;
}
delete clonedResponse[key];
const arr = ([...items] as never) as ResultArray<T, K>;
const arr = [...(items as never[])] as ResultArray<T, K>;
const meta: Omit<T, K> & DefaultMeta = {
...clonedResponse,
};
Expand Down
2 changes: 1 addition & 1 deletion tests/helpers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@ describe("Test transformItemData", async function () {
const player = await client.player.uuid("");
it("should transform Pit inventory without throwing", async function () {
await transformItemData(
player.stats.Pit?.profile.inv_armor.data as number[]
player.stats?.Pit?.profile.inv_armor.data as number[]
);
});
it("should throw as invalid data is being given", async function () {
Expand Down

0 comments on commit dbb0baa

Please sign in to comment.