mirror of
https://github.com/maxswa/osrs-json-hiscores.git
synced 2025-10-15 10:19:04 +00:00
Compare commits
50 Commits
add-tob-ha
...
v2.8.0
Author | SHA1 | Date | |
---|---|---|---|
![]() |
eebf76a34c | ||
![]() |
e60442a7ce | ||
![]() |
1132a085e1 | ||
![]() |
a2a34a46e3 | ||
![]() |
71a76a12fd | ||
![]() |
3a72315498 | ||
![]() |
c1c9833ad0 | ||
![]() |
9fe03746e1 | ||
![]() |
66a4fb47a6 | ||
![]() |
83c44148a7 | ||
![]() |
44dea6b35c | ||
![]() |
0bf491638c | ||
![]() |
febca534b0 | ||
![]() |
8daee5c39b | ||
![]() |
f98cf8aaaa | ||
![]() |
5d9f6a6bac | ||
![]() |
8737b50a82 | ||
![]() |
1255e7e3d2 | ||
![]() |
f4135d0b0f | ||
![]() |
6135ff459c | ||
![]() |
9fb7e4cebc | ||
![]() |
11350b2444 | ||
![]() |
e0d6c5b20f | ||
![]() |
c8a4440ac3 | ||
![]() |
f3781cf142 | ||
![]() |
5fbc04217b | ||
![]() |
eb5d0ba49f | ||
![]() |
c68e3bebea | ||
![]() |
aa6fd6f39a | ||
![]() |
cc9aae8ced | ||
![]() |
12882b4e34 | ||
![]() |
b17a8b9299 | ||
![]() |
50f2c19257 | ||
![]() |
d892f8e67b | ||
![]() |
af5664ae6e | ||
![]() |
20c5c2f730 | ||
![]() |
04e59cff04 | ||
![]() |
ad2249ba76 | ||
![]() |
5c52bfd883 | ||
![]() |
947d994cdf | ||
![]() |
130446ab74 | ||
![]() |
f96e7e3e2d | ||
![]() |
90d66b6b2c | ||
![]() |
14cedb5877 | ||
![]() |
4703812b52 | ||
![]() |
a11ac96f68 | ||
![]() |
f97caa6a15 | ||
![]() |
e7e54741d2 | ||
![]() |
062e5e02b2 | ||
![]() |
ed7036f9c0 |
@@ -110,6 +110,7 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
|
||||
| Bounty Hunter (Hunter) | `hunterBH` |
|
||||
| Last Man Standing | `lastManStanding` |
|
||||
| Soul Wars Zeal | `soulWarsZeal` |
|
||||
| Rifts Closed | `riftsClosed` |
|
||||
|
||||
### Leagues
|
||||
|
||||
@@ -148,7 +149,9 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
|
||||
| Kreearra | `kreeArra` |
|
||||
| K'ril Tsutsaroth | `krilTsutsaroth` |
|
||||
| Mimic | `mimic` |
|
||||
| Nex | `nex` |
|
||||
| The Nightmare of Ashihama | `nightmare` |
|
||||
| Phosani's Nightmare | `phosanisNightmare` |
|
||||
| Obor | `obor` |
|
||||
| Sarachnis | `sarachnis` |
|
||||
| Scorpia | `scorpia` |
|
||||
@@ -191,6 +194,7 @@ Activities consist of all levels of clue scrolls as well as minigames and bosses
|
||||
bountyHunter: {},
|
||||
lastManStanding: {},
|
||||
soulWarsZeal: {},
|
||||
riftsClosed: {},
|
||||
bosses: {}
|
||||
}
|
||||
}
|
||||
|
@@ -10,7 +10,9 @@ import {
|
||||
Stats,
|
||||
getPlayerTableURL,
|
||||
getSkillPageURL,
|
||||
getStatsURL
|
||||
getStatsURL,
|
||||
BOSSES,
|
||||
INVALID_FORMAT_ERROR
|
||||
} from '../src/index';
|
||||
|
||||
const B0ATY_NAME = 'B0ATY';
|
||||
@@ -86,6 +88,7 @@ test('Parse CSV to json', () => {
|
||||
1,6143
|
||||
4814,898
|
||||
37,225
|
||||
25,1110
|
||||
382,2780
|
||||
944,3000
|
||||
1981,1452
|
||||
@@ -113,7 +116,9 @@ test('Parse CSV to json', () => {
|
||||
625,2391
|
||||
120,2981
|
||||
1,109
|
||||
99,39002
|
||||
3,22666
|
||||
2,84
|
||||
26,323
|
||||
201,1101
|
||||
82,3404
|
||||
@@ -167,6 +172,7 @@ test('Parse CSV to json', () => {
|
||||
},
|
||||
lastManStanding: { rank: 4814, score: 898 },
|
||||
soulWarsZeal: { rank: 37, score: 225 },
|
||||
riftsClosed: { rank: 25, score: 1110 },
|
||||
clues: {
|
||||
all: { rank: 32, score: 12148 },
|
||||
beginner: { rank: 3105, score: 76 },
|
||||
@@ -204,7 +210,9 @@ test('Parse CSV to json', () => {
|
||||
kreeArra: { rank: 625, score: 2391 },
|
||||
krilTsutsaroth: { rank: 120, score: 2981 },
|
||||
mimic: { rank: 1, score: 109 },
|
||||
nex: { rank: 99, score: 39002 },
|
||||
nightmare: { rank: 3, score: 22666 },
|
||||
phosanisNightmare: { rank: 2, score: 84 },
|
||||
obor: { rank: 26, score: 323 },
|
||||
sarachnis: { rank: 201, score: 1101 },
|
||||
scorpia: { rank: 82, score: 3404 },
|
||||
@@ -229,6 +237,16 @@ test('Parse CSV to json', () => {
|
||||
expect(parseStats(csv)).toStrictEqual(expectedOutput);
|
||||
});
|
||||
|
||||
test('Parse CSV with unknown activity', () => {
|
||||
const statsWithUnknownActivity = lynxTitanStats + `
|
||||
-1,-1`;
|
||||
expect(() => parseStats(statsWithUnknownActivity)).toThrow(INVALID_FORMAT_ERROR);
|
||||
});
|
||||
|
||||
test('Parse invalid CSV', () => {
|
||||
expect(() => parseStats('invalid')).toThrow(INVALID_FORMAT_ERROR);
|
||||
});
|
||||
|
||||
describe('Get name format', () => {
|
||||
it('gets a name with a space', async () => {
|
||||
const data = await getRSNFormat(LYNX_TITAN_SPACE_NAME);
|
||||
@@ -441,7 +459,10 @@ test('Get non-existent player', async () => {
|
||||
});
|
||||
|
||||
test('Get stats by gamemode', async () => {
|
||||
const { skills } = await getStatsByGamemode(LYNX_TITAN_FORMATTED_NAME);
|
||||
const { skills, bosses } = await getStatsByGamemode(
|
||||
LYNX_TITAN_FORMATTED_NAME
|
||||
);
|
||||
|
||||
expect(skills).toMatchObject({
|
||||
overall: { rank: expect.any(Number), level: 2277, xp: 4600000000 },
|
||||
attack: { rank: expect.any(Number), level: 99, xp: 200000000 },
|
||||
@@ -468,4 +489,9 @@ test('Get stats by gamemode', async () => {
|
||||
hunter: { rank: expect.any(Number), level: 99, xp: 200000000 },
|
||||
construction: { rank: expect.any(Number), level: 99, xp: 200000000 }
|
||||
});
|
||||
|
||||
const bossKeys = Object.keys(bosses);
|
||||
expect(bossKeys).toStrictEqual(BOSSES);
|
||||
|
||||
expect.assertions(2);
|
||||
});
|
||||
|
@@ -15,7 +15,7 @@
|
||||
3,99,200000000
|
||||
25,99,200000000
|
||||
5,99,200000000
|
||||
24,99,200000000
|
||||
23,99,200000000
|
||||
12,99,200000000
|
||||
2,99,200000000
|
||||
19,99,200000000
|
||||
@@ -29,7 +29,11 @@
|
||||
-1,-1
|
||||
-1,-1
|
||||
-1,-1
|
||||
344430,22
|
||||
347584,22
|
||||
-1,-1
|
||||
-1,-1
|
||||
-1,-1
|
||||
-1,-1
|
||||
-1,-1
|
||||
-1,-1
|
||||
-1,-1
|
||||
|
Can't render this file because it has a wrong number of fields in line 25.
|
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "osrs-json-hiscores",
|
||||
"version": "2.4.2",
|
||||
"version": "2.8.0",
|
||||
"description": "The Old School Runescape API wrapper that does more!",
|
||||
"main": "lib/index.js",
|
||||
"types": "lib/index.d.ts",
|
||||
|
@@ -27,7 +27,8 @@ import {
|
||||
rsnFromElement,
|
||||
getActivityPageURL,
|
||||
httpGet,
|
||||
BOSSES
|
||||
BOSSES,
|
||||
INVALID_FORMAT_ERROR
|
||||
} from './utils';
|
||||
|
||||
/**
|
||||
@@ -74,6 +75,10 @@ export function parseStats(csv: string): Stats {
|
||||
.filter((entry) => !!entry)
|
||||
.map((stat) => stat.split(','));
|
||||
|
||||
if (splitCSV.length !== SKILLS.length + BH_MODES.length + CLUES.length + BOSSES.length + 4) {
|
||||
throw Error(INVALID_FORMAT_ERROR);
|
||||
}
|
||||
|
||||
const skillObjects: Skill[] = splitCSV
|
||||
.filter((stat) => stat.length === 3)
|
||||
.map((stat) => {
|
||||
@@ -100,7 +105,7 @@ export function parseStats(csv: string): Stats {
|
||||
const [leaguePoints] = activityObjects.splice(0, 1);
|
||||
const bhObjects = activityObjects.splice(0, BH_MODES.length);
|
||||
const clueObjects = activityObjects.splice(0, CLUES.length);
|
||||
const [lastManStanding, soulWarsZeal] = activityObjects.splice(0, 2);
|
||||
const [lastManStanding, soulWarsZeal, riftsClosed] = activityObjects.splice(0, 3);
|
||||
const bossObjects = activityObjects.splice(0, BOSSES.length);
|
||||
|
||||
const skills: Skills = skillObjects.reduce<Skills>((prev, curr, index) => {
|
||||
@@ -133,6 +138,7 @@ export function parseStats(csv: string): Stats {
|
||||
bountyHunter,
|
||||
lastManStanding,
|
||||
soulWarsZeal,
|
||||
riftsClosed,
|
||||
clues,
|
||||
bosses
|
||||
};
|
||||
|
@@ -89,7 +89,9 @@ export type Boss =
|
||||
| 'kreeArra'
|
||||
| 'krilTsutsaroth'
|
||||
| 'mimic'
|
||||
| 'nex'
|
||||
| 'nightmare'
|
||||
| 'phosanisNightmare'
|
||||
| 'obor'
|
||||
| 'sarachnis'
|
||||
| 'scorpia'
|
||||
@@ -117,6 +119,7 @@ export type ActivityName =
|
||||
| 'rogueBH'
|
||||
| 'lastManStanding'
|
||||
| 'soulWarsZeal'
|
||||
| 'riftsClosed'
|
||||
| 'allClues'
|
||||
| 'beginnerClues'
|
||||
| 'easyClues'
|
||||
@@ -133,6 +136,7 @@ export interface Stats {
|
||||
bountyHunter: BH;
|
||||
lastManStanding: Activity;
|
||||
soulWarsZeal: Activity;
|
||||
riftsClosed: Activity;
|
||||
bosses: Bosses;
|
||||
}
|
||||
export type Modes = { [M in Gamemode]?: Stats };
|
||||
|
@@ -97,7 +97,9 @@ export const BOSSES: Boss[] = [
|
||||
'kreeArra',
|
||||
'krilTsutsaroth',
|
||||
'mimic',
|
||||
'nex',
|
||||
'nightmare',
|
||||
'phosanisNightmare',
|
||||
'obor',
|
||||
'sarachnis',
|
||||
'scorpia',
|
||||
@@ -130,6 +132,7 @@ export const ACTIVITIES: ActivityName[] = [
|
||||
'masterClues',
|
||||
'lastManStanding',
|
||||
'soulWarsZeal',
|
||||
'riftsClosed',
|
||||
...BOSSES
|
||||
];
|
||||
|
||||
@@ -165,7 +168,9 @@ export const FORMATTED_BOSS_NAMES: FormattedBossNames = {
|
||||
kreeArra: "Kree'Arra",
|
||||
krilTsutsaroth: "K'ril Tsutsaroth",
|
||||
mimic: 'Mimic',
|
||||
nex: 'Nex',
|
||||
nightmare: 'The Nightmare of Ashihama',
|
||||
phosanisNightmare: "Phosani's Nightmare",
|
||||
obor: 'Obor',
|
||||
sarachnis: 'Sarachnis',
|
||||
scorpia: 'Scorpia',
|
||||
@@ -243,3 +248,6 @@ export const FORMATTED_BH_NAMES: FormattedBHNames = {
|
||||
export const FORMATTED_LMS = 'Last Man Standing';
|
||||
export const FORMATTED_SOUL_WARS = 'Soul Wars Zeal';
|
||||
export const FORMATTED_LEAGUE_POINTS = 'League Points';
|
||||
export const FORMATTED_RIFTS_CLOSED = 'Rifts Closed';
|
||||
|
||||
export const INVALID_FORMAT_ERROR = 'Invalid hiscores format';
|
||||
|
@@ -4,7 +4,12 @@
|
||||
"module": "commonjs",
|
||||
"declaration": true,
|
||||
"outDir": "./lib",
|
||||
"strict": true
|
||||
"strict": true,
|
||||
"lib": ["ES2015", "DOM", "DOM.Iterable"],
|
||||
"typeRoots": [
|
||||
"./node_modules/@types",
|
||||
"./src/@types"
|
||||
]
|
||||
},
|
||||
"include": ["src"],
|
||||
"exclude": ["node_modules", "**/__tests__/*"]
|
||||
|
52
yarn.lock
52
yarn.lock
@@ -1108,11 +1108,11 @@ axe-core@^4.0.2:
|
||||
integrity sha512-vwPpH4Aj4122EW38mxO/fxhGKtwWTMLDIJfZ1He0Edbtjcfna/R3YB67yVhezUMzqc3Jr3+Ii50KRntlENL4xQ==
|
||||
|
||||
axios@^0.21.1:
|
||||
version "0.21.1"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.1.tgz#22563481962f4d6bde9a76d516ef0e5d3c09b2b8"
|
||||
integrity sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==
|
||||
version "0.21.2"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.2.tgz#21297d5084b2aeeb422f5d38e7be4fbb82239017"
|
||||
integrity sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg==
|
||||
dependencies:
|
||||
follow-redirects "^1.10.0"
|
||||
follow-redirects "^1.14.0"
|
||||
|
||||
axobject-query@^2.2.0:
|
||||
version "2.2.0"
|
||||
@@ -2459,10 +2459,10 @@ flatted@^3.1.0:
|
||||
resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469"
|
||||
integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==
|
||||
|
||||
follow-redirects@^1.10.0:
|
||||
version "1.13.1"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.1.tgz#5f69b813376cee4fd0474a3aba835df04ab763b7"
|
||||
integrity sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==
|
||||
follow-redirects@^1.14.0:
|
||||
version "1.14.8"
|
||||
resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.8.tgz#016996fb9a11a100566398b1c6839337d7bfa8fc"
|
||||
integrity sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==
|
||||
|
||||
for-in@^1.0.2:
|
||||
version "1.0.2"
|
||||
@@ -2775,9 +2775,9 @@ has@^1.0.3:
|
||||
function-bind "^1.1.1"
|
||||
|
||||
hosted-git-info@^2.1.4:
|
||||
version "2.8.8"
|
||||
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488"
|
||||
integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==
|
||||
version "2.8.9"
|
||||
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
|
||||
integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
|
||||
|
||||
hosted-git-info@^3.0.0:
|
||||
version "3.0.8"
|
||||
@@ -4295,9 +4295,9 @@ minimist-options@^4.0.2:
|
||||
kind-of "^6.0.3"
|
||||
|
||||
minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
|
||||
version "1.2.5"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
|
||||
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
|
||||
version "1.2.6"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
|
||||
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
|
||||
|
||||
mixin-deep@^1.2.0:
|
||||
version "1.3.2"
|
||||
@@ -4411,9 +4411,9 @@ normalize-path@^3.0.0:
|
||||
integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
|
||||
|
||||
normalize-url@^4.1.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129"
|
||||
integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==
|
||||
version "4.5.1"
|
||||
resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a"
|
||||
integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==
|
||||
|
||||
normalize-version@^1.0.5:
|
||||
version "1.0.5"
|
||||
@@ -4837,9 +4837,9 @@ path-key@^3.0.0, path-key@^3.1.0:
|
||||
integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
|
||||
|
||||
path-parse@^1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c"
|
||||
integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
|
||||
version "1.0.7"
|
||||
resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
|
||||
integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
|
||||
|
||||
path-type@^2.0.0:
|
||||
version "2.0.0"
|
||||
@@ -5892,9 +5892,9 @@ tmp@^0.0.33:
|
||||
os-tmpdir "~1.0.2"
|
||||
|
||||
tmpl@1.0.x:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
|
||||
integrity sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc"
|
||||
integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==
|
||||
|
||||
to-fast-properties@^2.0.0:
|
||||
version "2.0.0"
|
||||
@@ -5968,9 +5968,9 @@ tr46@^2.0.2:
|
||||
punycode "^2.1.1"
|
||||
|
||||
trim-newlines@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.0.tgz#79726304a6a898aa8373427298d54c2ee8b1cb30"
|
||||
integrity sha512-C4+gOpvmxaSMKuEf9Qc134F1ZuOHVXKRbtEflf4NTtuuJDEIJ9p5PXsalL8SkeRw+qit1Mo+yuvMPAKwWg/1hA==
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
|
||||
integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
|
||||
|
||||
ts-jest@^26.5.4:
|
||||
version "26.5.4"
|
||||
|
Reference in New Issue
Block a user