@pokepc/dataset 6.8.1 → 6.9.1

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 (1138) hide show
  1. package/README.md +31 -0
  2. package/build/{box-preset-sanitizer-CmgPzVjb.mjs → box-preset-sanitizer-ChpDBp-9.mjs} +2 -2
  3. package/build/{box-preset-sanitizer-CmgPzVjb.mjs.map → box-preset-sanitizer-ChpDBp-9.mjs.map} +1 -1
  4. package/build/{build-bE_0_-0H.mjs → build-1TV6PqJe.mjs} +22 -12
  5. package/build/build-1TV6PqJe.mjs.map +1 -0
  6. package/build/{build-D2oPkkzJ.mjs → build-CBmCe7Y4.mjs} +3 -4
  7. package/build/{build-D2oPkkzJ.mjs.map → build-CBmCe7Y4.mjs.map} +1 -1
  8. package/build/{fs-B5MIz_Bs.mjs → fs-DzSv0j9I.mjs} +2 -2
  9. package/build/{fs-B5MIz_Bs.mjs.map → fs-DzSv0j9I.mjs.map} +1 -1
  10. package/build/lib/availability-sources.d.mts +53 -0
  11. package/build/lib/availability-sources.d.mts.map +1 -0
  12. package/build/lib/availability-sources.mjs +48280 -0
  13. package/build/lib/availability-sources.mjs.map +1 -0
  14. package/build/lib/box-preset-sanitizer.mjs +1 -1
  15. package/build/lib/box-preset-transform.mjs +3 -3
  16. package/build/lib/fs.d.mts +10 -2
  17. package/build/lib/fs.d.mts.map +1 -1
  18. package/build/lib/fs.mjs +6 -2
  19. package/build/lib/fs.mjs.map +1 -1
  20. package/build/lib/schemas.d.mts +2 -2
  21. package/build/lib/schemas.mjs +2 -2
  22. package/build/lib/types.d.mts +2 -1
  23. package/build/lib/types.d.mts.map +1 -1
  24. package/build/lib-next/_build.mjs +3 -3
  25. package/build/lib-next/fs.mjs +1 -1
  26. package/build/rolldown-runtime-B4iAMlE-.mjs +35 -0
  27. package/build/{schemas-Bvj56HZe.d.mts → schemas-DQ-b3Iyj.d.mts} +14 -5
  28. package/build/schemas-DQ-b3Iyj.d.mts.map +1 -0
  29. package/build/{schemas-DvWBehAR.mjs → schemas-DTB8AjXr.mjs} +11 -2
  30. package/build/schemas-DTB8AjXr.mjs.map +1 -0
  31. package/data/games/b2w2-b2.json +3 -1
  32. package/data/games/b2w2-w2.json +3 -1
  33. package/data/games/b2w2.json +3 -1
  34. package/data/games/bdsp-bd.json +3 -1
  35. package/data/games/bdsp-sp.json +3 -1
  36. package/data/games/bdsp.json +3 -1
  37. package/data/games/bw-b.json +3 -1
  38. package/data/games/bw-w.json +3 -1
  39. package/data/games/bw.json +3 -1
  40. package/data/games/bwb2w2.json +3 -1
  41. package/data/games/c.json +3 -1
  42. package/data/games/champions.json +5 -3
  43. package/data/games/col.json +3 -1
  44. package/data/games/dp-d.json +3 -1
  45. package/data/games/dp-p.json +3 -1
  46. package/data/games/dp.json +3 -1
  47. package/data/games/dppt.json +3 -1
  48. package/data/games/e.json +3 -1
  49. package/data/games/frlg-fr.json +3 -1
  50. package/data/games/frlg-lg.json +3 -1
  51. package/data/games/frlg.json +3 -1
  52. package/data/games/go.json +5 -3
  53. package/data/games/gs-g.json +3 -1
  54. package/data/games/gs-s.json +3 -1
  55. package/data/games/gs.json +3 -1
  56. package/data/games/gsc.json +3 -1
  57. package/data/games/hgss-hg.json +3 -1
  58. package/data/games/hgss-ss.json +3 -1
  59. package/data/games/hgss.json +3 -1
  60. package/data/games/home.json +4 -2
  61. package/data/games/la.json +3 -1
  62. package/data/games/lgpe-lge.json +5 -3
  63. package/data/games/lgpe-lgp.json +5 -3
  64. package/data/games/lgpe.json +5 -3
  65. package/data/games/lza-megadimension.json +3 -1
  66. package/data/games/lza.json +3 -1
  67. package/data/games/oras-as.json +3 -1
  68. package/data/games/oras-or.json +3 -1
  69. package/data/games/oras.json +3 -1
  70. package/data/games/pokopia-bubblybasin.json +3 -1
  71. package/data/games/pokopia.json +3 -1
  72. package/data/games/pt.json +3 -1
  73. package/data/games/rb-b.json +3 -1
  74. package/data/games/rb-r.json +3 -1
  75. package/data/games/rb.json +3 -1
  76. package/data/games/rby.json +3 -1
  77. package/data/games/rs-r.json +3 -1
  78. package/data/games/rs-s.json +3 -1
  79. package/data/games/rs.json +3 -1
  80. package/data/games/rse.json +3 -1
  81. package/data/games/sm-m.json +3 -1
  82. package/data/games/sm-s.json +3 -1
  83. package/data/games/sm.json +3 -1
  84. package/data/games/smusum.json +3 -1
  85. package/data/games/sv-indigodisk.json +3 -1
  86. package/data/games/sv-s.json +3 -1
  87. package/data/games/sv-tealmask.json +3 -1
  88. package/data/games/sv-v.json +3 -1
  89. package/data/games/sv.json +3 -1
  90. package/data/games/swsh-crowntundra.json +3 -1
  91. package/data/games/swsh-islearmor.json +3 -1
  92. package/data/games/swsh-sh.json +3 -1
  93. package/data/games/swsh-sw.json +3 -1
  94. package/data/games/swsh.json +3 -1
  95. package/data/games/usum-um.json +3 -1
  96. package/data/games/usum-us.json +3 -1
  97. package/data/games/usum.json +3 -1
  98. package/data/games/wiwa-wa.json +3 -1
  99. package/data/games/wiwa-wi.json +3 -1
  100. package/data/games/wiwa.json +3 -1
  101. package/data/games/xd.json +3 -1
  102. package/data/games/xy-x.json +3 -1
  103. package/data/games/xy-y.json +3 -1
  104. package/data/games/xy.json +3 -1
  105. package/data/games/y.json +3 -1
  106. package/data/locations.json +8072 -2
  107. package/data/pokemon/abomasnow-f.json +15 -3
  108. package/data/pokemon/abomasnow-mega.json +13 -2
  109. package/data/pokemon/abomasnow.json +15 -3
  110. package/data/pokemon/abra.json +1 -2
  111. package/data/pokemon/absol-mega.json +12 -1
  112. package/data/pokemon/accelgor.json +1 -1
  113. package/data/pokemon/aegislash-blade.json +12 -1
  114. package/data/pokemon/aegislash.json +12 -1
  115. package/data/pokemon/aerodactyl-mega.json +14 -1
  116. package/data/pokemon/aggron-mega.json +13 -2
  117. package/data/pokemon/aggron.json +3 -2
  118. package/data/pokemon/aipom-f.json +19 -4
  119. package/data/pokemon/aipom.json +14 -3
  120. package/data/pokemon/alakazam-f.json +6 -3
  121. package/data/pokemon/alakazam-mega.json +14 -1
  122. package/data/pokemon/alakazam.json +1 -2
  123. package/data/pokemon/altaria-mega.json +1 -1
  124. package/data/pokemon/altaria.json +3 -1
  125. package/data/pokemon/amaura.json +1 -1
  126. package/data/pokemon/ambipom-f.json +2 -1
  127. package/data/pokemon/ambipom.json +2 -1
  128. package/data/pokemon/amoonguss.json +1 -1
  129. package/data/pokemon/ampharos-mega.json +13 -2
  130. package/data/pokemon/ampharos.json +14 -2
  131. package/data/pokemon/anorith.json +1 -2
  132. package/data/pokemon/appletun-gmax.json +6 -2
  133. package/data/pokemon/appletun.json +2 -2
  134. package/data/pokemon/arbok.json +5 -1
  135. package/data/pokemon/arcanine.json +2 -2
  136. package/data/pokemon/arceus-bug.json +10 -1
  137. package/data/pokemon/arceus-dark.json +10 -1
  138. package/data/pokemon/arceus-dragon.json +10 -1
  139. package/data/pokemon/arceus-electric.json +10 -1
  140. package/data/pokemon/arceus-fairy.json +13 -2
  141. package/data/pokemon/arceus-fighting.json +10 -1
  142. package/data/pokemon/arceus-fire.json +10 -1
  143. package/data/pokemon/arceus-flying.json +10 -1
  144. package/data/pokemon/arceus-ghost.json +10 -1
  145. package/data/pokemon/arceus-grass.json +10 -1
  146. package/data/pokemon/arceus-ground.json +10 -1
  147. package/data/pokemon/arceus-ice.json +10 -1
  148. package/data/pokemon/arceus-legendary.json +2 -2
  149. package/data/pokemon/arceus-poison.json +10 -1
  150. package/data/pokemon/arceus-psychic.json +10 -1
  151. package/data/pokemon/arceus-rock.json +10 -1
  152. package/data/pokemon/arceus-steel.json +10 -1
  153. package/data/pokemon/arceus-water.json +10 -1
  154. package/data/pokemon/arceus.json +10 -1
  155. package/data/pokemon/archaludon.json +1 -1
  156. package/data/pokemon/archen.json +1 -2
  157. package/data/pokemon/archeops.json +1 -2
  158. package/data/pokemon/ariados.json +2 -1
  159. package/data/pokemon/armaldo.json +1 -2
  160. package/data/pokemon/armarouge.json +2 -2
  161. package/data/pokemon/aromatisse.json +2 -2
  162. package/data/pokemon/aron.json +3 -2
  163. package/data/pokemon/articuno.json +7 -3
  164. package/data/pokemon/audino-mega.json +1 -1
  165. package/data/pokemon/audino.json +3 -1
  166. package/data/pokemon/aurorus.json +1 -1
  167. package/data/pokemon/avalugg.json +1 -1
  168. package/data/pokemon/axew.json +4 -0
  169. package/data/pokemon/azelf.json +15 -1
  170. package/data/pokemon/azumarill.json +3 -2
  171. package/data/pokemon/azurill.json +3 -2
  172. package/data/pokemon/bagon.json +12 -4
  173. package/data/pokemon/baltoy.json +12 -2
  174. package/data/pokemon/banette-mega.json +12 -1
  175. package/data/pokemon/banette.json +1 -1
  176. package/data/pokemon/barbaracle.json +13 -2
  177. package/data/pokemon/basculin-blue-striped.json +1 -3
  178. package/data/pokemon/basculin.json +1 -3
  179. package/data/pokemon/bastiodon.json +2 -3
  180. package/data/pokemon/baxcalibur-mega.json +2 -2
  181. package/data/pokemon/bayleef.json +6 -2
  182. package/data/pokemon/beartic.json +1 -1
  183. package/data/pokemon/beautifly-f.json +14 -2
  184. package/data/pokemon/beautifly.json +14 -2
  185. package/data/pokemon/beedrill-mega.json +12 -1
  186. package/data/pokemon/beheeyem.json +1 -1
  187. package/data/pokemon/bellossom.json +13 -2
  188. package/data/pokemon/bellsprout.json +6 -2
  189. package/data/pokemon/bergmite.json +1 -1
  190. package/data/pokemon/bibarel-f.json +6 -2
  191. package/data/pokemon/bibarel.json +1 -1
  192. package/data/pokemon/bidoof-f.json +6 -2
  193. package/data/pokemon/bidoof.json +1 -1
  194. package/data/pokemon/binacle.json +13 -2
  195. package/data/pokemon/bisharp.json +1 -1
  196. package/data/pokemon/blacephalon.json +2 -2
  197. package/data/pokemon/blastoise-mega.json +3 -1
  198. package/data/pokemon/blaziken-f.json +4 -0
  199. package/data/pokemon/blaziken-mega.json +14 -3
  200. package/data/pokemon/blaziken.json +4 -0
  201. package/data/pokemon/blissey.json +2 -2
  202. package/data/pokemon/blitzle.json +1 -1
  203. package/data/pokemon/bouffalant.json +1 -1
  204. package/data/pokemon/braixen.json +2 -2
  205. package/data/pokemon/brambleghast.json +1 -1
  206. package/data/pokemon/bramblin.json +1 -1
  207. package/data/pokemon/braviary.json +1 -4
  208. package/data/pokemon/breloom.json +11 -1
  209. package/data/pokemon/bronzong.json +1 -1
  210. package/data/pokemon/bronzor.json +1 -1
  211. package/data/pokemon/brutebonnet.json +3 -3
  212. package/data/pokemon/budew.json +3 -2
  213. package/data/pokemon/buizel-f.json +8 -2
  214. package/data/pokemon/buizel.json +3 -1
  215. package/data/pokemon/buneary.json +1 -1
  216. package/data/pokemon/bunnelby.json +1 -1
  217. package/data/pokemon/burmy-sandy.json +13 -1
  218. package/data/pokemon/burmy-trash.json +13 -1
  219. package/data/pokemon/burmy.json +13 -1
  220. package/data/pokemon/buzzwole.json +2 -2
  221. package/data/pokemon/cacnea.json +13 -1
  222. package/data/pokemon/cacturne-f.json +18 -2
  223. package/data/pokemon/cacturne.json +13 -1
  224. package/data/pokemon/camerupt-f.json +18 -2
  225. package/data/pokemon/camerupt-mega.json +1 -1
  226. package/data/pokemon/camerupt.json +13 -1
  227. package/data/pokemon/capsakid.json +1 -1
  228. package/data/pokemon/carnivine.json +11 -1
  229. package/data/pokemon/carracosta.json +1 -2
  230. package/data/pokemon/carvanha.json +1 -3
  231. package/data/pokemon/cascoon.json +14 -2
  232. package/data/pokemon/castform-rainy.json +16 -3
  233. package/data/pokemon/castform-snowy.json +16 -3
  234. package/data/pokemon/castform-sunny.json +16 -3
  235. package/data/pokemon/castform.json +13 -3
  236. package/data/pokemon/celebi.json +14 -2
  237. package/data/pokemon/celesteela.json +2 -2
  238. package/data/pokemon/centiskorch-gmax.json +6 -2
  239. package/data/pokemon/ceruledge.json +2 -2
  240. package/data/pokemon/chandelure.json +4 -0
  241. package/data/pokemon/chansey.json +1 -2
  242. package/data/pokemon/charizard-mega-x.json +5 -2
  243. package/data/pokemon/charizard-mega-y.json +5 -2
  244. package/data/pokemon/chatot.json +1 -1
  245. package/data/pokemon/cherrim-sunshine.json +1 -3
  246. package/data/pokemon/cherrim.json +11 -1
  247. package/data/pokemon/cherubi.json +11 -1
  248. package/data/pokemon/chesnaught-mega.json +2 -2
  249. package/data/pokemon/chesnaught.json +2 -2
  250. package/data/pokemon/chespin.json +2 -2
  251. package/data/pokemon/chewtle.json +1 -1
  252. package/data/pokemon/chienpao.json +1 -1
  253. package/data/pokemon/chikorita.json +7 -3
  254. package/data/pokemon/chimchar.json +14 -1
  255. package/data/pokemon/chimecho.json +13 -1
  256. package/data/pokemon/chingling.json +1 -1
  257. package/data/pokemon/chiyu.json +1 -1
  258. package/data/pokemon/cinccino.json +1 -1
  259. package/data/pokemon/clamperl.json +1 -1
  260. package/data/pokemon/clauncher.json +2 -12
  261. package/data/pokemon/clawitzer.json +2 -12
  262. package/data/pokemon/claydol.json +12 -2
  263. package/data/pokemon/cloyster.json +2 -1
  264. package/data/pokemon/coalossal-gmax.json +6 -2
  265. package/data/pokemon/cobalion.json +3 -1
  266. package/data/pokemon/cofagrigus.json +1 -1
  267. package/data/pokemon/combee-f.json +6 -2
  268. package/data/pokemon/combee.json +1 -1
  269. package/data/pokemon/combusken-f.json +9 -1
  270. package/data/pokemon/combusken.json +4 -0
  271. package/data/pokemon/conkeldurr.json +3 -1
  272. package/data/pokemon/corphish.json +1 -2
  273. package/data/pokemon/corsola-galar.json +2 -2
  274. package/data/pokemon/corsola.json +1 -2
  275. package/data/pokemon/corviknight-gmax.json +6 -2
  276. package/data/pokemon/cottonee.json +2 -3
  277. package/data/pokemon/cradily.json +1 -2
  278. package/data/pokemon/cramorant-gorging.json +1 -1
  279. package/data/pokemon/cramorant-gulping.json +1 -1
  280. package/data/pokemon/cramorant.json +3 -3
  281. package/data/pokemon/cranidos.json +3 -4
  282. package/data/pokemon/crawdaunt.json +1 -2
  283. package/data/pokemon/cresselia.json +15 -1
  284. package/data/pokemon/croagunk-f.json +6 -3
  285. package/data/pokemon/croagunk.json +1 -2
  286. package/data/pokemon/crobat.json +2 -1
  287. package/data/pokemon/croconaw.json +6 -2
  288. package/data/pokemon/crustle.json +3 -1
  289. package/data/pokemon/cryogonal.json +1 -1
  290. package/data/pokemon/cubchoo.json +1 -1
  291. package/data/pokemon/cursola.json +2 -2
  292. package/data/pokemon/cyclizar.json +1 -1
  293. package/data/pokemon/cyndaquil.json +7 -3
  294. package/data/pokemon/darkrai.json +8 -2
  295. package/data/pokemon/darmanitan-galar-zen.json +2 -2
  296. package/data/pokemon/darmanitan-galar.json +2 -2
  297. package/data/pokemon/darmanitan-zen.json +2 -11
  298. package/data/pokemon/darmanitan.json +2 -12
  299. package/data/pokemon/darumaka-galar.json +2 -2
  300. package/data/pokemon/darumaka.json +2 -12
  301. package/data/pokemon/dedenne.json +1 -1
  302. package/data/pokemon/deerling-autumn.json +12 -14
  303. package/data/pokemon/deerling-summer.json +12 -14
  304. package/data/pokemon/deerling-winter.json +12 -14
  305. package/data/pokemon/deerling.json +1 -1
  306. package/data/pokemon/deino.json +5 -3
  307. package/data/pokemon/delcatty.json +15 -3
  308. package/data/pokemon/delphox-mega.json +2 -2
  309. package/data/pokemon/delphox.json +2 -2
  310. package/data/pokemon/deoxys-attack.json +8 -2
  311. package/data/pokemon/deoxys-defense.json +8 -2
  312. package/data/pokemon/deoxys-speed.json +6 -0
  313. package/data/pokemon/deoxys.json +9 -1
  314. package/data/pokemon/dewgong.json +1 -2
  315. package/data/pokemon/dewott.json +3 -1
  316. package/data/pokemon/dialga.json +6 -14
  317. package/data/pokemon/diancie-mega.json +2 -2
  318. package/data/pokemon/diancie.json +16 -2
  319. package/data/pokemon/diggersby.json +1 -1
  320. package/data/pokemon/diglett.json +16 -5
  321. package/data/pokemon/ditto.json +2 -1
  322. package/data/pokemon/dodrio-f.json +6 -2
  323. package/data/pokemon/dodrio.json +1 -1
  324. package/data/pokemon/doduo-f.json +6 -2
  325. package/data/pokemon/doduo.json +1 -1
  326. package/data/pokemon/donphan-f.json +17 -2
  327. package/data/pokemon/donphan.json +12 -1
  328. package/data/pokemon/doublade.json +12 -1
  329. package/data/pokemon/dragalge.json +2 -12
  330. package/data/pokemon/dragapult.json +2 -2
  331. package/data/pokemon/dragonite-mega.json +1 -1
  332. package/data/pokemon/drakloak.json +2 -2
  333. package/data/pokemon/drampa.json +2 -2
  334. package/data/pokemon/drapion.json +3 -1
  335. package/data/pokemon/drednaw-gmax.json +6 -2
  336. package/data/pokemon/drednaw.json +1 -1
  337. package/data/pokemon/dreepy.json +2 -2
  338. package/data/pokemon/drifblim.json +3 -2
  339. package/data/pokemon/drifloon.json +3 -2
  340. package/data/pokemon/drilbur.json +1 -1
  341. package/data/pokemon/druddigon.json +1 -1
  342. package/data/pokemon/ducklett.json +14 -2
  343. package/data/pokemon/dudunsparce-three-segment.json +1 -1
  344. package/data/pokemon/dugtrio.json +15 -5
  345. package/data/pokemon/dunsparce.json +1 -1
  346. package/data/pokemon/duosion.json +22 -2
  347. package/data/pokemon/duraludon-gmax.json +6 -2
  348. package/data/pokemon/durant.json +1 -1
  349. package/data/pokemon/dusclops.json +14 -1
  350. package/data/pokemon/dusknoir.json +11 -1
  351. package/data/pokemon/duskull.json +14 -1
  352. package/data/pokemon/dustox-f.json +19 -3
  353. package/data/pokemon/dustox.json +14 -2
  354. package/data/pokemon/dwebble.json +3 -1
  355. package/data/pokemon/eelektrik.json +4 -0
  356. package/data/pokemon/eelektross.json +4 -0
  357. package/data/pokemon/eevee-gmax.json +6 -2
  358. package/data/pokemon/eiscue-noice.json +2 -2
  359. package/data/pokemon/eiscue.json +2 -2
  360. package/data/pokemon/ekans.json +5 -1
  361. package/data/pokemon/electabuzz.json +13 -3
  362. package/data/pokemon/electivire.json +1 -3
  363. package/data/pokemon/electrike.json +13 -2
  364. package/data/pokemon/electrode-hisui.json +2 -2
  365. package/data/pokemon/electrode.json +3 -1
  366. package/data/pokemon/elekid.json +1 -3
  367. package/data/pokemon/elgyem.json +1 -1
  368. package/data/pokemon/emboar.json +3 -1
  369. package/data/pokemon/empoleon.json +4 -0
  370. package/data/pokemon/enamorus.json +5 -3
  371. package/data/pokemon/entei.json +6 -2
  372. package/data/pokemon/escavalier.json +1 -1
  373. package/data/pokemon/espurr.json +1 -1
  374. package/data/pokemon/excadrill.json +1 -1
  375. package/data/pokemon/exeggutor.json +13 -3
  376. package/data/pokemon/exploud.json +14 -2
  377. package/data/pokemon/falinks-mega.json +1 -1
  378. package/data/pokemon/farfetchd-galar.json +3 -3
  379. package/data/pokemon/farfetchd.json +15 -3
  380. package/data/pokemon/farigiraf.json +1 -1
  381. package/data/pokemon/feebas.json +11 -3
  382. package/data/pokemon/fennekin.json +2 -2
  383. package/data/pokemon/feraligatr.json +6 -2
  384. package/data/pokemon/ferroseed.json +1 -1
  385. package/data/pokemon/ferrothorn.json +1 -1
  386. package/data/pokemon/fezandipiti.json +1 -1
  387. package/data/pokemon/finneon-f.json +6 -4
  388. package/data/pokemon/finneon.json +1 -3
  389. package/data/pokemon/flaaffy.json +14 -2
  390. package/data/pokemon/flabebe-blue.json +2 -2
  391. package/data/pokemon/flabebe-orange.json +2 -2
  392. package/data/pokemon/flabebe-white.json +2 -2
  393. package/data/pokemon/flabebe-yellow.json +2 -2
  394. package/data/pokemon/flabebe.json +2 -2
  395. package/data/pokemon/flapple-gmax.json +6 -2
  396. package/data/pokemon/flapple.json +2 -2
  397. package/data/pokemon/floatzel-f.json +8 -2
  398. package/data/pokemon/floatzel.json +3 -1
  399. package/data/pokemon/floette-blue.json +1 -1
  400. package/data/pokemon/floette-orange.json +1 -1
  401. package/data/pokemon/floette-white.json +1 -1
  402. package/data/pokemon/floette-yellow.json +1 -1
  403. package/data/pokemon/floette.json +1 -1
  404. package/data/pokemon/florges-blue.json +1 -1
  405. package/data/pokemon/florges-orange.json +1 -1
  406. package/data/pokemon/florges-white.json +1 -1
  407. package/data/pokemon/florges-yellow.json +1 -1
  408. package/data/pokemon/florges.json +1 -1
  409. package/data/pokemon/fluttermane.json +3 -3
  410. package/data/pokemon/flygon.json +1 -2
  411. package/data/pokemon/foongus.json +1 -1
  412. package/data/pokemon/forretress.json +2 -1
  413. package/data/pokemon/fraxure.json +4 -0
  414. package/data/pokemon/frillish-f.json +6 -2
  415. package/data/pokemon/frillish.json +1 -1
  416. package/data/pokemon/froakie.json +2 -2
  417. package/data/pokemon/frogadier.json +2 -2
  418. package/data/pokemon/froslass.json +1 -3
  419. package/data/pokemon/furfrou-dandy.json +2 -15
  420. package/data/pokemon/furfrou-debutante.json +2 -15
  421. package/data/pokemon/furfrou-diamond.json +2 -15
  422. package/data/pokemon/furfrou-heart.json +2 -15
  423. package/data/pokemon/furfrou-kabuki.json +2 -15
  424. package/data/pokemon/furfrou-la-reine.json +2 -15
  425. package/data/pokemon/furfrou-matron.json +2 -15
  426. package/data/pokemon/furfrou-pharaoh.json +2 -15
  427. package/data/pokemon/furfrou-star.json +2 -15
  428. package/data/pokemon/furfrou.json +1 -1
  429. package/data/pokemon/furret.json +13 -1
  430. package/data/pokemon/gabite-f.json +6 -3
  431. package/data/pokemon/gabite.json +1 -2
  432. package/data/pokemon/gallade-mega.json +1 -1
  433. package/data/pokemon/gallade.json +3 -2
  434. package/data/pokemon/galvantula.json +1 -1
  435. package/data/pokemon/garchomp-f.json +6 -3
  436. package/data/pokemon/garchomp-mega-z.json +2 -2
  437. package/data/pokemon/garchomp-mega.json +12 -1
  438. package/data/pokemon/garchomp.json +1 -2
  439. package/data/pokemon/gardevoir-mega.json +12 -1
  440. package/data/pokemon/gardevoir.json +3 -2
  441. package/data/pokemon/gastly.json +1 -1
  442. package/data/pokemon/gastrodon-east.json +1 -5
  443. package/data/pokemon/gastrodon.json +12 -7
  444. package/data/pokemon/genesect-burn.json +17 -2
  445. package/data/pokemon/genesect-chill.json +17 -2
  446. package/data/pokemon/genesect-douse.json +17 -2
  447. package/data/pokemon/genesect-shock.json +17 -2
  448. package/data/pokemon/genesect.json +18 -2
  449. package/data/pokemon/gengar-mega.json +15 -2
  450. package/data/pokemon/gengar.json +1 -1
  451. package/data/pokemon/geodude.json +11 -5
  452. package/data/pokemon/gible-f.json +6 -3
  453. package/data/pokemon/gible.json +1 -2
  454. package/data/pokemon/gimmighoul-roaming.json +1 -1
  455. package/data/pokemon/girafarig-f.json +14 -1
  456. package/data/pokemon/girafarig.json +14 -1
  457. package/data/pokemon/giratina-origin.json +15 -4
  458. package/data/pokemon/giratina.json +16 -4
  459. package/data/pokemon/glalie-mega.json +1 -1
  460. package/data/pokemon/glalie.json +12 -3
  461. package/data/pokemon/glameow.json +17 -12
  462. package/data/pokemon/gligar-f.json +13 -5
  463. package/data/pokemon/gligar.json +8 -4
  464. package/data/pokemon/gliscor.json +13 -3
  465. package/data/pokemon/gloom-f.json +19 -4
  466. package/data/pokemon/gloom.json +15 -3
  467. package/data/pokemon/gogoat.json +1 -1
  468. package/data/pokemon/golem.json +11 -5
  469. package/data/pokemon/golett.json +1 -2
  470. package/data/pokemon/golurk.json +1 -2
  471. package/data/pokemon/goodra-hisui.json +1 -1
  472. package/data/pokemon/goodra.json +1 -2
  473. package/data/pokemon/goomy.json +1 -2
  474. package/data/pokemon/gorebyss.json +1 -1
  475. package/data/pokemon/gothita.json +3 -2
  476. package/data/pokemon/gothitelle.json +3 -2
  477. package/data/pokemon/gothorita.json +3 -2
  478. package/data/pokemon/gourgeist-large.json +1 -1
  479. package/data/pokemon/gourgeist-small.json +1 -1
  480. package/data/pokemon/gourgeist-super.json +1 -1
  481. package/data/pokemon/gourgeist.json +1 -1
  482. package/data/pokemon/granbull.json +1 -1
  483. package/data/pokemon/graveler.json +11 -5
  484. package/data/pokemon/greattusk.json +3 -3
  485. package/data/pokemon/greninja-ash.json +2 -2
  486. package/data/pokemon/greninja-mega.json +2 -2
  487. package/data/pokemon/greninja.json +2 -2
  488. package/data/pokemon/grimer-alola.json +2 -12
  489. package/data/pokemon/grimer.json +11 -6
  490. package/data/pokemon/grotle.json +4 -0
  491. package/data/pokemon/groudon-primal.json +2 -2
  492. package/data/pokemon/groudon.json +4 -0
  493. package/data/pokemon/grovyle.json +4 -0
  494. package/data/pokemon/growlithe.json +3 -3
  495. package/data/pokemon/grumpig.json +14 -1
  496. package/data/pokemon/gulpin-f.json +19 -2
  497. package/data/pokemon/gulpin.json +14 -1
  498. package/data/pokemon/gurdurr.json +3 -1
  499. package/data/pokemon/gyarados-mega.json +14 -1
  500. package/data/pokemon/hakamoo.json +2 -12
  501. package/data/pokemon/happiny.json +1 -2
  502. package/data/pokemon/hatterene-gmax.json +6 -2
  503. package/data/pokemon/haunter.json +1 -1
  504. package/data/pokemon/hawlucha.json +1 -1
  505. package/data/pokemon/haxorus.json +4 -0
  506. package/data/pokemon/heatmor.json +1 -1
  507. package/data/pokemon/heatran.json +15 -1
  508. package/data/pokemon/heliolisk.json +2 -2
  509. package/data/pokemon/helioptile.json +2 -2
  510. package/data/pokemon/heracross-f.json +8 -3
  511. package/data/pokemon/heracross-mega.json +14 -3
  512. package/data/pokemon/heracross.json +3 -2
  513. package/data/pokemon/hippopotas-f.json +3 -1
  514. package/data/pokemon/hippopotas.json +3 -1
  515. package/data/pokemon/hippowdon-f.json +3 -1
  516. package/data/pokemon/hippowdon.json +3 -1
  517. package/data/pokemon/hitmonchan.json +13 -1
  518. package/data/pokemon/hitmonlee.json +13 -1
  519. package/data/pokemon/hitmontop.json +13 -1
  520. package/data/pokemon/honchkrow.json +1 -2
  521. package/data/pokemon/honedge.json +12 -1
  522. package/data/pokemon/hooh.json +10 -5
  523. package/data/pokemon/hoopa-unbound.json +13 -15
  524. package/data/pokemon/hoopa.json +14 -2
  525. package/data/pokemon/hoothoot.json +3 -1
  526. package/data/pokemon/hoppip.json +14 -2
  527. package/data/pokemon/horsea.json +4 -0
  528. package/data/pokemon/houndoom-f.json +9 -3
  529. package/data/pokemon/houndoom-mega.json +13 -2
  530. package/data/pokemon/houndoom.json +4 -2
  531. package/data/pokemon/houndour.json +4 -2
  532. package/data/pokemon/huntail.json +1 -1
  533. package/data/pokemon/hydreigon.json +5 -3
  534. package/data/pokemon/illumise.json +13 -1
  535. package/data/pokemon/infernape.json +4 -0
  536. package/data/pokemon/inkay.json +1 -1
  537. package/data/pokemon/ironbundle.json +3 -3
  538. package/data/pokemon/ironhands.json +3 -3
  539. package/data/pokemon/ironjugulis.json +3 -3
  540. package/data/pokemon/ironleaves.json +1 -1
  541. package/data/pokemon/ironmoth.json +3 -3
  542. package/data/pokemon/ironthorns.json +3 -3
  543. package/data/pokemon/irontreads.json +3 -3
  544. package/data/pokemon/ironvaliant.json +3 -3
  545. package/data/pokemon/jangmoo.json +2 -12
  546. package/data/pokemon/jellicent-f.json +6 -2
  547. package/data/pokemon/jellicent.json +1 -1
  548. package/data/pokemon/jirachi.json +12 -1
  549. package/data/pokemon/joltik.json +1 -1
  550. package/data/pokemon/jumpluff.json +13 -2
  551. package/data/pokemon/jynx.json +2 -0
  552. package/data/pokemon/kabuto.json +4 -2
  553. package/data/pokemon/kabutops.json +4 -2
  554. package/data/pokemon/kadabra-f.json +6 -3
  555. package/data/pokemon/kadabra.json +1 -2
  556. package/data/pokemon/kangaskhan-mega.json +15 -2
  557. package/data/pokemon/karrablast.json +1 -1
  558. package/data/pokemon/kartana.json +2 -2
  559. package/data/pokemon/kecleon.json +15 -4
  560. package/data/pokemon/keldeo-resolute.json +16 -2
  561. package/data/pokemon/keldeo.json +18 -3
  562. package/data/pokemon/kingdra.json +4 -0
  563. package/data/pokemon/kingler.json +1 -1
  564. package/data/pokemon/kirlia.json +3 -2
  565. package/data/pokemon/klang.json +3 -1
  566. package/data/pokemon/klink.json +3 -1
  567. package/data/pokemon/klinklang.json +3 -1
  568. package/data/pokemon/koffing.json +15 -2
  569. package/data/pokemon/kommoo.json +2 -12
  570. package/data/pokemon/krabby.json +1 -1
  571. package/data/pokemon/kricketot-f.json +16 -2
  572. package/data/pokemon/kricketot.json +11 -1
  573. package/data/pokemon/kricketune-f.json +16 -2
  574. package/data/pokemon/kricketune.json +11 -1
  575. package/data/pokemon/kyogre-primal.json +2 -2
  576. package/data/pokemon/kyogre.json +4 -0
  577. package/data/pokemon/kyurem-black.json +2 -2
  578. package/data/pokemon/kyurem-white.json +2 -2
  579. package/data/pokemon/kyurem.json +3 -1
  580. package/data/pokemon/lairon.json +3 -2
  581. package/data/pokemon/lampent.json +4 -0
  582. package/data/pokemon/landorus-therian.json +2 -2
  583. package/data/pokemon/landorus.json +16 -3
  584. package/data/pokemon/larvesta.json +1 -1
  585. package/data/pokemon/larvitar.json +7 -6
  586. package/data/pokemon/latias-mega.json +3 -3
  587. package/data/pokemon/latias.json +5 -4
  588. package/data/pokemon/latios-mega.json +3 -3
  589. package/data/pokemon/latios.json +5 -4
  590. package/data/pokemon/leavanny.json +4 -0
  591. package/data/pokemon/ledian-f.json +7 -12
  592. package/data/pokemon/ledian.json +2 -11
  593. package/data/pokemon/ledyba-f.json +6 -2
  594. package/data/pokemon/ledyba.json +1 -1
  595. package/data/pokemon/lickilicky.json +1 -1
  596. package/data/pokemon/lickitung.json +1 -1
  597. package/data/pokemon/liepard.json +13 -2
  598. package/data/pokemon/lileep.json +1 -2
  599. package/data/pokemon/lilligant.json +2 -3
  600. package/data/pokemon/linoone.json +4 -0
  601. package/data/pokemon/litleo.json +1 -1
  602. package/data/pokemon/litwick.json +4 -0
  603. package/data/pokemon/lombre.json +16 -4
  604. package/data/pokemon/lopunny-mega.json +1 -1
  605. package/data/pokemon/lopunny.json +1 -1
  606. package/data/pokemon/lotad.json +16 -4
  607. package/data/pokemon/loudred.json +14 -2
  608. package/data/pokemon/lucario-mega.json +13 -2
  609. package/data/pokemon/ludicolo-f.json +21 -5
  610. package/data/pokemon/ludicolo.json +16 -4
  611. package/data/pokemon/lugia.json +9 -4
  612. package/data/pokemon/lumineon-f.json +6 -4
  613. package/data/pokemon/lumineon.json +1 -3
  614. package/data/pokemon/lunala.json +2 -12
  615. package/data/pokemon/lunatone.json +15 -3
  616. package/data/pokemon/luxio-f.json +8 -3
  617. package/data/pokemon/luxio.json +3 -2
  618. package/data/pokemon/luxray-f.json +8 -3
  619. package/data/pokemon/luxray.json +3 -2
  620. package/data/pokemon/lycanroc-dusk.json +2 -2
  621. package/data/pokemon/machamp.json +1 -2
  622. package/data/pokemon/machoke.json +1 -2
  623. package/data/pokemon/machop.json +1 -2
  624. package/data/pokemon/magby.json +12 -3
  625. package/data/pokemon/magcargo.json +3 -1
  626. package/data/pokemon/magearna-original-mega.json +2 -2
  627. package/data/pokemon/magearna-original.json +3 -3
  628. package/data/pokemon/magearna.json +3 -3
  629. package/data/pokemon/magmar.json +13 -3
  630. package/data/pokemon/magmortar.json +1 -3
  631. package/data/pokemon/magnemite.json +1 -2
  632. package/data/pokemon/magneton.json +1 -2
  633. package/data/pokemon/magnezone.json +1 -2
  634. package/data/pokemon/malamar-mega.json +1 -1
  635. package/data/pokemon/malamar.json +1 -1
  636. package/data/pokemon/mamoswine-f.json +9 -1
  637. package/data/pokemon/mamoswine.json +4 -0
  638. package/data/pokemon/manaphy.json +13 -2
  639. package/data/pokemon/mandibuzz.json +1 -4
  640. package/data/pokemon/manectric-mega.json +13 -2
  641. package/data/pokemon/manectric.json +2 -2
  642. package/data/pokemon/mankey.json +13 -2
  643. package/data/pokemon/mantine.json +12 -1
  644. package/data/pokemon/mantyke.json +1 -1
  645. package/data/pokemon/maractus.json +1 -1
  646. package/data/pokemon/mareep.json +5 -4
  647. package/data/pokemon/marill.json +3 -2
  648. package/data/pokemon/marowak.json +13 -3
  649. package/data/pokemon/marshadow.json +2 -2
  650. package/data/pokemon/marshtomp.json +4 -0
  651. package/data/pokemon/masquerain.json +2 -2
  652. package/data/pokemon/maushold.json +1 -1
  653. package/data/pokemon/mawile-mega.json +13 -2
  654. package/data/pokemon/mawile.json +13 -3
  655. package/data/pokemon/medicham-f.json +9 -2
  656. package/data/pokemon/medicham-mega.json +12 -1
  657. package/data/pokemon/medicham.json +4 -1
  658. package/data/pokemon/meditite-f.json +9 -2
  659. package/data/pokemon/meditite.json +4 -1
  660. package/data/pokemon/meganium-f.json +11 -3
  661. package/data/pokemon/meganium.json +6 -2
  662. package/data/pokemon/melmetal-gmax.json +8 -4
  663. package/data/pokemon/melmetal.json +1 -1
  664. package/data/pokemon/meloetta-pirouette.json +16 -3
  665. package/data/pokemon/meloetta.json +16 -3
  666. package/data/pokemon/meltan.json +3 -3
  667. package/data/pokemon/meowstic-f.json +1 -1
  668. package/data/pokemon/meowstic.json +1 -1
  669. package/data/pokemon/meowth-alola.json +3 -2
  670. package/data/pokemon/meowth.json +6 -6
  671. package/data/pokemon/mesprit.json +15 -1
  672. package/data/pokemon/metagross-mega.json +1 -1
  673. package/data/pokemon/mew.json +17 -13
  674. package/data/pokemon/mewtwo-mega-x.json +4 -1
  675. package/data/pokemon/mewtwo-mega-y.json +4 -1
  676. package/data/pokemon/mewtwo.json +4 -4
  677. package/data/pokemon/mienfoo.json +1 -1
  678. package/data/pokemon/mienshao.json +1 -1
  679. package/data/pokemon/mightyena.json +5 -1
  680. package/data/pokemon/milotic-f.json +16 -4
  681. package/data/pokemon/milotic.json +11 -3
  682. package/data/pokemon/miltank.json +1 -1
  683. package/data/pokemon/mimejr.json +1 -1
  684. package/data/pokemon/minccino.json +1 -1
  685. package/data/pokemon/minun.json +13 -1
  686. package/data/pokemon/misdreavus.json +2 -2
  687. package/data/pokemon/mismagius.json +2 -2
  688. package/data/pokemon/moltres.json +7 -3
  689. package/data/pokemon/monferno.json +4 -0
  690. package/data/pokemon/morpeko-hangry.json +2 -2
  691. package/data/pokemon/morpeko.json +2 -2
  692. package/data/pokemon/mothim.json +13 -1
  693. package/data/pokemon/mrmime-galar.json +1 -1
  694. package/data/pokemon/mrmime.json +2 -0
  695. package/data/pokemon/mudkip.json +4 -0
  696. package/data/pokemon/muk-alola.json +2 -12
  697. package/data/pokemon/muk.json +11 -6
  698. package/data/pokemon/munna.json +1 -1
  699. package/data/pokemon/murkrow-f.json +6 -3
  700. package/data/pokemon/murkrow.json +1 -2
  701. package/data/pokemon/musharna.json +1 -1
  702. package/data/pokemon/natu.json +1 -1
  703. package/data/pokemon/necrozma-dawn-wings.json +2 -2
  704. package/data/pokemon/necrozma-dusk-mane.json +2 -2
  705. package/data/pokemon/nidoking.json +15 -2
  706. package/data/pokemon/nidoqueen.json +15 -2
  707. package/data/pokemon/nidoranf.json +15 -2
  708. package/data/pokemon/nidoranm.json +15 -2
  709. package/data/pokemon/nidorina.json +15 -2
  710. package/data/pokemon/nidorino.json +15 -2
  711. package/data/pokemon/nincada.json +4 -0
  712. package/data/pokemon/ninetales-alola.json +2 -14
  713. package/data/pokemon/ninetales.json +15 -7
  714. package/data/pokemon/ninjask.json +4 -0
  715. package/data/pokemon/noctowl.json +13 -1
  716. package/data/pokemon/noibat.json +1 -1
  717. package/data/pokemon/noivern.json +1 -1
  718. package/data/pokemon/numel-f.json +18 -2
  719. package/data/pokemon/numel.json +13 -1
  720. package/data/pokemon/nuzleaf-f.json +20 -5
  721. package/data/pokemon/nuzleaf.json +15 -4
  722. package/data/pokemon/octillery-f.json +2 -1
  723. package/data/pokemon/octillery.json +2 -1
  724. package/data/pokemon/oddish.json +15 -3
  725. package/data/pokemon/oinkologne-f.json +1 -1
  726. package/data/pokemon/omanyte.json +4 -2
  727. package/data/pokemon/omastar.json +4 -2
  728. package/data/pokemon/onix.json +1 -1
  729. package/data/pokemon/oranguru.json +2 -2
  730. package/data/pokemon/orbeetle-gmax.json +6 -2
  731. package/data/pokemon/oshawott.json +3 -1
  732. package/data/pokemon/pachirisu-f.json +11 -1
  733. package/data/pokemon/pachirisu.json +11 -1
  734. package/data/pokemon/palafin-hero.json +1 -1
  735. package/data/pokemon/palkia.json +6 -14
  736. package/data/pokemon/palpitoad.json +1 -1
  737. package/data/pokemon/panpour.json +1 -1
  738. package/data/pokemon/pansage.json +1 -1
  739. package/data/pokemon/pansear.json +1 -1
  740. package/data/pokemon/passimian.json +2 -2
  741. package/data/pokemon/patrat.json +1 -1
  742. package/data/pokemon/pawniard.json +1 -1
  743. package/data/pokemon/pecharunt.json +1 -1
  744. package/data/pokemon/persian-alola.json +3 -2
  745. package/data/pokemon/persian.json +5 -5
  746. package/data/pokemon/petilil.json +2 -3
  747. package/data/pokemon/phanpy.json +12 -1
  748. package/data/pokemon/pheromosa.json +2 -2
  749. package/data/pokemon/phione.json +12 -1
  750. package/data/pokemon/pidgeot-mega.json +12 -1
  751. package/data/pokemon/pidgeot.json +13 -2
  752. package/data/pokemon/pidgeotto.json +13 -2
  753. package/data/pokemon/pidgey.json +13 -2
  754. package/data/pokemon/pidove.json +1 -1
  755. package/data/pokemon/pignite.json +3 -1
  756. package/data/pokemon/pikachu-alola.json +12 -2
  757. package/data/pokemon/pikachu-hoenn.json +12 -2
  758. package/data/pokemon/pikachu-kalos.json +12 -2
  759. package/data/pokemon/pikachu-original.json +12 -2
  760. package/data/pokemon/pikachu-partner.json +3 -3
  761. package/data/pokemon/pikachu-sinnoh.json +12 -2
  762. package/data/pokemon/pikachu-unova.json +12 -2
  763. package/data/pokemon/pikachu-world.json +2 -2
  764. package/data/pokemon/piloswine-f.json +9 -1
  765. package/data/pokemon/piloswine.json +4 -0
  766. package/data/pokemon/pineco.json +2 -1
  767. package/data/pokemon/pinsir-mega.json +16 -3
  768. package/data/pokemon/pinsir.json +3 -4
  769. package/data/pokemon/piplup.json +14 -1
  770. package/data/pokemon/plusle.json +12 -1
  771. package/data/pokemon/ponyta-galar.json +2 -2
  772. package/data/pokemon/ponyta.json +15 -2
  773. package/data/pokemon/poochyena.json +5 -1
  774. package/data/pokemon/porygon.json +13 -2
  775. package/data/pokemon/porygon2.json +13 -2
  776. package/data/pokemon/porygonz.json +1 -2
  777. package/data/pokemon/primeape.json +1 -2
  778. package/data/pokemon/prinplup.json +4 -0
  779. package/data/pokemon/pumpkaboo-large.json +1 -1
  780. package/data/pokemon/pumpkaboo-small.json +1 -1
  781. package/data/pokemon/pumpkaboo-super.json +1 -1
  782. package/data/pokemon/pumpkaboo.json +1 -1
  783. package/data/pokemon/pupitar.json +7 -6
  784. package/data/pokemon/purrloin.json +13 -2
  785. package/data/pokemon/purugly.json +17 -12
  786. package/data/pokemon/pyroar-f.json +1 -1
  787. package/data/pokemon/pyroar.json +1 -1
  788. package/data/pokemon/quagsire-f.json +20 -2
  789. package/data/pokemon/quagsire.json +15 -1
  790. package/data/pokemon/quilava.json +6 -2
  791. package/data/pokemon/quilladin.json +2 -2
  792. package/data/pokemon/qwilfish.json +14 -1
  793. package/data/pokemon/rabsca.json +1 -1
  794. package/data/pokemon/raichu-alola.json +2 -2
  795. package/data/pokemon/raichu-f.json +6 -2
  796. package/data/pokemon/raichu-mega-x.json +1 -1
  797. package/data/pokemon/raichu-mega-y.json +1 -1
  798. package/data/pokemon/raichu.json +1 -1
  799. package/data/pokemon/raikou.json +6 -2
  800. package/data/pokemon/ralts.json +3 -2
  801. package/data/pokemon/rampardos.json +3 -4
  802. package/data/pokemon/rapidash-galar.json +2 -2
  803. package/data/pokemon/rapidash.json +14 -2
  804. package/data/pokemon/raticate-f.json +18 -2
  805. package/data/pokemon/raticate.json +13 -1
  806. package/data/pokemon/rattata-f.json +19 -2
  807. package/data/pokemon/rattata.json +14 -1
  808. package/data/pokemon/rayquaza-mega.json +1 -1
  809. package/data/pokemon/rayquaza.json +4 -0
  810. package/data/pokemon/regice.json +5 -2
  811. package/data/pokemon/regigigas.json +15 -1
  812. package/data/pokemon/regirock.json +5 -2
  813. package/data/pokemon/registeel.json +5 -2
  814. package/data/pokemon/rellor.json +1 -1
  815. package/data/pokemon/remoraid.json +2 -1
  816. package/data/pokemon/reshiram.json +22 -2
  817. package/data/pokemon/reuniclus.json +22 -2
  818. package/data/pokemon/rhydon-f.json +10 -3
  819. package/data/pokemon/rhydon.json +5 -2
  820. package/data/pokemon/rhyhorn-f.json +10 -3
  821. package/data/pokemon/rhyhorn.json +5 -2
  822. package/data/pokemon/rhyperior-f.json +5 -2
  823. package/data/pokemon/rhyperior.json +5 -2
  824. package/data/pokemon/roaringmoon.json +3 -3
  825. package/data/pokemon/roselia-f.json +8 -3
  826. package/data/pokemon/roselia.json +3 -2
  827. package/data/pokemon/roserade-f.json +8 -3
  828. package/data/pokemon/roserade.json +3 -2
  829. package/data/pokemon/rotom-fan.json +3 -1
  830. package/data/pokemon/rotom-frost.json +3 -1
  831. package/data/pokemon/rotom-heat.json +3 -1
  832. package/data/pokemon/rotom-mow.json +3 -1
  833. package/data/pokemon/rotom-wash.json +3 -1
  834. package/data/pokemon/rotom.json +3 -1
  835. package/data/pokemon/rufflet.json +1 -4
  836. package/data/pokemon/sableye-mega.json +2 -2
  837. package/data/pokemon/sableye.json +11 -3
  838. package/data/pokemon/salamence-mega.json +1 -1
  839. package/data/pokemon/salamence.json +2 -4
  840. package/data/pokemon/samurott.json +3 -1
  841. package/data/pokemon/sandaconda-gmax.json +6 -2
  842. package/data/pokemon/sandshrew-alola.json +2 -2
  843. package/data/pokemon/sandshrew.json +12 -1
  844. package/data/pokemon/sandslash-alola.json +2 -2
  845. package/data/pokemon/sandslash.json +12 -1
  846. package/data/pokemon/sandyshocks.json +3 -3
  847. package/data/pokemon/sawk.json +2 -1
  848. package/data/pokemon/sawsbuck-autumn.json +12 -14
  849. package/data/pokemon/sawsbuck-summer.json +12 -14
  850. package/data/pokemon/sawsbuck-winter.json +12 -14
  851. package/data/pokemon/sawsbuck.json +1 -1
  852. package/data/pokemon/scatterbug.json +2 -2
  853. package/data/pokemon/sceptile-mega.json +2 -2
  854. package/data/pokemon/sceptile.json +4 -0
  855. package/data/pokemon/scizor-f.json +9 -6
  856. package/data/pokemon/scizor-mega.json +13 -2
  857. package/data/pokemon/scizor.json +4 -5
  858. package/data/pokemon/scolipede.json +3 -1
  859. package/data/pokemon/scovillain.json +1 -1
  860. package/data/pokemon/scrafty.json +1 -2
  861. package/data/pokemon/scraggy.json +1 -2
  862. package/data/pokemon/screamtail.json +3 -3
  863. package/data/pokemon/scyther-f.json +8 -4
  864. package/data/pokemon/scyther.json +3 -3
  865. package/data/pokemon/seadra.json +4 -0
  866. package/data/pokemon/sealeo.json +4 -0
  867. package/data/pokemon/seedot.json +15 -4
  868. package/data/pokemon/seel.json +1 -2
  869. package/data/pokemon/seismitoad.json +1 -1
  870. package/data/pokemon/sentret.json +14 -1
  871. package/data/pokemon/serperior.json +3 -1
  872. package/data/pokemon/servine.json +3 -1
  873. package/data/pokemon/seviper.json +14 -2
  874. package/data/pokemon/sewaddle.json +4 -0
  875. package/data/pokemon/sharpedo-mega.json +1 -1
  876. package/data/pokemon/sharpedo.json +1 -3
  877. package/data/pokemon/shaymin-sky.json +7 -1
  878. package/data/pokemon/shaymin.json +9 -1
  879. package/data/pokemon/shedinja.json +4 -0
  880. package/data/pokemon/shelgon.json +12 -4
  881. package/data/pokemon/shellder.json +2 -1
  882. package/data/pokemon/shellos-east.json +1 -5
  883. package/data/pokemon/shellos.json +12 -7
  884. package/data/pokemon/shelmet.json +1 -1
  885. package/data/pokemon/shieldon.json +2 -3
  886. package/data/pokemon/shiftry-f.json +20 -5
  887. package/data/pokemon/shiftry.json +15 -4
  888. package/data/pokemon/shinx-f.json +8 -3
  889. package/data/pokemon/shinx.json +3 -2
  890. package/data/pokemon/shroomish.json +11 -1
  891. package/data/pokemon/shuckle.json +15 -3
  892. package/data/pokemon/shuppet.json +1 -1
  893. package/data/pokemon/sigilyph.json +3 -1
  894. package/data/pokemon/silcoon.json +14 -2
  895. package/data/pokemon/simipour.json +1 -1
  896. package/data/pokemon/simisage.json +1 -1
  897. package/data/pokemon/simisear.json +1 -1
  898. package/data/pokemon/sirfetchd.json +3 -3
  899. package/data/pokemon/skarmory-mega.json +1 -1
  900. package/data/pokemon/skiddo.json +1 -1
  901. package/data/pokemon/skiploom.json +13 -2
  902. package/data/pokemon/skitty.json +16 -3
  903. package/data/pokemon/skorupi.json +3 -1
  904. package/data/pokemon/skrelp.json +2 -12
  905. package/data/pokemon/skuntank.json +7 -3
  906. package/data/pokemon/slaking.json +14 -2
  907. package/data/pokemon/slakoth.json +14 -2
  908. package/data/pokemon/sliggoo-hisui.json +1 -1
  909. package/data/pokemon/sliggoo.json +1 -2
  910. package/data/pokemon/slitherwing.json +3 -3
  911. package/data/pokemon/slowbro-mega.json +12 -1
  912. package/data/pokemon/slowbro.json +1 -2
  913. package/data/pokemon/slowking.json +1 -2
  914. package/data/pokemon/slowpoke.json +1 -2
  915. package/data/pokemon/slugma.json +3 -1
  916. package/data/pokemon/slurpuff.json +2 -2
  917. package/data/pokemon/smeargle.json +13 -3
  918. package/data/pokemon/smoochum.json +2 -0
  919. package/data/pokemon/snivy.json +3 -1
  920. package/data/pokemon/snorunt.json +12 -3
  921. package/data/pokemon/snover-f.json +20 -4
  922. package/data/pokemon/snover.json +15 -3
  923. package/data/pokemon/snubbull.json +1 -1
  924. package/data/pokemon/solgaleo.json +2 -12
  925. package/data/pokemon/solosis.json +22 -2
  926. package/data/pokemon/solrock.json +15 -4
  927. package/data/pokemon/spewpa.json +2 -2
  928. package/data/pokemon/spheal.json +4 -0
  929. package/data/pokemon/spinarak.json +2 -1
  930. package/data/pokemon/spiritomb.json +11 -3
  931. package/data/pokemon/spoink.json +14 -1
  932. package/data/pokemon/spritzee.json +2 -2
  933. package/data/pokemon/squawkabilly-blue.json +1 -1
  934. package/data/pokemon/squawkabilly-white.json +1 -1
  935. package/data/pokemon/squawkabilly-yellow.json +1 -1
  936. package/data/pokemon/stakataka.json +2 -2
  937. package/data/pokemon/stantler.json +9 -5
  938. package/data/pokemon/staraptor-f.json +12 -2
  939. package/data/pokemon/staraptor-mega.json +1 -1
  940. package/data/pokemon/staraptor.json +12 -2
  941. package/data/pokemon/staravia-f.json +17 -3
  942. package/data/pokemon/staravia.json +12 -2
  943. package/data/pokemon/starly-f.json +17 -3
  944. package/data/pokemon/starly.json +12 -2
  945. package/data/pokemon/starmie-mega.json +1 -1
  946. package/data/pokemon/steelix-f.json +6 -2
  947. package/data/pokemon/steelix-mega.json +1 -1
  948. package/data/pokemon/steelix.json +1 -1
  949. package/data/pokemon/stonjourner.json +2 -2
  950. package/data/pokemon/stunfisk.json +3 -1
  951. package/data/pokemon/stunky.json +7 -3
  952. package/data/pokemon/sudowoodo-f.json +1 -1
  953. package/data/pokemon/sudowoodo.json +1 -1
  954. package/data/pokemon/suicune.json +6 -2
  955. package/data/pokemon/sunflora.json +13 -1
  956. package/data/pokemon/sunkern.json +14 -1
  957. package/data/pokemon/surskit.json +2 -2
  958. package/data/pokemon/swablu.json +3 -1
  959. package/data/pokemon/swadloon.json +4 -0
  960. package/data/pokemon/swalot-f.json +14 -1
  961. package/data/pokemon/swalot.json +14 -1
  962. package/data/pokemon/swampert-mega.json +2 -2
  963. package/data/pokemon/swampert.json +4 -0
  964. package/data/pokemon/swanna.json +14 -2
  965. package/data/pokemon/swellow.json +3 -1
  966. package/data/pokemon/swinub.json +4 -0
  967. package/data/pokemon/swirlix.json +2 -2
  968. package/data/pokemon/swoobat.json +1 -1
  969. package/data/pokemon/taillow.json +3 -1
  970. package/data/pokemon/tangela.json +13 -1
  971. package/data/pokemon/tangrowth-f.json +1 -3
  972. package/data/pokemon/tangrowth.json +1 -3
  973. package/data/pokemon/tauros-paldea-fire.json +3 -3
  974. package/data/pokemon/tauros-paldea-water.json +3 -3
  975. package/data/pokemon/tauros-paldea.json +1 -1
  976. package/data/pokemon/teddiursa.json +7 -3
  977. package/data/pokemon/tepig.json +3 -1
  978. package/data/pokemon/terrakion.json +3 -1
  979. package/data/pokemon/throh.json +2 -1
  980. package/data/pokemon/thundurus-therian.json +14 -2
  981. package/data/pokemon/thundurus.json +7 -2
  982. package/data/pokemon/timburr.json +3 -1
  983. package/data/pokemon/tinglu.json +1 -1
  984. package/data/pokemon/tirtouga.json +1 -2
  985. package/data/pokemon/togekiss.json +3 -2
  986. package/data/pokemon/togepi.json +4 -3
  987. package/data/pokemon/togetic.json +3 -2
  988. package/data/pokemon/torchic-f.json +9 -1
  989. package/data/pokemon/torchic.json +4 -0
  990. package/data/pokemon/tornadus-therian.json +14 -2
  991. package/data/pokemon/tornadus.json +7 -2
  992. package/data/pokemon/torterra.json +4 -0
  993. package/data/pokemon/totodile.json +7 -3
  994. package/data/pokemon/toxicroak-f.json +6 -3
  995. package/data/pokemon/toxicroak.json +1 -2
  996. package/data/pokemon/tranquill.json +1 -1
  997. package/data/pokemon/trapinch.json +1 -2
  998. package/data/pokemon/treecko.json +4 -0
  999. package/data/pokemon/tropius.json +12 -5
  1000. package/data/pokemon/turtonator.json +2 -2
  1001. package/data/pokemon/turtwig.json +14 -1
  1002. package/data/pokemon/tympole.json +1 -1
  1003. package/data/pokemon/tynamo.json +4 -0
  1004. package/data/pokemon/typhlosion.json +6 -2
  1005. package/data/pokemon/tyranitar-mega.json +13 -2
  1006. package/data/pokemon/tyranitar.json +7 -6
  1007. package/data/pokemon/tyrantrum.json +1 -1
  1008. package/data/pokemon/tyrogue.json +14 -1
  1009. package/data/pokemon/tyrunt.json +1 -1
  1010. package/data/pokemon/unfezant-f.json +6 -2
  1011. package/data/pokemon/unfezant.json +1 -1
  1012. package/data/pokemon/unown-b.json +11 -1
  1013. package/data/pokemon/unown-c.json +11 -1
  1014. package/data/pokemon/unown-d.json +11 -1
  1015. package/data/pokemon/unown-e.json +11 -1
  1016. package/data/pokemon/unown-exclamation.json +30 -2
  1017. package/data/pokemon/unown-f.json +11 -1
  1018. package/data/pokemon/unown-g.json +11 -1
  1019. package/data/pokemon/unown-h.json +11 -1
  1020. package/data/pokemon/unown-i.json +11 -1
  1021. package/data/pokemon/unown-j.json +11 -1
  1022. package/data/pokemon/unown-k.json +11 -1
  1023. package/data/pokemon/unown-l.json +11 -1
  1024. package/data/pokemon/unown-m.json +11 -1
  1025. package/data/pokemon/unown-n.json +11 -1
  1026. package/data/pokemon/unown-o.json +11 -1
  1027. package/data/pokemon/unown-p.json +11 -1
  1028. package/data/pokemon/unown-q.json +11 -1
  1029. package/data/pokemon/unown-question.json +30 -2
  1030. package/data/pokemon/unown-r.json +11 -1
  1031. package/data/pokemon/unown-s.json +11 -1
  1032. package/data/pokemon/unown-t.json +11 -1
  1033. package/data/pokemon/unown-u.json +11 -1
  1034. package/data/pokemon/unown-v.json +11 -1
  1035. package/data/pokemon/unown-w.json +11 -1
  1036. package/data/pokemon/unown-x.json +11 -1
  1037. package/data/pokemon/unown-y.json +11 -1
  1038. package/data/pokemon/unown-z.json +11 -1
  1039. package/data/pokemon/unown.json +4 -0
  1040. package/data/pokemon/ursaring-f.json +12 -4
  1041. package/data/pokemon/ursaring.json +7 -3
  1042. package/data/pokemon/urshifu-gmax.json +6 -2
  1043. package/data/pokemon/urshifu-rapid-strike-gmax.json +6 -2
  1044. package/data/pokemon/uxie.json +15 -1
  1045. package/data/pokemon/veluza.json +1 -1
  1046. package/data/pokemon/venipede.json +3 -1
  1047. package/data/pokemon/venomoth.json +1 -1
  1048. package/data/pokemon/venonat.json +1 -1
  1049. package/data/pokemon/venusaur-mega.json +3 -1
  1050. package/data/pokemon/vespiquen.json +1 -1
  1051. package/data/pokemon/vibrava.json +1 -2
  1052. package/data/pokemon/victini.json +17 -3
  1053. package/data/pokemon/victreebel-mega.json +1 -1
  1054. package/data/pokemon/victreebel.json +6 -2
  1055. package/data/pokemon/vigoroth.json +14 -2
  1056. package/data/pokemon/vileplume-f.json +14 -3
  1057. package/data/pokemon/vileplume.json +15 -3
  1058. package/data/pokemon/virizion.json +3 -1
  1059. package/data/pokemon/vivillon-archipelago.json +17 -3
  1060. package/data/pokemon/vivillon-continental.json +17 -3
  1061. package/data/pokemon/vivillon-elegant.json +17 -3
  1062. package/data/pokemon/vivillon-fancy.json +20 -4
  1063. package/data/pokemon/vivillon-garden.json +7 -3
  1064. package/data/pokemon/vivillon-high-plains.json +17 -3
  1065. package/data/pokemon/vivillon-jungle.json +17 -3
  1066. package/data/pokemon/vivillon-marine.json +7 -3
  1067. package/data/pokemon/vivillon-meadow.json +7 -3
  1068. package/data/pokemon/vivillon-modern.json +17 -3
  1069. package/data/pokemon/vivillon-monsoon.json +17 -3
  1070. package/data/pokemon/vivillon-ocean.json +17 -3
  1071. package/data/pokemon/vivillon-pokeball.json +22 -4
  1072. package/data/pokemon/vivillon-polar.json +17 -3
  1073. package/data/pokemon/vivillon-river.json +17 -3
  1074. package/data/pokemon/vivillon-sandstorm.json +17 -3
  1075. package/data/pokemon/vivillon-savanna.json +17 -3
  1076. package/data/pokemon/vivillon-sun.json +17 -3
  1077. package/data/pokemon/vivillon-tundra.json +17 -3
  1078. package/data/pokemon/vivillon.json +22 -4
  1079. package/data/pokemon/volbeat.json +13 -1
  1080. package/data/pokemon/volcanion.json +16 -2
  1081. package/data/pokemon/volcarona.json +1 -1
  1082. package/data/pokemon/voltorb-hisui.json +2 -2
  1083. package/data/pokemon/voltorb.json +3 -1
  1084. package/data/pokemon/vullaby.json +1 -4
  1085. package/data/pokemon/vulpix-alola.json +2 -14
  1086. package/data/pokemon/vulpix.json +15 -7
  1087. package/data/pokemon/wailmer.json +1 -3
  1088. package/data/pokemon/wailord.json +1 -3
  1089. package/data/pokemon/walkingwake.json +1 -1
  1090. package/data/pokemon/walrein.json +4 -0
  1091. package/data/pokemon/watchog.json +1 -1
  1092. package/data/pokemon/weepinbell.json +6 -2
  1093. package/data/pokemon/weezing.json +15 -2
  1094. package/data/pokemon/whimsicott.json +2 -3
  1095. package/data/pokemon/whirlipede.json +3 -1
  1096. package/data/pokemon/whismur.json +14 -2
  1097. package/data/pokemon/wobbuffet-f.json +1 -1
  1098. package/data/pokemon/wobbuffet.json +1 -1
  1099. package/data/pokemon/wochien.json +1 -1
  1100. package/data/pokemon/woobat.json +1 -1
  1101. package/data/pokemon/wooper-f.json +11 -3
  1102. package/data/pokemon/wooper-paldea.json +1 -1
  1103. package/data/pokemon/wooper.json +6 -2
  1104. package/data/pokemon/wormadam-sandy.json +13 -1
  1105. package/data/pokemon/wormadam-trash.json +13 -1
  1106. package/data/pokemon/wormadam.json +13 -1
  1107. package/data/pokemon/wurmple.json +14 -2
  1108. package/data/pokemon/wynaut.json +1 -1
  1109. package/data/pokemon/xatu-f.json +6 -2
  1110. package/data/pokemon/xatu.json +1 -1
  1111. package/data/pokemon/xerneas-active.json +8 -4
  1112. package/data/pokemon/xerneas.json +13 -5
  1113. package/data/pokemon/yamask.json +1 -1
  1114. package/data/pokemon/yanma.json +3 -1
  1115. package/data/pokemon/yanmega.json +3 -1
  1116. package/data/pokemon/yveltal.json +3 -3
  1117. package/data/pokemon/zacian-crowned.json +2 -2
  1118. package/data/pokemon/zacian.json +2 -2
  1119. package/data/pokemon/zamazenta-crowned.json +2 -2
  1120. package/data/pokemon/zamazenta.json +2 -2
  1121. package/data/pokemon/zangoose.json +14 -2
  1122. package/data/pokemon/zapdos.json +7 -3
  1123. package/data/pokemon/zarude-dada.json +4 -4
  1124. package/data/pokemon/zarude.json +1 -1
  1125. package/data/pokemon/zebstrika.json +1 -1
  1126. package/data/pokemon/zekrom.json +22 -2
  1127. package/data/pokemon/zeraora-mega.json +2 -2
  1128. package/data/pokemon/zeraora.json +4 -4
  1129. package/data/pokemon/zigzagoon.json +4 -0
  1130. package/data/pokemon/zoroark.json +2 -4
  1131. package/data/pokemon/zorua.json +2 -4
  1132. package/data/pokemon/zweilous.json +5 -3
  1133. package/data/pokemon/zygarde.json +2 -2
  1134. package/data/regions.json +2 -1
  1135. package/package.json +10 -6
  1136. package/build/build-bE_0_-0H.mjs.map +0 -1
  1137. package/build/schemas-Bvj56HZe.d.mts.map +0 -1
  1138. package/build/schemas-DvWBehAR.mjs.map +0 -1
package/README.md CHANGED
@@ -65,6 +65,9 @@ data/
65
65
  Root JSON files are collection files. `games/`, `pokedexes/`, and `pokemon/` contain one JSON file
66
66
  per entity. `indices/` controls the order of those per-entity files.
67
67
 
68
+ The [Pokémon availability field reference](docs/pokemon-availability.md) defines acquisition,
69
+ storage, shiny availability, and related form fields for both maintainers and agents.
70
+
68
71
  ## Contributing
69
72
 
70
73
  Requirements: Node.js 24 and pnpm 11.
@@ -80,6 +83,9 @@ pnpm build
80
83
  When changing data, run the tests before opening a PR. When changing the static API docs, run
81
84
  `pnpm build:pages` and check the local Swagger UI with `pnpm dev:openapi`.
82
85
 
86
+ `pnpm test` blocks external network requests, including in Node CLI subprocesses. Upstream tests
87
+ must use fixtures, mocked responses, or loopback test servers; they must not crawl live services.
88
+
83
89
  Build a GitHub Pages-ready artifact:
84
90
 
85
91
  ```bash
@@ -116,6 +122,31 @@ The editor runs on `http://127.0.0.1:3003` without external-directory configurat
116
122
  `pnpm dev:openapi` starts only the OpenAPI preview, and `pnpm dev` runs both in parallel. See the
117
123
  [editor guide](docs/editor.md) for editing rules, builds and disposable browser tests.
118
124
 
125
+ ## Pokémon availability lookup
126
+
127
+ Game records include PokéAPI version and version-group IDs. See the
128
+ [game ID mapping guide](docs/pokeapi-game-ids.md) for the schema and one-off population script.
129
+
130
+ Inspect the two Bulbapedia availability lists using a dataset Pokémon ID or nid:
131
+
132
+ ```bash
133
+ pnpm pokemon:availability pikachu
134
+ pnpm --silent pokemon:availability 0026-alola --json
135
+ pnpm pokemon:availability pikachu --patch
136
+ pnpm pokemon:availability:all --dry-run
137
+ ```
138
+
139
+ The command prints a terminal table with one row per game or candidate Pokémon availability fields.
140
+ It preserves existing values where the source is inconclusive, including `storableIn`, and reports
141
+ warnings. With `--patch`, it updates and formats the selected Pokémon file and prints a summary of
142
+ added and removed games instead of the table or JSON. The CLI and editor share deterministic parsers
143
+ for the main and GO availability lists; no AI or API key is required. See the
144
+ [CLI guide](docs/pokemon-availability-cli.md) for saved HTML input, classification rules, and
145
+ limitations.
146
+
147
+ Run `pnpm pokemon:availability:all` to review every Pokémon interactively. Each iteration shows the
148
+ changes summary and accepts `p` to patch or `s` to skip. Press Ctrl+C to stop.
149
+
119
150
  ## Credits
120
151
 
121
152
  This dataset uses public data from:
@@ -1,4 +1,4 @@
1
- import { y as modernBoxPresetSlotSchema } from "./schemas-DvWBehAR.mjs";
1
+ import { b as modernBoxPresetSlotSchema } from "./schemas-DTB8AjXr.mjs";
2
2
  //#region src/lib/box-preset-sanitizer.ts
3
3
  const incompatibleClassicPokemonIds = [
4
4
  "greninja--battle-bond",
@@ -51,4 +51,4 @@ function collectModernBoxPresetSanitizerDiagnostics(originalSlots, sanitizedSlot
51
51
  //#endregion
52
52
  export { sanitizeModernBoxPresetSlots as a, sanitizeModernBoxPresetSlot as i, incompatibleClassicPokemonIds as n, modernBoxPresetSlotFilters as r, collectModernBoxPresetSanitizerDiagnostics as t };
53
53
 
54
- //# sourceMappingURL=box-preset-sanitizer-CmgPzVjb.mjs.map
54
+ //# sourceMappingURL=box-preset-sanitizer-ChpDBp-9.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"box-preset-sanitizer-CmgPzVjb.mjs","names":[],"sources":["../src/lib/box-preset-sanitizer.ts"],"sourcesContent":["import { modernBoxPresetSlotSchema } from './schemas'\n\nexport type ModernBoxPresetSlotInput =\n | null\n | string\n | {\n pid: string\n shiny?: boolean\n gmax?: boolean\n shinyLocked?: boolean\n }\n\nexport type ModernBoxPresetSlotSanitizerContext = {\n gameSet: string\n presetId: string\n boxIndex: number\n slotIndex: number\n validPokemonIds: ReadonlySet<string>\n}\n\nexport type ModernBoxPresetSlotFilter = (\n slot: ModernBoxPresetSlotInput,\n context: ModernBoxPresetSlotSanitizerContext,\n) => ModernBoxPresetSlotInput\n\nexport type ModernBoxPresetSanitizerDiagnostic = {\n reason: 'incompatible-classic-pokemon-id'\n pokemon: string\n gameSet: string\n presetId: string\n boxIndex: number\n slotIndex: number\n}\n\nexport const incompatibleClassicPokemonIds = [\n 'greninja--battle-bond',\n 'rockruff--own-tempo',\n 'zygarde--power-construct',\n 'zygarde-10--power-construct',\n] as const\nconst incompatibleClassicPokemonIdSet = new Set<string>(incompatibleClassicPokemonIds)\n\nfunction getSlotPokemonId(slot: ModernBoxPresetSlotInput): string | null {\n if (slot === null) return null\n if (typeof slot === 'string') return slot\n return slot.pid\n}\n\nfunction isIncompatibleClassicPokemonId(slot: ModernBoxPresetSlotInput): boolean {\n const pokemonId = getSlotPokemonId(slot)\n return pokemonId !== null && incompatibleClassicPokemonIdSet.has(pokemonId)\n}\n\nexport const modernBoxPresetSlotFilters: ModernBoxPresetSlotFilter[] = [\n (slot) => (isIncompatibleClassicPokemonId(slot) ? null : slot),\n]\n\nexport function sanitizeModernBoxPresetSlot(\n slot: ModernBoxPresetSlotInput,\n context: ModernBoxPresetSlotSanitizerContext,\n): Pkds.ModernBoxPresetSlot {\n const sanitized = modernBoxPresetSlotFilters.reduce(\n (currentSlot, filter) => filter(currentSlot, context),\n slot,\n )\n if (sanitized === null || typeof sanitized === 'string') {\n return sanitized\n }\n return modernBoxPresetSlotSchema.parse({\n pokemon: sanitized.pid,\n shiny: sanitized.shiny,\n gmax: sanitized.gmax,\n shinyLocked: sanitized.shinyLocked,\n })\n}\n\nexport function sanitizeModernBoxPresetSlots(\n slots: ModernBoxPresetSlotInput[],\n context: Omit<ModernBoxPresetSlotSanitizerContext, 'slotIndex'>,\n): Pkds.ModernBoxPresetSlot[] {\n return slots.map((slot, slotIndex) =>\n sanitizeModernBoxPresetSlot(slot, {\n ...context,\n slotIndex,\n }),\n )\n}\n\nexport function collectModernBoxPresetSanitizerDiagnostics(\n originalSlots: ModernBoxPresetSlotInput[],\n sanitizedSlots: Pkds.ModernBoxPresetSlot[],\n context: Omit<ModernBoxPresetSlotSanitizerContext, 'slotIndex'>,\n): ModernBoxPresetSanitizerDiagnostic[] {\n return originalSlots.flatMap((slot, slotIndex) => {\n const pokemon = getSlotPokemonId(slot)\n if (pokemon === null || sanitizedSlots[slotIndex] !== null) return []\n if (!incompatibleClassicPokemonIdSet.has(pokemon)) return []\n return [\n {\n reason: 'incompatible-classic-pokemon-id' as const,\n pokemon,\n gameSet: context.gameSet,\n presetId: context.presetId,\n boxIndex: context.boxIndex,\n slotIndex,\n },\n ]\n })\n}\n"],"mappings":";;AAkCA,MAAa,gCAAgC;CAC3C;CACA;CACA;CACA;AACF;AACA,MAAM,kCAAkC,IAAI,IAAY,6BAA6B;AAErF,SAAS,iBAAiB,MAA+C;CACvE,IAAI,SAAS,MAAM,OAAO;CAC1B,IAAI,OAAO,SAAS,UAAU,OAAO;CACrC,OAAO,KAAK;AACd;AAEA,SAAS,+BAA+B,MAAyC;CAC/E,MAAM,YAAY,iBAAiB,IAAI;CACvC,OAAO,cAAc,QAAQ,gCAAgC,IAAI,SAAS;AAC5E;AAEA,MAAa,6BAA0D,EACpE,SAAU,+BAA+B,IAAI,IAAI,OAAO,IAC3D;AAEA,SAAgB,4BACd,MACA,SAC0B;CAC1B,MAAM,YAAY,2BAA2B,QAC1C,aAAa,WAAW,OAAO,aAAa,OAAO,GACpD,IACF;CACA,IAAI,cAAc,QAAQ,OAAO,cAAc,UAC7C,OAAO;CAET,OAAO,0BAA0B,MAAM;EACrC,SAAS,UAAU;EACnB,OAAO,UAAU;EACjB,MAAM,UAAU;EAChB,aAAa,UAAU;CACzB,CAAC;AACH;AAEA,SAAgB,6BACd,OACA,SAC4B;CAC5B,OAAO,MAAM,KAAK,MAAM,cACtB,4BAA4B,MAAM;EAChC,GAAG;EACH;CACF,CAAC,CACH;AACF;AAEA,SAAgB,2CACd,eACA,gBACA,SACsC;CACtC,OAAO,cAAc,SAAS,MAAM,cAAc;EAChD,MAAM,UAAU,iBAAiB,IAAI;EACrC,IAAI,YAAY,QAAQ,eAAe,eAAe,MAAM,OAAO,CAAC;EACpE,IAAI,CAAC,gCAAgC,IAAI,OAAO,GAAG,OAAO,CAAC;EAC3D,OAAO,CACL;GACE,QAAQ;GACR;GACA,SAAS,QAAQ;GACjB,UAAU,QAAQ;GAClB,UAAU,QAAQ;GAClB;EACF,CACF;CACF,CAAC;AACH"}
1
+ {"version":3,"file":"box-preset-sanitizer-ChpDBp-9.mjs","names":[],"sources":["../src/lib/box-preset-sanitizer.ts"],"sourcesContent":["import { modernBoxPresetSlotSchema } from './schemas'\n\nexport type ModernBoxPresetSlotInput =\n | null\n | string\n | {\n pid: string\n shiny?: boolean\n gmax?: boolean\n shinyLocked?: boolean\n }\n\nexport type ModernBoxPresetSlotSanitizerContext = {\n gameSet: string\n presetId: string\n boxIndex: number\n slotIndex: number\n validPokemonIds: ReadonlySet<string>\n}\n\nexport type ModernBoxPresetSlotFilter = (\n slot: ModernBoxPresetSlotInput,\n context: ModernBoxPresetSlotSanitizerContext,\n) => ModernBoxPresetSlotInput\n\nexport type ModernBoxPresetSanitizerDiagnostic = {\n reason: 'incompatible-classic-pokemon-id'\n pokemon: string\n gameSet: string\n presetId: string\n boxIndex: number\n slotIndex: number\n}\n\nexport const incompatibleClassicPokemonIds = [\n 'greninja--battle-bond',\n 'rockruff--own-tempo',\n 'zygarde--power-construct',\n 'zygarde-10--power-construct',\n] as const\nconst incompatibleClassicPokemonIdSet = new Set<string>(incompatibleClassicPokemonIds)\n\nfunction getSlotPokemonId(slot: ModernBoxPresetSlotInput): string | null {\n if (slot === null) return null\n if (typeof slot === 'string') return slot\n return slot.pid\n}\n\nfunction isIncompatibleClassicPokemonId(slot: ModernBoxPresetSlotInput): boolean {\n const pokemonId = getSlotPokemonId(slot)\n return pokemonId !== null && incompatibleClassicPokemonIdSet.has(pokemonId)\n}\n\nexport const modernBoxPresetSlotFilters: ModernBoxPresetSlotFilter[] = [\n (slot) => (isIncompatibleClassicPokemonId(slot) ? null : slot),\n]\n\nexport function sanitizeModernBoxPresetSlot(\n slot: ModernBoxPresetSlotInput,\n context: ModernBoxPresetSlotSanitizerContext,\n): Pkds.ModernBoxPresetSlot {\n const sanitized = modernBoxPresetSlotFilters.reduce(\n (currentSlot, filter) => filter(currentSlot, context),\n slot,\n )\n if (sanitized === null || typeof sanitized === 'string') {\n return sanitized\n }\n return modernBoxPresetSlotSchema.parse({\n pokemon: sanitized.pid,\n shiny: sanitized.shiny,\n gmax: sanitized.gmax,\n shinyLocked: sanitized.shinyLocked,\n })\n}\n\nexport function sanitizeModernBoxPresetSlots(\n slots: ModernBoxPresetSlotInput[],\n context: Omit<ModernBoxPresetSlotSanitizerContext, 'slotIndex'>,\n): Pkds.ModernBoxPresetSlot[] {\n return slots.map((slot, slotIndex) =>\n sanitizeModernBoxPresetSlot(slot, {\n ...context,\n slotIndex,\n }),\n )\n}\n\nexport function collectModernBoxPresetSanitizerDiagnostics(\n originalSlots: ModernBoxPresetSlotInput[],\n sanitizedSlots: Pkds.ModernBoxPresetSlot[],\n context: Omit<ModernBoxPresetSlotSanitizerContext, 'slotIndex'>,\n): ModernBoxPresetSanitizerDiagnostic[] {\n return originalSlots.flatMap((slot, slotIndex) => {\n const pokemon = getSlotPokemonId(slot)\n if (pokemon === null || sanitizedSlots[slotIndex] !== null) return []\n if (!incompatibleClassicPokemonIdSet.has(pokemon)) return []\n return [\n {\n reason: 'incompatible-classic-pokemon-id' as const,\n pokemon,\n gameSet: context.gameSet,\n presetId: context.presetId,\n boxIndex: context.boxIndex,\n slotIndex,\n },\n ]\n })\n}\n"],"mappings":";;AAkCA,MAAa,gCAAgC;CAC3C;CACA;CACA;CACA;AACF;AACA,MAAM,kCAAkC,IAAI,IAAY,6BAA6B;AAErF,SAAS,iBAAiB,MAA+C;CACvE,IAAI,SAAS,MAAM,OAAO;CAC1B,IAAI,OAAO,SAAS,UAAU,OAAO;CACrC,OAAO,KAAK;AACd;AAEA,SAAS,+BAA+B,MAAyC;CAC/E,MAAM,YAAY,iBAAiB,IAAI;CACvC,OAAO,cAAc,QAAQ,gCAAgC,IAAI,SAAS;AAC5E;AAEA,MAAa,6BAA0D,EACpE,SAAU,+BAA+B,IAAI,IAAI,OAAO,IAC3D;AAEA,SAAgB,4BACd,MACA,SAC0B;CAC1B,MAAM,YAAY,2BAA2B,QAC1C,aAAa,WAAW,OAAO,aAAa,OAAO,GACpD,IACF;CACA,IAAI,cAAc,QAAQ,OAAO,cAAc,UAC7C,OAAO;CAET,OAAO,0BAA0B,MAAM;EACrC,SAAS,UAAU;EACnB,OAAO,UAAU;EACjB,MAAM,UAAU;EAChB,aAAa,UAAU;CACzB,CAAC;AACH;AAEA,SAAgB,6BACd,OACA,SAC4B;CAC5B,OAAO,MAAM,KAAK,MAAM,cACtB,4BAA4B,MAAM;EAChC,GAAG;EACH;CACF,CAAC,CACH;AACF;AAEA,SAAgB,2CACd,eACA,gBACA,SACsC;CACtC,OAAO,cAAc,SAAS,MAAM,cAAc;EAChD,MAAM,UAAU,iBAAiB,IAAI;EACrC,IAAI,YAAY,QAAQ,eAAe,eAAe,MAAM,OAAO,CAAC;EACpE,IAAI,CAAC,gCAAgC,IAAI,OAAO,GAAG,OAAO,CAAC;EAC3D,OAAO,CACL;GACE,QAAQ;GACR;GACA,SAAS,QAAQ;GACjB,UAAU,QAAQ;GAClB,UAAU,QAAQ;GAClB;EACF,CACF;CACF,CAAC;AACH"}
@@ -1,5 +1,6 @@
1
- import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
2
1
  import { dirname, join } from "node:path";
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
3
+ import { setTimeout } from "node:timers/promises";
3
4
  //#region src/upstream-adapters/projectpokemon-champout/fixtures/pokeapi.ts
4
5
  const champoutPokeApiResourceNameAliases = { move: { visegrip: ["vicegrip", "vice-grip"] } };
5
6
  //#endregion
@@ -62,6 +63,7 @@ async function fetchPokeApiResourceList(kind, options) {
62
63
  }
63
64
  async function fetchPokeApiJson(pathnameOrUrl, options = {}) {
64
65
  const resolvedOptions = normalizePokeApiFetchOptions(options);
66
+ resolvedOptions.signal?.throwIfAborted();
65
67
  const url = resolvePokeApiUrl(pathnameOrUrl, resolvedOptions.baseUrl);
66
68
  const cacheEnabled = resolvedOptions.cache ?? process.env.POKEAPI_CACHE !== "0";
67
69
  const cachePath = pokeApiCachePath(url, resolvedOptions.cacheDir);
@@ -69,7 +71,7 @@ async function fetchPokeApiJson(pathnameOrUrl, options = {}) {
69
71
  const cachedJson = readCachedPokeApiJson(cachePath);
70
72
  if (cachedJson !== void 0) return cachedJson;
71
73
  }
72
- const json = await fetchPokeApiJsonFromNetwork(url, resolvedOptions.retries);
74
+ const json = await fetchPokeApiJsonFromNetwork(url, resolvedOptions);
73
75
  if (cacheEnabled) writeCachedPokeApiJson(cachePath, json);
74
76
  return json;
75
77
  }
@@ -80,7 +82,10 @@ function normalizePokeApiFetchOptions(options) {
80
82
  cache: input.cache ?? process.env.POKEAPI_CACHE !== "0",
81
83
  cacheDir: input.cacheDir ?? process.env.POKEAPI_CACHE_DIR ?? DEFAULT_POKEAPI_CACHE_DIR,
82
84
  forceRefresh: input.forceRefresh ?? process.env.POKEAPI_REFRESH_CACHE === "1",
83
- retries: input.retries ?? 3
85
+ retries: input.retries ?? 3,
86
+ signal: input.signal,
87
+ timeoutMs: input.timeoutMs ?? 3e4,
88
+ minIntervalMs: input.minIntervalMs ?? 0
84
89
  };
85
90
  }
86
91
  function resolvePokeApiUrl(pathnameOrUrl, baseUrl) {
@@ -90,19 +95,28 @@ function resolvePokeApiUrl(pathnameOrUrl, baseUrl) {
90
95
  const pathname = pathnameOrUrl.replace(/^\/+/, "").replace(/\/?$/, "/");
91
96
  return new URL(`${base}/${pathname}`);
92
97
  }
93
- async function fetchPokeApiJsonFromNetwork(url, retries) {
98
+ let lastRequestAt = 0;
99
+ async function fetchPokeApiJsonFromNetwork(url, options) {
94
100
  let lastError;
95
- for (let attempt = 1; attempt <= retries; attempt += 1) {
101
+ for (let attempt = 1; attempt <= options.retries; attempt += 1) {
102
+ options.signal?.throwIfAborted();
103
+ await setTimeout(Math.max(0, lastRequestAt + options.minIntervalMs - Date.now()), void 0, { signal: options.signal });
104
+ lastRequestAt = Date.now();
96
105
  try {
97
- const response = await fetch(url, { headers: { accept: "application/json" } });
106
+ const timeout = AbortSignal.timeout(options.timeoutMs);
107
+ const response = await fetch(url, {
108
+ headers: { accept: "application/json" },
109
+ signal: options.signal ? AbortSignal.any([options.signal, timeout]) : timeout
110
+ });
98
111
  if (response.ok) return await response.json();
99
112
  const body = await response.text();
100
113
  lastError = /* @__PURE__ */ new Error(`${response.status} ${response.statusText}${body.length > 0 ? `: ${body.slice(0, 240)}` : ""}`);
101
114
  if (response.status !== 429 && response.status < 500) break;
102
115
  } catch (error) {
116
+ options.signal?.throwIfAborted();
103
117
  lastError = error;
104
118
  }
105
- await sleep(backoffMs(attempt));
119
+ if (attempt < options.retries) await setTimeout(backoffMs(attempt), void 0, { signal: options.signal });
106
120
  }
107
121
  throw lastError instanceof Error ? lastError : new Error(String(lastError));
108
122
  }
@@ -134,10 +148,6 @@ function sanitizeCachePathSegment(value) {
134
148
  function backoffMs(attempt) {
135
149
  return Math.min(15e3, 750 * 2 ** Math.max(0, attempt - 1));
136
150
  }
137
- async function sleep(ms) {
138
- if (ms <= 0) return;
139
- await new Promise((resolveSleep) => setTimeout(resolveSleep, ms));
140
- }
141
151
  function isPokeApiResourceListResponse(value) {
142
152
  if (typeof value !== "object" || value === null) return false;
143
153
  const response = value;
@@ -302,4 +312,4 @@ console.log(formatEnrichChampionsDataSummary(result));
302
312
  //#endregion
303
313
  export {};
304
314
 
305
- //# sourceMappingURL=build-bE_0_-0H.mjs.map
315
+ //# sourceMappingURL=build-1TV6PqJe.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-1TV6PqJe.mjs","names":["delay"],"sources":["../src/upstream-adapters/projectpokemon-champout/fixtures/pokeapi.ts","../src/upstream-adapters/pokeapi/client.ts","../src/upstream-adapters/pokeapi/enrich-champions.ts","../src/upstream-adapters/pokeapi/build.ts"],"sourcesContent":["export const champoutPokeApiResourceNameAliases: Partial<\n Record<'ability' | 'item' | 'move', Record<string, readonly string[]>>\n> = {\n move: {\n visegrip: ['vicegrip', 'vice-grip'],\n },\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs'\nimport { dirname, join } from 'node:path'\nimport { setTimeout as delay } from 'node:timers/promises'\n\nexport const DEFAULT_POKEAPI_BASE_URL = 'https://pokeapi.co/api/v2'\nexport const DEFAULT_POKEAPI_CACHE_DIR = join(process.cwd(), '.local/pokeapi')\n\nexport const pokeApiResourceKinds = ['ability', 'item', 'move'] as const\nexport type PokeApiResourceKind = (typeof pokeApiResourceKinds)[number]\n\nexport type PokeApiResourceSummary = {\n name: string\n url: string\n}\n\nexport type PokeApiResourceIndexEntry = {\n id: number\n name: string\n}\n\nexport type PokeApiResourceIndex = {\n byId: Map<string, PokeApiResourceIndexEntry>\n byName: Map<string, PokeApiResourceIndexEntry>\n}\nexport type PokeApiResourceIndexes = Record<PokeApiResourceKind, PokeApiResourceIndex>\n\nexport type PokeApiFetchOptions = {\n baseUrl?: string\n cache?: boolean\n cacheDir?: string\n forceRefresh?: boolean\n retries?: number\n signal?: AbortSignal\n timeoutMs?: number\n minIntervalMs?: number\n}\n\ntype PokeApiResourceListResponse = {\n count: number\n results: PokeApiResourceSummary[]\n}\n\nexport async function fetchPokeApiResourceIndexes(\n baseUrlOrOptions: string | PokeApiFetchOptions = DEFAULT_POKEAPI_BASE_URL,\n): Promise<PokeApiResourceIndexes> {\n const options = normalizePokeApiFetchOptions(baseUrlOrOptions)\n const [ability, item, move] = await Promise.all(\n pokeApiResourceKinds.map((kind) => fetchPokeApiResourceIndex(kind, options)),\n )\n\n return { ability, item, move }\n}\n\nasync function fetchPokeApiResourceIndex(\n kind: PokeApiResourceKind,\n options: PokeApiFetchOptions,\n): Promise<PokeApiResourceIndex> {\n const list = await fetchPokeApiResourceList(kind, options)\n const index: PokeApiResourceIndex = {\n byId: new Map(),\n byName: new Map(),\n }\n\n for (const resource of list.results) {\n const id = parsePokeApiResourceId(resource.url, kind)\n const entry = { id, name: resource.name }\n const idKey = String(id)\n const existingIdEntry = index.byId.get(idKey)\n\n if (existingIdEntry !== undefined && existingIdEntry.name !== resource.name) {\n throw new Error(\n `Duplicate PokeAPI ${kind} resource id ${idKey}: ${existingIdEntry.name}, ${resource.name}`,\n )\n }\n\n index.byId.set(idKey, entry)\n\n for (const nameKey of pokeApiResourceNameKeys(resource.name)) {\n const existingEntry = index.byName.get(nameKey)\n\n if (existingEntry === undefined || existingEntry.id === id) {\n index.byName.set(nameKey, entry)\n continue\n }\n\n if (existingEntry.name !== resource.name) {\n throw new Error(\n `Duplicate PokeAPI ${kind} resource lookup key ${nameKey}: ${existingEntry.name}, ${resource.name}`,\n )\n }\n\n // Upstream sometimes lists the same resource name under two ids; keep the lowest so\n // lookups stay stable when a newer duplicate row appears.\n const keptEntry = existingEntry.id < id ? existingEntry : entry\n\n console.warn(\n `Duplicate PokeAPI ${kind} resource name ${resource.name} (ids ${existingEntry.id}, ${id}); keeping id ${keptEntry.id} for lookup key ${nameKey}`,\n )\n index.byName.set(nameKey, keptEntry)\n }\n }\n\n return index\n}\n\nasync function fetchPokeApiResourceList(\n kind: PokeApiResourceKind,\n options: PokeApiFetchOptions,\n): Promise<PokeApiResourceListResponse> {\n const baseUrl = options.baseUrl ?? DEFAULT_POKEAPI_BASE_URL\n const url = new URL(`${baseUrl.replace(/\\/+$/, '')}/${kind}/`)\n url.searchParams.set('limit', '100000')\n url.searchParams.set('offset', '0')\n\n const json = await fetchPokeApiJson(url, options)\n\n if (!isPokeApiResourceListResponse(json)) {\n throw new Error(`Unexpected PokeAPI ${kind} list response shape`)\n }\n\n if (json.results.length < json.count) {\n throw new Error(\n `Expected all PokeAPI ${kind} resources in one list response, got ${json.results.length} of ${json.count}`,\n )\n }\n\n return json\n}\n\nexport async function fetchPokeApiJson(\n pathnameOrUrl: string | URL,\n options: PokeApiFetchOptions = {},\n): Promise<unknown> {\n const resolvedOptions = normalizePokeApiFetchOptions(options)\n resolvedOptions.signal?.throwIfAborted()\n const url = resolvePokeApiUrl(pathnameOrUrl, resolvedOptions.baseUrl)\n const cacheEnabled = resolvedOptions.cache ?? process.env.POKEAPI_CACHE !== '0'\n const cachePath = pokeApiCachePath(url, resolvedOptions.cacheDir)\n\n if (cacheEnabled && !resolvedOptions.forceRefresh) {\n const cachedJson = readCachedPokeApiJson(cachePath)\n\n if (cachedJson !== undefined) {\n return cachedJson\n }\n }\n\n const json = await fetchPokeApiJsonFromNetwork(url, resolvedOptions)\n\n if (cacheEnabled) {\n writeCachedPokeApiJson(cachePath, json)\n }\n\n return json\n}\n\nfunction normalizePokeApiFetchOptions(\n options: string | PokeApiFetchOptions,\n): Required<Omit<PokeApiFetchOptions, 'signal'>> & Pick<PokeApiFetchOptions, 'signal'> {\n const input = typeof options === 'string' ? { baseUrl: options } : options\n\n return {\n baseUrl: input.baseUrl ?? DEFAULT_POKEAPI_BASE_URL,\n cache: input.cache ?? process.env.POKEAPI_CACHE !== '0',\n cacheDir: input.cacheDir ?? process.env.POKEAPI_CACHE_DIR ?? DEFAULT_POKEAPI_CACHE_DIR,\n forceRefresh: input.forceRefresh ?? process.env.POKEAPI_REFRESH_CACHE === '1',\n retries: input.retries ?? 3,\n signal: input.signal,\n timeoutMs: input.timeoutMs ?? 30_000,\n minIntervalMs: input.minIntervalMs ?? 0,\n }\n}\n\nfunction resolvePokeApiUrl(pathnameOrUrl: string | URL, baseUrl: string): URL {\n if (pathnameOrUrl instanceof URL) {\n return pathnameOrUrl\n }\n\n if (/^https?:\\/\\//i.test(pathnameOrUrl)) {\n return new URL(pathnameOrUrl)\n }\n\n const base = baseUrl.replace(/\\/+$/, '')\n const pathname = pathnameOrUrl.replace(/^\\/+/, '').replace(/\\/?$/, '/')\n return new URL(`${base}/${pathname}`)\n}\n\nlet lastRequestAt = 0\n\nasync function fetchPokeApiJsonFromNetwork(\n url: URL,\n options: ReturnType<typeof normalizePokeApiFetchOptions>,\n): Promise<unknown> {\n let lastError: unknown\n\n for (let attempt = 1; attempt <= options.retries; attempt += 1) {\n options.signal?.throwIfAborted()\n await delay(Math.max(0, lastRequestAt + options.minIntervalMs - Date.now()), undefined, {\n signal: options.signal,\n })\n lastRequestAt = Date.now()\n try {\n const timeout = AbortSignal.timeout(options.timeoutMs)\n const response = await fetch(url, {\n headers: {\n accept: 'application/json',\n },\n signal: options.signal ? AbortSignal.any([options.signal, timeout]) : timeout,\n })\n\n if (response.ok) {\n return await response.json()\n }\n\n const body = await response.text()\n lastError = new Error(\n `${response.status} ${response.statusText}${body.length > 0 ? `: ${body.slice(0, 240)}` : ''}`,\n )\n\n if (response.status !== 429 && response.status < 500) {\n break\n }\n } catch (error) {\n options.signal?.throwIfAborted()\n lastError = error\n }\n\n if (attempt < options.retries)\n await delay(backoffMs(attempt), undefined, { signal: options.signal })\n }\n\n throw lastError instanceof Error ? lastError : new Error(String(lastError))\n}\n\nfunction readCachedPokeApiJson(cachePath: string): unknown | undefined {\n if (!existsSync(cachePath)) {\n return undefined\n }\n\n try {\n return JSON.parse(readFileSync(cachePath, 'utf8'))\n } catch {\n return undefined\n }\n}\n\nfunction writeCachedPokeApiJson(cachePath: string, json: unknown): void {\n mkdirSync(dirname(cachePath), { recursive: true })\n writeFileSync(cachePath, `${JSON.stringify(json)}\\n`)\n}\n\nfunction pokeApiCachePath(url: URL, cacheDir: string): string {\n const segments = [\n sanitizeCachePathSegment(url.hostname),\n ...url.pathname.split('/').filter(Boolean).map(sanitizeCachePathSegment),\n ]\n const searchSuffix = url.search.length > 0 ? `-${stableSearchSuffix(url.searchParams)}` : ''\n const filename = `${segments.pop() ?? 'index'}${searchSuffix}.json`\n\n return join(cacheDir, ...segments, filename)\n}\n\nfunction stableSearchSuffix(searchParams: URLSearchParams): string {\n return Array.from(searchParams.entries())\n .sort(([leftKey, leftValue], [rightKey, rightValue]) =>\n `${leftKey}=${leftValue}`.localeCompare(`${rightKey}=${rightValue}`),\n )\n .map(([key, value]) => `${sanitizeCachePathSegment(key)}-${sanitizeCachePathSegment(value)}`)\n .join('-')\n}\n\nfunction sanitizeCachePathSegment(value: string): string {\n const sanitized = value.replace(/[^a-zA-Z0-9._-]+/g, '-').replace(/^-+|-+$/g, '')\n return sanitized.length > 0 ? sanitized : '_'\n}\n\nfunction backoffMs(attempt: number): number {\n return Math.min(15_000, 750 * 2 ** Math.max(0, attempt - 1))\n}\n\nfunction isPokeApiResourceListResponse(value: unknown): value is PokeApiResourceListResponse {\n if (typeof value !== 'object' || value === null) {\n return false\n }\n\n const response = value as Record<string, unknown>\n\n return (\n typeof response.count === 'number' &&\n Array.isArray(response.results) &&\n response.results.every(isPokeApiResourceSummary)\n )\n}\n\nfunction isPokeApiResourceSummary(value: unknown): value is PokeApiResourceSummary {\n if (typeof value !== 'object' || value === null) {\n return false\n }\n\n const resource = value as Record<string, unknown>\n\n return typeof resource.name === 'string' && typeof resource.url === 'string'\n}\n\nfunction parsePokeApiResourceId(resourceUrl: string, kind: PokeApiResourceKind): number {\n const url = new URL(resourceUrl)\n const segments = url.pathname.split('/').filter(Boolean)\n const kindIndex = segments.lastIndexOf(kind)\n const id = kindIndex === -1 ? undefined : segments[kindIndex + 1]\n\n if (id === undefined || !/^\\d+$/.test(id)) {\n throw new Error(`Could not parse PokeAPI ${kind} id from URL: ${resourceUrl}`)\n }\n\n return Number(id)\n}\n\nexport function pokeApiResourceNameKeys(value: string): string[] {\n return Array.from(\n new Set([\n value.toLowerCase(),\n value\n .toLowerCase()\n .normalize('NFKD')\n .replace(/[\\u0300-\\u036f]/g, '')\n .replace(/[^a-z0-9]+/g, ''),\n ]),\n ).filter((key) => key.length > 0)\n}\n","import { readFileSync, writeFileSync } from 'node:fs'\nimport { join } from 'node:path'\nimport { champoutPokeApiResourceNameAliases } from '../projectpokemon-champout/fixtures/pokeapi'\nimport {\n DEFAULT_POKEAPI_BASE_URL,\n fetchPokeApiResourceIndexes,\n pokeApiResourceNameKeys,\n type PokeApiResourceIndex,\n type PokeApiResourceIndexEntry,\n type PokeApiResourceKind,\n} from './client'\n\nexport const DEFAULT_CHAMPIONS_DATA_ROOT = join(process.cwd(), 'data-next/champions')\n\nexport type EnrichChampionsDataOptions = {\n championsDataRoot?: string\n pokeApiBaseUrl?: string\n}\n\nexport type EnrichedChampionsDomainResult = {\n filePath: string\n matched: number\n missing: MissingPokeApiResource[]\n}\n\nexport type EnrichChampionsDataResult = Record<\n 'abilities' | 'items' | 'moves',\n EnrichedChampionsDomainResult\n>\n\nexport type MissingPokeApiResource = {\n id: string\n championsId: string\n slug: string\n name: string\n triedIdCandidates: string[]\n championsIdMatchedResource?: PokeApiResourceIndexEntry\n}\n\ntype ChampionsDomain = {\n key: keyof EnrichChampionsDataResult\n kind: PokeApiResourceKind\n fileName: string\n}\n\ntype JsonRecord = Record<string, unknown>\n\ntype PreparedChampionsDomain = EnrichedChampionsDomainResult & {\n records: JsonRecord[]\n}\n\nconst championsDomains = [\n { key: 'abilities', kind: 'ability', fileName: 'abilities.json' },\n { key: 'items', kind: 'item', fileName: 'items.json' },\n { key: 'moves', kind: 'move', fileName: 'moves.json' },\n] as const satisfies readonly ChampionsDomain[]\n\nexport async function enrichChampionsDataWithPokeApiIds(\n options: EnrichChampionsDataOptions = {},\n): Promise<EnrichChampionsDataResult> {\n const championsDataRoot = options.championsDataRoot ?? DEFAULT_CHAMPIONS_DATA_ROOT\n const pokeApiBaseUrl = options.pokeApiBaseUrl ?? DEFAULT_POKEAPI_BASE_URL\n const resourceIndexes = await fetchPokeApiResourceIndexes(pokeApiBaseUrl)\n const preparedDomains = championsDomains.map((domain) =>\n prepareChampionsDomainWithPokeApiIds(\n domain.kind,\n join(championsDataRoot, domain.fileName),\n resourceIndexes[domain.kind],\n ),\n )\n const result = Object.fromEntries(\n championsDomains.map((domain, index) => {\n const preparedDomain = preparedDomains[index]\n\n return [\n domain.key,\n {\n filePath: preparedDomain.filePath,\n matched: preparedDomain.matched,\n missing: preparedDomain.missing,\n },\n ]\n }),\n ) as EnrichChampionsDataResult\n\n const missingCount = Object.values(result).reduce(\n (count, domainResult) => count + domainResult.missing.length,\n 0,\n )\n\n if (missingCount > 0) {\n console.warn(formatMissingPokeApiResourcesWarning(result))\n }\n\n for (const preparedDomain of preparedDomains) {\n writeJsonFile(preparedDomain.filePath, preparedDomain.records)\n }\n\n return result\n}\n\nexport function formatEnrichChampionsDataSummary(result: EnrichChampionsDataResult): string {\n return [\n formatDomainSummary('abilities', result.abilities),\n formatDomainSummary('items', result.items),\n formatDomainSummary('moves', result.moves),\n ].join(', ')\n}\n\nfunction prepareChampionsDomainWithPokeApiIds(\n kind: PokeApiResourceKind,\n filePath: string,\n resourceIndex: PokeApiResourceIndex,\n): PreparedChampionsDomain {\n const records = readJsonRecordArray(filePath)\n const missing: MissingPokeApiResource[] = []\n let matched = 0\n\n const enrichedRecords = records.map((record, index) => {\n const id = requiredString(record, 'id', filePath, index)\n const championsId = requiredString(record, 'championsId', filePath, index)\n const slug = requiredString(record, 'slug', filePath, index)\n const name = requiredString(record, 'name', filePath, index)\n const triedIdCandidates = pokeApiIdCandidates(kind, id)\n const championsIdMatchedResource = resourceIndex.byId.get(championsId)\n const pokeApiId = findPokeApiId(resourceIndex, championsId, triedIdCandidates)\n\n if (pokeApiId === undefined) {\n missing.push({\n id,\n championsId,\n slug,\n name,\n triedIdCandidates,\n championsIdMatchedResource,\n })\n } else {\n matched += 1\n }\n\n return withPokeApiId(record, pokeApiId)\n })\n\n return { filePath, matched, missing, records: enrichedRecords }\n}\n\nfunction findPokeApiId(\n resourceIndex: PokeApiResourceIndex,\n championsId: string,\n idCandidates: string[],\n): number | undefined {\n for (const candidate of idCandidates) {\n const resource = findPokeApiResourceByName(resourceIndex, candidate)\n\n if (resource !== undefined) {\n return resource.id\n }\n }\n\n const resourceByChampionsId = resourceIndex.byId.get(championsId)\n\n if (resourceByChampionsId === undefined) {\n return undefined\n }\n\n return resourceByChampionsId.id\n}\n\nfunction findPokeApiResourceByName(\n resourceIndex: PokeApiResourceIndex,\n candidate: string,\n): PokeApiResourceIndexEntry | undefined {\n for (const key of pokeApiResourceNameKeys(candidate)) {\n const resource = resourceIndex.byName.get(key)\n\n if (resource !== undefined) {\n return resource\n }\n }\n\n return undefined\n}\n\nfunction pokeApiIdCandidates(kind: PokeApiResourceKind, id: string): string[] {\n return uniqueStrings([id, ...(champoutPokeApiResourceNameAliases[kind]?.[id] ?? [])])\n}\n\nfunction withPokeApiId(record: JsonRecord, pokeApiId: number | undefined): JsonRecord {\n const { id, championsId, slug, ...rest } = record\n delete rest.pokeApiId\n\n // Null rather than absent, so \"PokeAPI has no id for this yet\" is stated in\n // the data instead of looking like a field nobody got round to filling in.\n // Anything hand-written here is replaced: an id PokeAPI has not published is\n // a guess, and a guess that outlives a build is worse than a null.\n return { id, championsId, pokeApiId: pokeApiId ?? null, slug, ...rest }\n}\n\nfunction readJsonRecordArray(filePath: string): JsonRecord[] {\n const json: unknown = JSON.parse(readFileSync(filePath, 'utf8'))\n\n if (!Array.isArray(json)) {\n throw new Error(`Expected ${filePath} to contain an array`)\n }\n\n return json.map((record, index) => {\n if (typeof record !== 'object' || record === null || Array.isArray(record)) {\n throw new Error(`Expected ${filePath}[${index}] to contain an object`)\n }\n\n return record as JsonRecord\n })\n}\n\nfunction writeJsonFile(filePath: string, data: unknown): void {\n writeFileSync(filePath, `${JSON.stringify(data, null, 2)}\\n`)\n}\n\nfunction requiredString(record: JsonRecord, key: string, filePath: string, index: number): string {\n const value = record[key]\n\n if (typeof value !== 'string' || value.length === 0) {\n throw new Error(`Expected ${filePath}[${index}].${key} to be a non-empty string`)\n }\n\n return value\n}\n\nfunction uniqueStrings(values: readonly unknown[]): string[] {\n return Array.from(new Set(values.filter((value): value is string => typeof value === 'string')))\n}\n\nfunction formatDomainSummary(\n domain: keyof EnrichChampionsDataResult,\n result: EnrichedChampionsDomainResult,\n): string {\n const missing = result.missing.length === 0 ? '' : `, ${result.missing.length} unmatched`\n\n return `${result.matched} ${domain} with PokeAPI IDs${missing}`\n}\n\nfunction formatMissingPokeApiResourcesWarning(result: EnrichChampionsDataResult): string {\n const lines = ['Missing PokeAPI resources; they were written with a null pokeApiId.']\n\n for (const [domain, domainResult] of Object.entries(result)) {\n if (domainResult.missing.length === 0) {\n continue\n }\n\n lines.push(`${domain}: ${domainResult.missing.length} missing`)\n\n for (const missing of domainResult.missing) {\n const championsIdMatch =\n missing.championsIdMatchedResource === undefined\n ? 'no PokeAPI resource with that numeric id'\n : `numeric id belongs to ${missing.championsIdMatchedResource.name}`\n\n lines.push(\n `- ${missing.id} (${missing.name}; championsId ${missing.championsId}; tried id candidates ${missing.triedIdCandidates.join(', ')}; ${championsIdMatch})`,\n )\n }\n }\n\n return lines.join('\\n')\n}\n","import {\n enrichChampionsDataWithPokeApiIds,\n formatEnrichChampionsDataSummary,\n} from './enrich-champions'\n\nconst result = await enrichChampionsDataWithPokeApiIds()\n\nconsole.log(formatEnrichChampionsDataSummary(result))\n"],"mappings":"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"}
@@ -1,10 +1,9 @@
1
+ import { t as __commonJSMin } from "./rolldown-runtime-B4iAMlE-.mjs";
1
2
  import { a as appLangsBySlug, l as gameLocales } from "./languages-CY-Q1SED.mjs";
2
3
  import { n as battleStates } from "./enums-u8n-nN0B.mjs";
3
4
  import { b as pokemonSchema, c as i18nSchema, d as itemSchema, g as pokemonI18nSchema, i as battleStateSchema, n as abilitySchema, p as moveSchema, u as itemI18nSchema, v as pokemonMovesRecordSchema } from "./schemas-CWE4YPI2.mjs";
4
- import { copyFileSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
5
5
  import { dirname, join } from "node:path";
6
- //#region \0rolldown/runtime.js
7
- var __commonJSMin = (cb, mod) => () => (mod || (cb((mod = { exports: {} }).exports, mod), cb = null), mod.exports);
6
+ import { copyFileSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
8
7
  //#endregion
9
8
  //#region src/upstream-adapters/projectpokemon-champout/fixtures/text.ts
10
9
  var import_node = (/* @__PURE__ */ __commonJSMin(((exports, module) => {
@@ -33080,4 +33079,4 @@ console.log([
33080
33079
  //#endregion
33081
33080
  export {};
33082
33081
 
33083
- //# sourceMappingURL=build-D2oPkkzJ.mjs.map
33082
+ //# sourceMappingURL=build-CBmCe7Y4.mjs.map