mirror of
https://github.com/maxswa/osrs-json-hiscores.git
synced 2025-10-15 10:19:04 +00:00
Add jsdoc to hiscores and helper functions.
This commit is contained in:
@@ -30,6 +30,12 @@ import {
|
|||||||
BOSSES
|
BOSSES
|
||||||
} from './utils';
|
} from './utils';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Screen scrapes the hiscores to get the formatted rsn of a player.
|
||||||
|
*
|
||||||
|
* @param rsn Username of the player.
|
||||||
|
* @returns Formatted version of the rsn.
|
||||||
|
*/
|
||||||
export async function getRSNFormat(rsn: string): Promise<string> {
|
export async function getRSNFormat(rsn: string): Promise<string> {
|
||||||
if (typeof rsn !== 'string') {
|
if (typeof rsn !== 'string') {
|
||||||
throw Error('RSN must be a string');
|
throw Error('RSN must be a string');
|
||||||
@@ -56,6 +62,12 @@ export async function getRSNFormat(rsn: string): Promise<string> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parses CSV string of raw stats and returns a stats object.
|
||||||
|
*
|
||||||
|
* @param csv Raw CSV from the official OSRS API.
|
||||||
|
* @returns Parsed stats object.
|
||||||
|
*/
|
||||||
export function parseStats(csv: string): Stats {
|
export function parseStats(csv: string): Stats {
|
||||||
const splitCSV = csv
|
const splitCSV = csv
|
||||||
.split('\n')
|
.split('\n')
|
||||||
@@ -128,6 +140,15 @@ export function parseStats(csv: string): Stats {
|
|||||||
return stats;
|
return stats;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches stats from the OSRS API and consolidates the info into a player object.
|
||||||
|
*
|
||||||
|
* **Note:** This function will make up to 5 separate network requests.
|
||||||
|
* As such, it is highly subject to the performance of the official OSRS API.
|
||||||
|
*
|
||||||
|
* @param rsn Username of the player.
|
||||||
|
* @returns Player object.
|
||||||
|
*/
|
||||||
export async function getStats(rsn: string): Promise<Player> {
|
export async function getStats(rsn: string): Promise<Player> {
|
||||||
if (typeof rsn !== 'string') {
|
if (typeof rsn !== 'string') {
|
||||||
throw Error('RSN must be a string');
|
throw Error('RSN must be a string');
|
||||||
@@ -205,6 +226,13 @@ export async function getStats(rsn: string): Promise<Player> {
|
|||||||
throw Error('Player not found');
|
throw Error('Player not found');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fetches stats from the OSRS API and returns them as an object.
|
||||||
|
*
|
||||||
|
* @param rsn Username of the player.
|
||||||
|
* @param mode Gamemode to fetch ranks for.
|
||||||
|
* @returns Stats object.
|
||||||
|
*/
|
||||||
export async function getStatsByGamemode(
|
export async function getStatsByGamemode(
|
||||||
rsn: string,
|
rsn: string,
|
||||||
mode: Gamemode = 'main'
|
mode: Gamemode = 'main'
|
||||||
@@ -267,6 +295,14 @@ export async function getSkillPage(
|
|||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Screen scrapes a hiscores page of an activity or boss and returns an array of up to 25 players.
|
||||||
|
*
|
||||||
|
* @param activity Name of the activity or boss to fetch hiscores for.
|
||||||
|
* @param mode Gamemode to fetch ranks for.
|
||||||
|
* @param page Page number.
|
||||||
|
* @returns Array of `PlayerActivityRow` objects.
|
||||||
|
*/
|
||||||
export async function getActivityPage(
|
export async function getActivityPage(
|
||||||
activity: ActivityName,
|
activity: ActivityName,
|
||||||
mode: Gamemode = 'main',
|
mode: Gamemode = 'main',
|
||||||
|
@@ -9,14 +9,36 @@ import {
|
|||||||
ACTIVITIES
|
ACTIVITIES
|
||||||
} from './constants';
|
} from './constants';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will generate a stats URL for the official OSRS API.
|
||||||
|
*
|
||||||
|
* @param gamemode Gamemode to fetch ranks for.
|
||||||
|
* @param rsn Username of the player.
|
||||||
|
* @returns Encoded stats URL.
|
||||||
|
*/
|
||||||
export const getStatsURL = (gamemode: Gamemode, rsn: string) =>
|
export const getStatsURL = (gamemode: Gamemode, rsn: string) =>
|
||||||
`${GAMEMODE_URL[gamemode]}${STATS_URL}${encodeURIComponent(rsn)}`;
|
`${GAMEMODE_URL[gamemode]}${STATS_URL}${encodeURIComponent(rsn)}`;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will generate a player table URL for the official OSRS hiscores website.
|
||||||
|
*
|
||||||
|
* @param gamemode Gamemode to fetch ranks for.
|
||||||
|
* @param rsn Username of the player.
|
||||||
|
* @returns Encoded player table URL.
|
||||||
|
*/
|
||||||
export const getPlayerTableURL = (gamemode: Gamemode, rsn: string) =>
|
export const getPlayerTableURL = (gamemode: Gamemode, rsn: string) =>
|
||||||
`${GAMEMODE_URL[gamemode]}${SCORES_URL}table=0&user=${encodeURIComponent(
|
`${GAMEMODE_URL[gamemode]}${SCORES_URL}table=0&user=${encodeURIComponent(
|
||||||
rsn
|
rsn
|
||||||
)}`;
|
)}`;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will generate a skill table URL for the official OSRS hiscores website.
|
||||||
|
*
|
||||||
|
* @param gamemode Gamemode to fetch ranks for.
|
||||||
|
* @param skill Skill to fetch ranks for.
|
||||||
|
* @param page Page number.
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
export const getSkillPageURL = (
|
export const getSkillPageURL = (
|
||||||
gamemode: Gamemode,
|
gamemode: Gamemode,
|
||||||
skill: SkillName,
|
skill: SkillName,
|
||||||
@@ -26,6 +48,14 @@ export const getSkillPageURL = (
|
|||||||
skill
|
skill
|
||||||
)}&page=${page}`;
|
)}&page=${page}`;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will generate an activity table URL for the official OSRS hiscores website.
|
||||||
|
*
|
||||||
|
* @param gamemode Gamemode to fetch ranks for.
|
||||||
|
* @param activity Activity or boss to fetch ranks for.
|
||||||
|
* @param page Page number.
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
export const getActivityPageURL = (
|
export const getActivityPageURL = (
|
||||||
gamemode: Gamemode,
|
gamemode: Gamemode,
|
||||||
activity: ActivityName,
|
activity: ActivityName,
|
||||||
@@ -37,17 +67,35 @@ export const getActivityPageURL = (
|
|||||||
activity
|
activity
|
||||||
)}&page=${page}`;
|
)}&page=${page}`;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts a number from an OSRS hiscores table cell element.
|
||||||
|
*
|
||||||
|
* @param el OSRS hiscores table cell element.
|
||||||
|
* @returns Number parsed from cell text.
|
||||||
|
*/
|
||||||
export const numberFromElement = (el: Element | null) => {
|
export const numberFromElement = (el: Element | null) => {
|
||||||
const { innerHTML } = el || {};
|
const { innerHTML } = el ?? {};
|
||||||
const number = innerHTML?.replace(/[\n|,]/g, '') ?? '-1';
|
const number = innerHTML?.replace(/[\n|,]/g, '') ?? '-1';
|
||||||
return parseInt(number, 10);
|
return parseInt(number, 10);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extracts a RSN from an OSRS hiscores table cell element.
|
||||||
|
*
|
||||||
|
* @param el OSRS hiscores table cell element.
|
||||||
|
* @returns RSN parsed from cell text.
|
||||||
|
*/
|
||||||
export const rsnFromElement = (el: Element | null) => {
|
export const rsnFromElement = (el: Element | null) => {
|
||||||
const { innerHTML } = el || {};
|
const { innerHTML } = el ?? {};
|
||||||
return innerHTML?.replace(/\uFFFD/g, ' ') || '';
|
return innerHTML?.replace(/\uFFFD/g, ' ') ?? '';
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Will run an Axios `GET` request against a given URL after injecting a `User-Agent` header.
|
||||||
|
*
|
||||||
|
* @param url URL to run a `GET` request against.
|
||||||
|
* @returns Axios response.
|
||||||
|
*/
|
||||||
export const httpGet = (url: string) =>
|
export const httpGet = (url: string) =>
|
||||||
axios.get(url, {
|
axios.get(url, {
|
||||||
headers: {
|
headers: {
|
||||||
|
Reference in New Issue
Block a user