osrs-tools 2.3.3 → 2.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (280) hide show
  1. package/README.md +8 -0
  2. package/dist/runescape/model/slayer/SlayerBuys.js +29 -0
  3. package/package.json +29 -60
  4. package/dist/out-tsc/source/runescape/model/slayer/SlayerBuys.js +0 -30
  5. package/dist/out-tsc/test/resources/A_Squeezer_Main_Data.js +0 -474
  6. package/dist/out-tsc/test/unit/account/OsrsAccount.test.js +0 -76
  7. package/dist/out-tsc/test/unit/quest/Quest.test.js +0 -96
  8. package/dist/out-tsc/test/unit/quest/QuestTool.test.js +0 -193
  9. package/dist/out-tsc/test/unit/quest/mockQuests.js +0 -75
  10. package/dist/out-tsc/test/unit/quest/types.test.js +0 -98
  11. package/dist/out-tsc/test/unit/requirements/Requirement.test.js +0 -52
  12. package/dist/out-tsc/test/unit/slayer/SlayerMaster.test.js +0 -43
  13. package/dist/out-tsc/test/unit/slayer/master/Chaeldar.test.js +0 -20
  14. package/dist/out-tsc/test/unit/slayer/master/Duradel.test.js +0 -22
  15. package/dist/out-tsc/test/unit/slayer/master/Konar.test.js +0 -20
  16. package/dist/out-tsc/test/unit/slayer/master/Krystillia.test.js +0 -20
  17. package/dist/out-tsc/test/unit/slayer/master/Mazchna.test.js +0 -20
  18. package/dist/out-tsc/test/unit/slayer/master/Nieve.test.js +0 -20
  19. package/dist/out-tsc/test/unit/slayer/master/Spria.test.js +0 -21
  20. package/dist/out-tsc/test/unit/slayer/master/Tureal.test.js +0 -21
  21. package/dist/out-tsc/test/unit/slayer/master/Vannaka.test.js +0 -20
  22. package/dist/out-tsc/test/unit/slayer/model/Assignment.test.js +0 -14
  23. package/dist/out-tsc/test/unit/slayer/model/SlayerUnlock.test.js +0 -38
  24. package/dist/out-tsc/test/unit/slayer/model/Task.test.js +0 -122
  25. package/dist/out-tsc/test/unit/tools/experience.test.js +0 -31
  26. package/dist/out-tsc/test/unit/utils/cache.test.js +0 -82
  27. /package/dist/{out-tsc/source/examples → examples}/ExampleQuest.js +0 -0
  28. /package/dist/{out-tsc/source/index.js → index.js} +0 -0
  29. /package/dist/{out-tsc/source/runescape → runescape}/errors.js +0 -0
  30. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/Item.js +0 -0
  31. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/Items.js +0 -0
  32. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/AmuletOfGlory.js +0 -0
  33. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/AncientStaff.js +0 -0
  34. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/AntiDragonShield.js +0 -0
  35. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Bearhead.js +0 -0
  36. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/BlackAxe.js +0 -0
  37. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/BlisterwoodFlail.js +0 -0
  38. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/BloodRune.js +0 -0
  39. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/BlueDye.js +0 -0
  40. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Bones.js +0 -0
  41. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Bucket.js +0 -0
  42. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/BucketofWater.js +0 -0
  43. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Cat.js +0 -0
  44. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Coins.js +0 -0
  45. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/CrossSection.js +0 -0
  46. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/CrystalKey.js +0 -0
  47. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/CulinaromancerGloves.js +0 -0
  48. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DagannothHide.js +0 -0
  49. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DemonicGorillaHeart.js +0 -0
  50. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DragonKey.js +0 -0
  51. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DragonkinMap.js +0 -0
  52. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DrakansMedallion.js +0 -0
  53. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DramenStaff.js +0 -0
  54. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/DwarvenRockCake.js +0 -0
  55. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Ectophial.js +0 -0
  56. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/FibulaPiece.js +0 -0
  57. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/FremennikKestrelEyeHelm.js +0 -0
  58. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/GamesNecklace.js +0 -0
  59. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/GhostspeakAmulet.js +0 -0
  60. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/IbansStaff.js +0 -0
  61. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/IceCooler.js +0 -0
  62. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/IcyBasalt.js +0 -0
  63. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/IvandisFlail.js +0 -0
  64. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/KlanksGauntlets.js +0 -0
  65. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/LunarStaff.js +0 -0
  66. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/MithrilSeeds.js +0 -0
  67. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/MoonclanHelmet.js +0 -0
  68. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/MorttonTeleport.js +0 -0
  69. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/MythicalCape.js +0 -0
  70. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Nosepeg.js +0 -0
  71. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/PaladinCredentials.js +0 -0
  72. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/RibcagePiece.js +0 -0
  73. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/RingOfDueling.js +0 -0
  74. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Rope.js +0 -0
  75. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/RoyalSeedPod.js +0 -0
  76. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SalveAmulet.js +0 -0
  77. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SilverPot.js +0 -0
  78. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SilverSickleB.js +0 -0
  79. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SkeletalBottoms.js +0 -0
  80. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SkeletalHelm.js +0 -0
  81. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SkeletalTop.js +0 -0
  82. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SkullPiece.js +0 -0
  83. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SmokeBarrage.js +0 -0
  84. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Spade.js +0 -0
  85. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/SuqahTeeth.js +0 -0
  86. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/Tinderbox.js +0 -0
  87. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/UnseenKey.js +0 -0
  88. /package/dist/{out-tsc/source/runescape → runescape}/model/Item/all/WaterRune.js +0 -0
  89. /package/dist/{out-tsc/source/runescape → runescape}/model/Requirement.js +0 -0
  90. /package/dist/{out-tsc/source/runescape → runescape}/model/account/OsrsAccount.js +0 -0
  91. /package/dist/{out-tsc/source/runescape → runescape}/model/account/Skill.js +0 -0
  92. /package/dist/{out-tsc/source/runescape → runescape}/model/account/skills/unlocks/AttackUnlocks.js +0 -0
  93. /package/dist/{out-tsc/source/runescape → runescape}/model/account/skills/unlocks/SkillUnlock.js +0 -0
  94. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Ardougne.js +0 -0
  95. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Desert.js +0 -0
  96. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Diary.js +0 -0
  97. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Fremennik.js +0 -0
  98. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Kandarin.js +0 -0
  99. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Karamja.js +0 -0
  100. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/KourendKebos.js +0 -0
  101. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/LumbridgeDraynor.js +0 -0
  102. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Morytania.js +0 -0
  103. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/Wilderness.js +0 -0
  104. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/ardougne/Ardougne.js +0 -0
  105. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/desert/Desert.js +0 -0
  106. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/index.js +0 -0
  107. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/karamja/Karamja.js +0 -0
  108. /package/dist/{out-tsc/source/runescape → runescape}/model/diaries/varrock/Varrock.js +0 -0
  109. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/Npc.js +0 -0
  110. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/NpcDrop.js +0 -0
  111. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/NpcProduct.js +0 -0
  112. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/npcs/Hans.js +0 -0
  113. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/npcs/Man.js +0 -0
  114. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/npcs/PeerTheSeer.js +0 -0
  115. /package/dist/{out-tsc/source/runescape → runescape}/model/npc/npcs/Woman.js +0 -0
  116. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/Quest.js +0 -0
  117. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/QuestList.js +0 -0
  118. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/QuestTool.js +0 -0
  119. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/Requirements.js +0 -0
  120. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/AKingdomDivided.js +0 -0
  121. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/APorcineOfInterest.js +0 -0
  122. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ASoulsBane.js +0 -0
  123. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ATailOfTwoCats.js +0 -0
  124. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ATasteOfHope.js +0 -0
  125. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ATheatreOfBlood.js +0 -0
  126. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/AnimalMagnetism.js +0 -0
  127. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/AnotherSliceOfHAM.js +0 -0
  128. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/BelowIceMountain.js +0 -0
  129. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/BetweenARock.js +0 -0
  130. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/BigChompyBirdHunting.js +0 -0
  131. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Biohazard.js +0 -0
  132. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/BlackKnightsFortress.js +0 -0
  133. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/BoneVoyage.js +0 -0
  134. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/CabinFever.js +0 -0
  135. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ClientOfKourend.js +0 -0
  136. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ClockTower.js +0 -0
  137. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ColdWar.js +0 -0
  138. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Contact.js +0 -0
  139. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/CooksAssistant.js +0 -0
  140. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/CreatureOfFenkenstrain.js +0 -0
  141. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/CurrentAffairs.js +0 -0
  142. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DarknessOfHallowvale.js +0 -0
  143. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DeathPlateau.js +0 -0
  144. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DeathToTheDorgeshuun.js +0 -0
  145. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DemonSlayer.js +0 -0
  146. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DesertTreasure.js +0 -0
  147. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DeviousMinds.js +0 -0
  148. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DoricQuest.js +0 -0
  149. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DoricsQuest.js +0 -0
  150. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DragonSlayerI.js +0 -0
  151. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DragonSlayerII.js +0 -0
  152. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DreamMentor.js +0 -0
  153. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DruidicRitual.js +0 -0
  154. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/DwarfCannon.js +0 -0
  155. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/EadgarsRuse.js +0 -0
  156. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/EaglesPeak.js +0 -0
  157. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ElementalWorkshopI.js +0 -0
  158. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ElementalWorkshopII.js +0 -0
  159. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/EnakhrasLament.js +0 -0
  160. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/EnlightenedJourney.js +0 -0
  161. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/FairytaleIGrowingPains.js +0 -0
  162. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/FairytaleIICureAQueen.js +0 -0
  163. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/FamilyCrest.js +0 -0
  164. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/FightArena.js +0 -0
  165. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/FishingContest.js +0 -0
  166. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ForgettableTale.js +0 -0
  167. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/GardenOfTranquillity.js +0 -0
  168. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/GertrudesCat.js +0 -0
  169. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/GettingAhead.js +0 -0
  170. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/GhostsAhoy.js +0 -0
  171. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/GoblinDiplomacy.js +0 -0
  172. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/GrimTales.js +0 -0
  173. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/HauntedMine.js +0 -0
  174. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/HazeelCult.js +0 -0
  175. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/HeroesQuest.js +0 -0
  176. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/HolyGrail.js +0 -0
  177. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/HorrorFromTheDeep.js +0 -0
  178. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/IcthlarinsLittleHelper.js +0 -0
  179. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ImpCatcher.js +0 -0
  180. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/InAidOfTheMyreque.js +0 -0
  181. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/InSearchOfTheMyreque.js +0 -0
  182. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/JunglePotion.js +0 -0
  183. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/KingsRansom.js +0 -0
  184. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/LegendsQuest.js +0 -0
  185. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/LostCity.js +0 -0
  186. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/LunarDiplomacy.js +0 -0
  187. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MakingHistory.js +0 -0
  188. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MeatAndGreet.js +0 -0
  189. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MerlinsCrystal.js +0 -0
  190. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MonkeyMadness.js +0 -0
  191. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MonkeyMadnessII.js +0 -0
  192. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MonksFriend.js +0 -0
  193. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MurderMystery.js +0 -0
  194. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/MyArmsBigAdventure.js +0 -0
  195. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/NatureSpirit.js +0 -0
  196. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ObservatoryQuest.js +0 -0
  197. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/OlafsQuest.js +0 -0
  198. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/OneSmallFavour.js +0 -0
  199. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Pandemonium.js +0 -0
  200. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/PlagueCity.js +0 -0
  201. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/PriestInPeril.js +0 -0
  202. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/PryingTimes.js +0 -0
  203. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/RagAndBoneMan.js +0 -0
  204. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Ratcatchers.js +0 -0
  205. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/RecipeForDisaster.js +0 -0
  206. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/RecruitmentDrive.js +0 -0
  207. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Regicide.js +0 -0
  208. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/RovingElves.js +0 -0
  209. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/RoyalTrouble.js +0 -0
  210. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/RumDeal.js +0 -0
  211. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ScorpionCatcher.js +0 -0
  212. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Scrambled.js +0 -0
  213. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/SeaSlug.js +0 -0
  214. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ShadesOfMortton.js +0 -0
  215. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ShadowOfTheStorm.js +0 -0
  216. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ShadowsOfCustodia.js +0 -0
  217. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/SheepHerder.js +0 -0
  218. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ShiloVillage.js +0 -0
  219. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/SlugMenace.js +0 -0
  220. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/SongOfTheElves.js +0 -0
  221. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/SpiritsOfTheElid.js +0 -0
  222. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/SwanSong.js +0 -0
  223. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TaiBwoWannaiTrio.js +0 -0
  224. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheAscentOfArceuus.js +0 -0
  225. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheDepthsOfDespair.js +0 -0
  226. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheFinalDawn.js +0 -0
  227. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheForsakenTower.js +0 -0
  228. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheFremennikExiles.js +0 -0
  229. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheFremennikIsles.js +0 -0
  230. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheFremennikTrials.js +0 -0
  231. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheGiantDwarf.js +0 -0
  232. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheGolem.js +0 -0
  233. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheGrandTree.js +0 -0
  234. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheGreatBrainRobbery.js +0 -0
  235. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheHandInTheSand.js +0 -0
  236. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheKnightsSword.js +0 -0
  237. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheLostTribe.js +0 -0
  238. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheQueenOfThieves.js +0 -0
  239. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheSlugMenace.js +0 -0
  240. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheTaleOfTheRighteous.js +0 -0
  241. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheTempleOfIkov.js +0 -0
  242. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TheTouristTrap.js +0 -0
  243. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ThroneOfMiscellania.js +0 -0
  244. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TowerOfLife.js +0 -0
  245. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TreeGnomeVillage.js +0 -0
  246. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TribalTotem.js +0 -0
  247. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TrollRomance.js +0 -0
  248. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TrollStronghold.js +0 -0
  249. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/TroubledTortugans.js +0 -0
  250. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/UndergroundPass.js +0 -0
  251. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/VampyreSlayer.js +0 -0
  252. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Wanted.js +0 -0
  253. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/Watchtower.js +0 -0
  254. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/WaterfallQuest.js +0 -0
  255. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/WhatLiesBelow.js +0 -0
  256. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/WitchesPotion.js +0 -0
  257. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/WitchsHouse.js +0 -0
  258. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/all/ZogreFleshEaters.js +0 -0
  259. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/enums.js +0 -0
  260. /package/dist/{out-tsc/source/runescape → runescape}/model/quest/types.js +0 -0
  261. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/Assignment.js +0 -0
  262. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/Masters.js +0 -0
  263. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/SlayerExtends.js +0 -0
  264. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/SlayerMaster.js +0 -0
  265. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/SlayerReward.js +0 -0
  266. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/SlayerUnlock.js +0 -0
  267. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/Task.js +0 -0
  268. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/ChaelderTasks.js +0 -0
  269. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/DuradelTasks.js +0 -0
  270. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/KonarTasks.js +0 -0
  271. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/KrystiliaTasks.js +0 -0
  272. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/MazchnaTasks.js +0 -0
  273. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/NieveTasks.js +0 -0
  274. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/SpriaTasks.js +0 -0
  275. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/TurealTasks.js +0 -0
  276. /package/dist/{out-tsc/source/runescape → runescape}/model/slayer/task/VannakaTasks.js +0 -0
  277. /package/dist/{out-tsc/source/runescape → runescape}/tools/experience.js +0 -0
  278. /package/dist/{out-tsc/source/runescape → runescape}/tools/getAccount.js +0 -0
  279. /package/dist/{out-tsc/source/runescape → runescape}/utils/cache.js +0 -0
  280. /package/dist/{out-tsc/source/runescape → runescape}/utils/validation.js +0 -0
@@ -1,22 +0,0 @@
1
- // Test for the Tureal data from the JSON file
2
- import { Duradel } from '../../../../source/runescape/model/slayer/Masters';
3
- describe('Duradel', () => {
4
- it('should be defined', () => {
5
- expect(Duradel).toBeDefined();
6
- });
7
- it('should have a list of tasks', () => {
8
- const tasks = Duradel.tasks;
9
- expect(Array.isArray(tasks)).toBe(true);
10
- expect(tasks.length).toBeGreaterThan(0);
11
- });
12
- it('should have the correct name', () => {
13
- expect(Duradel.name).toBe('Duradel');
14
- });
15
- it('should have the correct location', () => {
16
- expect(Duradel.location).toBe('Shilo Village');
17
- });
18
- it('should have the correct wiki URL', () => {
19
- expect(Duradel.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Duradel');
20
- });
21
- });
22
- // We recommend installing an extension to run jest tests.
@@ -1,20 +0,0 @@
1
- import { KonarQuoMaten } from '../../../../source/runescape/model/slayer/Masters';
2
- describe('Konar Quo Maten', () => {
3
- it('should be defined', () => {
4
- expect(KonarQuoMaten).toBeDefined();
5
- });
6
- it('should have a list of tasks', () => {
7
- const tasks = KonarQuoMaten.tasks;
8
- expect(Array.isArray(tasks)).toBe(true);
9
- expect(tasks.length).toBeGreaterThan(0);
10
- });
11
- it('should have the correct name', () => {
12
- expect(KonarQuoMaten.name).toBe('Konar Quo Maten');
13
- });
14
- it('should have the correct location', () => {
15
- expect(KonarQuoMaten.location).toBe('Mount Karuulm');
16
- });
17
- it('should have the correct wiki URL', () => {
18
- expect(KonarQuoMaten.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Konar_Quo_Maten');
19
- });
20
- });
@@ -1,20 +0,0 @@
1
- import { Krystilia } from '../../../../source/runescape/model/slayer/Masters';
2
- describe('Krystilia', () => {
3
- it('should be defined', () => {
4
- expect(Krystilia).toBeDefined();
5
- });
6
- it('should have a list of tasks', () => {
7
- const tasks = Krystilia.tasks;
8
- expect(Array.isArray(tasks)).toBe(true);
9
- expect(tasks.length).toBeGreaterThan(0);
10
- });
11
- it('should have the correct name', () => {
12
- expect(Krystilia.name).toBe('Krystilia');
13
- });
14
- it('should have the correct location', () => {
15
- expect(Krystilia.location).toBe('Edgeville');
16
- });
17
- it('should have the correct wiki URL', () => {
18
- expect(Krystilia.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Krystilia');
19
- });
20
- });
@@ -1,20 +0,0 @@
1
- import { Mazchna } from '../../../../source/runescape/model/slayer/Masters';
2
- describe('Mazchna', () => {
3
- it('should be defined', () => {
4
- expect(Mazchna).toBeDefined();
5
- });
6
- it('should have a list of tasks', () => {
7
- const tasks = Mazchna.tasks;
8
- expect(Array.isArray(tasks)).toBe(true);
9
- expect(tasks.length).toBeGreaterThan(0);
10
- });
11
- it('should have the correct name', () => {
12
- expect(Mazchna.name).toBe('Mazchna');
13
- });
14
- it('should have the correct location', () => {
15
- expect(Mazchna.location).toBe('Canifis');
16
- });
17
- it('should have the correct wiki URL', () => {
18
- expect(Mazchna.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Mazchna');
19
- });
20
- });
@@ -1,20 +0,0 @@
1
- import { Nieve } from '../../../../source/runescape/model/slayer/Masters';
2
- describe('Nieve', () => {
3
- it('should be defined', () => {
4
- expect(Nieve).toBeDefined();
5
- });
6
- it('should have a list of tasks', () => {
7
- const tasks = Nieve.tasks;
8
- expect(Array.isArray(tasks)).toBe(true);
9
- expect(tasks.length).toBeGreaterThan(0);
10
- });
11
- it('should have the correct name', () => {
12
- expect(Nieve.name).toBe('Nieve');
13
- });
14
- it('should have the correct location', () => {
15
- expect(Nieve.location).toBe("Nieve's Cave");
16
- });
17
- it('should have the correct wiki URL', () => {
18
- expect(Nieve.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Nieve');
19
- });
20
- });
@@ -1,21 +0,0 @@
1
- // Test for the Spria data from the JSON file
2
- import { Spria } from '../../../../source/runescape/model/slayer/Masters';
3
- describe('Spria', () => {
4
- it('should be defined', () => {
5
- expect(Spria).toBeDefined();
6
- });
7
- it('should have a list of tasks', () => {
8
- const tasks = Spria.tasks;
9
- expect(Array.isArray(tasks)).toBe(true);
10
- expect(tasks.length).toBeGreaterThan(0);
11
- });
12
- it('should have the correct name', () => {
13
- expect(Spria.name).toBe('Spria');
14
- });
15
- it('should have the correct location', () => {
16
- expect(Spria.location).toBe('Draynor Village');
17
- });
18
- it('should have the correct wiki URL', () => {
19
- expect(Spria.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Spria');
20
- });
21
- });
@@ -1,21 +0,0 @@
1
- // Test for the Tureal data from the JSON file
2
- import { Turael } from '../../../../source/runescape/model/slayer/Masters';
3
- describe('Turael', () => {
4
- it('should be defined', () => {
5
- expect(Turael).toBeDefined();
6
- });
7
- it('should have a list of tasks', () => {
8
- const tasks = Turael.tasks;
9
- expect(Array.isArray(tasks)).toBe(true);
10
- expect(tasks.length).toBeGreaterThan(0);
11
- });
12
- it('should have the correct name', () => {
13
- expect(Turael.name).toBe('Turael');
14
- });
15
- it('should have the correct location', () => {
16
- expect(Turael.location).toBe('Burthope');
17
- });
18
- it('should have the correct wiki URL', () => {
19
- expect(Turael.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Turael');
20
- });
21
- });
@@ -1,20 +0,0 @@
1
- import { Vannaka } from '../../../../source/runescape/model/slayer/Masters';
2
- describe('Vannaka', () => {
3
- it('should be defined', () => {
4
- expect(Vannaka).toBeDefined();
5
- });
6
- it('should have a list of tasks', () => {
7
- const tasks = Vannaka.tasks;
8
- expect(Array.isArray(tasks)).toBe(true);
9
- expect(tasks.length).toBeGreaterThan(0);
10
- });
11
- it('should have the correct name', () => {
12
- expect(Vannaka.name).toBe('Vannaka');
13
- });
14
- it('should have the correct location', () => {
15
- expect(Vannaka.location).toBe('Edgeville Dungeon');
16
- });
17
- it('should have the correct wiki URL', () => {
18
- expect(Vannaka.wikiUrl).toBe('https://oldschool.runescape.wiki/w/Vannaka');
19
- });
20
- });
@@ -1,14 +0,0 @@
1
- import { SlayerLevelRequirement } from '../../../../source/runescape/model/Requirement';
2
- import { Assignment } from '../../../../source/runescape/model/slayer/Assignment';
3
- import { Task } from '../../../../source/runescape/model/slayer/Task';
4
- describe('Assignment', () => {
5
- it('should set properties correctly via constructor', () => {
6
- const requirements = [new SlayerLevelRequirement(50)];
7
- const task = new Task('Aberrant Spectres', 10, 20, requirements, 5, 15);
8
- const assignment = new Assignment(task.name, 10, requirements, task.extendedAmountMin, task.extendedAmountMax);
9
- expect(assignment.name).toBe('Aberrant Spectres');
10
- expect(assignment.requirements).toEqual(requirements);
11
- expect(assignment.getName()).toBe('Aberrant Spectres');
12
- expect(assignment.getQuantity()).toBe(10);
13
- });
14
- });
@@ -1,38 +0,0 @@
1
- import { SlayerUnlock, SlayerUnlocks } from '../../../../source/runescape/model/slayer/SlayerUnlock';
2
- describe('SlayerUnlock', () => {
3
- it('should create a SlayerUnlock instance with correct properties', () => {
4
- const unlock = new SlayerUnlock('Test Unlock', 100, 'Test description');
5
- expect(unlock.name).toBe('Test Unlock');
6
- expect(unlock.cost).toBe(100);
7
- expect(unlock.description).toBe('Test description');
8
- });
9
- it('should have a predefined list of SlayerUnlocks', () => {
10
- expect(SlayerUnlocks).toBeInstanceOf(Array);
11
- expect(SlayerUnlocks.length).toBeGreaterThan(0);
12
- });
13
- it('should contain specific SlayerUnlocks with correct properties', () => {
14
- const gargoyleSmasher = SlayerUnlocks.find(unlock => unlock.name === 'Gargoyle smasher');
15
- expect(gargoyleSmasher).toBeDefined();
16
- expect(gargoyleSmasher?.cost).toBe(120);
17
- expect(gargoyleSmasher?.description).toBe('Gargoyles are automatically dealt the finishing blow if the player has a Rock hammer in their inventory.');
18
- const likeABoss = SlayerUnlocks.find(unlock => unlock.name === 'Like a boss');
19
- expect(likeABoss).toBeDefined();
20
- expect(likeABoss?.cost).toBe(200);
21
- expect(likeABoss?.description).toBe('Konar, Duradel, Krystilia and Nieve will be able to assign boss monsters as your task, excluding the Corporeal Beast.');
22
- });
23
- it('should not contain duplicate SlayerUnlock names', () => {
24
- const names = SlayerUnlocks.map(unlock => unlock.name);
25
- const uniqueNames = new Set(names);
26
- expect(names.length).toBe(uniqueNames.size);
27
- });
28
- it('should have all SlayerUnlocks with a positive cost', () => {
29
- SlayerUnlocks.forEach(unlock => {
30
- expect(unlock.cost).toBeGreaterThan(0);
31
- });
32
- });
33
- it('should have all SlayerUnlocks with a non-empty description', () => {
34
- SlayerUnlocks.forEach(unlock => {
35
- expect(unlock.description).toBeTruthy();
36
- });
37
- });
38
- });
@@ -1,122 +0,0 @@
1
- import { SlayerLevelRequirement } from '../../../../source/runescape/model/Requirement';
2
- import { Task } from '../../../../source/runescape/model/slayer/Task';
3
- describe('Task', () => {
4
- let mockRequirements;
5
- beforeEach(() => {
6
- mockRequirements = [new SlayerLevelRequirement(75)];
7
- });
8
- describe('constructor', () => {
9
- it('should create a Task with minimum required properties', () => {
10
- const task = new Task('Abyssal demons', 125, 200, mockRequirements);
11
- expect(task.name).toBe('Abyssal demons');
12
- expect(task.amountMin).toBe(125);
13
- expect(task.amountMax).toBe(200);
14
- expect(task.requirements).toEqual(mockRequirements);
15
- expect(task.weight).toBe(1); // default value
16
- expect(task.alternatives).toEqual([]); // default value
17
- expect(task.combatLevels).toEqual([]); // default value
18
- expect(task.slayerExp).toBe(0); // default value
19
- expect(task.locations).toEqual([]); // default value
20
- expect(task.wildernessLevels).toEqual([]); // default value
21
- expect(task.bosses).toEqual([]); // default value
22
- });
23
- it('should create a Task with extended amounts', () => {
24
- const task = new Task('Abyssal demons', 125, 200, mockRequirements, 200, 300);
25
- expect(task.extendedAmountMin).toBe(200);
26
- expect(task.extendedAmountMax).toBe(300);
27
- });
28
- it('should create a Task with all optional properties', () => {
29
- const task = new Task('Abyssal demons', 125, 200, mockRequirements, 200, 300, ['Greater demons'], 8, [124], 300, ['Slayer Tower'], [0], ['Abyssal Sire']);
30
- expect(task.name).toBe('Abyssal demons');
31
- expect(task.amountMin).toBe(125);
32
- expect(task.amountMax).toBe(200);
33
- expect(task.requirements).toEqual(mockRequirements);
34
- expect(task.extendedAmountMin).toBe(200);
35
- expect(task.extendedAmountMax).toBe(300);
36
- expect(task.alternatives).toEqual(['Greater demons']);
37
- expect(task.weight).toBe(8);
38
- expect(task.combatLevels).toEqual([124]);
39
- expect(task.slayerExp).toBe(300);
40
- expect(task.locations).toEqual(['Slayer Tower']);
41
- expect(task.wildernessLevels).toEqual([0]);
42
- expect(task.bosses).toEqual(['Abyssal Sire']);
43
- });
44
- });
45
- describe('methods', () => {
46
- let task;
47
- beforeEach(() => {
48
- task = new Task('Abyssal demons', 125, 200, mockRequirements, 200, 300, ['Greater demons'], 8, [124], 300, ['Slayer Tower'], [0], ['Abyssal Sire']);
49
- });
50
- it('should return correct name via getName()', () => {
51
- expect(task.getName()).toBe('Abyssal demons');
52
- });
53
- it('should return correct weight via getWeight()', () => {
54
- expect(task.getWeight()).toBe(8);
55
- });
56
- it('should return correct min amount via getAmountMin()', () => {
57
- expect(task.getAmountMin()).toBe(125);
58
- });
59
- it('should return correct max amount via getAmountMax()', () => {
60
- expect(task.getAmountMax()).toBe(200);
61
- });
62
- it('should return correct requirements via getRequirements()', () => {
63
- expect(task.getRequirements()).toEqual(mockRequirements);
64
- });
65
- it('should return correct alternatives via getAlternatives()', () => {
66
- expect(task.getAlternatives()).toEqual(['Greater demons']);
67
- });
68
- it('should handle empty alternatives array', () => {
69
- const taskWithEmptyAlternatives = new Task('Abyssal demons', 125, 200, mockRequirements, null, null, []);
70
- expect(taskWithEmptyAlternatives.getAlternatives()).toEqual([]);
71
- });
72
- it('should convert to JSON correctly via toJSON()', () => {
73
- const json = task.toJSON();
74
- expect(json).toEqual({
75
- alternatives: ['Greater demons'],
76
- amountMax: 200,
77
- amountMin: 125,
78
- bosses: ['Abyssal Sire'],
79
- combatLevels: [124],
80
- extendedAmountMax: 300,
81
- extendedAmountMin: 200,
82
- locations: ['Slayer Tower'],
83
- name: 'Abyssal demons',
84
- requirements: [new SlayerLevelRequirement(75)],
85
- slayerExp: 300,
86
- weight: 8,
87
- wildernessLevels: [0],
88
- });
89
- });
90
- it('should convert to string correctly via toString()', () => {
91
- expect(task.toString()).toBe('Task{ name: Abyssal demons }');
92
- });
93
- });
94
- describe('static methods', () => {
95
- it('should create Task from JSON via fromJSON()', () => {
96
- const json = {
97
- alternatives: ['Greater demons'],
98
- amountMax: 200,
99
- amountMin: 125,
100
- bosses: ['Abyssal Sire'],
101
- combatLevels: [124],
102
- extendedAmountMax: 300,
103
- extendedAmountMin: 200,
104
- locations: ['Slayer Tower'],
105
- name: 'Abyssal demons',
106
- requirements: mockRequirements,
107
- slayerExp: 300,
108
- weight: 8,
109
- wildernessLevels: [0],
110
- };
111
- const task = Task.fromJSON(json);
112
- expect(task).toBeInstanceOf(Task);
113
- expect(task.name).toBe('Abyssal demons');
114
- expect(task.amountMin).toBe(125);
115
- expect(task.amountMax).toBe(200);
116
- expect(task.extendedAmountMin).toBe(200);
117
- expect(task.extendedAmountMax).toBe(300);
118
- expect(task.alternatives).toEqual(['Greater demons']);
119
- expect(task.weight).toBe(8);
120
- });
121
- });
122
- });
@@ -1,31 +0,0 @@
1
- import { getExperienceForLevel, getLevelForExperience, LEVEL_TO_EXPERIENCE } from "../../../source/runescape/tools/experience";
2
- /**
3
- * Test the experience module
4
- */
5
- describe("Experience", () => {
6
- it("should calculate experience for levels correctly", () => {
7
- const levelExpMap = LEVEL_TO_EXPERIENCE;
8
- for (const [levelStr, expectedExp] of Object.entries(levelExpMap)) {
9
- const level = parseInt(levelStr, 10);
10
- expect(getExperienceForLevel(level)).toBe(expectedExp);
11
- }
12
- });
13
- // test getLevelForExperience
14
- it("should calculate level for experience correctly", () => {
15
- const expLevelMap = LEVEL_TO_EXPERIENCE;
16
- const randomExp = [0, 500, 2000, 10000, 50000, 200000, 1000000, 5000000, 13034431];
17
- for (const exp of randomExp) {
18
- let expectedLevel = 1;
19
- for (const [levelStr, levelExp] of Object.entries(expLevelMap)) {
20
- const level = parseInt(levelStr, 10);
21
- if (levelExp <= exp) {
22
- expectedLevel = level;
23
- }
24
- else {
25
- break;
26
- }
27
- }
28
- expect(getLevelForExperience(exp)).toBe(expectedLevel);
29
- }
30
- });
31
- });
@@ -1,82 +0,0 @@
1
- import { Cache } from '../../../source/runescape/utils/cache';
2
- describe('Cache', () => {
3
- let cache;
4
- beforeEach(() => {
5
- cache = new Cache();
6
- });
7
- it('should store and retrieve values', () => {
8
- cache.set('key1', 'value1');
9
- expect(cache.get('key1')).toBe('value1');
10
- });
11
- it('should handle non-existent keys', () => {
12
- expect(cache.get('nonexistent')).toBeUndefined();
13
- });
14
- it('should respect max size limit', () => {
15
- const smallCache = new Cache({ maxSize: 2 });
16
- smallCache.set('key1', 'value1');
17
- smallCache.set('key2', 'value2');
18
- smallCache.set('key3', 'value3');
19
- expect(smallCache.get('key1')).toBeUndefined();
20
- expect(smallCache.get('key2')).toBe('value2');
21
- expect(smallCache.get('key3')).toBe('value3');
22
- });
23
- it('should handle TTL expiration', async () => {
24
- const ttlCache = new Cache({ ttl: 100 }); // 100ms TTL
25
- ttlCache.set('key1', 'value1');
26
- expect(ttlCache.get('key1')).toBe('value1');
27
- await new Promise(resolve => setTimeout(resolve, 150));
28
- expect(ttlCache.get('key1')).toBeUndefined();
29
- });
30
- it('should allow per-item TTL override', async () => {
31
- const ttlCache = new Cache({ ttl: 500 });
32
- ttlCache.set('key1', 'value1', 100); // Override with 100ms TTL
33
- expect(ttlCache.get('key1')).toBe('value1');
34
- await new Promise(resolve => setTimeout(resolve, 150));
35
- expect(ttlCache.get('key1')).toBeUndefined();
36
- });
37
- it('should correctly handle delete operation', () => {
38
- cache.set('key1', 'value1');
39
- expect(cache.delete('key1')).toBe(true);
40
- expect(cache.get('key1')).toBeUndefined();
41
- expect(cache.delete('key1')).toBe(false);
42
- });
43
- it('should clear all items', () => {
44
- cache.set('key1', 'value1');
45
- cache.set('key2', 'value2');
46
- cache.clear();
47
- expect(cache.size).toBe(0);
48
- expect(cache.get('key1')).toBeUndefined();
49
- expect(cache.get('key2')).toBeUndefined();
50
- });
51
- it('should return valid keys only', async () => {
52
- const ttlCache = new Cache({ ttl: 100 });
53
- ttlCache.set('key1', 'value1');
54
- ttlCache.set('key2', 'value2');
55
- expect(ttlCache.keys().sort()).toEqual(['key1', 'key2'].sort());
56
- await new Promise(resolve => setTimeout(resolve, 150));
57
- expect(ttlCache.keys()).toEqual([]);
58
- });
59
- it('should correctly prune expired items', async () => {
60
- const ttlCache = new Cache({ ttl: 100 });
61
- ttlCache.set('key1', 'value1');
62
- ttlCache.set('key2', 'value2');
63
- await new Promise(resolve => setTimeout(resolve, 150));
64
- const pruned = ttlCache.prune();
65
- expect(pruned).toBe(2);
66
- expect(ttlCache.size).toBe(0);
67
- });
68
- it('should check existence correctly', () => {
69
- cache.set('key1', 'value1');
70
- expect(cache.has('key1')).toBe(true);
71
- expect(cache.has('nonexistent')).toBe(false);
72
- });
73
- it('should handle getOrSet correctly', async () => {
74
- const factory = jest.fn().mockResolvedValue('computed');
75
- const value1 = await cache.getOrSet('key1', factory);
76
- expect(value1).toBe('computed');
77
- expect(factory).toHaveBeenCalledTimes(1);
78
- const value2 = await cache.getOrSet('key1', factory);
79
- expect(value2).toBe('computed');
80
- expect(factory).toHaveBeenCalledTimes(1); // Factory not called again
81
- });
82
- });
File without changes