From f1730d44ecdaada10a1d558a90c6e76b6e2f6a9a Mon Sep 17 00:00:00 2001 From: maxswa Date: Sun, 5 Jan 2020 17:47:13 -0500 Subject: [PATCH] Rename properties for clarity, add formatted names --- README.md | 120 +++++++++--------- __tests__/hiscores.test.ts | 126 ++++++++++--------- package.json | 2 + src/hiscores.ts | 107 ++++++++-------- src/index.ts | 1 + src/types.ts | 100 ++++++++------- src/utils/constants.ts | 223 +++++++++++++++++++++++++-------- src/utils/helpers.ts | 13 +- yarn.lock | 245 +++---------------------------------- 9 files changed, 426 insertions(+), 511 deletions(-) diff --git a/README.md b/README.md index 00d76f0..6b8c278 100644 --- a/README.md +++ b/README.md @@ -68,15 +68,15 @@ const topPage = await getSkillPage('overall'); `getStats` will return a full player object with gamemode. `getStatsByGameMode` will return a stats object and accepts a gamemode parameter: -| Game mode | Param | -| ---------------- | :-------: | -| Regular | `main` | -| Ironman | `iron` | -| Hardcore Ironman | `hc` | -| Ultimate Ironman | `ult` | -| Deadman Mode | `dmm` | -| DMM Tournament | `dmmt` | -| Leagues | `leagues` | +| Game mode | Param | +| ---------------- | :----------: | +| Regular | `main` | +| Ironman | `ironman` | +| Hardcore Ironman | `hardcore` | +| Ultimate Ironman | `ultimate` | +| Deadman Mode | `deadman` | +| Tournament | `tournament` | +| Leagues | `seasonal` | `getSkillPage` and `getActivityPage` require a skill/activity and optionally a gamemode and page: @@ -87,75 +87,69 @@ hiscores .catch(err => console.error(err)); ``` -Activities consist of all levels of clue scrolls as well as minigames: +Activities consist of all levels of clue scrolls as well as minigames and bosses: ### Clue Scrolls | Type | Param | | -------- | :-------------: | -| All | `allclues` | -| Beginner | `beginnerclues` | -| Easy | `easyclues` | -| Medium | `mediumclues` | -| Hard | `hardclues` | -| Elite | `eliteclues` | -| Master | `masterclues` | +| All | `allClues` | +| Beginner | `beginnerClues` | +| Easy | `easyClues` | +| Medium | `mediumClues` | +| Hard | `hardClues` | +| Elite | `eliteClues` | +| Master | `masterClues` | ### Minigames -| Minigame | Param | -| ---------------------- | :--------: | -| Bounty Hunter (Rogue) | `roguebh` | -| Bounty Hunter (Hunter) | `hunterbh` | -| Last Man Standing | `lms` | - -### Leagues - -| Name | Param | -| ------------- | :---: | -| League Points | `lp` | +| Minigame | Param | +| ---------------------- | :---------------: | +| Bounty Hunter (Rogue) | `rogueBH` | +| Bounty Hunter (Hunter) | `hunterBH` | +| Last Man Standing | `lastManStanding` | ### Bosses | Boss Name | Param | | -------------------------------- | :----------------------------: | -| Abyssal Sire | `abyssalsire` | -| Alchemical Hydra | `alchemicalhydra` | -| Barrows Chests | `barrowschests` | +| Abyssal Sire | `abyssalSire` | +| Alchemical Hydra | `alchemicalHydra` | +| Barrows Chests | `barrows` | | Bryophyta | `bryophyta` | | Callisto | `callisto` | | Cerberus | `cerberus` | -| Chambers Of Xeric | `chambersofxeric` | -| Chambers Of Xeric Challenge Mode | `chambersofxericchallengemode` | -| Chaos Elemental | `chaoselemental` | -| Chaos Fanatic | `chaosfanatic` | -| Commander Zilyana | `commanderzilyana` | -| Corporeal Beast | `corporealbeast` | -| Crazy Archaeologist | `crazyarchaeologist` | -| Dagannoth Prime | `dagannothprime` | -| Dagannoth Rex | `dagannothrex` | -| Dagannoth Supreme | `dagannothsupreme` | -| Deranged Archaeologist | `derangedarchaeologist` | -| General Graardor | `generalgraardor` | -| Giant Mole | `giantmole` | -| Grotesque Guardians | `grotesqueguardians` | +| Chambers Of Xeric | `chambersOfXeric` | +| Chambers Of Xeric Challenge Mode | `chambersOfXericChallengeMode` | +| Chaos Elemental | `chaosElemental` | +| Chaos Fanatic | `chaosFanatic` | +| Commander Zilyana | `commanderZilyana` | +| Corporeal Beast | `corporealBeast` | +| Crazy Archaeologist | `crazyArchaeologist` | +| Dagannoth Prime | `dagannothPrime` | +| Dagannoth Rex | `dagannothRex` | +| Dagannoth Supreme | `dagannothSupreme` | +| Deranged Archaeologist | `derangedArchaeologist` | +| General Graardor | `generalGraardor` | +| Giant Mole | `giantMole` | +| Grotesque Guardians | `grotesqueGuardians` | | Hespori | `hespori` | -| Kalphite Queen | `kalphitequeen` | -| King Black Dragon | `kingblackdragon` | +| Kalphite Queen | `kalphiteQueen` | +| King Black Dragon | `kingBlackDragon` | | Kraken | `kraken` | -| Kreearra | `kreearra` | -| K'ril Tsutsaroth | `kriltsutsaroth` | +| Kreearra | `kreeArra` | +| K'ril Tsutsaroth | `krilTsutsaroth` | | Mimic | `mimic` | | Obor | `obor` | | Sarachnis | `sarachnis` | | Scorpia | `scorpia` | | Skotizo | `skotizo` | | Gauntlet | `gauntlet` | -| Corrupted Gauntlet | `corruptedgauntlet` | -| Theatre Of Blood | `theatreofblood` | -| Thermonuclear Smoke Devil | `thermonuclearsmokedevil` | -| TzKal-Zuk | `tzkalzuk` | -| TzTok-Jad | `tztokjad` | +| Corrupted Gauntlet | `corruptedGauntlet` | +| Theatre Of Blood | `theatreOfBlood` | +| Thermonuclear Smoke Devil | `thermonuclearSmokeDevil` | +| TzKal-Zuk | `tzKalZuk` | +| TzTok-Jad | `tzTokJad` | | Venenatis | `venenatis` | | Vetion | `vetion` | | Vorkath | `vorkath` | @@ -169,7 +163,7 @@ Activities consist of all levels of clue scrolls as well as minigames: ```javascript { - rsn: 'Lynx Titan', + name: 'Lynx Titan', mode: 'main', dead: false, deulted: false, @@ -182,8 +176,9 @@ Activities consist of all levels of clue scrolls as well as minigames: // ... }, clues: {}, - bh: {}, - lms: {}, + leaguePoints: {}, + bountyHunter: {}, + lastManStanding: {}, bosses: {} } } @@ -193,9 +188,18 @@ Activities consist of all levels of clue scrolls as well as minigames: ```javascript [ - { rank: 1, rsn: 'Lynx Titan', level: 2277, xp: 4600000000, dead: false }, + { rank: 1, name: 'Lynx Titan', level: 2277, xp: 4600000000, dead: false }, {}, {}, // ... ]; ``` + +## Helpful Extras + +Get the properly formatted name of any skill, boss, clue or other activity: + +```javascript +// kril === "K'ril Tsutsaroth" +const kril = FORMATTED_BOSS_NAMES['krilTsutsaroth']; +``` diff --git a/__tests__/hiscores.test.ts b/__tests__/hiscores.test.ts index 0b43b01..78f026e 100644 --- a/__tests__/hiscores.test.ts +++ b/__tests__/hiscores.test.ts @@ -1,9 +1,10 @@ import { parseStats, - getRSNFormat, getSkillPage, getStats, getStatsByGamemode, + getRSNFormat, + Stats, } from '../src/index'; test('Parse CSV to json', () => { @@ -81,10 +82,10 @@ test('Parse CSV to json', () => { 1923,272 8484,1340 599,1694 - -1,-1 + 12489,435 3810,4583`; - expect(parseStats(csv)).toStrictEqual({ + const expectedOutput: Stats = { skills: { overall: { rank: 40258, level: 2063, xp: 218035714 }, attack: { rank: 20554, level: 99, xp: 21102621 }, @@ -111,11 +112,12 @@ test('Parse CSV to json', () => { hunter: { rank: 169127, level: 73, xp: 1067670 }, construction: { rank: 115543, level: 82, xp: 2546048 }, }, - bh: { + leaguePoints: { rank: -1, score: -1 }, + bountyHunter: { rogue: { rank: -1, score: -1 }, hunter: { rank: -1, score: -1 }, }, - lms: { rank: 32875, score: 500 }, + lastManStanding: { rank: 32875, score: 500 }, clues: { all: { rank: 24817, score: 476 }, beginner: { rank: 212728, score: 1 }, @@ -126,54 +128,56 @@ test('Parse CSV to json', () => { master: { rank: 6293, score: 51 }, }, bosses: { - abyssalsire: { rank: 374, score: 2780 }, - alchemicalhydra: { rank: 934, score: 3000 }, - barrowschests: { rank: 1936, score: 1452 }, + abyssalSire: { rank: 374, score: 2780 }, + alchemicalHydra: { rank: 934, score: 3000 }, + barrows: { rank: 1936, score: 1452 }, bryophyta: { rank: 4919, score: 23 }, - chambersofxeric: { rank: 101, score: 4038 }, - chambersofxericchallengemode: { rank: 152, score: 334 }, - chaoselemental: { rank: -1, score: -1 }, - chaosfanatic: { rank: -1, score: -1 }, - commanderzilyana: { rank: 6806, score: 603 }, - corporealbeast: { rank: 1, score: 17798 }, - crazyarchaeologist: { rank: 9160, score: 125 }, - dagannothprime: { rank: 1021, score: 2802 }, - dagannothrex: { rank: 4295, score: 1655 }, - dagannothsupreme: { rank: 959, score: 2951 }, - derangedarchaeologist: { rank: 10009, score: 1 }, - generalgraardor: { rank: 1271, score: 2407 }, - giantmole: { rank: 378, score: 4669 }, - grotesqueguardians: { rank: 543, score: 1567 }, + callisto: { rank: -1, score: -1 }, + cerberus: { rank: -1, score: -1 }, + chambersOfXeric: { rank: 101, score: 4038 }, + chambersOfXericChallengeMode: { rank: 152, score: 334 }, + chaosElemental: { rank: 6153, score: 133 }, + chaosFanatic: { rank: 4501, score: 250 }, + commanderZilyana: { rank: 6806, score: 603 }, + corporealBeast: { rank: 1, score: 17798 }, + crazyArchaeologist: { rank: 9160, score: 125 }, + dagannothPrime: { rank: 1021, score: 2802 }, + dagannothRex: { rank: 4295, score: 1655 }, + dagannothSupreme: { rank: 959, score: 2951 }, + derangedArchaeologist: { rank: 10009, score: 1 }, + generalGraardor: { rank: 1271, score: 2407 }, + giantMole: { rank: 378, score: 4669 }, + grotesqueGuardians: { rank: 543, score: 1567 }, hespori: { rank: 6003, score: 94 }, - kalphitequeen: { rank: 263, score: 2897 }, - kingblackdragon: { rank: 4000, score: 1277 }, + kalphiteQueen: { rank: 263, score: 2897 }, + kingBlackDragon: { rank: 4000, score: 1277 }, kraken: { rank: 41016, score: 1477 }, - kreearra: { rank: 617, score: 2391 }, - kriltsutsaroth: { rank: 120, score: 2981 }, + kreeArra: { rank: 617, score: 2391 }, + krilTsutsaroth: { rank: 120, score: 2981 }, mimic: { rank: 1, score: 109 }, obor: { rank: 26, score: 323 }, sarachnis: { rank: 198, score: 1101 }, scorpia: { rank: 81, score: 3404 }, skotizo: { rank: 5027, score: 61 }, gauntlet: { rank: 63, score: 375 }, - corruptedgauntlet: { rank: 2845, score: 6 }, - theatreofblood: { rank: 6913, score: 138 }, - thermonuclearsmokedevil: { rank: 3999, score: 2000 }, - tzkalzuk: { rank: 484, score: 8 }, - tztokjad: { rank: 957, score: 47 }, + corruptedGauntlet: { rank: 2845, score: 6 }, + theatreOfBlood: { rank: 6913, score: 138 }, + thermonuclearSmokeDevil: { rank: 3999, score: 2000 }, + tzKalZuk: { rank: 484, score: 8 }, + tzTokJad: { rank: 957, score: 47 }, venenatis: { rank: 10987, score: 223 }, vetion: { rank: 1923, score: 272 }, vorkath: { rank: 8484, score: 1340 }, wintertodt: { rank: 599, score: 1694 }, - zalcano: { rank: -1, score: -1 }, + zalcano: { rank: 12489, score: 435 }, zulrah: { rank: 3810, score: 4583 }, - callisto: { rank: -1, score: -1 }, - cerberus: { rank: -1, score: -1 }, }, - }); + }; + + expect(parseStats(csv)).toStrictEqual(expectedOutput); }); -test('Get rsn format', async () => { +test('Get name format', async () => { jest.setTimeout(30000); const data = await getRSNFormat('lYnX tiTaN'); expect(data).toBe('Lynx Titan'); @@ -184,169 +188,169 @@ test('Get attack top page', async () => { const data = await getSkillPage('attack'); expect(data).toMatchObject([ { - rsn: expect.any(String), + name: expect.any(String), rank: 1, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 2, level: 99, xp: 200000000, dead: false, }, - { rsn: 'Drakon', rank: 3, level: 99, xp: 200000000, dead: false }, + { name: 'Drakon', rank: 3, level: 99, xp: 200000000, dead: false }, { - rsn: expect.any(String), + name: expect.any(String), rank: 4, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 5, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 6, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 7, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 8, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 9, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 10, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 11, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 12, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 13, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 14, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 15, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 16, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 17, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 18, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 19, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 20, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 21, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 22, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 23, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 24, level: 99, xp: 200000000, dead: false, }, { - rsn: expect.any(String), + name: expect.any(String), rank: 25, level: 99, xp: 200000000, diff --git a/package.json b/package.json index 7653de0..de3ff02 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "scripts": { "dev": "watch 'yarn run build' src", "build": "tsc", + "format": "prettier --write \"src/**/*.ts\"", "test": "jest --config jestconfig.json", "prepublish": "yarn run build", "release": "np" @@ -43,6 +44,7 @@ "@types/jest": "^24.0.14", "jest": "^24.8.0", "np": "^5.0.3", + "prettier": "^1.19.1", "ts-jest": "^24.0.2", "tslint": "^5.17.0", "tslint-config-airbnb": "^5.11.1", diff --git a/src/hiscores.ts b/src/hiscores.ts index 5c03ee4..45ca8d7 100644 --- a/src/hiscores.ts +++ b/src/hiscores.ts @@ -14,7 +14,6 @@ import { ActivityName, PlayerActivityRow, Bosses, - LeagueStats, Boss, } from './types'; import { @@ -44,16 +43,16 @@ export async function getStats(rsn: string): Promise { const mainRes = await axios(getStatsURL('main', rsn)); if (mainRes.status === 200) { const otherResponses = await Promise.all([ - axios(getStatsURL('iron', rsn)).catch(err => err), - axios(getStatsURL('hc', rsn)).catch(err => err), - axios(getStatsURL('ult', rsn)).catch(err => err), + axios(getStatsURL('ironman', rsn)).catch(err => err), + axios(getStatsURL('hardcore', rsn)).catch(err => err), + axios(getStatsURL('ultimate', rsn)).catch(err => err), getRSNFormat(rsn), ]); const [ironRes, hcRes, ultRes, formattedName] = otherResponses; const player: Player = { - rsn: formattedName, + name: formattedName, mode: 'main', dead: false, deulted: false, @@ -62,32 +61,42 @@ export async function getStats(rsn: string): Promise { player.main = parseStats(mainRes.data); if (ironRes.status === 200) { - player.iron = parseStats(ironRes.data); + player.ironman = parseStats(ironRes.data); if (hcRes.status === 200) { - player.mode = 'hc'; - player.hc = parseStats(hcRes.data); - if (player.iron.skills.overall.xp !== player.hc.skills.overall.xp) { + player.mode = 'hardcore'; + player.hardcore = parseStats(hcRes.data); + if ( + player.ironman.skills.overall.xp !== player.hardcore.skills.overall.xp + ) { player.dead = true; - player.mode = 'iron'; + player.mode = 'ironman'; } - if (player.main.skills.overall.xp !== player.iron.skills.overall.xp) { + if ( + player.main.skills.overall.xp !== player.ironman.skills.overall.xp + ) { player.deironed = true; player.mode = 'main'; } } else if (ultRes.status === 200) { - player.mode = 'ult'; - player.ult = parseStats(ultRes.data); - if (player.iron.skills.overall.xp !== player.ult.skills.overall.xp) { + player.mode = 'ultimate'; + player.ultimate = parseStats(ultRes.data); + if ( + player.ironman.skills.overall.xp !== player.ultimate.skills.overall.xp + ) { player.deulted = true; - player.mode = 'iron'; + player.mode = 'ironman'; } - if (player.main.skills.overall.xp !== player.iron.skills.overall.xp) { + if ( + player.main.skills.overall.xp !== player.ironman.skills.overall.xp + ) { player.deironed = true; player.mode = 'main'; } } else { - player.mode = 'iron'; - if (player.main.skills.overall.xp !== player.iron.skills.overall.xp) { + player.mode = 'ironman'; + if ( + player.main.skills.overall.xp !== player.ironman.skills.overall.xp + ) { player.deironed = true; player.mode = 'main'; } @@ -99,10 +108,10 @@ export async function getStats(rsn: string): Promise { throw Error('Player not found'); } -export async function getStatsByGamemode( +export async function getStatsByGamemode( rsn: string, - mode: T = 'main' as T -): Promise { + mode: Gamemode = 'main' +): Promise { if (typeof rsn !== 'string') { throw Error('RSN must be a string'); } else if (!/^[a-zA-Z0-9 _]+$/.test(rsn)) { @@ -116,7 +125,7 @@ export async function getStatsByGamemode( if (response.status !== 200) { throw Error('Player not found'); } - const stats = parseStats(response.data, mode); + const stats = parseStats(response.data); return stats; } @@ -145,7 +154,7 @@ export async function getSkillPage( const [nameEl] = nameCell.children.filter(el => el.name === 'a'); return { - rsn: rsnFromElement(nameEl), + name: rsnFromElement(nameEl), rank: numberFromElement(rankEl), level: numberFromElement(levelEl), xp: numberFromElement(xpEl), @@ -180,7 +189,7 @@ export async function getActivityPage( const [nameEl] = nameCell.children.filter(el => el.name === 'a'); return { - rsn: rsnFromElement(nameEl), + name: rsnFromElement(nameEl), rank: numberFromElement(rankEl), score: numberFromElement(scoreEl), dead: nameCell.children.length === 4, @@ -213,10 +222,7 @@ export async function getRSNFormat(rsn: string): Promise { } } -export function parseStats( - csv: string, - mode: T = 'main' as T -): T extends 'leagues' ? LeagueStats : Stats { +export function parseStats(csv: string): Stats { const splitCSV = csv .split('\n') .filter(entry => !!entry) @@ -245,10 +251,10 @@ export function parseStats( return activity; }); - const [lp] = activityObjects.splice(0, 1); + const [leaguePoints] = activityObjects.splice(0, 1); const bhObjects = activityObjects.splice(0, BH_MODES.length); const clueObjects = activityObjects.splice(0, CLUES.length); - const [lms] = activityObjects.splice(0, 1); + const [lastManStanding] = activityObjects.splice(0, 1); const bossObjects = activityObjects.splice(0, BOSSES.length); const skills: Skills = skillObjects.reduce((prev, curr, index) => { @@ -257,7 +263,7 @@ export function parseStats( return newSkills; }, {} as Skills); - const bh: BH = bhObjects.reduce((prev, curr, index) => { + const bountyHunter: BH = bhObjects.reduce((prev, curr, index) => { const newBH = { ...prev }; newBH[BH_MODES[index]] = curr; return newBH; @@ -278,36 +284,29 @@ export function parseStats( const bosses: Bosses = bossObjects.reduce((prev, curr, index) => { const newBosses = { ...prev }; - newBosses[TEMPBOSSES[index]] = brokenBosses.includes(BOSSES[index]) - ? { rank: -1, score: -1 } - : curr; + + // TODO Remove as soon as Jagex's API is fixed + if (BOSSES[index] === brokenBosses[0]) { + brokenBosses.forEach(broken => { + newBosses[broken] = { + rank: -1, + score: -1, + }; + }); + } + + newBosses[TEMPBOSSES[index]] = curr; return newBosses; }, {} as Bosses); - // TODO Remove as soon as Jagex's API is fixed - brokenBosses.forEach(broken => { - bosses[broken] = { - rank: -1, - score: -1, - }; - }); - const stats: Stats = { skills, - bh, - lms, + leaguePoints, + bountyHunter, + lastManStanding, clues, bosses, }; - const leagueStats: LeagueStats = { - skills, - lp, - clues, - bosses, - }; - - return (mode === 'leagues' ? leagueStats : stats) as T extends 'leagues' - ? LeagueStats - : Stats; + return stats; } diff --git a/src/index.ts b/src/index.ts index b598c9a..5e39e4f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,5 +2,6 @@ import * as hiscores from './hiscores'; export * from './hiscores'; export * from './types'; +export * from './utils'; export default hiscores; diff --git a/src/types.ts b/src/types.ts index e93b460..d42941c 100644 --- a/src/types.ts +++ b/src/types.ts @@ -1,11 +1,11 @@ export type Gamemode = | 'main' - | 'iron' - | 'hc' - | 'ult' - | 'dmm' - | 'dmmt' - | 'leagues'; + | 'ironman' + | 'ultimate' + | 'hardcore' + | 'deadman' + | 'seasonal' + | 'tournament'; export interface Skill { rank: number; @@ -62,43 +62,43 @@ export type BHType = 'rogue' | 'hunter'; export type BH = { [Type in BHType]: Activity }; export type Boss = - | 'abyssalsire' - | 'alchemicalhydra' - | 'barrowschests' + | 'abyssalSire' + | 'alchemicalHydra' + | 'barrows' | 'bryophyta' | 'callisto' | 'cerberus' - | 'chambersofxeric' - | 'chambersofxericchallengemode' - | 'chaoselemental' - | 'chaosfanatic' - | 'commanderzilyana' - | 'corporealbeast' - | 'crazyarchaeologist' - | 'dagannothprime' - | 'dagannothrex' - | 'dagannothsupreme' - | 'derangedarchaeologist' - | 'generalgraardor' - | 'giantmole' - | 'grotesqueguardians' + | 'chambersOfXeric' + | 'chambersOfXericChallengeMode' + | 'chaosElemental' + | 'chaosFanatic' + | 'commanderZilyana' + | 'corporealBeast' + | 'crazyArchaeologist' + | 'dagannothPrime' + | 'dagannothRex' + | 'dagannothSupreme' + | 'derangedArchaeologist' + | 'generalGraardor' + | 'giantMole' + | 'grotesqueGuardians' | 'hespori' - | 'kalphitequeen' - | 'kingblackdragon' + | 'kalphiteQueen' + | 'kingBlackDragon' | 'kraken' - | 'kreearra' - | 'kriltsutsaroth' + | 'kreeArra' + | 'krilTsutsaroth' | 'mimic' | 'obor' | 'sarachnis' | 'scorpia' | 'skotizo' | 'gauntlet' - | 'corruptedgauntlet' - | 'theatreofblood' - | 'thermonuclearsmokedevil' - | 'tzkalzuk' - | 'tztokjad' + | 'corruptedGauntlet' + | 'theatreOfBlood' + | 'thermonuclearSmokeDevil' + | 'tzKalZuk' + | 'tzTokJad' | 'venenatis' | 'vetion' | 'vorkath' @@ -109,34 +109,30 @@ export type Boss = export type Bosses = { [Type in Boss]: Activity }; export type ActivityName = - | 'hunterbh' - | 'roguebh' - | 'lms' - | 'allclues' - | 'beginnerclues' - | 'easyclues' - | 'mediumclues' - | 'hardclues' - | 'eliteclues' - | 'masterclues' + | 'hunterBH' + | 'rogueBH' + | 'lastManStanding' + | 'allClues' + | 'beginnerClues' + | 'easyClues' + | 'mediumClues' + | 'hardClues' + | 'eliteClues' + | 'masterClues' | Boss; export interface Stats { skills: Skills; clues: Clues; - bh: BH; - lms: Activity; + leaguePoints: Activity; + bountyHunter: BH; + lastManStanding: Activity; bosses: Bosses; } - -export interface LeagueStats extends Omit { - lp: Activity; -} - export type Modes = { [M in Gamemode]?: Stats }; export interface Player extends Modes { - rsn: string; + name: string; mode: Gamemode; dead: boolean; deulted: boolean; @@ -144,11 +140,11 @@ export interface Player extends Modes { } export interface PlayerSkillRow extends Skill { - rsn: string; + name: string; dead: boolean; } export interface PlayerActivityRow extends Activity { - rsn: string; + name: string; dead: boolean; } diff --git a/src/utils/constants.ts b/src/utils/constants.ts index a101ba5..f06bd18 100644 --- a/src/utils/constants.ts +++ b/src/utils/constants.ts @@ -1,16 +1,28 @@ -import { SkillName, ClueType, BHType, Gamemode, Boss } from '../types'; +import { + BHType, + Boss, + ClueType, + Gamemode, + SkillName, + ActivityName, +} from '../types'; export const BASE_URL = 'http://services.runescape.com/m=hiscore_oldschool'; export const STATS_URL = 'index_lite.ws?player='; export const SCORES_URL = 'overall.ws?'; -export const GAMEMODE_URL = { - dmm: '_deadman/', - dmmt: '_tournament/', - hc: '_hardcore_ironman/', - iron: '_ironman/', - main: '/', - leagues: '_seasonal/', - ult: '_ultimate/', + +export type GamemodeUrl = { + [key in Gamemode]: string; +}; + +export const GAMEMODE_URL: GamemodeUrl = { + main: `${BASE_URL}/`, + ironman: `${BASE_URL}_ironman`, + hardcore: `${BASE_URL}_hardcore_ironman`, + ultimate: `${BASE_URL}_ultimate`, + deadman: `${BASE_URL}_deadman`, + seasonal: `${BASE_URL}_seasonal`, + tournament: `${BASE_URL}_tournament`, }; export const SKILLS: SkillName[] = [ 'overall', @@ -48,65 +60,65 @@ export const CLUES: ClueType[] = [ 'master', ]; export const BH_MODES: BHType[] = ['rogue', 'hunter']; -export const ACTIVITIES = [ - 'hunterbh', - 'roguebh', - 'lms', - 'allclues', - 'beginnerclues', - 'easyclues', - 'mediumclues', - 'hardclues', - 'eliteclues', - 'masterclues', +export const ACTIVITIES: ActivityName[] = [ + 'hunterBH', + 'rogueBH', + 'lastManStanding', + 'allClues', + 'beginnerClues', + 'easyClues', + 'mediumClues', + 'hardClues', + 'eliteClues', + 'masterClues', ]; export const GAMEMODES: Gamemode[] = [ 'main', - 'iron', - 'hc', - 'ult', - 'dmm', - 'dmmt', - 'leagues', + 'ironman', + 'hardcore', + 'ultimate', + 'deadman', + 'seasonal', + 'tournament', ]; export const BOSSES: Boss[] = [ - 'abyssalsire', - 'alchemicalhydra', - 'barrowschests', + 'abyssalSire', + 'alchemicalHydra', + 'barrows', 'bryophyta', - 'chambersofxeric', - 'chambersofxericchallengemode', 'callisto', 'cerberus', - 'chaoselemental', - 'chaosfanatic', - 'commanderzilyana', - 'corporealbeast', - 'crazyarchaeologist', - 'dagannothprime', - 'dagannothrex', - 'dagannothsupreme', - 'derangedarchaeologist', - 'generalgraardor', - 'giantmole', - 'grotesqueguardians', + 'chambersOfXeric', + 'chambersOfXericChallengeMode', + 'chaosElemental', + 'chaosFanatic', + 'commanderZilyana', + 'corporealBeast', + 'crazyArchaeologist', + 'dagannothPrime', + 'dagannothRex', + 'dagannothSupreme', + 'derangedArchaeologist', + 'generalGraardor', + 'giantMole', + 'grotesqueGuardians', 'hespori', - 'kalphitequeen', - 'kingblackdragon', + 'kalphiteQueen', + 'kingBlackDragon', 'kraken', - 'kreearra', - 'kriltsutsaroth', + 'kreeArra', + 'krilTsutsaroth', 'mimic', 'obor', 'sarachnis', 'scorpia', 'skotizo', 'gauntlet', - 'corruptedgauntlet', - 'theatreofblood', - 'thermonuclearsmokedevil', - 'tzkalzuk', - 'tztokjad', + 'corruptedGauntlet', + 'theatreOfBlood', + 'thermonuclearSmokeDevil', + 'tzKalZuk', + 'tzTokJad', 'venenatis', 'vetion', 'vorkath', @@ -114,3 +126,110 @@ export const BOSSES: Boss[] = [ 'zalcano', 'zulrah', ]; + +export type FormattedBossNames = { + [key in Boss]: string; +}; + +export const FORMATTED_BOSS_NAMES: FormattedBossNames = { + abyssalSire: 'Abyssal Sire', + alchemicalHydra: 'Alchemical Hydra', + barrows: 'Barrows Chests', + bryophyta: 'Bryophyta', + callisto: 'Callisto', + cerberus: 'Cerberus', + chambersOfXeric: 'Chambers of Xeric', + chambersOfXericChallengeMode: 'Chambers of Xeric: Challenge Mode', + chaosElemental: 'Chaos Elemental', + chaosFanatic: 'Chaos Fanatic', + commanderZilyana: 'Commander Zilyana', + corporealBeast: 'Corporeal Beast', + crazyArchaeologist: 'Crazy Archaeologist', + dagannothPrime: 'Dagannoth Prime', + dagannothRex: 'Dagannoth Rex', + dagannothSupreme: 'Dagannoth Supreme', + derangedArchaeologist: 'Deranged Archaeologist', + generalGraardor: 'General Graardor', + giantMole: 'Giant Mole', + grotesqueGuardians: 'Grotesque Guardians', + hespori: 'Hespori', + kalphiteQueen: 'Kalphite Queen', + kingBlackDragon: 'King Black Dragon', + kraken: 'Kraken', + kreeArra: "Kree'Arra", + krilTsutsaroth: "K'ril Tsutsaroth", + mimic: 'Mimic', + obor: 'Obor', + sarachnis: 'Sarachnis', + scorpia: 'Scorpia', + skotizo: 'Skotizo', + gauntlet: 'The Gauntlet', + corruptedGauntlet: 'The Corrupted Gauntlet', + theatreOfBlood: 'Theatre of Blood', + thermonuclearSmokeDevil: 'Thermonuclear Smoke Devil', + tzKalZuk: 'TzKal-Zuk', + tzTokJad: 'TzTok-Jad', + venenatis: 'Venenatis', + vetion: "Vet'ion", + vorkath: 'Vorkath', + wintertodt: 'Wintertodt', + zalcano: 'Zalcano', + zulrah: 'Zulrah', +}; + +export type FormattedSkillNames = { + [key in SkillName]: string; +}; + +export const FORMATTED_SKILL_NAMES: FormattedSkillNames = { + overall: 'Overall', + attack: 'Attack', + defence: 'Defence', + strength: 'Strength', + hitpoints: 'Hitpoints', + ranged: 'Ranged', + prayer: 'Prayer', + magic: 'Magic', + cooking: 'Cooking', + woodcutting: 'Woodcutting', + fletching: 'Fletching', + fishing: 'Fishing', + firemaking: 'Firemaking', + crafting: 'Crafting', + smithing: 'Smithing', + mining: 'Mining', + herblore: 'Herblore', + agility: 'Agility', + thieving: 'Thieving', + slayer: 'Slayer', + farming: 'Farming', + runecraft: 'Runecraft', + hunter: 'Hunter', + construction: 'Construction', +}; + +export type FormattedClueNames = { + [key in ClueType]: string; +}; + +export const FORMATTED_CLUE_NAMES: FormattedClueNames = { + all: 'Clue Scrolls (all)', + beginner: 'Clue Scrolls (beginner)', + easy: 'Clue Scrolls (easy)', + medium: 'Clue Scrolls (medium)', + hard: 'Clue Scrolls (hard)', + elite: 'Clue Scrolls (elite)', + master: 'Clue Scrolls (master)', +}; + +export type FormattedBHNames = { + [key in BHType]: string; +}; + +export const FORMATTED_BH_NAMES: FormattedBHNames = { + rogue: 'Bounty Hunter - Rogue', + hunter: 'Bounty Hunter - Hunter', +}; + +export const FORMATTED_LMS = 'Last Man Standing'; +export const FORMATTED_LEAGUE_POINTS = 'League Points'; diff --git a/src/utils/helpers.ts b/src/utils/helpers.ts index b211995..52dc209 100644 --- a/src/utils/helpers.ts +++ b/src/utils/helpers.ts @@ -1,6 +1,5 @@ import { Gamemode, SkillName, ActivityName } from '../types'; import { - BASE_URL, GAMEMODE_URL, STATS_URL, SCORES_URL, @@ -9,19 +8,19 @@ import { } from './constants'; export const getStatsURL = (gamemode: Gamemode, rsn: string) => - `${BASE_URL}${GAMEMODE_URL[gamemode]}${STATS_URL}${encodeURIComponent(rsn)}`; + `${GAMEMODE_URL[gamemode]}${STATS_URL}${encodeURIComponent(rsn)}`; export const getPlayerTableURL = (gamemode: Gamemode, rsn: string) => - `${BASE_URL}${ - GAMEMODE_URL[gamemode] - }${SCORES_URL}table=0&user=${encodeURIComponent(rsn)}`; + `${GAMEMODE_URL[gamemode]}${SCORES_URL}table=0&user=${encodeURIComponent( + rsn + )}`; export const getSkillPageURL = ( gamemode: Gamemode, skill: SkillName, page: number ) => - `${BASE_URL}${GAMEMODE_URL[gamemode]}${SCORES_URL}table=${SKILLS.indexOf( + `${GAMEMODE_URL[gamemode]}${SCORES_URL}table=${SKILLS.indexOf( skill )}&page=${page}`; @@ -30,7 +29,7 @@ export const getActivityPageURL = ( activity: ActivityName, page: number ) => - `${BASE_URL}${ + `${ GAMEMODE_URL[gamemode] }${SCORES_URL}category_type=1&table=${ACTIVITIES.indexOf( activity diff --git a/yarn.lock b/yarn.lock index 752abf2..f67fd09 100644 --- a/yarn.lock +++ b/yarn.lock @@ -447,11 +447,6 @@ abab@^2.0.0: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - acorn-globals@^4.1.0: version "4.3.4" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" @@ -562,19 +557,6 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -971,11 +953,6 @@ cheerio@^1.0.0-rc.3: lodash "^4.15.0" parse5 "^3.0.1" -chownr@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -1115,11 +1092,6 @@ configstore@^4.0.0: write-file-atomic "^2.0.0" xdg-basedir "^3.0.0" -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - convert-source-map@^1.4.0, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -1132,7 +1104,7 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= @@ -1250,13 +1222,6 @@ debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - debug@^4.1.0, debug@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -1351,16 +1316,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - detect-newline@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" @@ -1823,13 +1778,6 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -1848,20 +1796,6 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - get-caller-file@^2.0.0, get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -2018,11 +1952,6 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -2116,20 +2045,13 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== -iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - import-fresh@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" @@ -2169,7 +2091,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: +inherits@2, inherits@^2.0.1, inherits@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -2516,7 +2438,7 @@ isarray@0.0.1: resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= -isarray@1.0.0, isarray@~1.0.0: +isarray@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -3446,21 +3368,6 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -3469,7 +3376,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.x, mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.x, mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -3523,15 +3430,6 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - neo-async@^2.6.0: version "2.6.1" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.1.tgz#ac27ada66167fa8849a6addd837f6b189ad2081c" @@ -3563,30 +3461,6 @@ node-notifier@^5.4.2: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -3648,13 +3522,6 @@ np@^5.0.3: terminal-link "^2.0.0" update-notifier "^3.0.0" -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - npm-name@^5.4.0: version "5.5.0" resolved "https://registry.yarnpkg.com/npm-name/-/npm-name-5.5.0.tgz#3a73adbcb0488a41a44ff820ed51dcc32c72bd09" @@ -3668,19 +3535,6 @@ npm-name@^5.4.0: registry-url "^5.1.0" validate-npm-package-name "^3.0.0" -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.7" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" - integrity sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -3695,16 +3549,6 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -3831,24 +3675,11 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - ow@^0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/ow/-/ow-0.15.0.tgz#0d928046989422d7b06f0d6f20017016a0373df5" @@ -4118,6 +3949,11 @@ prepend-http@^2.0.0: resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= +prettier@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" + integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== + pretty-format@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.9.0.tgz#12fac31b37019a4eea3c11aa9a959eb7628aa7c9" @@ -4128,11 +3964,6 @@ pretty-format@^24.9.0: ansi-styles "^3.2.0" react-is "^16.8.4" -process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - prompts@^2.0.1: version "2.3.0" resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.3.0.tgz#a444e968fa4cc7e86689a74050685ac8006c4cc4" @@ -4179,7 +4010,7 @@ quick-lru@^1.0.0: resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= -rc@^1.2.7, rc@^1.2.8: +rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== @@ -4238,19 +4069,6 @@ read-pkg@^5.2.0: parse-json "^5.0.0" type-fest "^0.6.0" -readable-stream@^2.0.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - readable-stream@^3.1.1: version "3.4.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.4.0.tgz#a51c26754658e0a3c21dbf59163bd45ba6f447fc" @@ -4427,7 +4245,7 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: +rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -4458,7 +4276,7 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== -safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== @@ -4517,7 +4335,7 @@ semver@^6.0.0, semver@^6.1.2, semver@^6.2.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -4740,7 +4558,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: +string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -4789,13 +4607,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -4893,19 +4704,6 @@ symbol-tree@^3.2.2: resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== -tar@^4.4.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" @@ -5248,7 +5046,7 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== -util-deprecate@^1.0.1, util-deprecate@~1.0.1: +util-deprecate@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= @@ -5366,13 +5164,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - widest-line@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" @@ -5457,7 +5248,7 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==