@pokepc/dataset 7.0.0 → 7.1.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 (319) hide show
  1. package/README.md +57 -1
  2. package/build/{box-preset-sanitizer-BE4i0vEj.mjs → box-preset-sanitizer-DRi4Ayrn.mjs} +2 -2
  3. package/build/{box-preset-sanitizer-BE4i0vEj.mjs.map → box-preset-sanitizer-DRi4Ayrn.mjs.map} +1 -1
  4. package/build/enums-Ajt5avHN.mjs +488 -0
  5. package/build/enums-Ajt5avHN.mjs.map +1 -0
  6. package/build/enums-DCL82p1t.d.mts +66 -0
  7. package/build/enums-DCL82p1t.d.mts.map +1 -0
  8. package/build/{evolution-schemas-BZQILLSQ.mjs → evolution-schemas-Db7-jivr.mjs} +2 -2
  9. package/build/{evolution-schemas-BZQILLSQ.mjs.map → evolution-schemas-Db7-jivr.mjs.map} +1 -1
  10. package/build/form-schemas-BjyAMPZU.mjs +166 -0
  11. package/build/form-schemas-BjyAMPZU.mjs.map +1 -0
  12. package/build/form-schemas-Bq10Ac7d.d.mts +1407 -0
  13. package/build/form-schemas-Bq10Ac7d.d.mts.map +1 -0
  14. package/build/lib/availability-sources.mjs +1 -1
  15. package/build/lib/availability-sources.mjs.map +1 -1
  16. package/build/lib/box-preset-sanitizer.mjs +1 -1
  17. package/build/lib/box-preset-transform.mjs +2 -2
  18. package/build/lib/enums.d.mts +2 -2
  19. package/build/lib/enums.mjs +2 -2
  20. package/build/lib/evolution-schemas.mjs +1 -1
  21. package/build/lib/form-methods.d.mts +11 -0
  22. package/build/lib/form-methods.d.mts.map +1 -0
  23. package/build/lib/form-methods.mjs +56 -0
  24. package/build/lib/form-methods.mjs.map +1 -0
  25. package/build/lib/form-schemas.d.mts +2 -0
  26. package/build/lib/form-schemas.mjs +2 -0
  27. package/build/lib/fs.d.mts +6 -6
  28. package/build/lib/schemas.d.mts +3 -2
  29. package/build/lib/schemas.mjs +4 -3
  30. package/build/lib/types.d.mts +7 -2
  31. package/build/lib/types.d.mts.map +1 -1
  32. package/build/lib-next/schemas.d.mts +8 -8
  33. package/build/{schemas-30DCmCcg.mjs → schemas-Bl5_UJHu.mjs} +6 -4
  34. package/build/schemas-Bl5_UJHu.mjs.map +1 -0
  35. package/build/{schemas-D2xLu3LV.d.mts → schemas-Cw4Mrff5.d.mts} +589 -11
  36. package/build/schemas-Cw4Mrff5.d.mts.map +1 -0
  37. package/data/items.json +140 -0
  38. package/data/pokedexes/xd.json +16 -1
  39. package/data/pokemon/abomasnow-mega.json +26 -1
  40. package/data/pokemon/absol-mega-z.json +18 -1
  41. package/data/pokemon/absol-mega.json +26 -1
  42. package/data/pokemon/aegislash-blade.json +66 -0
  43. package/data/pokemon/aerodactyl-mega.json +34 -1
  44. package/data/pokemon/aggron-mega.json +26 -1
  45. package/data/pokemon/alakazam-mega.json +34 -1
  46. package/data/pokemon/alcremie-gmax.json +76 -0
  47. package/data/pokemon/altaria-mega.json +26 -1
  48. package/data/pokemon/ampharos-mega.json +26 -1
  49. package/data/pokemon/appletun-gmax.json +12 -0
  50. package/data/pokemon/arceus-bug.json +145 -1
  51. package/data/pokemon/arceus-dark.json +145 -1
  52. package/data/pokemon/arceus-dragon.json +145 -1
  53. package/data/pokemon/arceus-electric.json +145 -1
  54. package/data/pokemon/arceus-fairy.json +121 -1
  55. package/data/pokemon/arceus-fighting.json +145 -1
  56. package/data/pokemon/arceus-fire.json +145 -1
  57. package/data/pokemon/arceus-flying.json +145 -1
  58. package/data/pokemon/arceus-ghost.json +145 -1
  59. package/data/pokemon/arceus-grass.json +145 -1
  60. package/data/pokemon/arceus-ground.json +145 -1
  61. package/data/pokemon/arceus-ice.json +145 -1
  62. package/data/pokemon/arceus-legendary.json +55 -1
  63. package/data/pokemon/arceus-poison.json +145 -1
  64. package/data/pokemon/arceus-psychic.json +145 -1
  65. package/data/pokemon/arceus-rock.json +145 -1
  66. package/data/pokemon/arceus-steel.json +145 -1
  67. package/data/pokemon/arceus-water.json +145 -1
  68. package/data/pokemon/arceus.json +263 -0
  69. package/data/pokemon/audino-mega.json +26 -1
  70. package/data/pokemon/banette-mega.json +26 -1
  71. package/data/pokemon/barbaracle-mega.json +18 -1
  72. package/data/pokemon/basculin-blue-striped.json +1 -0
  73. package/data/pokemon/baxcalibur-mega.json +18 -1
  74. package/data/pokemon/beedrill-mega.json +34 -1
  75. package/data/pokemon/blastoise-gmax.json +12 -0
  76. package/data/pokemon/blastoise-mega.json +34 -1
  77. package/data/pokemon/blaziken-mega.json +26 -1
  78. package/data/pokemon/burmy-sandy.json +95 -0
  79. package/data/pokemon/burmy-trash.json +52 -0
  80. package/data/pokemon/burmy.json +52 -0
  81. package/data/pokemon/butterfree-gmax.json +12 -0
  82. package/data/pokemon/calyrex-ice.json +18 -0
  83. package/data/pokemon/calyrex-shadow.json +18 -0
  84. package/data/pokemon/camerupt-mega.json +26 -1
  85. package/data/pokemon/castform-rainy.json +64 -0
  86. package/data/pokemon/castform-snowy.json +64 -0
  87. package/data/pokemon/castform-sunny.json +64 -0
  88. package/data/pokemon/centiskorch-gmax.json +12 -0
  89. package/data/pokemon/chandelure-mega.json +18 -1
  90. package/data/pokemon/charizard-gmax.json +12 -0
  91. package/data/pokemon/charizard-mega-x.json +34 -1
  92. package/data/pokemon/charizard-mega-y.json +34 -1
  93. package/data/pokemon/cherrim-sunshine.json +219 -0
  94. package/data/pokemon/chesnaught-mega.json +18 -1
  95. package/data/pokemon/chimecho-mega.json +18 -1
  96. package/data/pokemon/cinderace-gmax.json +12 -0
  97. package/data/pokemon/clefable-mega.json +18 -1
  98. package/data/pokemon/coalossal-gmax.json +12 -0
  99. package/data/pokemon/copperajah-gmax.json +12 -0
  100. package/data/pokemon/corviknight-gmax.json +12 -0
  101. package/data/pokemon/crabominable-mega.json +18 -1
  102. package/data/pokemon/cramorant-gorging.json +67 -0
  103. package/data/pokemon/cramorant-gulping.json +67 -0
  104. package/data/pokemon/darkrai-mega.json +18 -0
  105. package/data/pokemon/darmanitan-galar-zen.json +24 -0
  106. package/data/pokemon/darmanitan-zen.json +31 -0
  107. package/data/pokemon/deerling-autumn.json +47 -0
  108. package/data/pokemon/deerling-summer.json +36 -0
  109. package/data/pokemon/deerling-winter.json +47 -0
  110. package/data/pokemon/deerling.json +47 -0
  111. package/data/pokemon/delphox-mega.json +18 -1
  112. package/data/pokemon/deoxys-attack.json +90 -0
  113. package/data/pokemon/deoxys-defense.json +90 -0
  114. package/data/pokemon/deoxys-speed.json +90 -0
  115. package/data/pokemon/deoxys.json +117 -0
  116. package/data/pokemon/dialga-origin.json +40 -1
  117. package/data/pokemon/diancie-mega.json +26 -1
  118. package/data/pokemon/dragalge-mega.json +18 -1
  119. package/data/pokemon/dragonite-mega.json +18 -1
  120. package/data/pokemon/drampa-mega.json +18 -1
  121. package/data/pokemon/drednaw-gmax.json +12 -0
  122. package/data/pokemon/duraludon-gmax.json +12 -0
  123. package/data/pokemon/eelektross-mega.json +18 -1
  124. package/data/pokemon/eevee-gmax.json +12 -0
  125. package/data/pokemon/eiscue-noice.json +32 -0
  126. package/data/pokemon/emboar-mega.json +18 -1
  127. package/data/pokemon/empoleon.json +1 -0
  128. package/data/pokemon/enamorus-therian.json +16 -0
  129. package/data/pokemon/excadrill-mega.json +18 -1
  130. package/data/pokemon/falinks-mega.json +18 -1
  131. package/data/pokemon/feraligatr-mega.json +18 -1
  132. package/data/pokemon/flapple-gmax.json +12 -0
  133. package/data/pokemon/floette-eternal-mega.json +18 -1
  134. package/data/pokemon/froslass-mega.json +18 -1
  135. package/data/pokemon/furfrou-dandy.json +191 -0
  136. package/data/pokemon/furfrou-debutante.json +191 -0
  137. package/data/pokemon/furfrou-diamond.json +191 -0
  138. package/data/pokemon/furfrou-heart.json +191 -0
  139. package/data/pokemon/furfrou-kabuki.json +191 -0
  140. package/data/pokemon/furfrou-la-reine.json +191 -0
  141. package/data/pokemon/furfrou-matron.json +191 -0
  142. package/data/pokemon/furfrou-pharaoh.json +191 -0
  143. package/data/pokemon/furfrou-star.json +191 -0
  144. package/data/pokemon/furfrou.json +99 -0
  145. package/data/pokemon/gallade-mega.json +26 -1
  146. package/data/pokemon/garbodor-gmax.json +12 -0
  147. package/data/pokemon/garchomp-mega-z.json +18 -1
  148. package/data/pokemon/garchomp-mega.json +26 -1
  149. package/data/pokemon/gardevoir-mega.json +26 -1
  150. package/data/pokemon/genesect-burn.json +25 -1
  151. package/data/pokemon/genesect-chill.json +25 -1
  152. package/data/pokemon/genesect-douse.json +25 -1
  153. package/data/pokemon/genesect-shock.json +25 -1
  154. package/data/pokemon/genesect.json +29 -0
  155. package/data/pokemon/gengar-gmax.json +12 -0
  156. package/data/pokemon/gengar-mega.json +34 -1
  157. package/data/pokemon/gengar.json +1 -0
  158. package/data/pokemon/giratina-origin.json +118 -1
  159. package/data/pokemon/glalie-mega.json +26 -1
  160. package/data/pokemon/glimmora-mega.json +18 -1
  161. package/data/pokemon/golisopod-mega.json +18 -1
  162. package/data/pokemon/golurk-mega.json +18 -1
  163. package/data/pokemon/greninja-ash.json +25 -0
  164. package/data/pokemon/greninja-mega.json +18 -1
  165. package/data/pokemon/grimmsnarl-gmax.json +12 -0
  166. package/data/pokemon/groudon-primal.json +40 -0
  167. package/data/pokemon/gyarados-mega.json +34 -1
  168. package/data/pokemon/hatterene-gmax.json +12 -0
  169. package/data/pokemon/hawlucha-mega.json +18 -1
  170. package/data/pokemon/heatran-mega.json +18 -0
  171. package/data/pokemon/heracross-mega.json +26 -1
  172. package/data/pokemon/hoopa-unbound.json +60 -0
  173. package/data/pokemon/houndoom-mega.json +26 -1
  174. package/data/pokemon/inteleon-gmax.json +12 -0
  175. package/data/pokemon/kangaskhan-mega.json +34 -1
  176. package/data/pokemon/keldeo-resolute.json +92 -0
  177. package/data/pokemon/kingler-gmax.json +12 -0
  178. package/data/pokemon/kyogre-primal.json +40 -0
  179. package/data/pokemon/kyurem-black.json +33 -0
  180. package/data/pokemon/kyurem-white.json +33 -0
  181. package/data/pokemon/landorus-therian.json +32 -0
  182. package/data/pokemon/lapras-gmax.json +12 -0
  183. package/data/pokemon/latias-mega.json +26 -1
  184. package/data/pokemon/latios-mega.json +26 -1
  185. package/data/pokemon/lopunny-mega.json +26 -1
  186. package/data/pokemon/lucario-mega-z.json +18 -1
  187. package/data/pokemon/lucario-mega.json +26 -1
  188. package/data/pokemon/machamp-gmax.json +12 -0
  189. package/data/pokemon/magearna-mega.json +18 -1
  190. package/data/pokemon/magearna-original-mega.json +18 -1
  191. package/data/pokemon/malamar-mega.json +18 -1
  192. package/data/pokemon/manectric-mega.json +26 -1
  193. package/data/pokemon/mawile-mega.json +26 -1
  194. package/data/pokemon/mawile.json +0 -1
  195. package/data/pokemon/medicham-mega.json +26 -1
  196. package/data/pokemon/meganium-mega.json +18 -1
  197. package/data/pokemon/melmetal-gmax.json +12 -0
  198. package/data/pokemon/meloetta-pirouette.json +29 -0
  199. package/data/pokemon/meowstic-mega.json +18 -1
  200. package/data/pokemon/meowth-alola.json +2 -0
  201. package/data/pokemon/meowth-gmax.json +12 -0
  202. package/data/pokemon/metagross-mega.json +26 -1
  203. package/data/pokemon/mewtwo-mega-x.json +34 -1
  204. package/data/pokemon/mewtwo-mega-y.json +34 -1
  205. package/data/pokemon/mimikyu-busted.json +53 -0
  206. package/data/pokemon/minior-blue.json +53 -0
  207. package/data/pokemon/minior-green.json +53 -0
  208. package/data/pokemon/minior-indigo.json +53 -0
  209. package/data/pokemon/minior-orange.json +53 -0
  210. package/data/pokemon/minior-red.json +53 -0
  211. package/data/pokemon/minior-violet.json +53 -0
  212. package/data/pokemon/minior-yellow.json +53 -0
  213. package/data/pokemon/morpeko-hangry.json +57 -0
  214. package/data/pokemon/necrozma-dawn-wings.json +18 -0
  215. package/data/pokemon/necrozma-dusk-mane.json +18 -0
  216. package/data/pokemon/necrozma-ultra.json +21 -0
  217. package/data/pokemon/ogerpon-cornerstone.json +9 -1
  218. package/data/pokemon/ogerpon-hearthflame.json +9 -1
  219. package/data/pokemon/ogerpon-wellspring.json +9 -1
  220. package/data/pokemon/ogerpon.json +13 -0
  221. package/data/pokemon/orbeetle-gmax.json +12 -0
  222. package/data/pokemon/oricorio-pau.json +9 -0
  223. package/data/pokemon/oricorio-pom-pom.json +9 -0
  224. package/data/pokemon/oricorio-sensu.json +9 -0
  225. package/data/pokemon/oricorio.json +9 -0
  226. package/data/pokemon/palafin-hero.json +16 -0
  227. package/data/pokemon/palkia-origin.json +40 -1
  228. package/data/pokemon/persian-alola.json +2 -0
  229. package/data/pokemon/pidgeot-mega.json +34 -1
  230. package/data/pokemon/pikachu-gmax.json +12 -0
  231. package/data/pokemon/pinsir-mega.json +34 -1
  232. package/data/pokemon/piplup.json +1 -0
  233. package/data/pokemon/prinplup.json +1 -0
  234. package/data/pokemon/pyroar-mega.json +18 -1
  235. package/data/pokemon/raichu-mega-x.json +18 -1
  236. package/data/pokemon/raichu-mega-y.json +18 -1
  237. package/data/pokemon/rayquaza-mega.json +29 -0
  238. package/data/pokemon/rillaboom-gmax.json +12 -0
  239. package/data/pokemon/rotom-fan.json +94 -0
  240. package/data/pokemon/rotom-frost.json +94 -0
  241. package/data/pokemon/rotom-heat.json +94 -0
  242. package/data/pokemon/rotom-mow.json +94 -0
  243. package/data/pokemon/rotom-wash.json +94 -0
  244. package/data/pokemon/rotom.json +112 -0
  245. package/data/pokemon/sableye-mega.json +26 -1
  246. package/data/pokemon/salamence-mega.json +26 -1
  247. package/data/pokemon/sandaconda-gmax.json +12 -0
  248. package/data/pokemon/sawsbuck-autumn.json +47 -0
  249. package/data/pokemon/sawsbuck-summer.json +36 -0
  250. package/data/pokemon/sawsbuck-winter.json +47 -0
  251. package/data/pokemon/sawsbuck.json +47 -0
  252. package/data/pokemon/sceptile-mega.json +26 -1
  253. package/data/pokemon/scizor-mega.json +26 -1
  254. package/data/pokemon/scolipede-mega.json +18 -1
  255. package/data/pokemon/scolipede.json +1 -0
  256. package/data/pokemon/scovillain-mega.json +18 -1
  257. package/data/pokemon/scrafty-mega.json +18 -1
  258. package/data/pokemon/sharpedo-mega.json +26 -1
  259. package/data/pokemon/shaymin-sky.json +151 -0
  260. package/data/pokemon/shiftry-f.json +1 -0
  261. package/data/pokemon/shiftry.json +1 -0
  262. package/data/pokemon/silvally-bug.json +27 -1
  263. package/data/pokemon/silvally-dark.json +27 -1
  264. package/data/pokemon/silvally-dragon.json +27 -1
  265. package/data/pokemon/silvally-electric.json +27 -1
  266. package/data/pokemon/silvally-fairy.json +27 -1
  267. package/data/pokemon/silvally-fighting.json +27 -1
  268. package/data/pokemon/silvally-fire.json +27 -1
  269. package/data/pokemon/silvally-flying.json +27 -1
  270. package/data/pokemon/silvally-ghost.json +27 -1
  271. package/data/pokemon/silvally-grass.json +27 -1
  272. package/data/pokemon/silvally-ground.json +27 -1
  273. package/data/pokemon/silvally-ice.json +27 -1
  274. package/data/pokemon/silvally-poison.json +27 -1
  275. package/data/pokemon/silvally-psychic.json +27 -1
  276. package/data/pokemon/silvally-rock.json +27 -1
  277. package/data/pokemon/silvally-steel.json +27 -1
  278. package/data/pokemon/silvally-water.json +27 -1
  279. package/data/pokemon/silvally.json +50 -0
  280. package/data/pokemon/skarmory-mega.json +18 -1
  281. package/data/pokemon/slowbro-mega.json +34 -1
  282. package/data/pokemon/snorlax-gmax.json +12 -0
  283. package/data/pokemon/staraptor-mega.json +18 -0
  284. package/data/pokemon/starmie-mega.json +18 -1
  285. package/data/pokemon/steelix-mega.json +26 -1
  286. package/data/pokemon/swampert-mega.json +26 -1
  287. package/data/pokemon/tatsugiri-droopy-mega.json +18 -1
  288. package/data/pokemon/tatsugiri-mega.json +18 -1
  289. package/data/pokemon/tatsugiri-stretchy-mega.json +18 -1
  290. package/data/pokemon/terapagos-stellar.json +15 -0
  291. package/data/pokemon/terapagos-terastal.json +15 -0
  292. package/data/pokemon/thundurus-therian.json +32 -0
  293. package/data/pokemon/tornadus-therian.json +32 -0
  294. package/data/pokemon/toxtricity-gmax.json +12 -0
  295. package/data/pokemon/toxtricity-low-key-gmax.json +12 -0
  296. package/data/pokemon/tyranitar-mega.json +26 -1
  297. package/data/pokemon/urshifu-gmax.json +12 -0
  298. package/data/pokemon/urshifu-rapid-strike-gmax.json +12 -0
  299. package/data/pokemon/venipede.json +1 -0
  300. package/data/pokemon/venusaur-gmax.json +12 -0
  301. package/data/pokemon/venusaur-mega.json +34 -1
  302. package/data/pokemon/victreebel-mega.json +18 -1
  303. package/data/pokemon/whirlipede.json +1 -0
  304. package/data/pokemon/wishiwashi-school.json +24 -0
  305. package/data/pokemon/xerneas-active.json +11 -0
  306. package/data/pokemon/zacian-crowned.json +19 -1
  307. package/data/pokemon/zamazenta-crowned.json +19 -1
  308. package/data/pokemon/zeraora-mega.json +18 -1
  309. package/data/pokemon/zygarde-10.json +19 -0
  310. package/data/pokemon/zygarde-complete-mega.json +18 -1
  311. package/data/pokemon/zygarde-complete.json +36 -0
  312. package/data/pokemon/zygarde.json +33 -0
  313. package/package.json +4 -1
  314. package/build/enums-CXl-yCW7.mjs +0 -274
  315. package/build/enums-CXl-yCW7.mjs.map +0 -1
  316. package/build/enums-DNGH357y.d.mts +0 -43
  317. package/build/enums-DNGH357y.d.mts.map +0 -1
  318. package/build/schemas-30DCmCcg.mjs.map +0 -1
  319. package/build/schemas-D2xLu3LV.d.mts.map +0 -1
@@ -0,0 +1,66 @@
1
+ //#region src/lib/enums.d.ts
2
+ declare const gameType: readonly ["superset", "set", "game", "dlc"];
3
+ declare const gamePlatforms: readonly ["gb", "gbc", "gba", "nds", "3ds", "mobile", "ngc", "wii", "wiiu", "switch", "switch2"];
4
+ declare const gameSeries: readonly ["main", "spinoff", "storage", "legends"];
5
+ declare const itemCategory: readonly ["ball", "medicine", "battle", "berry", "machine", "megastone", "zcrystal", "treasure", "ingredient", "material", "key", "other"];
6
+ declare const pokeballCategory: readonly ["regular", "special", "hisuian", "other"];
7
+ declare const languageIds: readonly ["en", "es", "esla", "fr", "de", "it", "ja", "ko", "chs", "cht", "pt"];
8
+ declare const languageAlpha3Codes: readonly ["eng", "esp", "esla", "fra", "deu", "ita", "jap", "kor", "chs", "cht", "por"];
9
+ /**
10
+ * @deprecated use gameLocales from lib-next/languages
11
+ */
12
+ declare const languageInGameCodes: readonly ["ENG", "ES-ES", "ES-LA", "FRA", "DEU", "ITA", "JPN", "KOR", "CHT", "CHS", "PT-BR"];
13
+ declare const ribbonCategory: readonly ["league", "contest", "tower", "memory", "gift"];
14
+ declare const typeIds: readonly ["normal", "fire", "water", "electric", "grass", "ice", "fighting", "poison", "ground", "flying", "psychic", "bug", "rock", "ghost", "dragon", "dark", "steel", "fairy", "stellar"];
15
+ /** Category tags on abilities (data/abilities.json `tags`). */
16
+ declare const abilityTagIds: readonly ["alert", "ally-helper", "stat-boost", "move-boost", "bypass", "defense", "handicap", "heal", "items", "priority-control", "damage", "target-weaken", "status-trigger", "status-immunity", "steal", "weather", "terrain", "trap", "ability-change", "type-change", "species-specific", "other"];
17
+ declare const statIds: readonly ["hp", "atk", "def", "spa", "spd", "spe", "acc", "eva"];
18
+ declare const moveCategory: readonly ["physical", "special", "status"];
19
+ declare const genders: readonly ["m", "f"];
20
+ declare const titleTypes: readonly ["ribbon", "mark", "custom"];
21
+ declare const pokemonSizes: readonly ["xs", "s", "m", "l", "xl"];
22
+ declare const ivJudgeValues: readonly ["nogood", "decent", "good", "verygood", "fantastic", "best"];
23
+ declare const battleStyles: readonly ["singles", "doubles", "triples", "rotation", "royale"];
24
+ declare const raidStyles: readonly ["dynamax", "tera"];
25
+ /** Evolution vocabulary, also used by the evolution schemas. */
26
+ declare const evoTriggers: readonly ["level_up", "trade", "use_item", "special"];
27
+ declare const evoItemRoles: readonly ["held", "used", "bag"];
28
+ declare const evoActivations: readonly ["automatic", "manual"];
29
+ declare const evoConditionKeys: readonly ["friendship", "affection", "beauty", "gender", "time_of_day", "known_move", "known_move_type", "ability", "party_pokemon", "party_type", "trade_partner", "attack_defense_comparison", "overworld_weather", "location", "region", "device_upside_down", "union_circle", "walk_steps", "outside_poke_ball", "battle_experience", "use_move", "hit_with_move", "recoil_damage_without_fainting", "damage_without_fainting", "critical_hits_in_one_battle", "defeat_pokemon_holding_item", "spin", "hidden_value_branch", "nature", "spare_party_slot", "spare_poke_ball", "evolve_other", "full_moon", "interact_with_scroll", "vivillon_pattern", "candy"];
30
+ declare const evoGenders: readonly ["male", "female", "genderless"];
31
+ declare const evoTimesOfDay: readonly ["day", "night", "dusk"];
32
+ declare const evoStatComparisons: readonly ["lt", "eq", "gt"];
33
+ declare const evoWeather: readonly ["rain", "fog"];
34
+ declare const evoLocations: readonly ["magnetic_field", "moss_rock", "ice_rock", "mount_lanakila", "dusty_bowl_arch", "coulant_waterway_bridge"];
35
+ declare const evoRegionRelations: readonly ["in", "outside"];
36
+ declare const evoWalkModes: readonly ["lets_go"];
37
+ declare const evoMoveStyles: readonly ["agile", "strong"];
38
+ declare const evoSpinDirections: readonly ["clockwise", "counterclockwise", "either"];
39
+ declare const evoSpinComparisons: readonly ["lt", "gt"];
40
+ declare const evoScrolls: readonly ["darkness", "waters"];
41
+ /** Form transition vocabulary, also used by the form schemas. */
42
+ declare const formTriggers: readonly ["use_item", "equip_item", "remove_item", "learn_move", "forget_move", "use_move", "interact", "fuse", "separate", "automatic", "special"];
43
+ declare const formItemRoles: readonly ["held", "used", "bag"];
44
+ declare const formConditionKeys: readonly ["ability", "known_move", "move_used", "move_category", "time_of_day", "status", "fusion_partner", "interaction", "location", "environment", "season", "elapsed_time", "storage_event", "transfer", "battle_event", "original_form", "intrinsic_form", "spare_party_slot", "mechanic", "hp", "weather", "held_item_absent", "battle_condition"];
45
+ declare const formMoveRelations: readonly ["knows", "does_not_know"];
46
+ declare const formTimesOfDay: readonly ["morning", "day", "dusk", "evening", "night"];
47
+ declare const formStatuses: readonly ["frozen", "frostbite", "fainted"];
48
+ declare const formStatusRelations: readonly ["is", "not"];
49
+ declare const formInteractions: readonly ["contest_spectacular_ends", "deoxys_meteorite", "electric_fan", "enter_contest_spectacular", "enter_union_room", "enter_wifi_club", "furfrou_groom", "furfrou_restore_natural", "lawn_mower", "leave_distortion_world", "light_bulb", "load_game", "microwave_oven", "reassembly_unit", "recall_outside_battle", "refrigerator", "return_appliance", "washing_machine"];
50
+ declare const formLocations: readonly ["alabaster_icelands", "ambrette_fossil_lab_meteorites", "bell_tower", "burned_tower", "cobalt_coastlands", "coronet_highlands", "crimson_mirelands", "dalizapa_passage", "distortion_world", "east_province_area_one", "east_province_area_two", "friseur_furfrou", "glaseado_mountain", "hauoli_city_salon", "hokulani_observatory_meteorite", "jaune_sector_6", "jubilife_village", "jubilife_village_player_quarters", "kanto_route_3_meteorites", "malie_city_salon", "nacrene_museum_meteorite", "north_province_area_one", "obsidian_fieldlands", "professor_birchs_lab", "professor_cozmos_house_meteorite", "professor_kukuis_lab", "shopping_mall_nine_basement", "silph_co_rotom_room", "slateport_pokemon_fan_club", "socarrat_trail", "south_province_area_five", "south_province_area_four", "south_province_area_one", "sprout_tower", "sycamore_pokemon_lab", "team_galactic_eterna_building_rotom_room", "veilstone_city_meteorites", "west_province_area_three", "west_province_area_two"];
51
+ declare const formEnvironments: readonly ["building", "cave_or_beach", "outdoors_or_tall_grass", "outside_distortion_world", "snowstorm"];
52
+ declare const formSeasons: readonly ["spring", "summer", "autumn", "winter"];
53
+ declare const formTimeUnits: readonly ["turns", "days", "seconds"];
54
+ declare const formStorageEvents: readonly ["deposit", "withdrawal"];
55
+ declare const formStorageServices: readonly ["bank", "day_care", "home", "nursery", "pc"];
56
+ declare const formBattleEvents: readonly ["battle_start", "battle_end", "switch_in", "switch_out", "end_of_turn", "before_move", "after_move", "damaging_hit", "physical_hit", "faint"];
57
+ /** Event shorthand accepted by formMethods[].revert. */
58
+ declare const formRevertEvents: readonly ["battle_start", "battle_end", "switch_in", "switch_out", "end_of_turn", "before_move", "after_move", "damaging_hit", "physical_hit", "faint"];
59
+ declare const formMechanics: readonly ["change_a_move_other_than_secret_sword", "dynamax", "gigantamax", "in_party", "legend_plate", "mega_evolution", "not_holding_griseous_orb", "participated_in_battle", "terastallization", "ultra_burst"];
60
+ declare const formComparisons: readonly ["lt", "lte", "eq", "gte", "gt"];
61
+ declare const formWeather: readonly ["sun", "rain", "hail", "snow", "none"];
62
+ declare const formWeatherRelations: readonly ["in", "outside"];
63
+ declare const formBattleConditions: readonly ["ability_is_not_sheer_force", "at_least_40_additional_zygarde_cells", "battle_bond_not_previously_used", "battle_continues", "confusion_self_hit", "directly_knock_out_opponent", "disguise_not_bypassed", "forecast_suppressed_or_replaced", "gigantamax_factor", "hail_or_snow_begins", "ice_face_not_bypassed", "in_battle", "judgment_type_match", "legends_arceus_sunshine_conditions_ended", "mega_gauge_full", "mega_power_depleted", "move_affects_at_least_one_target", "move_deals_damage", "not_dynamaxed", "not_terastallized", "rayquaza_mega_eligible", "sunlight_effect_or_flower_gift_inactive", "ultra_burst_unused_by_trainer", "weather_effects_active", "weather_effects_negated", "zen_mode_suppressed_or_replaced"];
64
+ //#endregion
65
+ export { statIds as $, formStatusRelations as A, gameSeries as B, formInteractions as C, formMoveRelations as D, formMechanics as E, formTimesOfDay as F, languageAlpha3Codes as G, genders as H, formTriggers as I, moveCategory as J, languageIds as K, formWeather as L, formStorageEvents as M, formStorageServices as N, formRevertEvents as O, formTimeUnits as P, ribbonCategory as Q, formWeatherRelations as R, formEnvironments as S, formLocations as T, itemCategory as U, gameType as V, ivJudgeValues as W, pokemonSizes as X, pokeballCategory as Y, raidStyles as Z, evoWeather as _, evoGenders as a, formComparisons as b, evoMoveStyles as c, evoSpinComparisons as d, titleTypes as et, evoSpinDirections as f, evoWalkModes as g, evoTriggers as h, evoConditionKeys as i, formStatuses as j, formSeasons as k, evoRegionRelations as l, evoTimesOfDay as m, battleStyles as n, evoItemRoles as o, evoStatComparisons as p, languageInGameCodes as q, evoActivations as r, evoLocations as s, abilityTagIds as t, typeIds as tt, evoScrolls as u, formBattleConditions as v, formItemRoles as w, formConditionKeys as x, formBattleEvents as y, gamePlatforms as z };
66
+ //# sourceMappingURL=enums-DCL82p1t.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enums-DCL82p1t.d.mts","names":[],"sources":["../src/lib/enums.ts"],"mappings":";cAAa;cACA;cAaA;cACA;cAcA;cACA;cAaA;;;;cAiBA;cAcA;cACA;;cAyBA;cAyBA;cACA;cACA;cACA;cACA;cAWA;cAEA;cACA;;cAGA;cACA;cACA;cACA;cAsCA;cACA;cACA;cACA;cACA;cAQA;cACA;cACA;cACA;cACA;cACA;;cAGA;cAaA;cACA;cAyBA;cACA;cACA;cACA;cACA;cAoBA;cAyCA;cAOA;cACA;cACA;cACA;cACA;;cAaA;cACA;cAYA;cACA;cACA;cACA"}
@@ -1,4 +1,4 @@
1
- import { P as typeIds, _ as evoWeather, a as evoGenders, c as evoMoveStyles, d as evoSpinComparisons, f as evoSpinDirections, g as evoWalkModes, h as evoTriggers, i as evoConditionKeys, l as evoRegionRelations, m as evoTimesOfDay, o as evoItemRoles, p as evoStatComparisons, r as evoActivations, s as evoLocations, u as evoScrolls, w as languageAlpha3Codes } from "./enums-CXl-yCW7.mjs";
1
+ import { G as languageAlpha3Codes, _ as evoWeather, a as evoGenders, c as evoMoveStyles, d as evoSpinComparisons, f as evoSpinDirections, g as evoWalkModes, h as evoTriggers, i as evoConditionKeys, l as evoRegionRelations, m as evoTimesOfDay, o as evoItemRoles, p as evoStatComparisons, r as evoActivations, s as evoLocations, tt as typeIds, u as evoScrolls } from "./enums-Ajt5avHN.mjs";
2
2
  import { z as z$1 } from "zod";
3
3
  //#region src/lib/evolution-schemas.ts
4
4
  const id = z$1.string().min(1).max(50).regex(/^[a-z0-9-]+$/);
@@ -179,4 +179,4 @@ const evolutionMethodSchema = z$1.strictObject({
179
179
  //#endregion
180
180
  export { evolutionMethodSchema as n, evolutionConditionSchema as t };
181
181
 
182
- //# sourceMappingURL=evolution-schemas-BZQILLSQ.mjs.map
182
+ //# sourceMappingURL=evolution-schemas-Db7-jivr.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"evolution-schemas-BZQILLSQ.mjs","names":["z"],"sources":["../src/lib/evolution-schemas.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n evoActivations,\n evoConditionKeys,\n evoGenders,\n evoItemRoles,\n evoLocations,\n evoMoveStyles,\n evoRegionRelations,\n evoScrolls,\n evoSpinComparisons,\n evoSpinDirections,\n evoStatComparisons,\n evoTimesOfDay,\n evoTriggers,\n evoWalkModes,\n evoWeather,\n languageAlpha3Codes,\n typeIds,\n} from './enums.ts'\n\nconst id = z\n .string()\n .min(1)\n .max(50)\n .regex(/^[a-z0-9-]+$/)\nconst ids = z\n .array(id)\n .min(1)\n .refine((values) => new Set(values).size === values.length, 'Duplicate IDs')\nconst count = z.number().int().positive()\nconst localizedText = z\n .partialRecord(z.enum(languageAlpha3Codes), z.string().min(1))\n .refine((text) => Object.values(text).some(Boolean), 'Provide at least one translation')\nconst conditionKey = z.enum(evoConditionKeys).enum\n\n/** Stable translation keys with validated parameters, not an executable expression language. */\nexport const evolutionConditionSchema = z.discriminatedUnion('key', [\n z.strictObject({ key: z.literal(conditionKey.friendship) }),\n z.strictObject({ key: z.literal(conditionKey.affection), minLevel: count }),\n z.strictObject({\n key: z.literal(conditionKey.beauty),\n minValue: z.number().int().min(0).max(255),\n }),\n z.strictObject({ key: z.literal(conditionKey.gender), gender: z.enum(evoGenders) }),\n z.strictObject({ key: z.literal(conditionKey.time_of_day), time: z.enum(evoTimesOfDay) }),\n z.strictObject({ key: z.literal(conditionKey.known_move), move: id }),\n z.strictObject({ key: z.literal(conditionKey.known_move_type), type: z.enum(typeIds) }),\n z.strictObject({ key: z.literal(conditionKey.ability), abilities: ids }),\n z.strictObject({ key: z.literal(conditionKey.party_pokemon), pokemon: id }),\n z.strictObject({ key: z.literal(conditionKey.party_type), type: z.enum(typeIds) }),\n z.strictObject({ key: z.literal(conditionKey.trade_partner), pokemon: id }),\n z.strictObject({\n key: z.literal(conditionKey.attack_defense_comparison),\n comparison: z.enum(evoStatComparisons),\n }),\n z.strictObject({\n key: z.literal(conditionKey.overworld_weather),\n weather: z.array(z.enum(evoWeather)).min(1),\n }),\n z.strictObject({\n key: z.literal(conditionKey.location),\n location: z.enum(evoLocations),\n }),\n z.strictObject({\n key: z.literal(conditionKey.region),\n region: id,\n relation: z.enum(evoRegionRelations),\n }),\n z.strictObject({ key: z.literal(conditionKey.device_upside_down) }),\n z.strictObject({ key: z.literal(conditionKey.union_circle) }),\n z.strictObject({ key: z.literal(conditionKey.walk_steps), count, mode: z.enum(evoWalkModes) }),\n z.strictObject({ key: z.literal(conditionKey.outside_poke_ball) }),\n z.strictObject({ key: z.literal(conditionKey.battle_experience) }),\n z.strictObject({\n key: z.literal(conditionKey.use_move),\n move: id,\n count,\n style: z.enum(evoMoveStyles).optional(),\n }),\n z.strictObject({ key: z.literal(conditionKey.hit_with_move), move: id, count }),\n z.strictObject({ key: z.literal(conditionKey.recoil_damage_without_fainting), amount: count }),\n z.strictObject({ key: z.literal(conditionKey.damage_without_fainting), amount: count }),\n z.strictObject({ key: z.literal(conditionKey.critical_hits_in_one_battle), count }),\n z.strictObject({\n key: z.literal(conditionKey.defeat_pokemon_holding_item),\n pokemon: id,\n item: id,\n count,\n }),\n z.strictObject({\n key: z.literal(conditionKey.spin),\n direction: z.enum(evoSpinDirections),\n seconds: z.number().positive(),\n comparison: z.enum(evoSpinComparisons),\n }),\n z.strictObject({\n key: z.literal(conditionKey.hidden_value_branch),\n percentage: z.number().positive().max(100),\n }),\n z.strictObject({ key: z.literal(conditionKey.nature), natures: ids }),\n z.strictObject({ key: z.literal(conditionKey.spare_party_slot) }),\n z.strictObject({ key: z.literal(conditionKey.spare_poke_ball) }),\n z.strictObject({ key: z.literal(conditionKey.evolve_other), pokemon: id }),\n z.strictObject({ key: z.literal(conditionKey.full_moon) }),\n z.strictObject({\n key: z.literal(conditionKey.interact_with_scroll),\n scroll: z.enum(evoScrolls),\n }),\n z.strictObject({ key: z.literal(conditionKey.vivillon_pattern), pattern: id }),\n z.strictObject({ key: z.literal(conditionKey.candy), pokemon: id, count }),\n])\n\nexport const evolutionMethodSchema = z\n .strictObject({\n // Alternatives between entries, conjunction within an entry; `from` is a choice of source forms.\n from: ids,\n games: ids.optional(),\n trigger: z.enum(evoTriggers),\n minLevel: z.number().int().min(1).max(100).optional(),\n item: z.strictObject({ id, role: z.enum(evoItemRoles), quantity: count.optional() }).optional(),\n conditions: z.array(evolutionConditionSchema),\n additionalResult: z.boolean().optional(),\n // PLA exposes an Evolve action instead of automatically evolving when requirements are met.\n activation: z.enum(evoActivations).optional(),\n notes: localizedText.optional(),\n })\n .superRefine((method, ctx) => {\n if (method.trigger === 'use_item' && method.item?.role !== 'used') {\n ctx.addIssue({\n code: 'custom',\n path: ['item'],\n message: 'Item-use methods require a used item',\n })\n }\n if (method.item?.role === 'used' && method.trigger !== 'use_item') {\n ctx.addIssue({\n code: 'custom',\n path: ['trigger'],\n message: 'Used items require the use_item trigger',\n })\n }\n if (method.trigger === 'special' && method.conditions.length === 0 && !method.notes) {\n ctx.addIssue({\n code: 'custom',\n path: ['conditions'],\n message: 'Special methods require a condition or explanatory note',\n })\n }\n const keys = method.conditions.map((condition) => condition.key)\n if (new Set(keys).size !== keys.length) {\n ctx.addIssue({\n code: 'custom',\n path: ['conditions'],\n message: 'Use one condition per key; separate alternatives into methods',\n })\n }\n })\n\nexport type EvolutionCondition = z.infer<typeof evolutionConditionSchema>\nexport type EvolutionMethod = z.infer<typeof evolutionMethodSchema>\n"],"mappings":"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"}
1
+ {"version":3,"file":"evolution-schemas-Db7-jivr.mjs","names":["z"],"sources":["../src/lib/evolution-schemas.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n evoActivations,\n evoConditionKeys,\n evoGenders,\n evoItemRoles,\n evoLocations,\n evoMoveStyles,\n evoRegionRelations,\n evoScrolls,\n evoSpinComparisons,\n evoSpinDirections,\n evoStatComparisons,\n evoTimesOfDay,\n evoTriggers,\n evoWalkModes,\n evoWeather,\n languageAlpha3Codes,\n typeIds,\n} from './enums.ts'\n\nconst id = z\n .string()\n .min(1)\n .max(50)\n .regex(/^[a-z0-9-]+$/)\nconst ids = z\n .array(id)\n .min(1)\n .refine((values) => new Set(values).size === values.length, 'Duplicate IDs')\nconst count = z.number().int().positive()\nconst localizedText = z\n .partialRecord(z.enum(languageAlpha3Codes), z.string().min(1))\n .refine((text) => Object.values(text).some(Boolean), 'Provide at least one translation')\nconst conditionKey = z.enum(evoConditionKeys).enum\n\n/** Stable translation keys with validated parameters, not an executable expression language. */\nexport const evolutionConditionSchema = z.discriminatedUnion('key', [\n z.strictObject({ key: z.literal(conditionKey.friendship) }),\n z.strictObject({ key: z.literal(conditionKey.affection), minLevel: count }),\n z.strictObject({\n key: z.literal(conditionKey.beauty),\n minValue: z.number().int().min(0).max(255),\n }),\n z.strictObject({ key: z.literal(conditionKey.gender), gender: z.enum(evoGenders) }),\n z.strictObject({ key: z.literal(conditionKey.time_of_day), time: z.enum(evoTimesOfDay) }),\n z.strictObject({ key: z.literal(conditionKey.known_move), move: id }),\n z.strictObject({ key: z.literal(conditionKey.known_move_type), type: z.enum(typeIds) }),\n z.strictObject({ key: z.literal(conditionKey.ability), abilities: ids }),\n z.strictObject({ key: z.literal(conditionKey.party_pokemon), pokemon: id }),\n z.strictObject({ key: z.literal(conditionKey.party_type), type: z.enum(typeIds) }),\n z.strictObject({ key: z.literal(conditionKey.trade_partner), pokemon: id }),\n z.strictObject({\n key: z.literal(conditionKey.attack_defense_comparison),\n comparison: z.enum(evoStatComparisons),\n }),\n z.strictObject({\n key: z.literal(conditionKey.overworld_weather),\n weather: z.array(z.enum(evoWeather)).min(1),\n }),\n z.strictObject({\n key: z.literal(conditionKey.location),\n location: z.enum(evoLocations),\n }),\n z.strictObject({\n key: z.literal(conditionKey.region),\n region: id,\n relation: z.enum(evoRegionRelations),\n }),\n z.strictObject({ key: z.literal(conditionKey.device_upside_down) }),\n z.strictObject({ key: z.literal(conditionKey.union_circle) }),\n z.strictObject({ key: z.literal(conditionKey.walk_steps), count, mode: z.enum(evoWalkModes) }),\n z.strictObject({ key: z.literal(conditionKey.outside_poke_ball) }),\n z.strictObject({ key: z.literal(conditionKey.battle_experience) }),\n z.strictObject({\n key: z.literal(conditionKey.use_move),\n move: id,\n count,\n style: z.enum(evoMoveStyles).optional(),\n }),\n z.strictObject({ key: z.literal(conditionKey.hit_with_move), move: id, count }),\n z.strictObject({ key: z.literal(conditionKey.recoil_damage_without_fainting), amount: count }),\n z.strictObject({ key: z.literal(conditionKey.damage_without_fainting), amount: count }),\n z.strictObject({ key: z.literal(conditionKey.critical_hits_in_one_battle), count }),\n z.strictObject({\n key: z.literal(conditionKey.defeat_pokemon_holding_item),\n pokemon: id,\n item: id,\n count,\n }),\n z.strictObject({\n key: z.literal(conditionKey.spin),\n direction: z.enum(evoSpinDirections),\n seconds: z.number().positive(),\n comparison: z.enum(evoSpinComparisons),\n }),\n z.strictObject({\n key: z.literal(conditionKey.hidden_value_branch),\n percentage: z.number().positive().max(100),\n }),\n z.strictObject({ key: z.literal(conditionKey.nature), natures: ids }),\n z.strictObject({ key: z.literal(conditionKey.spare_party_slot) }),\n z.strictObject({ key: z.literal(conditionKey.spare_poke_ball) }),\n z.strictObject({ key: z.literal(conditionKey.evolve_other), pokemon: id }),\n z.strictObject({ key: z.literal(conditionKey.full_moon) }),\n z.strictObject({\n key: z.literal(conditionKey.interact_with_scroll),\n scroll: z.enum(evoScrolls),\n }),\n z.strictObject({ key: z.literal(conditionKey.vivillon_pattern), pattern: id }),\n z.strictObject({ key: z.literal(conditionKey.candy), pokemon: id, count }),\n])\n\nexport const evolutionMethodSchema = z\n .strictObject({\n // Alternatives between entries, conjunction within an entry; `from` is a choice of source forms.\n from: ids,\n games: ids.optional(),\n trigger: z.enum(evoTriggers),\n minLevel: z.number().int().min(1).max(100).optional(),\n item: z.strictObject({ id, role: z.enum(evoItemRoles), quantity: count.optional() }).optional(),\n conditions: z.array(evolutionConditionSchema),\n additionalResult: z.boolean().optional(),\n // PLA exposes an Evolve action instead of automatically evolving when requirements are met.\n activation: z.enum(evoActivations).optional(),\n notes: localizedText.optional(),\n })\n .superRefine((method, ctx) => {\n if (method.trigger === 'use_item' && method.item?.role !== 'used') {\n ctx.addIssue({\n code: 'custom',\n path: ['item'],\n message: 'Item-use methods require a used item',\n })\n }\n if (method.item?.role === 'used' && method.trigger !== 'use_item') {\n ctx.addIssue({\n code: 'custom',\n path: ['trigger'],\n message: 'Used items require the use_item trigger',\n })\n }\n if (method.trigger === 'special' && method.conditions.length === 0 && !method.notes) {\n ctx.addIssue({\n code: 'custom',\n path: ['conditions'],\n message: 'Special methods require a condition or explanatory note',\n })\n }\n const keys = method.conditions.map((condition) => condition.key)\n if (new Set(keys).size !== keys.length) {\n ctx.addIssue({\n code: 'custom',\n path: ['conditions'],\n message: 'Use one condition per key; separate alternatives into methods',\n })\n }\n })\n\nexport type EvolutionCondition = z.infer<typeof evolutionConditionSchema>\nexport type EvolutionMethod = z.infer<typeof evolutionMethodSchema>\n"],"mappings":"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"}
@@ -0,0 +1,166 @@
1
+ import { A as formStatusRelations, C as formInteractions, D as formMoveRelations, E as formMechanics, F as formTimesOfDay, G as languageAlpha3Codes, I as formTriggers, J as moveCategory, L as formWeather, M as formStorageEvents, N as formStorageServices, O as formRevertEvents, P as formTimeUnits, R as formWeatherRelations, S as formEnvironments, T as formLocations, b as formComparisons, j as formStatuses, k as formSeasons, v as formBattleConditions, w as formItemRoles, x as formConditionKeys, y as formBattleEvents } from "./enums-Ajt5avHN.mjs";
2
+ import { z as z$1 } from "zod";
3
+ //#region src/lib/form-schemas.ts
4
+ const id = z$1.string().min(1).max(50).regex(/^[a-z0-9-]+$/);
5
+ const ids = z$1.array(id).min(1).refine((values) => new Set(values).size === values.length, "Duplicate IDs");
6
+ const key = z$1.enum(formConditionKeys).enum;
7
+ /** Requirements for a transition, with stable translation keys and typed parameters. */
8
+ const formConditionSchema = z$1.discriminatedUnion("key", [
9
+ z$1.strictObject({
10
+ key: z$1.literal(key.ability),
11
+ abilities: ids
12
+ }),
13
+ z$1.strictObject({
14
+ key: z$1.literal(key.known_move),
15
+ move: id,
16
+ relation: z$1.enum(formMoveRelations).optional()
17
+ }),
18
+ z$1.strictObject({
19
+ key: z$1.literal(key.move_used),
20
+ move: id
21
+ }),
22
+ z$1.strictObject({
23
+ key: z$1.literal(key.move_category),
24
+ categories: z$1.array(z$1.enum(moveCategory)).min(1)
25
+ }),
26
+ z$1.strictObject({
27
+ key: z$1.literal(key.time_of_day),
28
+ time: z$1.enum(formTimesOfDay)
29
+ }),
30
+ z$1.strictObject({
31
+ key: z$1.literal(key.status),
32
+ status: z$1.enum(formStatuses),
33
+ relation: z$1.enum(formStatusRelations)
34
+ }),
35
+ z$1.strictObject({
36
+ key: z$1.literal(key.fusion_partner),
37
+ pokemon: id
38
+ }),
39
+ z$1.strictObject({
40
+ key: z$1.literal(key.interaction),
41
+ interaction: z$1.enum(formInteractions)
42
+ }),
43
+ z$1.strictObject({
44
+ key: z$1.literal(key.location),
45
+ location: z$1.enum(formLocations)
46
+ }),
47
+ z$1.strictObject({
48
+ key: z$1.literal(key.environment),
49
+ environment: z$1.enum(formEnvironments)
50
+ }),
51
+ z$1.strictObject({
52
+ key: z$1.literal(key.season),
53
+ season: z$1.enum(formSeasons)
54
+ }),
55
+ z$1.strictObject({
56
+ key: z$1.literal(key.elapsed_time),
57
+ amount: z$1.number().positive(),
58
+ unit: z$1.enum(formTimeUnits)
59
+ }),
60
+ z$1.strictObject({
61
+ key: z$1.literal(key.storage_event),
62
+ event: z$1.enum(formStorageEvents),
63
+ service: z$1.enum(formStorageServices).optional()
64
+ }),
65
+ z$1.strictObject({
66
+ key: z$1.literal(key.transfer),
67
+ destination: id
68
+ }),
69
+ z$1.strictObject({
70
+ key: z$1.literal(key.battle_event),
71
+ events: z$1.array(z$1.enum(formBattleEvents)).min(1)
72
+ }),
73
+ z$1.strictObject({
74
+ key: z$1.literal(key.original_form),
75
+ forms: ids
76
+ }),
77
+ z$1.strictObject({
78
+ key: z$1.literal(key.intrinsic_form),
79
+ forms: ids
80
+ }),
81
+ z$1.strictObject({ key: z$1.literal(key.spare_party_slot) }),
82
+ z$1.strictObject({
83
+ key: z$1.literal(key.mechanic),
84
+ mechanic: z$1.enum(formMechanics)
85
+ }),
86
+ z$1.strictObject({
87
+ key: z$1.literal(key.hp),
88
+ comparison: z$1.enum(formComparisons),
89
+ percent: z$1.number().min(0).max(100)
90
+ }),
91
+ z$1.strictObject({
92
+ key: z$1.literal(key.weather),
93
+ weather: z$1.array(z$1.enum(formWeather)).min(1),
94
+ relation: z$1.enum(formWeatherRelations)
95
+ }),
96
+ z$1.strictObject({
97
+ key: z$1.literal(key.held_item_absent),
98
+ items: ids
99
+ }),
100
+ z$1.strictObject({
101
+ key: z$1.literal(key.battle_condition),
102
+ condition: z$1.enum(formBattleConditions)
103
+ })
104
+ ]);
105
+ const actionShape = {
106
+ trigger: z$1.enum(formTriggers),
107
+ minLevel: z$1.number().int().min(1).max(100).optional(),
108
+ item: z$1.strictObject({
109
+ id,
110
+ role: z$1.enum(formItemRoles),
111
+ consumed: z$1.boolean().optional()
112
+ }).optional(),
113
+ conditions: z$1.array(formConditionSchema),
114
+ notes: z$1.partialRecord(z$1.enum(languageAlpha3Codes), z$1.string().min(1)).refine((text) => Object.values(text).some(Boolean), "Provide at least one translation").optional()
115
+ };
116
+ function validateAction(method, ctx) {
117
+ const requiredRole = method.trigger === "use_item" ? "used" : method.trigger === "equip_item" ? "held" : void 0;
118
+ if (requiredRole && method.item?.role !== requiredRole) ctx.addIssue({
119
+ code: "custom",
120
+ path: ["item"],
121
+ message: `${method.trigger} requires a ${requiredRole} item`
122
+ });
123
+ if (method.item?.consumed && method.item.role !== "used") ctx.addIssue({
124
+ code: "custom",
125
+ path: ["item", "consumed"],
126
+ message: "Only used items can be consumed"
127
+ });
128
+ if (method.trigger === "fuse" && !method.conditions.some((condition) => condition.key === "fusion_partner")) ctx.addIssue({
129
+ code: "custom",
130
+ path: ["conditions"],
131
+ message: "Fusion requires a partner"
132
+ });
133
+ if (method.trigger === "special" && method.conditions.length === 0 && !method.notes) ctx.addIssue({
134
+ code: "custom",
135
+ path: ["conditions"],
136
+ message: "Special methods require a condition or explanatory note"
137
+ });
138
+ const conditions = method.conditions.map((condition) => JSON.stringify(condition));
139
+ if (new Set(conditions).size !== conditions.length) ctx.addIssue({
140
+ code: "custom",
141
+ path: ["conditions"],
142
+ message: "Duplicate condition"
143
+ });
144
+ }
145
+ z$1.strictObject(actionShape);
146
+ /** Missing games inherits the forward method; null explicitly retains unknown scope. */
147
+ const formRevertDetailSchema = z$1.strictObject({
148
+ to: id.optional(),
149
+ games: ids.nullable().optional(),
150
+ ...actionShape
151
+ }).superRefine(validateAction);
152
+ const formRevertSchema = z$1.union([
153
+ z$1.enum(formRevertEvents),
154
+ z$1.strictObject({ afterTurns: z$1.number().int().positive() }),
155
+ formRevertDetailSchema
156
+ ]);
157
+ const formMethodSchema = z$1.strictObject({
158
+ from: ids,
159
+ games: ids.optional(),
160
+ ...actionShape,
161
+ revert: z$1.array(formRevertSchema).min(1).optional()
162
+ }).superRefine(validateAction);
163
+ //#endregion
164
+ export { formRevertSchema as i, formMethodSchema as n, formRevertDetailSchema as r, formConditionSchema as t };
165
+
166
+ //# sourceMappingURL=form-schemas-BjyAMPZU.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-schemas-BjyAMPZU.mjs","names":["z"],"sources":["../src/lib/form-schemas.ts"],"sourcesContent":["import { z } from 'zod'\nimport {\n formBattleConditions,\n formBattleEvents,\n formComparisons,\n formConditionKeys,\n formEnvironments,\n formInteractions,\n formItemRoles,\n formLocations,\n formMechanics,\n formMoveRelations,\n formRevertEvents,\n formSeasons,\n formStatusRelations,\n formStatuses,\n formStorageEvents,\n formStorageServices,\n formTimesOfDay,\n formTimeUnits,\n formTriggers,\n formWeather,\n formWeatherRelations,\n languageAlpha3Codes,\n moveCategory,\n} from './enums.ts'\n\nconst id = z\n .string()\n .min(1)\n .max(50)\n .regex(/^[a-z0-9-]+$/)\nconst ids = z\n .array(id)\n .min(1)\n .refine((values) => new Set(values).size === values.length, 'Duplicate IDs')\nconst key = z.enum(formConditionKeys).enum\n\n/** Requirements for a transition, with stable translation keys and typed parameters. */\nexport const formConditionSchema = z.discriminatedUnion('key', [\n z.strictObject({ key: z.literal(key.ability), abilities: ids }),\n z.strictObject({\n key: z.literal(key.known_move),\n move: id,\n relation: z.enum(formMoveRelations).optional(),\n }),\n z.strictObject({ key: z.literal(key.move_used), move: id }),\n z.strictObject({\n key: z.literal(key.move_category),\n categories: z.array(z.enum(moveCategory)).min(1),\n }),\n z.strictObject({ key: z.literal(key.time_of_day), time: z.enum(formTimesOfDay) }),\n z.strictObject({\n key: z.literal(key.status),\n status: z.enum(formStatuses),\n relation: z.enum(formStatusRelations),\n }),\n z.strictObject({ key: z.literal(key.fusion_partner), pokemon: id }),\n z.strictObject({ key: z.literal(key.interaction), interaction: z.enum(formInteractions) }),\n z.strictObject({ key: z.literal(key.location), location: z.enum(formLocations) }),\n z.strictObject({ key: z.literal(key.environment), environment: z.enum(formEnvironments) }),\n z.strictObject({ key: z.literal(key.season), season: z.enum(formSeasons) }),\n z.strictObject({\n key: z.literal(key.elapsed_time),\n amount: z.number().positive(),\n unit: z.enum(formTimeUnits),\n }),\n z.strictObject({\n key: z.literal(key.storage_event),\n event: z.enum(formStorageEvents),\n service: z.enum(formStorageServices).optional(),\n }),\n z.strictObject({ key: z.literal(key.transfer), destination: id }),\n z.strictObject({\n key: z.literal(key.battle_event),\n events: z.array(z.enum(formBattleEvents)).min(1),\n }),\n z.strictObject({ key: z.literal(key.original_form), forms: ids }),\n z.strictObject({ key: z.literal(key.intrinsic_form), forms: ids }),\n z.strictObject({ key: z.literal(key.spare_party_slot) }),\n z.strictObject({ key: z.literal(key.mechanic), mechanic: z.enum(formMechanics) }),\n z.strictObject({\n key: z.literal(key.hp),\n comparison: z.enum(formComparisons),\n percent: z.number().min(0).max(100),\n }),\n z.strictObject({\n key: z.literal(key.weather),\n weather: z.array(z.enum(formWeather)).min(1),\n relation: z.enum(formWeatherRelations),\n }),\n z.strictObject({ key: z.literal(key.held_item_absent), items: ids }),\n z.strictObject({ key: z.literal(key.battle_condition), condition: z.enum(formBattleConditions) }),\n])\n\nconst actionShape = {\n trigger: z.enum(formTriggers),\n minLevel: z.number().int().min(1).max(100).optional(),\n item: z\n .strictObject({ id, role: z.enum(formItemRoles), consumed: z.boolean().optional() })\n .optional(),\n conditions: z.array(formConditionSchema),\n notes: z\n .partialRecord(z.enum(languageAlpha3Codes), z.string().min(1))\n .refine((text) => Object.values(text).some(Boolean), 'Provide at least one translation')\n .optional(),\n}\n\nfunction validateAction(method: z.infer<typeof formActionSchema>, ctx: z.RefinementCtx) {\n const requiredRole =\n method.trigger === 'use_item' ? 'used' : method.trigger === 'equip_item' ? 'held' : undefined\n if (requiredRole && method.item?.role !== requiredRole) {\n ctx.addIssue({\n code: 'custom',\n path: ['item'],\n message: `${method.trigger} requires a ${requiredRole} item`,\n })\n }\n if (method.item?.consumed && method.item.role !== 'used') {\n ctx.addIssue({\n code: 'custom',\n path: ['item', 'consumed'],\n message: 'Only used items can be consumed',\n })\n }\n if (\n method.trigger === 'fuse' &&\n !method.conditions.some((condition) => condition.key === 'fusion_partner')\n ) {\n ctx.addIssue({ code: 'custom', path: ['conditions'], message: 'Fusion requires a partner' })\n }\n if (method.trigger === 'special' && method.conditions.length === 0 && !method.notes) {\n ctx.addIssue({\n code: 'custom',\n path: ['conditions'],\n message: 'Special methods require a condition or explanatory note',\n })\n }\n const conditions = method.conditions.map((condition) => JSON.stringify(condition))\n if (new Set(conditions).size !== conditions.length) {\n ctx.addIssue({ code: 'custom', path: ['conditions'], message: 'Duplicate condition' })\n }\n}\n\nconst formActionSchema = z.strictObject(actionShape)\n\n/** Missing games inherits the forward method; null explicitly retains unknown scope. */\nexport const formRevertDetailSchema = z\n .strictObject({\n to: id.optional(),\n games: ids.nullable().optional(),\n ...actionShape,\n })\n .superRefine(validateAction)\n\nexport const formRevertSchema = z.union([\n z.enum(formRevertEvents),\n z.strictObject({ afterTurns: z.number().int().positive() }),\n formRevertDetailSchema,\n])\n\nexport const formMethodSchema = z\n .strictObject({\n from: ids,\n games: ids.optional(),\n ...actionShape,\n revert: z.array(formRevertSchema).min(1).optional(),\n })\n .superRefine(validateAction)\n\nexport type FormCondition = z.infer<typeof formConditionSchema>\nexport type FormRevertDetail = z.infer<typeof formRevertDetailSchema>\nexport type FormRevert = z.infer<typeof formRevertSchema>\nexport type FormMethod = z.infer<typeof formMethodSchema>\n"],"mappings":"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"}