optolith-database-schema 0.17.2 → 0.18.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 (626) hide show
  1. package/CHANGELOG.md +34 -1
  2. package/lib/main.d.ts +2 -101
  3. package/lib/main.js +361 -106
  4. package/lib/test.d.ts +1 -0
  5. package/lib/test.js +2 -0
  6. package/lib/types/Advantage.d.ts +921 -63
  7. package/lib/types/Advantage.js +42 -13
  8. package/lib/types/AnimalDisease.d.ts +90 -59
  9. package/lib/types/AnimalDisease.js +28 -13
  10. package/lib/types/AnimalType.d.ts +6 -28
  11. package/lib/types/AnimalType.js +14 -13
  12. package/lib/types/ArcaneBardTradition.d.ts +30 -10
  13. package/lib/types/ArcaneBardTradition.js +7 -13
  14. package/lib/types/ArcaneDancerTradition.d.ts +30 -10
  15. package/lib/types/ArcaneDancerTradition.js +7 -13
  16. package/lib/types/Aspect.d.ts +7 -33
  17. package/lib/types/Aspect.js +20 -13
  18. package/lib/types/Attribute.d.ts +8 -36
  19. package/lib/types/Attribute.js +23 -13
  20. package/lib/types/Blessing.d.ts +96 -113
  21. package/lib/types/Blessing.js +94 -13
  22. package/lib/types/Cantrip.d.ts +132 -183
  23. package/lib/types/Cantrip.js +159 -13
  24. package/lib/types/Ceremony.d.ts +630 -113
  25. package/lib/types/Ceremony.js +87 -13
  26. package/lib/types/CombatTechnique.d.ts +127 -0
  27. package/lib/types/CombatTechnique.js +101 -0
  28. package/lib/types/Condition.d.ts +52 -40
  29. package/lib/types/Condition.js +31 -13
  30. package/lib/types/Continent.d.ts +6 -30
  31. package/lib/types/Continent.js +15 -13
  32. package/lib/types/Culture.d.ts +142 -369
  33. package/lib/types/Culture.js +355 -13
  34. package/lib/types/DerivedCharacteristic.d.ts +76 -61
  35. package/lib/types/DerivedCharacteristic.js +45 -13
  36. package/lib/types/Disadvantage.d.ts +921 -58
  37. package/lib/types/Disadvantage.js +45 -13
  38. package/lib/types/Disease.d.ts +81 -43
  39. package/lib/types/Disease.js +15 -13
  40. package/lib/types/Element.d.ts +6 -28
  41. package/lib/types/Element.js +14 -13
  42. package/lib/types/ExperienceLevel.d.ts +13 -64
  43. package/lib/types/ExperienceLevel.js +43 -13
  44. package/lib/types/EyeColor.d.ts +6 -28
  45. package/lib/types/EyeColor.js +14 -13
  46. package/lib/types/FamiliarsTrick.d.ts +189 -266
  47. package/lib/types/FamiliarsTrick.js +193 -13
  48. package/lib/types/HairColor.d.ts +6 -28
  49. package/lib/types/HairColor.js +14 -13
  50. package/lib/types/Lessons.d.ts +180 -0
  51. package/lib/types/Lessons.js +212 -0
  52. package/lib/types/LiturgicalChant.d.ts +630 -113
  53. package/lib/types/LiturgicalChant.js +87 -13
  54. package/lib/types/Locale.d.ts +11 -36
  55. package/lib/types/Locale.js +1316 -13
  56. package/lib/types/MetaCondition.d.ts +52 -43
  57. package/lib/types/MetaCondition.js +32 -13
  58. package/lib/types/PactCategory.d.ts +74 -78
  59. package/lib/types/PactCategory.js +65 -13
  60. package/lib/types/Patron.d.ts +100 -197
  61. package/lib/types/Patron.js +195 -13
  62. package/lib/types/PatronCategory.d.ts +7 -36
  63. package/lib/types/PatronCategory.js +19 -13
  64. package/lib/types/PersonalityTrait.d.ts +80 -67
  65. package/lib/types/PersonalityTrait.js +51 -13
  66. package/lib/types/Profession.d.ts +1911 -665
  67. package/lib/types/Profession.js +593 -13
  68. package/lib/types/Property.d.ts +7 -34
  69. package/lib/types/Property.js +19 -13
  70. package/lib/types/Race.d.ts +163 -349
  71. package/lib/types/Race.js +287 -13
  72. package/lib/types/Region.d.ts +6 -28
  73. package/lib/types/Region.js +14 -13
  74. package/lib/types/Ritual.d.ts +627 -111
  75. package/lib/types/Ritual.js +88 -13
  76. package/lib/types/Service.d.ts +55 -43
  77. package/lib/types/Service.js +38 -13
  78. package/lib/types/SexPractice.d.ts +50 -47
  79. package/lib/types/SexPractice.js +32 -13
  80. package/lib/types/Skill.d.ts +112 -131
  81. package/lib/types/Skill.js +120 -10
  82. package/lib/types/SkillGroup.d.ts +8 -37
  83. package/lib/types/SkillGroup.js +23 -13
  84. package/lib/types/SkillModificationLevel.d.ts +31 -101
  85. package/lib/types/SkillModificationLevel.js +95 -10
  86. package/lib/types/SocialStatus.d.ts +7 -28
  87. package/lib/types/SocialStatus.js +18 -13
  88. package/lib/types/Spell.d.ts +627 -111
  89. package/lib/types/Spell.js +88 -13
  90. package/lib/types/State.d.ts +51 -36
  91. package/lib/types/State.js +24 -13
  92. package/lib/types/Talisman.d.ts +64 -70
  93. package/lib/types/Talisman.js +64 -13
  94. package/lib/types/TargetCategory.d.ts +7 -42
  95. package/lib/types/TargetCategory.js +19 -13
  96. package/lib/types/_Activatable.d.ts +1587 -1366
  97. package/lib/types/_Activatable.js +1392 -2
  98. package/lib/types/_ActivatableSelectOptionCategory.d.ts +657 -386
  99. package/lib/types/_ActivatableSelectOptionCategory.js +381 -1
  100. package/lib/types/_ActivatableSkill.d.ts +1105 -34
  101. package/lib/types/_ActivatableSkill.js +82 -1
  102. package/lib/types/_ActivatableSkillCastingTime.d.ts +66 -74
  103. package/lib/types/_ActivatableSkillCastingTime.js +92 -1
  104. package/lib/types/_ActivatableSkillCheckResultBased.d.ts +25 -33
  105. package/lib/types/_ActivatableSkillCheckResultBased.js +44 -1
  106. package/lib/types/_ActivatableSkillCost.d.ts +209 -255
  107. package/lib/types/_ActivatableSkillCost.js +224 -1
  108. package/lib/types/_ActivatableSkillDuration.d.ts +202 -135
  109. package/lib/types/_ActivatableSkillDuration.js +138 -1
  110. package/lib/types/_ActivatableSkillEffect.d.ts +16 -68
  111. package/lib/types/_ActivatableSkillEffect.js +65 -1
  112. package/lib/types/_ActivatableSkillRange.d.ts +61 -115
  113. package/lib/types/_ActivatableSkillRange.js +106 -1
  114. package/lib/types/_ActivatableSkillTargetCategory.d.ts +13 -39
  115. package/lib/types/_ActivatableSkillTargetCategory.js +29 -1
  116. package/lib/types/_AlternativeNames.d.ts +5 -11
  117. package/lib/types/_AlternativeNames.js +14 -1
  118. package/lib/types/_ArcaneTradition.d.ts +30 -28
  119. package/lib/types/_ArcaneTradition.js +14 -4
  120. package/lib/types/_Blessed.d.ts +8 -22
  121. package/lib/types/_Blessed.js +22 -1
  122. package/lib/types/_CommonnessRatedAdvantageDisadvantage.d.ts +4 -10
  123. package/lib/types/_CommonnessRatedAdvantageDisadvantage.js +12 -1
  124. package/lib/types/_Dice.d.ts +6 -19
  125. package/lib/types/_Dice.js +23 -1
  126. package/lib/types/_DiseasePoison.d.ts +56 -107
  127. package/lib/types/_DiseasePoison.js +107 -2
  128. package/lib/types/_Enhancements.d.ts +165 -59
  129. package/lib/types/_Enhancements.js +66 -1
  130. package/lib/types/_I18n.d.ts +14 -42
  131. package/lib/types/_I18n.js +55 -1
  132. package/lib/types/_Identifier.d.ts +158 -1274
  133. package/lib/types/_Identifier.js +300 -1
  134. package/lib/types/_IdentifierGroup.d.ts +278 -29
  135. package/lib/types/_IdentifierGroup.js +340 -1
  136. package/lib/types/_ImprovementCost.d.ts +7 -4
  137. package/lib/types/_ImprovementCost.js +10 -1
  138. package/lib/types/_Influence.d.ts +78 -49
  139. package/lib/types/_Influence.js +42 -4
  140. package/lib/types/_Prerequisite.d.ts +370 -106
  141. package/lib/types/_Prerequisite.js +136 -1
  142. package/lib/types/_ResponsiveText.d.ts +13 -54
  143. package/lib/types/_ResponsiveText.js +37 -1
  144. package/lib/types/_Sex.d.ts +5 -7
  145. package/lib/types/_Sex.js +8 -4
  146. package/lib/types/_SkillCheck.d.ts +10 -15
  147. package/lib/types/_SkillCheck.js +34 -1
  148. package/lib/types/_Spellwork.d.ts +5 -18
  149. package/lib/types/_Spellwork.js +13 -1
  150. package/lib/types/equipment/EquipmentPackage.d.ts +80 -51
  151. package/lib/types/equipment/EquipmentPackage.js +34 -13
  152. package/lib/types/equipment/item/Ammunition.d.ts +69 -32
  153. package/lib/types/equipment/item/Ammunition.js +29 -13
  154. package/lib/types/equipment/item/Animal.d.ts +71 -19
  155. package/lib/types/equipment/item/Animal.js +15 -13
  156. package/lib/types/equipment/item/AnimalCare.d.ts +86 -49
  157. package/lib/types/equipment/item/AnimalCare.js +51 -13
  158. package/lib/types/equipment/item/Armor.d.ts +120 -186
  159. package/lib/types/equipment/item/Armor.js +156 -13
  160. package/lib/types/equipment/item/BandageOrRemedy.d.ts +176 -37
  161. package/lib/types/equipment/item/BandageOrRemedy.js +2 -14
  162. package/lib/types/equipment/item/Book.d.ts +84 -61
  163. package/lib/types/equipment/item/Book.js +57 -13
  164. package/lib/types/equipment/item/CeremonialItem.d.ts +178 -42
  165. package/lib/types/equipment/item/CeremonialItem.js +36 -13
  166. package/lib/types/equipment/item/Clothes.d.ts +176 -7
  167. package/lib/types/equipment/item/Clothes.js +2 -14
  168. package/lib/types/equipment/item/Container.d.ts +176 -7
  169. package/lib/types/equipment/item/Container.js +2 -14
  170. package/lib/types/equipment/item/Elixir.d.ts +91 -76
  171. package/lib/types/equipment/item/Elixir.js +54 -13
  172. package/lib/types/equipment/item/EquipmentOfBlessedOnes.d.ts +170 -29
  173. package/lib/types/equipment/item/EquipmentOfBlessedOnes.js +28 -13
  174. package/lib/types/equipment/item/GemOrPreciousStone.d.ts +72 -44
  175. package/lib/types/equipment/item/GemOrPreciousStone.js +41 -13
  176. package/lib/types/equipment/item/IlluminationLightSource.d.ts +186 -61
  177. package/lib/types/equipment/item/IlluminationLightSource.js +61 -13
  178. package/lib/types/equipment/item/IlluminationRefillOrSupply.d.ts +176 -0
  179. package/lib/types/equipment/item/IlluminationRefillOrSupply.js +2 -0
  180. package/lib/types/equipment/item/Jewelry.d.ts +73 -61
  181. package/lib/types/equipment/item/Jewelry.js +37 -13
  182. package/lib/types/equipment/item/Liebesspielzeug.d.ts +176 -7
  183. package/lib/types/equipment/item/Liebesspielzeug.js +2 -14
  184. package/lib/types/equipment/item/LuxuryGood.d.ts +176 -37
  185. package/lib/types/equipment/item/LuxuryGood.js +2 -14
  186. package/lib/types/equipment/item/MagicalArtifact.d.ts +71 -40
  187. package/lib/types/equipment/item/MagicalArtifact.js +15 -13
  188. package/lib/types/equipment/item/MusicalInstrument.d.ts +174 -32
  189. package/lib/types/equipment/item/MusicalInstrument.js +27 -13
  190. package/lib/types/equipment/item/OrienteeringAid.d.ts +176 -7
  191. package/lib/types/equipment/item/OrienteeringAid.js +2 -14
  192. package/lib/types/equipment/item/Poison.d.ts +483 -354
  193. package/lib/types/equipment/item/Poison.js +386 -13
  194. package/lib/types/equipment/item/RopeOrChain.d.ts +176 -7
  195. package/lib/types/equipment/item/RopeOrChain.js +2 -14
  196. package/lib/types/equipment/item/Stationery.d.ts +176 -0
  197. package/lib/types/equipment/item/Stationery.js +2 -0
  198. package/lib/types/equipment/item/ThievesTool.d.ts +176 -7
  199. package/lib/types/equipment/item/ThievesTool.js +2 -14
  200. package/lib/types/equipment/item/ToolOfTheTrade.d.ts +89 -61
  201. package/lib/types/equipment/item/ToolOfTheTrade.js +40 -13
  202. package/lib/types/equipment/item/TravelGearOrTool.d.ts +176 -7
  203. package/lib/types/equipment/item/TravelGearOrTool.js +2 -14
  204. package/lib/types/equipment/item/Vehicle.d.ts +71 -19
  205. package/lib/types/equipment/item/Vehicle.js +15 -13
  206. package/lib/types/equipment/item/Weapon.d.ts +223 -166
  207. package/lib/types/equipment/item/Weapon.js +153 -13
  208. package/lib/types/equipment/item/WeaponAccessory.d.ts +176 -7
  209. package/lib/types/equipment/item/WeaponAccessory.js +2 -14
  210. package/lib/types/equipment/item/_Herbary.d.ts +42 -16
  211. package/lib/types/equipment/item/_Herbary.js +36 -1
  212. package/lib/types/equipment/item/_Item.d.ts +317 -160
  213. package/lib/types/equipment/item/_Item.js +144 -1
  214. package/lib/types/equipment/item/_MeleeWeapon.d.ts +37 -105
  215. package/lib/types/equipment/item/_MeleeWeapon.js +92 -1
  216. package/lib/types/equipment/item/_RangedWeapon.d.ts +25 -106
  217. package/lib/types/equipment/item/_RangedWeapon.js +85 -1
  218. package/lib/types/equipment/item/_Weapon.d.ts +13 -57
  219. package/lib/types/equipment/item/_Weapon.js +49 -1
  220. package/lib/types/equipment/item/sub/ArmorType.d.ts +7 -37
  221. package/lib/types/equipment/item/sub/ArmorType.js +18 -13
  222. package/lib/types/equipment/item/sub/Reach.d.ts +6 -28
  223. package/lib/types/equipment/item/sub/Reach.js +14 -13
  224. package/lib/types/index.d.ts +148 -0
  225. package/lib/types/index.js +148 -0
  226. package/lib/types/magicalActions/AnimistPower.d.ts +299 -238
  227. package/lib/types/magicalActions/AnimistPower.js +182 -13
  228. package/lib/types/magicalActions/AnimistPower_Tribe.d.ts +6 -28
  229. package/lib/types/magicalActions/AnimistPower_Tribe.js +14 -13
  230. package/lib/types/magicalActions/Curse.d.ts +215 -162
  231. package/lib/types/magicalActions/Curse.js +126 -13
  232. package/lib/types/magicalActions/DominationRitual.d.ts +200 -145
  233. package/lib/types/magicalActions/DominationRitual.js +126 -13
  234. package/lib/types/magicalActions/ElvenMagicalSong.d.ts +121 -135
  235. package/lib/types/magicalActions/ElvenMagicalSong.js +111 -13
  236. package/lib/types/magicalActions/GeodeRitual.d.ts +205 -180
  237. package/lib/types/magicalActions/GeodeRitual.js +135 -13
  238. package/lib/types/magicalActions/JesterTrick.d.ts +299 -177
  239. package/lib/types/magicalActions/JesterTrick.js +153 -13
  240. package/lib/types/magicalActions/MagicalDance.d.ts +125 -119
  241. package/lib/types/magicalActions/MagicalDance.js +113 -13
  242. package/lib/types/magicalActions/MagicalMelody.d.ts +116 -124
  243. package/lib/types/magicalActions/MagicalMelody.js +111 -13
  244. package/lib/types/magicalActions/MagicalRune.d.ts +300 -294
  245. package/lib/types/magicalActions/MagicalRune.js +278 -13
  246. package/lib/types/magicalActions/ZibiljaRitual.d.ts +396 -102
  247. package/lib/types/magicalActions/ZibiljaRitual.js +81 -13
  248. package/lib/types/magicalActions/_MusicTradition.d.ts +17 -30
  249. package/lib/types/magicalActions/_MusicTradition.js +43 -1
  250. package/lib/types/prerequisites/ConditionalPrerequisites.d.ts +24 -10
  251. package/lib/types/prerequisites/ConditionalPrerequisites.js +9 -1
  252. package/lib/types/prerequisites/DisplayOption.d.ts +13 -32
  253. package/lib/types/prerequisites/DisplayOption.js +27 -1
  254. package/lib/types/prerequisites/PrerequisiteGroups.d.ts +1338 -215
  255. package/lib/types/prerequisites/PrerequisiteGroups.js +160 -1
  256. package/lib/types/prerequisites/single/ActivatablePrerequisite.d.ts +107 -31
  257. package/lib/types/prerequisites/single/ActivatablePrerequisite.js +32 -1
  258. package/lib/types/prerequisites/single/AncestorBloodPrerequisite.d.ts +1 -2
  259. package/lib/types/prerequisites/single/AncestorBloodPrerequisite.js +4 -1
  260. package/lib/types/prerequisites/single/AnimistPowerPrerequisite.d.ts +18 -26
  261. package/lib/types/prerequisites/single/AnimistPowerPrerequisite.js +24 -1
  262. package/lib/types/prerequisites/single/CulturePrerequisite.d.ts +16 -13
  263. package/lib/types/prerequisites/single/CulturePrerequisite.js +16 -1
  264. package/lib/types/prerequisites/single/EnhancementPrerequisite.d.ts +4 -39
  265. package/lib/types/prerequisites/single/EnhancementPrerequisite.js +12 -1
  266. package/lib/types/prerequisites/single/InfluencePrerequisite.d.ts +17 -16
  267. package/lib/types/prerequisites/single/InfluencePrerequisite.js +19 -1
  268. package/lib/types/prerequisites/single/PactPrerequisite.d.ts +18 -23
  269. package/lib/types/prerequisites/single/PactPrerequisite.js +24 -1
  270. package/lib/types/prerequisites/single/PrimaryAttributePrerequisite.d.ts +20 -18
  271. package/lib/types/prerequisites/single/PrimaryAttributePrerequisite.js +25 -1
  272. package/lib/types/prerequisites/single/PublicationPrerequisite.d.ts +16 -12
  273. package/lib/types/prerequisites/single/PublicationPrerequisite.js +15 -1
  274. package/lib/types/prerequisites/single/RacePrerequisite.d.ts +17 -16
  275. package/lib/types/prerequisites/single/RacePrerequisite.js +19 -1
  276. package/lib/types/prerequisites/single/RatedMinimumNumberPrerequisite.d.ts +51 -63
  277. package/lib/types/prerequisites/single/RatedMinimumNumberPrerequisite.js +80 -1
  278. package/lib/types/prerequisites/single/RatedPrerequisite.d.ts +26 -18
  279. package/lib/types/prerequisites/single/RatedPrerequisite.js +19 -1
  280. package/lib/types/prerequisites/single/RatedSumPrerequisite.d.ts +17 -19
  281. package/lib/types/prerequisites/single/RatedSumPrerequisite.js +19 -1
  282. package/lib/types/prerequisites/single/RulePrerequisite.d.ts +19 -9
  283. package/lib/types/prerequisites/single/RulePrerequisite.js +15 -1
  284. package/lib/types/prerequisites/single/SexPrerequisite.d.ts +19 -10
  285. package/lib/types/prerequisites/single/SexPrerequisite.js +15 -1
  286. package/lib/types/prerequisites/single/SexualCharacteristicPrerequisite.d.ts +7 -8
  287. package/lib/types/prerequisites/single/SexualCharacteristicPrerequisite.js +17 -1
  288. package/lib/types/prerequisites/single/SocialStatusPrerequisite.d.ts +16 -13
  289. package/lib/types/prerequisites/single/SocialStatusPrerequisite.js +16 -1
  290. package/lib/types/prerequisites/single/StatePrerequisite.d.ts +16 -10
  291. package/lib/types/prerequisites/single/StatePrerequisite.js +15 -1
  292. package/lib/types/prerequisites/single/TextPrerequisite.d.ts +19 -49
  293. package/lib/types/prerequisites/single/TextPrerequisite.js +53 -1
  294. package/lib/types/prerequisites/single/TraditionPrerequisite.d.ts +37 -33
  295. package/lib/types/prerequisites/single/TraditionPrerequisite.js +42 -1
  296. package/lib/types/rule/CoreRule.d.ts +142 -310
  297. package/lib/types/rule/CoreRule.js +172 -13
  298. package/lib/types/rule/FocusRule.d.ts +54 -53
  299. package/lib/types/rule/FocusRule.js +37 -13
  300. package/lib/types/rule/FocusRule_Subject.d.ts +6 -29
  301. package/lib/types/rule/FocusRule_Subject.js +15 -13
  302. package/lib/types/rule/OptionalRule.d.ts +52 -41
  303. package/lib/types/rule/OptionalRule.js +28 -13
  304. package/lib/types/source/Publication.d.ts +50 -70
  305. package/lib/types/source/Publication.js +57 -13
  306. package/lib/types/source/_Erratum.d.ts +9 -23
  307. package/lib/types/source/_Erratum.js +19 -1
  308. package/lib/types/source/_PublicationRef.d.ts +161 -148
  309. package/lib/types/source/_PublicationRef.js +98 -1
  310. package/lib/types/specialAbility/AdvancedCombatSpecialAbility.d.ts +1034 -52
  311. package/lib/types/specialAbility/AdvancedCombatSpecialAbility.js +36 -13
  312. package/lib/types/specialAbility/AdvancedKarmaSpecialAbility.d.ts +917 -34
  313. package/lib/types/specialAbility/AdvancedKarmaSpecialAbility.js +33 -13
  314. package/lib/types/specialAbility/AdvancedMagicalSpecialAbility.d.ts +917 -34
  315. package/lib/types/specialAbility/AdvancedMagicalSpecialAbility.js +33 -13
  316. package/lib/types/specialAbility/AdvancedSkillSpecialAbility.d.ts +917 -34
  317. package/lib/types/specialAbility/AdvancedSkillSpecialAbility.js +33 -13
  318. package/lib/types/specialAbility/AncestorGlyph.d.ts +916 -38
  319. package/lib/types/specialAbility/AncestorGlyph.js +35 -13
  320. package/lib/types/specialAbility/BlessedTradition.d.ts +948 -147
  321. package/lib/types/specialAbility/BlessedTradition.js +131 -13
  322. package/lib/types/specialAbility/BrawlingSpecialAbility.d.ts +980 -34
  323. package/lib/types/specialAbility/BrawlingSpecialAbility.js +32 -13
  324. package/lib/types/specialAbility/CeremonialItemSpecialAbility.d.ts +918 -40
  325. package/lib/types/specialAbility/CeremonialItemSpecialAbility.js +33 -13
  326. package/lib/types/specialAbility/CombatSpecialAbility.d.ts +1036 -45
  327. package/lib/types/specialAbility/CombatSpecialAbility.js +37 -13
  328. package/lib/types/specialAbility/CombatStyleSpecialAbility.d.ts +1035 -42
  329. package/lib/types/specialAbility/CombatStyleSpecialAbility.js +37 -13
  330. package/lib/types/specialAbility/CommandSpecialAbility.d.ts +980 -38
  331. package/lib/types/specialAbility/CommandSpecialAbility.js +32 -13
  332. package/lib/types/specialAbility/FamiliarSpecialAbility.d.ts +915 -32
  333. package/lib/types/specialAbility/FamiliarSpecialAbility.js +30 -13
  334. package/lib/types/specialAbility/FatePointSexSpecialAbility.d.ts +915 -32
  335. package/lib/types/specialAbility/FatePointSexSpecialAbility.js +30 -13
  336. package/lib/types/specialAbility/FatePointSpecialAbility.d.ts +917 -39
  337. package/lib/types/specialAbility/FatePointSpecialAbility.js +32 -13
  338. package/lib/types/specialAbility/GeneralSpecialAbility.d.ts +918 -44
  339. package/lib/types/specialAbility/GeneralSpecialAbility.js +33 -13
  340. package/lib/types/specialAbility/KarmaSpecialAbility.d.ts +915 -37
  341. package/lib/types/specialAbility/KarmaSpecialAbility.js +30 -13
  342. package/lib/types/specialAbility/LiturgicalStyleSpecialAbility.d.ts +966 -36
  343. package/lib/types/specialAbility/LiturgicalStyleSpecialAbility.js +34 -13
  344. package/lib/types/specialAbility/LycantropicGift.d.ts +915 -32
  345. package/lib/types/specialAbility/LycantropicGift.js +30 -13
  346. package/lib/types/specialAbility/MagicStyleSpecialAbility.d.ts +966 -36
  347. package/lib/types/specialAbility/MagicStyleSpecialAbility.js +34 -13
  348. package/lib/types/specialAbility/MagicalSign.d.ts +86 -39
  349. package/lib/types/specialAbility/MagicalSign.js +31 -13
  350. package/lib/types/specialAbility/MagicalSpecialAbility.d.ts +918 -43
  351. package/lib/types/specialAbility/MagicalSpecialAbility.js +33 -13
  352. package/lib/types/specialAbility/MagicalTradition.d.ts +938 -114
  353. package/lib/types/specialAbility/MagicalTradition.js +97 -13
  354. package/lib/types/specialAbility/PactGift.d.ts +992 -97
  355. package/lib/types/specialAbility/PactGift.js +118 -13
  356. package/lib/types/specialAbility/ProtectiveWardingCircleSpecialAbility.d.ts +917 -46
  357. package/lib/types/specialAbility/ProtectiveWardingCircleSpecialAbility.js +41 -13
  358. package/lib/types/specialAbility/Sermon.d.ts +915 -32
  359. package/lib/types/specialAbility/Sermon.js +30 -13
  360. package/lib/types/specialAbility/SexSpecialAbility.d.ts +917 -34
  361. package/lib/types/specialAbility/SexSpecialAbility.js +32 -13
  362. package/lib/types/specialAbility/SikaryanDrainSpecialAbility.d.ts +915 -37
  363. package/lib/types/specialAbility/SikaryanDrainSpecialAbility.js +30 -13
  364. package/lib/types/specialAbility/SkillStyleSpecialAbility.d.ts +964 -34
  365. package/lib/types/specialAbility/SkillStyleSpecialAbility.js +32 -13
  366. package/lib/types/specialAbility/VampiricGift.d.ts +915 -37
  367. package/lib/types/specialAbility/VampiricGift.js +30 -13
  368. package/lib/types/specialAbility/Vision.d.ts +915 -32
  369. package/lib/types/specialAbility/Vision.js +30 -13
  370. package/lib/types/specialAbility/_Tradition.d.ts +5 -12
  371. package/lib/types/specialAbility/_Tradition.js +14 -1
  372. package/lib/types/specialAbility/sub/Language.d.ts +107 -117
  373. package/lib/types/specialAbility/sub/Language.js +87 -13
  374. package/lib/types/specialAbility/sub/Script.d.ts +61 -60
  375. package/lib/types/specialAbility/sub/Script.js +43 -13
  376. package/lib/types/specialAbility/sub/TradeSecret.d.ts +77 -48
  377. package/lib/types/specialAbility/sub/TradeSecret.js +36 -13
  378. package/lib/types/specialAbility/sub/_LanguageScript.d.ts +5 -11
  379. package/lib/types/specialAbility/sub/_LanguageScript.js +15 -1
  380. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.d.ts +1135 -47
  381. package/lib/types/traditionArtifacts/ArcaneOrbEnchantment.js +36 -13
  382. package/lib/types/traditionArtifacts/AttireEnchantment.d.ts +1135 -47
  383. package/lib/types/traditionArtifacts/AttireEnchantment.js +36 -13
  384. package/lib/types/traditionArtifacts/BowlEnchantment.d.ts +1135 -47
  385. package/lib/types/traditionArtifacts/BowlEnchantment.js +36 -13
  386. package/lib/types/traditionArtifacts/CauldronEnchantment.d.ts +1136 -61
  387. package/lib/types/traditionArtifacts/CauldronEnchantment.js +41 -13
  388. package/lib/types/traditionArtifacts/ChronicleEnchantment.d.ts +1135 -47
  389. package/lib/types/traditionArtifacts/ChronicleEnchantment.js +36 -13
  390. package/lib/types/traditionArtifacts/DaggerRitual.d.ts +1147 -71
  391. package/lib/types/traditionArtifacts/DaggerRitual.js +71 -13
  392. package/lib/types/traditionArtifacts/FoolsHatEnchantment.d.ts +1135 -47
  393. package/lib/types/traditionArtifacts/FoolsHatEnchantment.js +36 -13
  394. package/lib/types/traditionArtifacts/InstrumentEnchantment.d.ts +1135 -47
  395. package/lib/types/traditionArtifacts/InstrumentEnchantment.js +36 -13
  396. package/lib/types/traditionArtifacts/Krallenkettenzauber.d.ts +1135 -47
  397. package/lib/types/traditionArtifacts/Krallenkettenzauber.js +36 -13
  398. package/lib/types/traditionArtifacts/OrbEnchantment.d.ts +1135 -47
  399. package/lib/types/traditionArtifacts/OrbEnchantment.js +36 -13
  400. package/lib/types/traditionArtifacts/RingEnchantment.d.ts +1135 -47
  401. package/lib/types/traditionArtifacts/RingEnchantment.js +36 -13
  402. package/lib/types/traditionArtifacts/SickleRitual.d.ts +1135 -47
  403. package/lib/types/traditionArtifacts/SickleRitual.js +36 -13
  404. package/lib/types/traditionArtifacts/SpellSwordEnchantment.d.ts +1135 -52
  405. package/lib/types/traditionArtifacts/SpellSwordEnchantment.js +36 -13
  406. package/lib/types/traditionArtifacts/StaffEnchantment.d.ts +1139 -57
  407. package/lib/types/traditionArtifacts/StaffEnchantment.js +41 -13
  408. package/lib/types/traditionArtifacts/ToyEnchantment.d.ts +1135 -47
  409. package/lib/types/traditionArtifacts/ToyEnchantment.js +36 -13
  410. package/lib/types/traditionArtifacts/Trinkhornzauber.d.ts +1135 -47
  411. package/lib/types/traditionArtifacts/Trinkhornzauber.js +36 -13
  412. package/lib/types/traditionArtifacts/WandEnchantment.d.ts +1084 -42
  413. package/lib/types/traditionArtifacts/WandEnchantment.js +35 -13
  414. package/lib/types/traditionArtifacts/WeaponEnchantment.d.ts +1135 -47
  415. package/lib/types/traditionArtifacts/WeaponEnchantment.js +36 -13
  416. package/lib/types/traditionArtifacts/sub/AnimalShape.d.ts +8 -52
  417. package/lib/types/traditionArtifacts/sub/AnimalShape.js +23 -13
  418. package/lib/types/traditionArtifacts/sub/AnimalShapePath.d.ts +6 -28
  419. package/lib/types/traditionArtifacts/sub/AnimalShapePath.js +14 -13
  420. package/lib/types/traditionArtifacts/sub/AnimalShapeSize.d.ts +8 -40
  421. package/lib/types/traditionArtifacts/sub/AnimalShapeSize.js +22 -13
  422. package/lib/types/traditionArtifacts/sub/Brew.d.ts +6 -28
  423. package/lib/types/traditionArtifacts/sub/Brew.js +14 -13
  424. package/package.json +19 -16
  425. package/schema/Advantage.schema.json +3 -3
  426. package/schema/AnimalDisease.schema.json +4 -4
  427. package/schema/Aspect.schema.json +1 -1
  428. package/schema/Blessing.schema.json +3 -3
  429. package/schema/Cantrip.schema.json +4 -4
  430. package/schema/Ceremony.schema.json +9 -61
  431. package/schema/CombatTechnique_Close.schema.json +2 -2
  432. package/schema/CombatTechnique_Ranged.schema.json +2 -2
  433. package/schema/Condition.schema.json +4 -16
  434. package/schema/Continent.schema.json +1 -1
  435. package/schema/Culture.schema.json +46 -50
  436. package/schema/Disadvantage.schema.json +3 -3
  437. package/schema/Disease.schema.json +2 -2
  438. package/schema/FamiliarsTrick.schema.json +45 -71
  439. package/schema/Lessons_Curriculum.schema.json +26 -36
  440. package/schema/LiturgicalChant.schema.json +9 -61
  441. package/schema/Locale.schema.json +1 -1
  442. package/schema/MetaCondition.schema.json +5 -17
  443. package/schema/Patron.schema.json +60 -71
  444. package/schema/PatronCategory.schema.json +1 -1
  445. package/schema/PersonalityTrait.schema.json +2 -2
  446. package/schema/Profession.schema.json +68 -62
  447. package/schema/Property.schema.json +1 -1
  448. package/schema/Race.schema.json +17 -17
  449. package/schema/Ritual.schema.json +8 -60
  450. package/schema/SexPractice.schema.json +1 -1
  451. package/schema/Skill.schema.json +7 -7
  452. package/schema/SkillModificationLevel.schema.json +3 -3
  453. package/schema/Spell.schema.json +8 -60
  454. package/schema/UI.schema.json +272 -0
  455. package/schema/_Activatable.schema.json +52 -60
  456. package/schema/_ActivatableSelectOptionCategory.schema.json +31 -35
  457. package/schema/_ActivatableSkill.schema.json +16 -0
  458. package/schema/_ActivatableSkillCastingTime.schema.json +5 -5
  459. package/schema/_ActivatableSkillCost.schema.json +7 -7
  460. package/schema/_ActivatableSkillEffect.schema.json +20 -51
  461. package/schema/_ActivatableSkillRange.schema.json +2 -2
  462. package/schema/_ActivatableSkillTargetCategory.schema.json +8 -8
  463. package/schema/_Blessed.schema.json +1 -1
  464. package/schema/_DiseasePoison.schema.json +31 -23
  465. package/schema/_Enhancements.schema.json +1 -1
  466. package/schema/_I18n.schema.json +1 -1
  467. package/schema/_Identifier.schema.json +31 -1
  468. package/schema/_IdentifierGroup.schema.json +4 -1
  469. package/schema/_Influence.schema.json +2 -2
  470. package/schema/_Prerequisite.schema.json +15 -15
  471. package/schema/_ResponsiveText.schema.json +6 -6
  472. package/schema/_SkillCheck.schema.json +3 -14
  473. package/schema/_Spellwork.schema.json +1 -1
  474. package/schema/equipment/EquipmentPackage.schema.json +1 -1
  475. package/schema/equipment/item/Armor.schema.json +5 -5
  476. package/schema/equipment/item/BandageOrRemedy.schema.json +2 -2
  477. package/schema/equipment/item/Book.schema.json +1 -1
  478. package/schema/equipment/item/CeremonialItem.schema.json +2 -2
  479. package/schema/equipment/item/Elixir.schema.json +5 -25
  480. package/schema/equipment/item/EquipmentOfBlessedOnes.schema.json +1 -1
  481. package/schema/equipment/item/IlluminationLightSource.schema.json +4 -8
  482. package/schema/equipment/item/Jewelry.schema.json +1 -1
  483. package/schema/equipment/item/LuxuryGood.schema.json +2 -2
  484. package/schema/equipment/item/MusicalInstrument.schema.json +1 -1
  485. package/schema/equipment/item/Poison.schema.json +25 -17
  486. package/schema/equipment/item/ToolOfTheTrade.schema.json +1 -1
  487. package/schema/equipment/item/Weapon.schema.json +11 -11
  488. package/schema/equipment/item/_Item.schema.json +4 -4
  489. package/schema/equipment/item/_MeleeWeapon.schema.json +3 -7
  490. package/schema/equipment/item/_RangedWeapon.schema.json +5 -5
  491. package/schema/equipment/item/_Weapon.schema.json +2 -2
  492. package/schema/equipment/item/sub/ArmorType.schema.json +1 -1
  493. package/schema/magicalActions/AnimistPower.schema.json +10 -36
  494. package/schema/magicalActions/Curse.schema.json +5 -31
  495. package/schema/magicalActions/DominationRitual.schema.json +6 -32
  496. package/schema/magicalActions/ElvenMagicalSong.schema.json +4 -17
  497. package/schema/magicalActions/GeodeRitual.schema.json +7 -59
  498. package/schema/magicalActions/JesterTrick.schema.json +7 -59
  499. package/schema/magicalActions/MagicalDance.schema.json +7 -33
  500. package/schema/magicalActions/MagicalMelody.schema.json +7 -33
  501. package/schema/magicalActions/MagicalRune.schema.json +53 -146
  502. package/schema/magicalActions/ZibiljaRitual.schema.json +7 -59
  503. package/schema/magicalActions/_MusicTradition.schema.json +1 -1
  504. package/schema/magicalActions/_SkillReference.schema.json +2 -24
  505. package/schema/prerequisites/ConditionalPrerequisites.schema.json +1 -1
  506. package/schema/prerequisites/DisplayOption.schema.json +1 -1
  507. package/schema/prerequisites/single/ActivatablePrerequisite.schema.json +1 -1
  508. package/schema/prerequisites/single/EnhancementPrerequisite.schema.json +2 -2
  509. package/schema/prerequisites/single/PublicationPrerequisite.schema.json +1 -2
  510. package/schema/prerequisites/single/RacePrerequisite.schema.json +1 -1
  511. package/schema/prerequisites/single/RatedMinimumNumberPrerequisite.schema.json +2 -2
  512. package/schema/prerequisites/single/TextPrerequisite.schema.json +4 -4
  513. package/schema/prerequisites/single/TraditionPrerequisite.schema.json +4 -4
  514. package/schema/rule/CoreRule.schema.json +5 -5
  515. package/schema/rule/FocusRule.schema.json +1 -1
  516. package/schema/rule/OptionalRule.schema.json +1 -1
  517. package/schema/source/Publication.schema.json +2 -2
  518. package/schema/source/_PublicationRef.schema.json +9 -9
  519. package/schema/specialAbility/AdvancedCombatSpecialAbility.schema.json +2 -2
  520. package/schema/specialAbility/BlessedTradition.schema.json +74 -52
  521. package/schema/specialAbility/CeremonialItemSpecialAbility.schema.json +2 -2
  522. package/schema/specialAbility/CombatStyleSpecialAbility.schema.json +155 -504
  523. package/schema/specialAbility/CommandSpecialAbility.schema.json +23 -20
  524. package/schema/specialAbility/FatePointSpecialAbility.schema.json +1 -1
  525. package/schema/specialAbility/GeneralSpecialAbility.schema.json +1 -1
  526. package/schema/specialAbility/KarmaSpecialAbility.schema.json +1 -1
  527. package/schema/specialAbility/LiturgicalStyleSpecialAbility.schema.json +155 -504
  528. package/schema/specialAbility/MagicStyleSpecialAbility.schema.json +155 -504
  529. package/schema/specialAbility/MagicalSign.schema.json +2 -2
  530. package/schema/specialAbility/MagicalSpecialAbility.schema.json +1 -1
  531. package/schema/specialAbility/MagicalTradition.schema.json +8 -8
  532. package/schema/specialAbility/PactGift.schema.json +4 -4
  533. package/schema/specialAbility/SikaryanDrainSpecialAbility.schema.json +1 -1
  534. package/schema/specialAbility/SkillStyleSpecialAbility.schema.json +155 -504
  535. package/schema/specialAbility/VampiricGift.schema.json +1 -1
  536. package/schema/specialAbility/_Tradition.schema.json +1 -1
  537. package/schema/specialAbility/sub/Language.schema.json +4 -4
  538. package/schema/traditionArtifacts/ArcaneOrbEnchantment.schema.json +1 -1
  539. package/schema/traditionArtifacts/AttireEnchantment.schema.json +1 -1
  540. package/schema/traditionArtifacts/BowlEnchantment.schema.json +1 -1
  541. package/schema/traditionArtifacts/CauldronEnchantment.schema.json +2 -2
  542. package/schema/traditionArtifacts/ChronicleEnchantment.schema.json +1 -1
  543. package/schema/traditionArtifacts/DaggerRitual.schema.json +14 -18
  544. package/schema/traditionArtifacts/FoolsHatEnchantment.schema.json +1 -1
  545. package/schema/traditionArtifacts/InstrumentEnchantment.schema.json +1 -1
  546. package/schema/traditionArtifacts/Krallenkettenzauber.schema.json +1 -1
  547. package/schema/traditionArtifacts/OrbEnchantment.schema.json +1 -1
  548. package/schema/traditionArtifacts/RingEnchantment.schema.json +1 -1
  549. package/schema/traditionArtifacts/SickleRitual.schema.json +1 -1
  550. package/schema/traditionArtifacts/SpellSwordEnchantment.schema.json +2 -2
  551. package/schema/traditionArtifacts/StaffEnchantment.schema.json +2 -2
  552. package/schema/traditionArtifacts/ToyEnchantment.schema.json +1 -1
  553. package/schema/traditionArtifacts/Trinkhornzauber.schema.json +1 -1
  554. package/schema/traditionArtifacts/WandEnchantment.schema.json +1 -1
  555. package/schema/traditionArtifacts/WeaponEnchantment.schema.json +1 -1
  556. package/.prettierrc.yml +0 -3
  557. package/lib/cache/activatableSelectOptions.d.ts +0 -80
  558. package/lib/cache/activatableSelectOptions.js +0 -935
  559. package/lib/cache/ancestorBloodAdvantages.d.ts +0 -5
  560. package/lib/cache/ancestorBloodAdvantages.js +0 -18
  561. package/lib/cache/magicalAndBlessedAdvantagesAndDisadvantages.d.ts +0 -20
  562. package/lib/cache/magicalAndBlessedAdvantagesAndDisadvantages.js +0 -164
  563. package/lib/cache/newApplicationsAndUses.d.ts +0 -20
  564. package/lib/cache/newApplicationsAndUses.js +0 -126
  565. package/lib/cacheConfig.d.ts +0 -4
  566. package/lib/cacheConfig.js +0 -1
  567. package/lib/config/build.d.ts +0 -6
  568. package/lib/config/build.js +0 -8
  569. package/lib/config/cache.d.ts +0 -16
  570. package/lib/config/cache.js +0 -10
  571. package/lib/config/types.d.ts +0 -462
  572. package/lib/config/types.js +0 -306
  573. package/lib/errors.d.ts +0 -20
  574. package/lib/errors.js +0 -33
  575. package/lib/helpers/array.d.ts +0 -14
  576. package/lib/helpers/array.js +0 -15
  577. package/lib/helpers/i18n.d.ts +0 -1
  578. package/lib/helpers/i18n.js +0 -1
  579. package/lib/helpers/io.d.ts +0 -29
  580. package/lib/helpers/io.js +0 -51
  581. package/lib/helpers/objectPath.d.ts +0 -13
  582. package/lib/helpers/objectPath.js +0 -3
  583. package/lib/helpers/pair.d.ts +0 -20
  584. package/lib/helpers/pair.js +0 -20
  585. package/lib/helpers/result.d.ts +0 -57
  586. package/lib/helpers/result.js +0 -45
  587. package/lib/rendering/UI.d.ts +0 -14
  588. package/lib/rendering/UI.js +0 -28
  589. package/lib/typeConfig.d.ts +0 -10
  590. package/lib/typeConfig.js +0 -1
  591. package/lib/types/CombatTechnique_Close.d.ts +0 -73
  592. package/lib/types/CombatTechnique_Close.js +0 -14
  593. package/lib/types/CombatTechnique_Ranged.d.ts +0 -66
  594. package/lib/types/CombatTechnique_Ranged.js +0 -14
  595. package/lib/types/Kirchenpraegung.d.ts +0 -10
  596. package/lib/types/Kirchenpraegung.js +0 -14
  597. package/lib/types/Lessons_Curriculum.d.ts +0 -236
  598. package/lib/types/Lessons_Curriculum.js +0 -14
  599. package/lib/types/Lessons_Guideline.d.ts +0 -34
  600. package/lib/types/Lessons_Guideline.js +0 -14
  601. package/lib/types/UI.d.ts +0 -1216
  602. package/lib/types/UI.js +0 -14
  603. package/lib/types/_LocaleMap.d.ts +0 -10
  604. package/lib/types/_LocaleMap.js +0 -1
  605. package/lib/types/_NonEmptyString.d.ts +0 -9
  606. package/lib/types/_NonEmptyString.js +0 -1
  607. package/lib/types/_SimpleReferences.d.ts +0 -134
  608. package/lib/types/_SimpleReferences.js +0 -1
  609. package/lib/types/equipment/item/IlluminationRefillsOrSupplies.d.ts +0 -7
  610. package/lib/types/equipment/item/IlluminationRefillsOrSupplies.js +0 -14
  611. package/lib/types/equipment/item/Stationary.d.ts +0 -7
  612. package/lib/types/equipment/item/Stationary.js +0 -14
  613. package/lib/types/magicalActions/_SkillReference.d.ts +0 -11
  614. package/lib/types/magicalActions/_SkillReference.js +0 -1
  615. package/lib/validation/builders/integrity.d.ts +0 -56
  616. package/lib/validation/builders/integrity.js +0 -44
  617. package/lib/validation/builders/naming.d.ts +0 -15
  618. package/lib/validation/builders/naming.js +0 -17
  619. package/lib/validation/builders/schema.d.ts +0 -31
  620. package/lib/validation/builders/schema.js +0 -32
  621. package/lib/validation/filename.d.ts +0 -9
  622. package/lib/validation/filename.js +0 -10
  623. package/lib/validation/raw.d.ts +0 -8
  624. package/lib/validation/raw.js +0 -54
  625. package/lib/validation/schema.d.ts +0 -6
  626. package/lib/validation/schema.js +0 -32
@@ -1,935 +0,0 @@
1
- import { isNotNullish } from "@optolith/helpers/nullable";
2
- import { mapObject } from "@optolith/helpers/object";
3
- import { assertExhaustive } from "@optolith/helpers/typeSafety";
4
- const PRINCIPLES_ID = 31;
5
- const PROPERTY_KNOWLEDGE_ID = 3;
6
- const ASPECT_KNOWLEDGE_ID = 1;
7
- const matchesSpecificSkillishIdList = (id, config, equalsId) => {
8
- switch (config.operation) {
9
- case "Intersection":
10
- return config.list.some(ref => equalsId(ref.id, id));
11
- case "Difference":
12
- return !config.list.some(ref => equalsId(ref.id, id));
13
- default:
14
- return assertExhaustive(config.operation);
15
- }
16
- };
17
- const getSkillishPrerequisites = (ps, id) => {
18
- if (ps === undefined) {
19
- return undefined;
20
- }
21
- return ps.map(p => {
22
- switch (p.tag) {
23
- case "Self":
24
- return {
25
- level: 1,
26
- prerequisite: {
27
- tag: "Single",
28
- single: {
29
- tag: "Rated",
30
- rated: {
31
- id,
32
- value: p.self.value,
33
- },
34
- },
35
- },
36
- };
37
- case "SelectOption":
38
- return {
39
- level: 1,
40
- prerequisite: {
41
- tag: "Single",
42
- single: {
43
- tag: "Activatable",
44
- activatable: {
45
- id: p.select_option.id,
46
- active: p.select_option.active,
47
- level: p.select_option.level,
48
- options: [id],
49
- },
50
- },
51
- },
52
- };
53
- default:
54
- return assertExhaustive(p);
55
- }
56
- });
57
- };
58
- const equalsSkillishIdGroup = (a, b) => {
59
- switch (a.tag) {
60
- case "Skill":
61
- return b.tag === "Skill" && a.skill === b.skill;
62
- case "Spell":
63
- return b.tag === "Spell" && a.spell === b.spell;
64
- case "Ritual":
65
- return b.tag === "Ritual" && a.ritual === b.ritual;
66
- case "LiturgicalChant":
67
- return b.tag === "LiturgicalChant" && a.liturgical_chant === b.liturgical_chant;
68
- case "Ceremony":
69
- return b.tag === "Ceremony" && a.ceremony === b.ceremony;
70
- case "CloseCombatTechnique":
71
- return (b.tag === "CloseCombatTechnique" && a.close_combat_technique === b.close_combat_technique);
72
- case "RangedCombatTechnique":
73
- return (b.tag === "RangedCombatTechnique" && a.ranged_combat_technique === b.ranged_combat_technique);
74
- default:
75
- return assertExhaustive(a);
76
- }
77
- };
78
- const getApValueForSkillish = (config, id, ic) => {
79
- if (config === undefined) {
80
- return undefined;
81
- }
82
- switch (config.tag) {
83
- case "DerivedFromImprovementCost":
84
- return ((() => {
85
- switch (ic) {
86
- case "A":
87
- return 1;
88
- case "B":
89
- return 2;
90
- case "C":
91
- return 3;
92
- case "D":
93
- return 4;
94
- default:
95
- assertExhaustive(ic);
96
- }
97
- })() *
98
- (config.derived_from_improvement_cost.multiplier ?? 1) +
99
- (config.derived_from_improvement_cost.offset ?? 0));
100
- case "Fixed":
101
- return (config.fixed.map.find(mapping => equalsSkillishIdGroup(mapping.id, id))?.ap_value ??
102
- config.fixed.default);
103
- default:
104
- return assertExhaustive(config);
105
- }
106
- };
107
- const convertSkillApplicationOrUse = (id, applicationOrUse) => ({
108
- id: applicationOrUse.id,
109
- skill: { tag: "Single", single: { id } },
110
- translations: applicationOrUse.translations,
111
- });
112
- const getDerivedSelectOptions = (selectOptionCategory, entryId, database) => {
113
- switch (selectOptionCategory.tag) {
114
- case "Blessings":
115
- return database.blessings.map(([_, blessing]) => ({
116
- id: { tag: "Blessing", blessing: blessing.id },
117
- src: blessing.src,
118
- translations: mapObject(blessing.translations, t10n => ({ name: t10n.name })),
119
- }));
120
- case "Cantrips":
121
- return database.cantrips.map(([_, cantrip]) => ({
122
- id: { tag: "Cantrip", cantrip: cantrip.id },
123
- src: cantrip.src,
124
- translations: mapObject(cantrip.translations, t10n => ({ name: t10n.name })),
125
- }));
126
- case "TradeSecrets":
127
- return database.tradeSecrets.map(([_, tradeSecret]) => ({
128
- id: { tag: "TradeSecret", trade_secret: tradeSecret.id },
129
- prerequisites: tradeSecret.prerequisites,
130
- ap_value: tradeSecret.ap_value,
131
- src: tradeSecret.src,
132
- translations: mapObject(tradeSecret.translations, t10n => ({
133
- name: t10n.name,
134
- errata: t10n.errata,
135
- })),
136
- }));
137
- case "Scripts":
138
- return database.scripts.map(([_, script]) => ({
139
- id: { tag: "Script", script: script.id },
140
- ap_value: script.ap_value,
141
- src: script.src,
142
- translations: mapObject(script.translations, t10n => ({
143
- name: t10n.name,
144
- errata: t10n.errata,
145
- })),
146
- }));
147
- case "AnimalShapes": {
148
- const pathsWithOrderedIds = database.animalShapePaths.reduce((acc, [id, _path]) => ({
149
- ...acc,
150
- [id]: database.animalShapes
151
- .toSorted(([_1, a], [_2, b]) => a.size.id - b.size.id)
152
- .map(([id]) => id),
153
- }), {});
154
- return database.animalShapes.map(([_, animalShape]) => {
155
- const path = database.animalShapePaths.find(([id]) => id === animalShape.path.id)?.[1];
156
- const size = database.animalShapeSizes.find(([id]) => id === animalShape.size.id)?.[1];
157
- const pathIndex = path !== undefined ? pathsWithOrderedIds[path.id]?.indexOf(animalShape.id) ?? -1 : -1;
158
- return {
159
- id: { tag: "AnimalShape", animal_shape: animalShape.id },
160
- prerequisites: pathIndex >= 0
161
- ? pathIndex === 0
162
- ? database.animalShapePaths
163
- .filter(([id]) => id !== animalShape.path.id && pathsWithOrderedIds[id]?.[0] !== undefined)
164
- .map(([id]) => ({
165
- level: 1,
166
- prerequisite: {
167
- tag: "Single",
168
- single: {
169
- tag: "Activatable",
170
- activatable: {
171
- id: entryId,
172
- active: false,
173
- options: [
174
- { tag: "AnimalShape", animal_shape: pathsWithOrderedIds[id][0] },
175
- ],
176
- },
177
- },
178
- },
179
- }))
180
- : [
181
- {
182
- level: 1,
183
- prerequisite: {
184
- tag: "Single",
185
- single: {
186
- tag: "Activatable",
187
- activatable: {
188
- id: entryId,
189
- active: true,
190
- options: [
191
- {
192
- tag: "AnimalShape",
193
- animal_shape: pathsWithOrderedIds[path.id][pathIndex - 1],
194
- },
195
- ],
196
- },
197
- },
198
- },
199
- },
200
- ]
201
- : undefined,
202
- volume: size?.volume,
203
- ap_value: size?.ap_value,
204
- translations: mapObject(animalShape.translations, (t10n, lang) => ({
205
- name: path?.translations[lang] !== undefined
206
- ? `${t10n.name} (${path.translations[lang].name})`
207
- : t10n.name,
208
- })),
209
- };
210
- });
211
- }
212
- case "ArcaneBardTraditions":
213
- return database.arcaneBardTraditions.map(([_, arcaneBardTradition]) => ({
214
- id: { tag: "ArcaneBardTradition", arcane_bard_tradition: arcaneBardTradition.id },
215
- prerequisites: arcaneBardTradition.prerequisites.map(p => ({
216
- level: 1,
217
- prerequisite: p,
218
- })),
219
- translations: mapObject(arcaneBardTradition.translations, t10n => ({
220
- name: t10n.name,
221
- })),
222
- }));
223
- case "ArcaneDancerTraditions":
224
- return database.arcaneDancerTraditions.map(([_, arcaneDancerTradition]) => ({
225
- id: { tag: "ArcaneDancerTradition", arcane_dancer_tradition: arcaneDancerTradition.id },
226
- prerequisites: arcaneDancerTradition.prerequisites.map(p => ({
227
- level: 1,
228
- prerequisite: p,
229
- })),
230
- translations: mapObject(arcaneDancerTradition.translations, t10n => ({
231
- name: t10n.name,
232
- })),
233
- }));
234
- case "SexPractices":
235
- return database.sexPractices.map(([_, sexPractice]) => ({
236
- id: { tag: "SexPractice", sex_practice: sexPractice.id },
237
- src: sexPractice.src,
238
- translations: mapObject(sexPractice.translations, t10n => ({
239
- name: t10n.name,
240
- })),
241
- }));
242
- case "Races":
243
- return database.races.map(([_, race]) => ({
244
- id: { tag: "Race", race: race.id },
245
- src: race.src,
246
- translations: mapObject(race.translations, t10n => ({
247
- name: t10n.name,
248
- })),
249
- }));
250
- case "Cultures":
251
- return database.cultures.map(([_, culture]) => ({
252
- id: { tag: "Culture", culture: culture.id },
253
- src: culture.src,
254
- translations: mapObject(culture.translations, t10n => ({
255
- name: t10n.name,
256
- })),
257
- }));
258
- case "RacesAndCultures":
259
- return [
260
- ...database.races.map(([_, race]) => ({
261
- id: { tag: "Race", race: race.id },
262
- src: race.src,
263
- translations: mapObject(race.translations, t10n => ({
264
- name: t10n.name,
265
- })),
266
- })),
267
- ...database.cultures.map(([_, culture]) => ({
268
- id: { tag: "Culture", culture: culture.id },
269
- src: culture.src,
270
- translations: mapObject(culture.translations, t10n => ({
271
- name: t10n.name,
272
- })),
273
- })),
274
- ];
275
- case "BlessedTraditions": {
276
- const getPrerequisites = (blessedTradition) => {
277
- if (selectOptionCategory.blessed_traditions.require_principles &&
278
- blessedTradition.associated_principles_id !== undefined) {
279
- return [
280
- {
281
- level: 1,
282
- prerequisite: {
283
- tag: "Single",
284
- single: {
285
- tag: "Activatable",
286
- activatable: {
287
- id: { tag: "Disadvantage", disadvantage: PRINCIPLES_ID },
288
- active: true,
289
- options: [
290
- { tag: "General", general: blessedTradition.associated_principles_id },
291
- ],
292
- },
293
- },
294
- },
295
- },
296
- ];
297
- }
298
- };
299
- return database.blessedTraditions.map(([_, blessedTradition]) => ({
300
- id: { tag: "BlessedTradition", blessed_tradition: blessedTradition.id },
301
- prerequisites: getPrerequisites(blessedTradition),
302
- src: blessedTradition.src,
303
- translations: mapObject(blessedTradition.translations, t10n => ({
304
- name: t10n.name,
305
- })),
306
- }));
307
- }
308
- case "Elements": {
309
- const mapToResolvedSelectOption = ([_, element]) => ({
310
- id: { tag: "Element", element: element.id },
311
- translations: mapObject(element.translations, t10n => ({
312
- name: t10n.name,
313
- })),
314
- });
315
- if (selectOptionCategory.elements.specific) {
316
- return database.elements
317
- .filter(([id]) => selectOptionCategory.elements.specific.some(ref => ref.id.element === id))
318
- .map(mapToResolvedSelectOption);
319
- }
320
- return database.elements.map(mapToResolvedSelectOption);
321
- }
322
- case "Properties": {
323
- const getPrerequisites = (property) => {
324
- if (selectOptionCategory.properties.require_knowledge !== undefined ||
325
- selectOptionCategory.properties.require_minimum_spellworks_on !== undefined) {
326
- const knowledgePrerequisite = selectOptionCategory.properties.require_knowledge !== undefined
327
- ? {
328
- level: 1,
329
- prerequisite: {
330
- tag: "Single",
331
- single: {
332
- tag: "Activatable",
333
- activatable: {
334
- id: {
335
- tag: "MagicalSpecialAbility",
336
- magical_special_ability: PROPERTY_KNOWLEDGE_ID,
337
- },
338
- active: true,
339
- options: [{ tag: "Property", property: property.id }],
340
- },
341
- },
342
- },
343
- }
344
- : undefined;
345
- const minimumSpellworksPrerequisite = selectOptionCategory.properties.require_minimum_spellworks_on !== undefined
346
- ? {
347
- level: 1,
348
- prerequisite: {
349
- tag: "Single",
350
- single: {
351
- tag: "RatedMinimumNumber",
352
- rated_minimum_number: {
353
- number: selectOptionCategory.properties.require_minimum_spellworks_on.number,
354
- value: selectOptionCategory.properties.require_minimum_spellworks_on.rating,
355
- targets: {
356
- tag: "Spellworks",
357
- spellworks: {
358
- id: { tag: "Property", property: property.id },
359
- },
360
- },
361
- },
362
- },
363
- },
364
- }
365
- : undefined;
366
- return [knowledgePrerequisite, minimumSpellworksPrerequisite].filter(isNotNullish);
367
- }
368
- };
369
- return database.properties.map(([_, property]) => ({
370
- id: { tag: "Property", property: property.id },
371
- prerequisites: getPrerequisites(property),
372
- translations: mapObject(property.translations, t10n => ({
373
- name: t10n.name,
374
- })),
375
- }));
376
- }
377
- case "Aspects": {
378
- const getPrerequisites = (aspect) => {
379
- if (selectOptionCategory.aspects.require_knowledge !== undefined ||
380
- selectOptionCategory.aspects.require_minimum_liturgies_on !== undefined) {
381
- const knowledgePrerequisite = selectOptionCategory.aspects.require_knowledge !== undefined
382
- ? {
383
- level: 1,
384
- prerequisite: {
385
- tag: "Single",
386
- single: {
387
- tag: "Activatable",
388
- activatable: {
389
- id: {
390
- tag: "KarmaSpecialAbility",
391
- karma_special_ability: ASPECT_KNOWLEDGE_ID,
392
- },
393
- active: true,
394
- options: [{ tag: "Property", property: aspect.id }],
395
- },
396
- },
397
- },
398
- }
399
- : undefined;
400
- const minimumSpellworksPrerequisite = selectOptionCategory.aspects.require_minimum_liturgies_on !== undefined
401
- ? {
402
- level: 1,
403
- prerequisite: {
404
- tag: "Single",
405
- single: {
406
- tag: "RatedMinimumNumber",
407
- rated_minimum_number: {
408
- number: selectOptionCategory.aspects.require_minimum_liturgies_on.number,
409
- value: selectOptionCategory.aspects.require_minimum_liturgies_on.rating,
410
- targets: {
411
- tag: "Liturgies",
412
- liturgies: {
413
- id: { tag: "Aspect", aspect: aspect.id },
414
- },
415
- },
416
- },
417
- },
418
- },
419
- }
420
- : undefined;
421
- return [knowledgePrerequisite, minimumSpellworksPrerequisite].filter(isNotNullish);
422
- }
423
- };
424
- if (selectOptionCategory.aspects.use_master_of_suffix_as_name === true) {
425
- return database.aspects
426
- .map(([_, aspect]) => ({
427
- id: { tag: "Aspect", aspect: aspect.id },
428
- prerequisites: getPrerequisites(aspect),
429
- translations: mapObject(aspect.translations, t10n => t10n.master_of_aspect_suffix === undefined
430
- ? undefined
431
- : {
432
- name: t10n.master_of_aspect_suffix,
433
- }),
434
- }))
435
- .filter(value => Object.keys(value.translations).length > 0);
436
- }
437
- return database.aspects.map(([_, aspect]) => ({
438
- id: { tag: "Aspect", aspect: aspect.id },
439
- prerequisites: getPrerequisites(aspect),
440
- translations: mapObject(aspect.translations, t10n => ({
441
- name: t10n.name,
442
- })),
443
- }));
444
- }
445
- case "Diseases":
446
- return database.diseases.map(([_, disease]) => ({
447
- id: { tag: "Disease", disease: disease.id },
448
- ap_value: selectOptionCategory.diseases.use_half_level_as_ap_value === true
449
- ? Math.round(disease.level / 3)
450
- : disease.level,
451
- src: disease.src,
452
- translations: mapObject(disease.translations, t10n => ({
453
- name: t10n.name,
454
- })),
455
- }));
456
- case "Poisons": {
457
- const getLevel = (poison) => {
458
- switch (poison.source_type.tag) {
459
- case "AnimalVenom":
460
- return poison.source_type.animal_venom.level;
461
- case "AlchemicalPoison":
462
- return 6;
463
- case "MineralPoison":
464
- return poison.source_type.mineral_poison.level;
465
- case "PlantPoison":
466
- return poison.source_type.plant_poison.level;
467
- case "DemonicPoison":
468
- switch (poison.source_type.demonic_poison.level.tag) {
469
- case "Constant":
470
- return poison.source_type.demonic_poison.level.constant.value;
471
- case "QualityLevel":
472
- return 6;
473
- default:
474
- return assertExhaustive(poison.source_type.demonic_poison.level);
475
- }
476
- default:
477
- return assertExhaustive(poison.source_type);
478
- }
479
- };
480
- return database.poisons.map(([_, poison]) => ({
481
- id: { tag: "Poison", poison: poison.id },
482
- ap_value: selectOptionCategory.poisons.use_half_level_as_ap_value === true
483
- ? Math.round(getLevel(poison) / 3)
484
- : getLevel(poison),
485
- src: poison.src,
486
- translations: mapObject(poison.translations, t10n => ({
487
- name: t10n.name,
488
- })),
489
- }));
490
- }
491
- case "Languages": {
492
- const getPrerequisites = (language) => {
493
- if (selectOptionCategory.languages.prerequisites !== undefined) {
494
- return selectOptionCategory.languages.prerequisites.map(config => ({
495
- level: 1,
496
- prerequisite: {
497
- tag: "Single",
498
- single: {
499
- tag: "Activatable",
500
- activatable: {
501
- id: config.select_option.id,
502
- active: config.select_option.active,
503
- level: config.select_option.level,
504
- options: [{ tag: "Language", language: language.id }],
505
- },
506
- },
507
- },
508
- }));
509
- }
510
- };
511
- return database.languages.map(([_, language]) => ({
512
- id: { tag: "Language", language: language.id },
513
- prerequisites: getPrerequisites(language),
514
- src: language.src,
515
- translations: mapObject(language.translations, t10n => ({
516
- name: t10n.name,
517
- })),
518
- }));
519
- }
520
- case "Skills": {
521
- const apValueGen = selectOptionCategory.skills.ap_value;
522
- return selectOptionCategory.skills.categories.flatMap(category => {
523
- switch (category.tag) {
524
- case "Skills":
525
- return database.skills
526
- .filter(([_, skill]) => {
527
- const matchesGroupRequirement = category.skills.groups === undefined ||
528
- category.skills.groups.some(ref => ref.id.skill_group === skill.group.id.skill_group);
529
- const matchesIdRequirement = category.skills.specific === undefined ||
530
- matchesSpecificSkillishIdList({ tag: "Skill", skill: skill.id }, category.skills.specific, equalsSkillishIdGroup);
531
- return matchesGroupRequirement && matchesIdRequirement;
532
- })
533
- .map(([_, skill]) => {
534
- const id = { tag: "Skill", skill: skill.id };
535
- return {
536
- id,
537
- skill_uses: category.skills.skill_uses?.map(use => convertSkillApplicationOrUse(id, use)),
538
- skill_applications: category.skills.skill_applications?.map(use => convertSkillApplicationOrUse(id, use)),
539
- prerequisites: getSkillishPrerequisites(category.skills.prerequisites, id),
540
- ap_value: getApValueForSkillish(category.skills.ap_value ?? apValueGen, id, skill.improvement_cost),
541
- src: skill.src,
542
- translations: mapObject(skill.translations, t10n => ({
543
- name: t10n.name,
544
- })),
545
- };
546
- });
547
- case "Spells":
548
- return database.spells
549
- .filter(([_, spell]) => category.spells.specific === undefined ||
550
- matchesSpecificSkillishIdList({ tag: "Spell", spell: spell.id }, category.spells.specific, equalsSkillishIdGroup))
551
- .map(([_, spell]) => {
552
- const id = { tag: "Spell", spell: spell.id };
553
- return {
554
- id,
555
- prerequisites: getSkillishPrerequisites(category.spells.prerequisites, id),
556
- ap_value: getApValueForSkillish(apValueGen, id, spell.improvement_cost),
557
- src: spell.src,
558
- translations: mapObject(spell.translations, t10n => ({
559
- name: t10n.name,
560
- })),
561
- };
562
- });
563
- case "Rituals":
564
- return database.rituals
565
- .filter(([_, ritual]) => category.rituals.specific === undefined ||
566
- matchesSpecificSkillishIdList({ tag: "Ritual", ritual: ritual.id }, category.rituals.specific, equalsSkillishIdGroup))
567
- .map(([_, ritual]) => {
568
- const id = { tag: "Ritual", ritual: ritual.id };
569
- return {
570
- id,
571
- prerequisites: getSkillishPrerequisites(category.rituals.prerequisites, id),
572
- ap_value: getApValueForSkillish(apValueGen, id, ritual.improvement_cost),
573
- src: ritual.src,
574
- translations: mapObject(ritual.translations, t10n => ({
575
- name: t10n.name,
576
- })),
577
- };
578
- });
579
- case "LiturgicalChants":
580
- return database.liturgicalChants
581
- .filter(([_, liturgicalChant]) => category.liturgical_chants.specific === undefined ||
582
- matchesSpecificSkillishIdList({ tag: "LiturgicalChant", liturgical_chant: liturgicalChant.id }, category.liturgical_chants.specific, equalsSkillishIdGroup))
583
- .map(([_, liturgicalChant]) => {
584
- const id = {
585
- tag: "LiturgicalChant",
586
- liturgical_chant: liturgicalChant.id,
587
- };
588
- return {
589
- id,
590
- prerequisites: getSkillishPrerequisites(category.liturgical_chants.prerequisites, id),
591
- ap_value: getApValueForSkillish(apValueGen, id, liturgicalChant.improvement_cost),
592
- src: liturgicalChant.src,
593
- translations: mapObject(liturgicalChant.translations, t10n => ({
594
- name: t10n.name,
595
- })),
596
- };
597
- });
598
- case "Ceremonies":
599
- return database.ceremonies
600
- .filter(([_, ceremony]) => category.ceremonies.specific === undefined ||
601
- matchesSpecificSkillishIdList({ tag: "Ceremony", ceremony: ceremony.id }, category.ceremonies.specific, equalsSkillishIdGroup))
602
- .map(([_, ceremony]) => {
603
- const id = { tag: "Ceremony", ceremony: ceremony.id };
604
- return {
605
- id,
606
- prerequisites: getSkillishPrerequisites(category.ceremonies.prerequisites, id),
607
- ap_value: getApValueForSkillish(apValueGen, id, ceremony.improvement_cost),
608
- src: ceremony.src,
609
- translations: mapObject(ceremony.translations, t10n => ({
610
- name: t10n.name,
611
- })),
612
- };
613
- });
614
- default:
615
- return assertExhaustive(category);
616
- }
617
- });
618
- }
619
- case "CombatTechniques": {
620
- const apValueGen = selectOptionCategory.combat_techniques.ap_value;
621
- return selectOptionCategory.combat_techniques.categories.flatMap(category => {
622
- switch (category.tag) {
623
- case "CloseCombatTechniques":
624
- return database.closeCombatTechniques
625
- .filter(([_, closeCombatTechnique]) => category.close_combat_techniques.specific === undefined ||
626
- matchesSpecificSkillishIdList({
627
- tag: "CloseCombatTechnique",
628
- close_combat_technique: closeCombatTechnique.id,
629
- }, category.close_combat_techniques.specific, equalsSkillishIdGroup))
630
- .map(([_, closeCombatTechnique]) => {
631
- const id = {
632
- tag: "CloseCombatTechnique",
633
- close_combat_technique: closeCombatTechnique.id,
634
- };
635
- return {
636
- id,
637
- prerequisites: getSkillishPrerequisites(category.close_combat_techniques.prerequisites, id),
638
- ap_value: getApValueForSkillish(apValueGen, id, closeCombatTechnique.improvement_cost),
639
- src: closeCombatTechnique.src,
640
- translations: mapObject(closeCombatTechnique.translations, t10n => ({
641
- name: t10n.name,
642
- })),
643
- };
644
- });
645
- case "RangedCombatTechniques":
646
- return database.rangedCombatTechniques
647
- .filter(([_, rangedCombatTechnique]) => category.ranged_combat_techniques.specific === undefined ||
648
- matchesSpecificSkillishIdList({
649
- tag: "RangedCombatTechnique",
650
- ranged_combat_technique: rangedCombatTechnique.id,
651
- }, category.ranged_combat_techniques.specific, equalsSkillishIdGroup))
652
- .map(([_, rangedCombatTechnique]) => {
653
- const id = {
654
- tag: "RangedCombatTechnique",
655
- ranged_combat_technique: rangedCombatTechnique.id,
656
- };
657
- return {
658
- id,
659
- prerequisites: getSkillishPrerequisites(category.ranged_combat_techniques.prerequisites, id),
660
- ap_value: getApValueForSkillish(apValueGen, id, rangedCombatTechnique.improvement_cost),
661
- src: rangedCombatTechnique.src,
662
- translations: mapObject(rangedCombatTechnique.translations, t10n => ({
663
- name: t10n.name,
664
- })),
665
- };
666
- });
667
- default:
668
- return assertExhaustive(category);
669
- }
670
- });
671
- }
672
- case "TargetCategories": {
673
- const mapToResolvedSelectOption = (targetCategory, specificTargetCategory) => ({
674
- id: { tag: "TargetCategory", target_category: targetCategory.id },
675
- volume: specificTargetCategory?.volume,
676
- translations: mapObject(targetCategory.translations, t10n => ({
677
- name: t10n.name,
678
- })),
679
- });
680
- if (selectOptionCategory.target_categories.list) {
681
- return database.targetCategories
682
- .filter(([id]) => selectOptionCategory.target_categories.list.some(ref => ref.id.target_category === id))
683
- .map(([id, targetCategory]) => mapToResolvedSelectOption(targetCategory, selectOptionCategory.target_categories.list.find(ref => ref.id.target_category === id)));
684
- }
685
- return database.targetCategories.map(p => mapToResolvedSelectOption(p[1]));
686
- }
687
- default:
688
- return assertExhaustive(selectOptionCategory);
689
- }
690
- };
691
- const joinLocaleMaps = (a, b, join) => {
692
- const combinedLocaleMap = {};
693
- for (const key of new Set([...Object.keys(a), ...Object.keys(b)])) {
694
- const newValue = join(a[key], b[key]);
695
- if (newValue != null) {
696
- combinedLocaleMap[key] = newValue;
697
- }
698
- }
699
- return combinedLocaleMap;
700
- };
701
- const getExplicitSelectOptions = (explicitSelectOptions, database) => explicitSelectOptions
702
- .map((explicitSelectOption) => {
703
- switch (explicitSelectOption.tag) {
704
- case "General":
705
- return {
706
- ...explicitSelectOption.general,
707
- id: { tag: "General", general: explicitSelectOption.general.id },
708
- };
709
- case "Skill": {
710
- const skill = database.skills.find(p => p[0] === explicitSelectOption.skill.id.skill)?.[1];
711
- if (skill === undefined) {
712
- return undefined;
713
- }
714
- const id = { tag: "Skill", skill: explicitSelectOption.skill.id.skill };
715
- return {
716
- ...explicitSelectOption.skill,
717
- id,
718
- skill_applications: explicitSelectOption.skill.skill_applications?.map(use => convertSkillApplicationOrUse(id, use)),
719
- skill_uses: explicitSelectOption.skill.skill_uses?.map(use => convertSkillApplicationOrUse(id, use)),
720
- translations: joinLocaleMaps(explicitSelectOption.skill.translations ?? {}, skill.translations, (explicit, base) => base === undefined ? undefined : { ...explicit, name: base.name }),
721
- };
722
- }
723
- case "CombatTechnique":
724
- switch (explicitSelectOption.combat_technique.id.tag) {
725
- case "CloseCombatTechnique": {
726
- const id = explicitSelectOption.combat_technique.id.close_combat_technique;
727
- const closeCombatTechnique = database.closeCombatTechniques.find(p => p[0] === id)?.[1];
728
- if (closeCombatTechnique === undefined) {
729
- return undefined;
730
- }
731
- return {
732
- ...explicitSelectOption.combat_technique,
733
- id: { tag: "CloseCombatTechnique", close_combat_technique: id },
734
- translations: joinLocaleMaps(explicitSelectOption.combat_technique.translations ?? {}, closeCombatTechnique.translations, (explicit, base) => base === undefined ? undefined : { ...explicit, name: base.name }),
735
- };
736
- }
737
- case "RangedCombatTechnique": {
738
- const id = explicitSelectOption.combat_technique.id.ranged_combat_technique;
739
- const rangedCombatTechnique = database.rangedCombatTechniques.find(p => p[0] === id)?.[1];
740
- if (rangedCombatTechnique === undefined) {
741
- return undefined;
742
- }
743
- return {
744
- ...explicitSelectOption.combat_technique,
745
- id: { tag: "RangedCombatTechnique", ranged_combat_technique: id },
746
- translations: joinLocaleMaps(explicitSelectOption.combat_technique.translations ?? {}, rangedCombatTechnique.translations, (explicit, base) => base === undefined ? undefined : { ...explicit, name: base.name }),
747
- };
748
- }
749
- default:
750
- return assertExhaustive(explicitSelectOption.combat_technique.id);
751
- }
752
- default:
753
- return assertExhaustive(explicitSelectOption);
754
- }
755
- })
756
- .filter(isNotNullish);
757
- const getSelectOptions = (selectOptions, id, database) => [
758
- ...(selectOptions.derived === undefined
759
- ? []
760
- : getDerivedSelectOptions(selectOptions.derived, id, database)),
761
- ...(selectOptions.explicit === undefined
762
- ? []
763
- : getExplicitSelectOptions(selectOptions.explicit, database)),
764
- ];
765
- const getSelectOptionsForResults = (database, idTag, results) => results.reduce((acc, [id, data]) => {
766
- const options = getSelectOptions(data.select_options ?? {}, (() => {
767
- switch (idTag) {
768
- case "Advantage":
769
- return { tag: "Advantage", advantage: id };
770
- case "Disadvantage":
771
- return { tag: "Disadvantage", disadvantage: id };
772
- case "GeneralSpecialAbility":
773
- return { tag: "GeneralSpecialAbility", general_special_ability: id };
774
- case "FatePointSpecialAbility":
775
- return { tag: "FatePointSpecialAbility", fate_point_special_ability: id };
776
- case "CombatSpecialAbility":
777
- return { tag: "CombatSpecialAbility", combat_special_ability: id };
778
- case "MagicalSpecialAbility":
779
- return { tag: "MagicalSpecialAbility", magical_special_ability: id };
780
- case "StaffEnchantment":
781
- return { tag: "StaffEnchantment", staff_enchantment: id };
782
- case "FamiliarSpecialAbility":
783
- return { tag: "FamiliarSpecialAbility", familiar_special_ability: id };
784
- case "KarmaSpecialAbility":
785
- return { tag: "KarmaSpecialAbility", karma_special_ability: id };
786
- case "ProtectiveWardingCircleSpecialAbility":
787
- return {
788
- tag: "ProtectiveWardingCircleSpecialAbility",
789
- protective_warding_circle_special_ability: id,
790
- };
791
- case "CombatStyleSpecialAbility":
792
- return { tag: "CombatStyleSpecialAbility", combat_style_special_ability: id };
793
- case "AdvancedCombatSpecialAbility":
794
- return { tag: "AdvancedCombatSpecialAbility", advanced_combat_special_ability: id };
795
- case "CommandSpecialAbility":
796
- return { tag: "CommandSpecialAbility", command_special_ability: id };
797
- case "MagicStyleSpecialAbility":
798
- return { tag: "MagicStyleSpecialAbility", magic_style_special_ability: id };
799
- case "AdvancedMagicalSpecialAbility":
800
- return { tag: "AdvancedMagicalSpecialAbility", advanced_magical_special_ability: id };
801
- case "SpellSwordEnchantment":
802
- return { tag: "SpellSwordEnchantment", spell_sword_enchantment: id };
803
- case "DaggerRitual":
804
- return { tag: "DaggerRitual", dagger_ritual: id };
805
- case "InstrumentEnchantment":
806
- return { tag: "InstrumentEnchantment", instrument_enchantment: id };
807
- case "AttireEnchantment":
808
- return { tag: "AttireEnchantment", attire_enchantment: id };
809
- case "OrbEnchantment":
810
- return { tag: "OrbEnchantment", orb_enchantment: id };
811
- case "WandEnchantment":
812
- return { tag: "WandEnchantment", wand_enchantment: id };
813
- case "BrawlingSpecialAbility":
814
- return { tag: "BrawlingSpecialAbility", brawling_special_ability: id };
815
- case "AncestorGlyph":
816
- return { tag: "AncestorGlyph", ancestor_glyph: id };
817
- case "CeremonialItemSpecialAbility":
818
- return { tag: "CeremonialItemSpecialAbility", ceremonial_item_special_ability: id };
819
- case "Sermon":
820
- return { tag: "Sermon", sermon: id };
821
- case "LiturgicalStyleSpecialAbility":
822
- return { tag: "LiturgicalStyleSpecialAbility", liturgical_style_special_ability: id };
823
- case "AdvancedKarmaSpecialAbility":
824
- return { tag: "AdvancedKarmaSpecialAbility", advanced_karma_special_ability: id };
825
- case "Vision":
826
- return { tag: "Vision", vision: id };
827
- case "MagicalTradition":
828
- return { tag: "MagicalTradition", magical_tradition: id };
829
- case "BlessedTradition":
830
- return { tag: "BlessedTradition", blessed_tradition: id };
831
- case "PactGift":
832
- return { tag: "PactGift", pact_gift: id };
833
- case "SikaryanDrainSpecialAbility":
834
- return { tag: "SikaryanDrainSpecialAbility", sikaryan_drain_special_ability: id };
835
- case "VampiricGift":
836
- return { tag: "VampiricGift", vampiric_gift: id };
837
- case "LycantropicGift":
838
- return { tag: "LycantropicGift", lycantropic_gift: id };
839
- case "SkillStyleSpecialAbility":
840
- return { tag: "SkillStyleSpecialAbility", skill_style_special_ability: id };
841
- case "AdvancedSkillSpecialAbility":
842
- return { tag: "AdvancedSkillSpecialAbility", advanced_skill_special_ability: id };
843
- case "ArcaneOrbEnchantment":
844
- return { tag: "ArcaneOrbEnchantment", arcane_orb_enchantment: id };
845
- case "CauldronEnchantment":
846
- return { tag: "CauldronEnchantment", cauldron_enchantment: id };
847
- case "FoolsHatEnchantment":
848
- return { tag: "FoolsHatEnchantment", fools_hat_enchantment: id };
849
- case "ToyEnchantment":
850
- return { tag: "ToyEnchantment", toy_enchantment: id };
851
- case "BowlEnchantment":
852
- return { tag: "BowlEnchantment", bowl_enchantment: id };
853
- case "FatePointSexSpecialAbility":
854
- return { tag: "FatePointSexSpecialAbility", fate_point_sex_special_ability: id };
855
- case "SexSpecialAbility":
856
- return { tag: "SexSpecialAbility", sex_special_ability: id };
857
- case "WeaponEnchantment":
858
- return { tag: "WeaponEnchantment", weapon_enchantment: id };
859
- case "SickleRitual":
860
- return { tag: "SickleRitual", sickle_ritual: id };
861
- case "RingEnchantment":
862
- return { tag: "RingEnchantment", ring_enchantment: id };
863
- case "ChronicleEnchantment":
864
- return { tag: "ChronicleEnchantment", chronicle_enchantment: id };
865
- case "Krallenkettenzauber":
866
- return { tag: "Krallenkettenzauber", krallenkettenzauber: id };
867
- case "Trinkhornzauber":
868
- return { tag: "Trinkhornzauber", trinkhornzauber: id };
869
- case "MagicalSign":
870
- return { tag: "MagicalSign", magical_sign: id };
871
- default:
872
- return assertExhaustive(idTag);
873
- }
874
- })(), database);
875
- if (options.length > 0) {
876
- acc[id] = options;
877
- }
878
- return acc;
879
- }, {});
880
- // prettier-ignore
881
- export const config = {
882
- builder(database) {
883
- return {
884
- advancedCombatSpecialAbilities: getSelectOptionsForResults(database, "AdvancedCombatSpecialAbility", database.advancedCombatSpecialAbilities),
885
- advancedKarmaSpecialAbilities: getSelectOptionsForResults(database, "AdvancedKarmaSpecialAbility", database.advancedKarmaSpecialAbilities),
886
- advancedMagicalSpecialAbilities: getSelectOptionsForResults(database, "AdvancedMagicalSpecialAbility", database.advancedMagicalSpecialAbilities),
887
- advancedSkillSpecialAbilities: getSelectOptionsForResults(database, "AdvancedSkillSpecialAbility", database.advancedSkillSpecialAbilities),
888
- advantages: getSelectOptionsForResults(database, "Advantage", database.advantages),
889
- ancestorGlyphs: getSelectOptionsForResults(database, "AncestorGlyph", database.ancestorGlyphs),
890
- arcaneOrbEnchantments: getSelectOptionsForResults(database, "ArcaneOrbEnchantment", database.arcaneOrbEnchantments),
891
- attireEnchantments: getSelectOptionsForResults(database, "AttireEnchantment", database.attireEnchantments),
892
- blessedTraditions: getSelectOptionsForResults(database, "BlessedTradition", database.blessedTraditions),
893
- bowlEnchantments: getSelectOptionsForResults(database, "BowlEnchantment", database.bowlEnchantments),
894
- brawlingSpecialAbilities: getSelectOptionsForResults(database, "BrawlingSpecialAbility", database.brawlingSpecialAbilities),
895
- cauldronEnchantments: getSelectOptionsForResults(database, "CauldronEnchantment", database.cauldronEnchantments),
896
- ceremonialItemSpecialAbilities: getSelectOptionsForResults(database, "CeremonialItemSpecialAbility", database.ceremonialItemSpecialAbilities),
897
- chronicleEnchantments: getSelectOptionsForResults(database, "ChronicleEnchantment", database.chronicleEnchantments),
898
- combatSpecialAbilities: getSelectOptionsForResults(database, "CombatSpecialAbility", database.combatSpecialAbilities),
899
- combatStyleSpecialAbilities: getSelectOptionsForResults(database, "CombatStyleSpecialAbility", database.combatStyleSpecialAbilities),
900
- commandSpecialAbilities: getSelectOptionsForResults(database, "CommandSpecialAbility", database.commandSpecialAbilities),
901
- daggerRituals: getSelectOptionsForResults(database, "DaggerRitual", database.daggerRituals),
902
- disadvantages: getSelectOptionsForResults(database, "Disadvantage", database.disadvantages),
903
- familiarSpecialAbilities: getSelectOptionsForResults(database, "FamiliarSpecialAbility", database.familiarSpecialAbilities),
904
- fatePointSexSpecialAbilities: getSelectOptionsForResults(database, "FatePointSexSpecialAbility", database.fatePointSexSpecialAbilities),
905
- fatePointSpecialAbilities: getSelectOptionsForResults(database, "FatePointSpecialAbility", database.fatePointSpecialAbilities),
906
- foolsHatEnchantments: getSelectOptionsForResults(database, "FoolsHatEnchantment", database.foolsHatEnchantments),
907
- generalSpecialAbilities: getSelectOptionsForResults(database, "GeneralSpecialAbility", database.generalSpecialAbilities),
908
- instrumentEnchantments: getSelectOptionsForResults(database, "InstrumentEnchantment", database.instrumentEnchantments),
909
- karmaSpecialAbilities: getSelectOptionsForResults(database, "KarmaSpecialAbility", database.karmaSpecialAbilities),
910
- krallenkettenzauber: getSelectOptionsForResults(database, "Krallenkettenzauber", database.krallenkettenzauber),
911
- liturgicalStyleSpecialAbilities: getSelectOptionsForResults(database, "LiturgicalStyleSpecialAbility", database.liturgicalStyleSpecialAbilities),
912
- lycantropicGifts: getSelectOptionsForResults(database, "LycantropicGift", database.lycantropicGifts),
913
- magicalSpecialAbilities: getSelectOptionsForResults(database, "MagicalSpecialAbility", database.magicalSpecialAbilities),
914
- magicalTraditions: getSelectOptionsForResults(database, "MagicalTradition", database.magicalTraditions),
915
- magicStyleSpecialAbilities: getSelectOptionsForResults(database, "MagicStyleSpecialAbility", database.magicStyleSpecialAbilities),
916
- orbEnchantments: getSelectOptionsForResults(database, "OrbEnchantment", database.orbEnchantments),
917
- pactGifts: getSelectOptionsForResults(database, "PactGift", database.pactGifts),
918
- protectiveWardingCircleSpecialAbilities: getSelectOptionsForResults(database, "ProtectiveWardingCircleSpecialAbility", database.protectiveWardingCircleSpecialAbilities),
919
- ringEnchantments: getSelectOptionsForResults(database, "RingEnchantment", database.ringEnchantments),
920
- sermons: getSelectOptionsForResults(database, "Sermon", database.sermons),
921
- sexSpecialAbilities: getSelectOptionsForResults(database, "SexSpecialAbility", database.sexSpecialAbilities),
922
- sickleRituals: getSelectOptionsForResults(database, "SickleRitual", database.sickleRituals),
923
- sikaryanDrainSpecialAbilities: getSelectOptionsForResults(database, "SikaryanDrainSpecialAbility", database.sikaryanDrainSpecialAbilities),
924
- staffEnchantments: getSelectOptionsForResults(database, "StaffEnchantment", database.staffEnchantments),
925
- skillStyleSpecialAbilities: getSelectOptionsForResults(database, "SkillStyleSpecialAbility", database.skillStyleSpecialAbilities),
926
- spellSwordEnchantments: getSelectOptionsForResults(database, "SpellSwordEnchantment", database.spellSwordEnchantments),
927
- toyEnchantments: getSelectOptionsForResults(database, "ToyEnchantment", database.toyEnchantments),
928
- trinkhornzauber: getSelectOptionsForResults(database, "Trinkhornzauber", database.trinkhornzauber),
929
- vampiricGifts: getSelectOptionsForResults(database, "VampiricGift", database.vampiricGifts),
930
- visions: getSelectOptionsForResults(database, "Vision", database.visions),
931
- wandEnchantments: getSelectOptionsForResults(database, "WandEnchantment", database.wandEnchantments),
932
- weaponEnchantments: getSelectOptionsForResults(database, "WeaponEnchantment", database.weaponEnchantments),
933
- };
934
- },
935
- };