@archivist-gg/dnd5e 0.3.19 → 0.3.26

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 (441) hide show
  1. package/LICENSE +48 -21
  2. package/README.md +26 -48
  3. package/dist/armor/armor.codec.d.ts +0 -7
  4. package/dist/armor/armor.codec.js +1 -9
  5. package/dist/armor/armor.parser.js +1 -8
  6. package/dist/armor/armor.schema.js +1 -7
  7. package/dist/armor/armor.types.d.ts +0 -3
  8. package/dist/background/background.codec.d.ts +0 -6
  9. package/dist/background/background.codec.js +1 -12
  10. package/dist/background/background.parser.js +1 -11
  11. package/dist/background/background.schema.js +1 -12
  12. package/dist/background/background.types.d.ts +0 -5
  13. package/dist/chunk-2EOGK6R6.js +1 -0
  14. package/dist/chunk-2HRRH3WL.js +1 -0
  15. package/dist/chunk-2NUDWOFG.js +1 -0
  16. package/dist/chunk-3LWOVRLA.js +1 -0
  17. package/dist/chunk-3QQOATV3.js +1 -0
  18. package/dist/chunk-4E2GIWJE.js +1 -0
  19. package/dist/chunk-4GN3GYMP.js +1 -0
  20. package/dist/chunk-4IAMSRHD.js +1 -0
  21. package/dist/chunk-4JEF3CET.js +1 -0
  22. package/dist/chunk-4KVVAENP.js +1 -0
  23. package/dist/chunk-4SYAKWY4.js +1 -0
  24. package/dist/chunk-56JK6VCL.js +1 -0
  25. package/dist/chunk-5XDCM6YK.js +1 -0
  26. package/dist/chunk-63YJPWTM.js +1 -0
  27. package/dist/chunk-6R46KYGU.js +1 -0
  28. package/dist/chunk-6W253VHH.js +1 -0
  29. package/dist/chunk-72PRMZRD.js +1 -0
  30. package/dist/chunk-757KM22B.js +1 -0
  31. package/dist/chunk-7EL3GWWJ.js +1 -0
  32. package/dist/chunk-7FPQJDFD.js +1 -0
  33. package/dist/chunk-AINRPPLH.js +1 -0
  34. package/dist/chunk-BC52J4LA.js +1 -0
  35. package/dist/chunk-BCXGB4HP.js +1 -0
  36. package/dist/chunk-BREHZNTL.js +1 -0
  37. package/dist/chunk-BZ6BGGZS.js +1 -0
  38. package/dist/chunk-CAPYNIGK.js +1 -0
  39. package/dist/chunk-CCAVZANF.js +1 -0
  40. package/dist/chunk-CCFIINBA.js +1 -0
  41. package/dist/chunk-CEHL7PPC.js +1 -0
  42. package/dist/chunk-CMIEZQL4.js +1 -0
  43. package/dist/chunk-CNMHADNV.js +1 -0
  44. package/dist/chunk-CSTAQQGX.js +1 -0
  45. package/dist/chunk-DTB7YBMZ.js +1 -0
  46. package/dist/chunk-DVUXUIPV.js +1 -0
  47. package/dist/chunk-DZITM5AG.js +1 -0
  48. package/dist/chunk-E3MS4M3N.js +1 -0
  49. package/dist/chunk-E7KFJLDR.js +1 -0
  50. package/dist/chunk-EAARMPCW.js +1 -0
  51. package/dist/chunk-EPA24PVZ.js +1 -0
  52. package/dist/chunk-ETDMOGFO.js +1 -0
  53. package/dist/chunk-EVT7MGAC.js +1 -0
  54. package/dist/chunk-FOLHTMSC.js +1 -0
  55. package/dist/chunk-GCYUCIDN.js +1 -0
  56. package/dist/chunk-GD7WRCNH.js +1 -0
  57. package/dist/chunk-GGQDQSIF.js +1 -0
  58. package/dist/chunk-GIQLIBC7.js +1 -0
  59. package/dist/chunk-HX7WBOKR.js +1 -0
  60. package/dist/chunk-I26FHSI6.js +1 -0
  61. package/dist/chunk-IHPLT2ZT.js +1 -0
  62. package/dist/chunk-J3RP5C7L.js +1 -0
  63. package/dist/chunk-J5GL6FLP.js +1 -0
  64. package/dist/chunk-JXDX2DKF.js +1 -0
  65. package/dist/chunk-KEXSF3CH.js +1 -0
  66. package/dist/chunk-KM75CC6Q.js +1 -0
  67. package/dist/chunk-L2DXF7YS.js +1 -0
  68. package/dist/chunk-LHH5XSEA.js +1 -0
  69. package/dist/chunk-LJNT3PJP.js +1 -0
  70. package/dist/chunk-LR6UMA5V.js +1 -0
  71. package/dist/chunk-M6RPOLKS.js +1 -0
  72. package/dist/chunk-MGGKZGLG.js +1 -0
  73. package/dist/chunk-NEMX7QGG.js +1 -0
  74. package/dist/chunk-NIWLD33X.js +1 -0
  75. package/dist/chunk-NU2Z7MTS.js +1 -0
  76. package/dist/chunk-NYPH7RQN.js +1 -0
  77. package/dist/chunk-NYTR6NJS.js +1 -0
  78. package/dist/chunk-O2QZ73GA.js +1 -0
  79. package/dist/chunk-O776WL7O.js +1 -0
  80. package/dist/chunk-ONCXJMJM.js +1 -0
  81. package/dist/chunk-OTRH62HY.js +1 -0
  82. package/dist/chunk-PFQPP77Q.js +1 -0
  83. package/dist/chunk-PKIMOVQG.js +1 -0
  84. package/dist/chunk-PZ3ZZ5H5.js +1 -0
  85. package/dist/chunk-PZ4L2EEG.js +1 -0
  86. package/dist/chunk-QMEKQTUT.js +1 -0
  87. package/dist/chunk-QVWT67WA.js +1 -0
  88. package/dist/chunk-RE5Z5RNK.js +1 -0
  89. package/dist/chunk-RHIEOYDX.js +1 -0
  90. package/dist/chunk-RQZCGXUZ.js +1 -0
  91. package/dist/chunk-S5UCI27C.js +1 -0
  92. package/dist/chunk-SEOASDO4.js +1 -0
  93. package/dist/chunk-SFK57JAA.js +1 -0
  94. package/dist/chunk-SU4MEZ5P.js +1 -0
  95. package/dist/chunk-T55DELVL.js +1 -0
  96. package/dist/chunk-TKIEPC6F.js +1 -0
  97. package/dist/chunk-UBUKCRZ3.js +1 -0
  98. package/dist/chunk-VA3ZWV7C.js +1 -0
  99. package/dist/chunk-VIP3FH2O.js +1 -0
  100. package/dist/chunk-VTQ4RWEG.js +1 -0
  101. package/dist/chunk-VVJXZZ4Z.js +1 -0
  102. package/dist/chunk-WAUNLUFQ.js +1 -0
  103. package/dist/chunk-X22SISGM.js +1 -0
  104. package/dist/chunk-XKJXT2PN.js +1 -0
  105. package/dist/chunk-XPF53K54.js +1 -0
  106. package/dist/chunk-YGH7S5ZF.js +1 -0
  107. package/dist/chunk-ZE46ADXS.js +1 -0
  108. package/dist/chunk-ZI3FEUX3.js +1 -0
  109. package/dist/chunk-ZS5BMNXC.js +1 -0
  110. package/dist/chunk-ZVL5FXXO.js +1 -0
  111. package/dist/class/class.codec.d.ts +0 -7
  112. package/dist/class/class.codec.js +1 -18
  113. package/dist/class/class.parser.js +1 -17
  114. package/dist/class/class.schema.d.ts +4 -3
  115. package/dist/class/class.schema.js +1 -15
  116. package/dist/class/class.slug.d.ts +0 -11
  117. package/dist/class/class.slug.js +1 -8
  118. package/dist/class/class.standard-array.d.ts +0 -7
  119. package/dist/class/class.standard-array.js +1 -20
  120. package/dist/class/class.types.d.ts +0 -20
  121. package/dist/condition/condition.codec.d.ts +0 -6
  122. package/dist/condition/condition.parser.d.ts +0 -10
  123. package/dist/condition/condition.parser.js +1 -7
  124. package/dist/condition/condition.schema.d.ts +0 -16
  125. package/dist/condition/condition.types.d.ts +0 -3
  126. package/dist/data-srd/index.generated.js +1 -146
  127. package/dist/dnd/amount-text.d.ts +3 -30
  128. package/dist/dnd/amount-text.js +1 -15
  129. package/dist/dnd/constants.d.ts +0 -18
  130. package/dist/dnd/constants.js +1 -42
  131. package/dist/dnd/formula-tags.d.ts +0 -2
  132. package/dist/dnd/formula-tags.js +1 -119
  133. package/dist/dnd/math.d.ts +0 -26
  134. package/dist/dnd/math.js +1 -45
  135. package/dist/dnd/prose-tags.d.ts +1 -15
  136. package/dist/dnd/prose-tags.js +1 -18
  137. package/dist/dnd/resource-die.d.ts +0 -4
  138. package/dist/dnd/resource-die.js +1 -17
  139. package/dist/dnd/resource-formula.d.ts +0 -43
  140. package/dist/dnd/resource-formula.js +1 -14
  141. package/dist/dnd/resource-words.d.ts +0 -2
  142. package/dist/dnd/resource-words.js +1 -30
  143. package/dist/dnd/srd-tag-converter.d.ts +0 -21
  144. package/dist/dnd/srd-tag-converter.js +1 -12
  145. package/dist/dnd/tag-grammar.js +1 -12
  146. package/dist/dnd/warn-once.js +1 -8
  147. package/dist/encounter/encounter.ai-schema.js +1 -8
  148. package/dist/entities/base-item-resolver.d.ts +0 -26
  149. package/dist/entities/base-item-resolver.js +1 -11
  150. package/dist/entities/registry-revision.d.ts +0 -15
  151. package/dist/entities/registry-revision.js +1 -10
  152. package/dist/entities/slug.d.ts +1 -31
  153. package/dist/entities/slug.js +1 -12
  154. package/dist/entities/wikilink-display.d.ts +0 -2
  155. package/dist/entities/wikilink-display.js +1 -10
  156. package/dist/feat/feat.category-codes.d.ts +1 -26
  157. package/dist/feat/feat.category-codes.js +1 -14
  158. package/dist/feat/feat.codec.d.ts +0 -6
  159. package/dist/feat/feat.codec.js +1 -12
  160. package/dist/feat/feat.parser.js +1 -11
  161. package/dist/feat/feat.schema.d.ts +46 -4
  162. package/dist/feat/feat.schema.js +1 -10
  163. package/dist/feat/feat.types.d.ts +0 -6
  164. package/dist/index.js +45 -141495
  165. package/dist/inline-tag-parser.js +1 -6
  166. package/dist/item/item.actions-map.d.ts +4 -63
  167. package/dist/item/item.actions-map.js +1 -10
  168. package/dist/item/item.ai-schema.js +1 -6
  169. package/dist/item/item.attunement.d.ts +0 -14
  170. package/dist/item/item.attunement.js +1 -6
  171. package/dist/item/item.bonuses.js +1 -10
  172. package/dist/item/item.codec.js +1 -9
  173. package/dist/item/item.conditions.d.ts +0 -7
  174. package/dist/item/item.conditions.js +1 -11
  175. package/dist/item/item.conditions.types.d.ts +0 -2
  176. package/dist/item/item.cost.js +1 -29
  177. package/dist/item/item.enrichment.js +1 -9
  178. package/dist/item/item.icon.d.ts +0 -8
  179. package/dist/item/item.icon.js +1 -211
  180. package/dist/item/item.parser.js +1 -8
  181. package/dist/item/item.schema.d.ts +5 -0
  182. package/dist/item/item.schema.js +1 -11
  183. package/dist/item/item.types.d.ts +5 -28
  184. package/dist/monster/monster.ai-schema.js +1 -6
  185. package/dist/monster/monster.codec.d.ts +0 -10
  186. package/dist/monster/monster.enrichment.js +1 -19
  187. package/dist/monster/monster.format.d.ts +0 -69
  188. package/dist/monster/monster.format.js +1 -78
  189. package/dist/monster/monster.parser.d.ts +0 -4
  190. package/dist/monster/monster.parser.js +1 -15
  191. package/dist/monster/monster.resolve.d.ts +0 -4
  192. package/dist/monster/monster.schema.d.ts +0 -9
  193. package/dist/monster/monster.schema.js +1 -34
  194. package/dist/monster/monster.types.d.ts +0 -3
  195. package/dist/monster/monster.types.js +1 -1
  196. package/dist/optional-feature/optional-feature.codec.d.ts +0 -11
  197. package/dist/optional-feature/optional-feature.codec.js +1 -13
  198. package/dist/optional-feature/optional-feature.parser.js +1 -12
  199. package/dist/optional-feature/optional-feature.schema.d.ts +44 -3
  200. package/dist/optional-feature/optional-feature.schema.js +1 -15
  201. package/dist/pack.d.ts +0 -9
  202. package/dist/pc/conditions.constants.js +1 -6
  203. package/dist/pc/decision-recognizer.js +1 -8
  204. package/dist/pc/pc.additional-spells.d.ts +0 -24
  205. package/dist/pc/pc.additional-spells.js +1 -26
  206. package/dist/pc/pc.amount-bindings.d.ts +3 -28
  207. package/dist/pc/pc.amount-bindings.js +1 -28
  208. package/dist/pc/pc.asi-flatten.d.ts +0 -59
  209. package/dist/pc/pc.asi-flatten.js +1 -16
  210. package/dist/pc/pc.conditions.d.ts +1 -0
  211. package/dist/pc/pc.conditions.js +1 -6
  212. package/dist/pc/pc.containment.d.ts +0 -5
  213. package/dist/pc/pc.containment.js +1 -24
  214. package/dist/pc/pc.decision-engine.d.ts +6 -145
  215. package/dist/pc/pc.decision-engine.js +1 -55
  216. package/dist/pc/pc.defense-normalize.d.ts +0 -10
  217. package/dist/pc/pc.defense-normalize.js +1 -6
  218. package/dist/pc/pc.entry-overrides.d.ts +19 -58
  219. package/dist/pc/pc.entry-overrides.js +1 -41
  220. package/dist/pc/pc.equipment.d.ts +2 -22
  221. package/dist/pc/pc.equipment.js +1 -34
  222. package/dist/pc/pc.feature-effects.d.ts +27 -281
  223. package/dist/pc/pc.feature-effects.js +1 -39
  224. package/dist/pc/pc.formula-context.js +1 -11
  225. package/dist/pc/pc.infusions.d.ts +0 -65
  226. package/dist/pc/pc.infusions.js +1 -65
  227. package/dist/pc/pc.item-effects.d.ts +19 -0
  228. package/dist/pc/pc.item-effects.js +1 -0
  229. package/dist/pc/pc.member-choices.d.ts +3 -66
  230. package/dist/pc/pc.member-choices.js +1 -39
  231. package/dist/pc/pc.parser.js +1 -58
  232. package/dist/pc/pc.pools.d.ts +7 -10
  233. package/dist/pc/pc.pools.js +1 -27
  234. package/dist/pc/pc.proficiencies.d.ts +0 -40
  235. package/dist/pc/pc.proficiencies.js +1 -156
  236. package/dist/pc/pc.proficiency-grants.d.ts +3 -27
  237. package/dist/pc/pc.proficiency-normalize.d.ts +0 -35
  238. package/dist/pc/pc.proficiency-normalize.js +1 -18
  239. package/dist/pc/pc.proficiency-query.d.ts +0 -13
  240. package/dist/pc/pc.proficiency-query.js +1 -27
  241. package/dist/pc/pc.recalc.d.ts +8 -131
  242. package/dist/pc/pc.recalc.js +1 -1042
  243. package/dist/pc/pc.resolver.d.ts +9 -107
  244. package/dist/pc/pc.resolver.js +1 -60
  245. package/dist/pc/pc.resource-seed.d.ts +0 -8
  246. package/dist/pc/pc.resource-seed.js +1 -42
  247. package/dist/pc/pc.resources.d.ts +1 -59
  248. package/dist/pc/pc.resources.js +1 -23
  249. package/dist/pc/pc.rest.d.ts +1 -20
  250. package/dist/pc/pc.rest.js +1 -231
  251. package/dist/pc/pc.schema.d.ts +20 -2
  252. package/dist/pc/pc.schema.js +1 -9
  253. package/dist/pc/pc.slotting.d.ts +0 -29
  254. package/dist/pc/pc.slotting.js +1 -28
  255. package/dist/pc/pc.speeds.d.ts +36 -0
  256. package/dist/pc/pc.spell-scope.d.ts +0 -16
  257. package/dist/pc/pc.spellcasting.d.ts +0 -70
  258. package/dist/pc/pc.spellcasting.js +1 -28
  259. package/dist/pc/pc.table-column.d.ts +3 -22
  260. package/dist/pc/pc.table-column.js +1 -18
  261. package/dist/pc/pc.tool-picks.d.ts +0 -27
  262. package/dist/pc/pc.tool-picks.js +1 -18
  263. package/dist/pc/pc.types.d.ts +59 -374
  264. package/dist/pc/pc.weapon-grant.d.ts +0 -6
  265. package/dist/pc/pool-layout.d.ts +0 -39
  266. package/dist/pc/pool-layout.js +1 -18
  267. package/dist/pc/resource-equivalents.d.ts +2 -40
  268. package/dist/pc/roll-scope.js +1 -8
  269. package/dist/pc/roll-tag-labels.d.ts +0 -32
  270. package/dist/pc/roll-tag-labels.js +1 -17
  271. package/dist/pc/spell-source.d.ts +0 -11
  272. package/dist/pc/spell-source.js +1 -8
  273. package/dist/race/race.codec.d.ts +0 -6
  274. package/dist/race/race.codec.js +1 -15
  275. package/dist/race/race.parser.js +1 -14
  276. package/dist/race/race.schema.d.ts +0 -8
  277. package/dist/race/race.schema.js +1 -14
  278. package/dist/race/race.structural.d.ts +0 -6
  279. package/dist/race/race.structural.js +1 -6
  280. package/dist/race/race.types.d.ts +0 -8
  281. package/dist/schemas/attack-schema.d.ts +5 -0
  282. package/dist/schemas/caster-type-schema.d.ts +1 -6
  283. package/dist/schemas/caster-type-schema.js +1 -6
  284. package/dist/schemas/choice-schema.js +1 -7
  285. package/dist/schemas/duration-schema.d.ts +0 -2
  286. package/dist/schemas/duration-schema.js +1 -6
  287. package/dist/schemas/entity-extras-schema.d.ts +0 -30
  288. package/dist/schemas/entity-extras-schema.js +1 -10
  289. package/dist/schemas/equipment-grant-schema.d.ts +0 -2
  290. package/dist/schemas/equipment-grant-schema.js +1 -12
  291. package/dist/schemas/feature-alias.d.ts +0 -27
  292. package/dist/schemas/feature-effect-schema.d.ts +44 -3
  293. package/dist/schemas/feature-effect-schema.js +1 -6
  294. package/dist/schemas/feature-schema.d.ts +0 -6
  295. package/dist/schemas/feature-schema.js +1 -12
  296. package/dist/schemas/resource-schema.d.ts +1 -34
  297. package/dist/schemas/resource-schema.js +1 -12
  298. package/dist/schemas/selection-pool-schema.js +1 -10
  299. package/dist/spell/casting-time.d.ts +0 -15
  300. package/dist/spell/casting-time.js +1 -6
  301. package/dist/spell/spell.access.d.ts +0 -6
  302. package/dist/spell/spell.access.js +1 -45
  303. package/dist/spell/spell.ai-schema.js +1 -6
  304. package/dist/spell/spell.codec.js +1 -9
  305. package/dist/spell/spell.enrichment.js +1 -9
  306. package/dist/spell/spell.filter.d.ts +0 -5
  307. package/dist/spell/spell.filter.js +1 -75
  308. package/dist/spell/spell.parser.d.ts +0 -31
  309. package/dist/spell/spell.parser.js +1 -16
  310. package/dist/spell/spell.scaling.d.ts +0 -46
  311. package/dist/spell/spell.scaling.js +1 -79
  312. package/dist/spell/spell.schema.js +1 -7
  313. package/dist/spell/spell.types.d.ts +0 -7
  314. package/dist/srd/retired-items.d.ts +0 -4
  315. package/dist/srd/retired-items.js +1 -11
  316. package/dist/srd-store.d.ts +0 -33
  317. package/dist/subclass/subclass.codec.d.ts +0 -8
  318. package/dist/subclass/subclass.codec.js +1 -17
  319. package/dist/subclass/subclass.parser.js +1 -16
  320. package/dist/subclass/subclass.schema.d.ts +2 -1
  321. package/dist/subclass/subclass.schema.js +1 -14
  322. package/dist/subclass/subclass.types.d.ts +0 -3
  323. package/dist/types/attack.d.ts +2 -0
  324. package/dist/types/casting-option.d.ts +0 -4
  325. package/dist/types/choice.d.ts +1 -72
  326. package/dist/types/choice.js +1 -24
  327. package/dist/types/edition.d.ts +0 -3
  328. package/dist/types/equipment-grant.d.ts +1 -27
  329. package/dist/types/equipment-grant.js +1 -12
  330. package/dist/types/feature-effect.d.ts +11 -23
  331. package/dist/types/feature.d.ts +0 -22
  332. package/dist/types/optional-feature.types.d.ts +1 -31
  333. package/dist/types/resource.d.ts +1 -21
  334. package/dist/types/selection-pool.d.ts +0 -24
  335. package/dist/weapon/weapon-mastery.d.ts +0 -1
  336. package/dist/weapon/weapon.classify.d.ts +0 -11
  337. package/dist/weapon/weapon.classify.js +1 -7
  338. package/dist/weapon/weapon.codec.d.ts +0 -9
  339. package/dist/weapon/weapon.codec.js +1 -9
  340. package/dist/weapon/weapon.parser.js +1 -8
  341. package/dist/weapon/weapon.schema.js +1 -7
  342. package/dist/weapon/weapon.types.d.ts +0 -3
  343. package/package.json +3 -3
  344. package/src/data-srd/ATTRIBUTION.md +1 -1
  345. package/dist/chunk-2FRUSVZS.js +0 -489
  346. package/dist/chunk-2LULMQTF.js +0 -14
  347. package/dist/chunk-3LWMFYKS.js +0 -57
  348. package/dist/chunk-3SFGWFVQ.js +0 -19
  349. package/dist/chunk-3SIUAFDQ.js +0 -18
  350. package/dist/chunk-3TM34RSJ.js +0 -23
  351. package/dist/chunk-4J6DS3EJ.js +0 -30
  352. package/dist/chunk-4U55VNC7.js +0 -22
  353. package/dist/chunk-5GKJAUMX.js +0 -59
  354. package/dist/chunk-5JXFJ5AU.js +0 -26
  355. package/dist/chunk-64VNLMSG.js +0 -375
  356. package/dist/chunk-656QCX4U.js +0 -22
  357. package/dist/chunk-6GNXYAYP.js +0 -25
  358. package/dist/chunk-6PXTNCBP.js +0 -133
  359. package/dist/chunk-6X2NV665.js +0 -33
  360. package/dist/chunk-7Q2VPKCD.js +0 -181
  361. package/dist/chunk-7XJHI5H5.js +0 -709
  362. package/dist/chunk-A54HHCWW.js +0 -67
  363. package/dist/chunk-B2QHP6UF.js +0 -159
  364. package/dist/chunk-B3DP42OM.js +0 -55
  365. package/dist/chunk-BJGOSM76.js +0 -18
  366. package/dist/chunk-BJWSOQUC.js +0 -133
  367. package/dist/chunk-CJYCVNW2.js +0 -7
  368. package/dist/chunk-CM5CWO4K.js +0 -735
  369. package/dist/chunk-DEEHHLAP.js +0 -271
  370. package/dist/chunk-DPUJDOKV.js +0 -365
  371. package/dist/chunk-EJD47JHL.js +0 -1838
  372. package/dist/chunk-EJP263OP.js +0 -186
  373. package/dist/chunk-EVMUJYUD.js +0 -195
  374. package/dist/chunk-EYX4JMAU.js +0 -101
  375. package/dist/chunk-FC4IGH5Y.js +0 -18
  376. package/dist/chunk-FJYBLXV7.js +0 -89
  377. package/dist/chunk-FMUD3LDV.js +0 -19
  378. package/dist/chunk-FMYWORTP.js +0 -93
  379. package/dist/chunk-FVXLP7P3.js +0 -18
  380. package/dist/chunk-G6MHJDVT.js +0 -41
  381. package/dist/chunk-GVWEFECG.js +0 -18
  382. package/dist/chunk-HHBD4SQ6.js +0 -24
  383. package/dist/chunk-HS6FIOLP.js +0 -52
  384. package/dist/chunk-HY2SRSVM.js +0 -23
  385. package/dist/chunk-IHE6KVC3.js +0 -13
  386. package/dist/chunk-IN4M4X7P.js +0 -34
  387. package/dist/chunk-IUAAXXNO.js +0 -58
  388. package/dist/chunk-JXWNXIIZ.js +0 -219
  389. package/dist/chunk-K5NJBTE2.js +0 -18
  390. package/dist/chunk-KR6JF3BF.js +0 -14
  391. package/dist/chunk-KSTV7J2U.js +0 -112
  392. package/dist/chunk-KU3YLF6D.js +0 -106
  393. package/dist/chunk-LBEXLN6I.js +0 -91
  394. package/dist/chunk-LHZXYFBU.js +0 -94
  395. package/dist/chunk-LICYHPI3.js +0 -237
  396. package/dist/chunk-LNT64X7C.js +0 -81
  397. package/dist/chunk-LSLSG67V.js +0 -31
  398. package/dist/chunk-LVQLWRCU.js +0 -15
  399. package/dist/chunk-MYY2C5MB.js +0 -233
  400. package/dist/chunk-NKZMQV2C.js +0 -19
  401. package/dist/chunk-NTU2DXNG.js +0 -355
  402. package/dist/chunk-NXUY5XQN.js +0 -1062
  403. package/dist/chunk-NZO7M5GV.js +0 -18
  404. package/dist/chunk-OOL4KMG2.js +0 -71
  405. package/dist/chunk-OOSRUJBI.js +0 -19
  406. package/dist/chunk-PDJSUH24.js +0 -110
  407. package/dist/chunk-PTXBIDG7.js +0 -63
  408. package/dist/chunk-PVCEA4HZ.js +0 -6
  409. package/dist/chunk-QA3YCOML.js +0 -101
  410. package/dist/chunk-QFWQKS3M.js +0 -110
  411. package/dist/chunk-QS5L5YTJ.js +0 -24
  412. package/dist/chunk-QYZV2MQA.js +0 -97
  413. package/dist/chunk-RD2MID3M.js +0 -292
  414. package/dist/chunk-S3YUXDSC.js +0 -278
  415. package/dist/chunk-S7REMWW4.js +0 -21
  416. package/dist/chunk-TOM66P2P.js +0 -38
  417. package/dist/chunk-TRBGC4ZG.js +0 -112
  418. package/dist/chunk-UA5KS2PL.js +0 -26
  419. package/dist/chunk-UJCK5IW4.js +0 -187
  420. package/dist/chunk-UNYR5GLI.js +0 -23
  421. package/dist/chunk-UZXG6QSY.js +0 -58
  422. package/dist/chunk-VN5DLURA.js +0 -158
  423. package/dist/chunk-VP5TIXDK.js +0 -178
  424. package/dist/chunk-VPYBK2MG.js +0 -18
  425. package/dist/chunk-VTTA2ALZ.js +0 -16
  426. package/dist/chunk-W6GC6OKK.js +0 -16
  427. package/dist/chunk-WELIKLZF.js +0 -256
  428. package/dist/chunk-WOHX7YTH.js +0 -165
  429. package/dist/chunk-WSVMLNTO.js +0 -31
  430. package/dist/chunk-WYGD2UGN.js +0 -14
  431. package/dist/chunk-XCFC7LGF.js +0 -122
  432. package/dist/chunk-XJ2F2WO6.js +0 -8
  433. package/dist/chunk-XTEFPUSN.js +0 -23
  434. package/dist/chunk-YBLDE5CG.js +0 -42
  435. package/dist/chunk-YDGMBMYI.js +0 -25
  436. package/dist/chunk-YHYTW5QA.js +0 -20
  437. package/dist/chunk-ZCTUYGNV.js +0 -26
  438. package/dist/chunk-ZDAEGJH4.js +0 -102
  439. package/dist/chunk-ZJXSXVFP.js +0 -58
  440. package/dist/chunk-ZOWKWMD2.js +0 -18
  441. package/dist/chunk-ZUQW5VBZ.js +0 -89
@@ -1,112 +0,0 @@
1
- import {
2
- spellSource
3
- } from "./chunk-KR6JF3BF.js";
4
- import {
5
- resourceLevelFor
6
- } from "./chunk-KSTV7J2U.js";
7
- import {
8
- addToRoll
9
- } from "./chunk-WOHX7YTH.js";
10
- import {
11
- baseClassName
12
- } from "./chunk-VTTA2ALZ.js";
13
-
14
- // src/pc/pc.amount-bindings.ts
15
- function ownerClassSlug(source, resolved) {
16
- var _a, _b, _c;
17
- if (!source) return null;
18
- if (source.kind === "class") return source.slug;
19
- if (source.kind === "subclass") return (_c = (_b = (_a = resolved.classes.find((c) => {
20
- var _a2;
21
- return ((_a2 = c.subclass) == null ? void 0 : _a2.slug) === source.slug;
22
- })) == null ? void 0 : _a.entity) == null ? void 0 : _b.slug) != null ? _c : null;
23
- if (source.kind === "feat" && source.via) {
24
- if (source.via.kind === "class") return source.via.slug;
25
- if (source.via.kind === "pool") return source.via.classSlug;
26
- }
27
- return null;
28
- }
29
- function casterRow(classSlug, derived) {
30
- var _a, _b;
31
- const rows = (_a = derived.spellcastingClasses) != null ? _a : [];
32
- const own = classSlug ? rows.find((c) => baseClassName(c.classSlug) === baseClassName(classSlug)) : void 0;
33
- return (_b = own != null ? own : rows[0]) != null ? _b : null;
34
- }
35
- function amountBindingsFor(owner, resolved, derived) {
36
- const classSlug = ownerClassSlug(owner, resolved);
37
- const classSource = classSlug ? { kind: "class", slug: classSlug, level: 0 } : owner;
38
- const classLevel = classSource ? resourceLevelFor(classSource, resolved) : resolved.totalLevel;
39
- const row = casterRow(classSlug, derived);
40
- return {
41
- level: resolved.totalLevel,
42
- class_level: classLevel,
43
- prof: derived.proficiencyBonus,
44
- str_mod: derived.mods.str,
45
- dex_mod: derived.mods.dex,
46
- con_mod: derived.mods.con,
47
- int_mod: derived.mods.int,
48
- wis_mod: derived.mods.wis,
49
- cha_mod: derived.mods.cha,
50
- columns: {},
51
- ...row ? { spell_mod: derived.mods[row.ability], spell_dc: row.saveDC } : {}
52
- };
53
- }
54
- function spellcastingFor(spell, derived) {
55
- var _a, _b;
56
- if ((spellSource(spell).ownAbility || spell.classSlug == null) && spell.ability) {
57
- const own = (_a = derived.abilitySpellcasting) == null ? void 0 : _a[spell.ability];
58
- if (own) return { ability: spell.ability, saveDC: own.saveDC, attackBonus: own.attackBonus };
59
- }
60
- const row = casterRow((_b = spell.classSlug) != null ? _b : null, derived);
61
- return row ? { ability: row.ability, saveDC: row.saveDC, attackBonus: row.attackBonus } : null;
62
- }
63
- function spellAmountBindings(spell, resolved, derived) {
64
- const cast = spellcastingFor(spell, derived);
65
- const base = amountBindingsFor(spell.classSlug ? { kind: "class", slug: spell.classSlug, level: 0 } : void 0, resolved, derived);
66
- const out = { ...base };
67
- delete out.spell_mod;
68
- delete out.spell_dc;
69
- return cast ? { ...out, spell_mod: derived.mods[cast.ability], spell_dc: cast.saveDC } : out;
70
- }
71
- function spellRollBonus(spell) {
72
- var _a;
73
- const roll = (_a = spell.damage_roll) == null ? void 0 : _a.trim();
74
- const text = spell.description;
75
- if (!roll || !text) return null;
76
- const esc = roll.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
77
- const re = new RegExp(`(?<![\\w])${esc}\`?\\s*(?:plus|\\+)\\s*your\\s+spellcasting\\s+(?:ability\\s+)?modifier`, "i");
78
- return re.test(text) ? "{spell_mod}" : null;
79
- }
80
- function foldsIntoRoll(rider, spell) {
81
- var _a, _b;
82
- const own = ((_b = (_a = spell.entity.damage) == null ? void 0 : _a.types) != null ? _b : []).map((t) => t.toLowerCase());
83
- return !rider.condition && (!rider.damage_type || own.includes(rider.damage_type.toLowerCase()));
84
- }
85
- var reaching = (spell, derived) => {
86
- var _a;
87
- return ((_a = derived.spellDamageRiders) != null ? _a : []).filter((r) => {
88
- var _a2;
89
- return (_a2 = r.spells) == null ? void 0 : _a2.includes(spell.slug);
90
- });
91
- };
92
- function addSpellDamageRiders(roll, spell, derived) {
93
- return addToRoll(roll, reaching(spell, derived).filter((r) => foldsIntoRoll(r, spell)).map((r) => r.amount));
94
- }
95
- function spellDamageRiderLines(spell, derived) {
96
- return reaching(spell, derived).filter((r) => !foldsIntoRoll(r, spell)).map((r) => ({
97
- amount: r.amount,
98
- ...r.damage_type ? { damage_type: r.damage_type } : {},
99
- ...r.source ? { source: r.source } : {},
100
- ...r.condition ? { condition: r.condition } : {}
101
- }));
102
- }
103
-
104
- export {
105
- ownerClassSlug,
106
- amountBindingsFor,
107
- spellcastingFor,
108
- spellAmountBindings,
109
- spellRollBonus,
110
- addSpellDamageRiders,
111
- spellDamageRiderLines
112
- };
@@ -1,26 +0,0 @@
1
- // src/schemas/entity-extras-schema.ts
2
- import { z } from "zod";
3
- var imageField = z.union([z.string().min(1), z.array(z.string().min(1))]).optional();
4
- var additionalSpellsEntrySchema = z.object({
5
- name: z.string().min(1).optional(),
6
- ability: z.union([z.string().min(1), z.object({ choose: z.array(z.string().min(1)) })]).optional(),
7
- known: z.unknown().optional(),
8
- innate: z.unknown().optional(),
9
- prepared: z.unknown().optional(),
10
- expanded: z.unknown().optional(),
11
- resourceName: z.string().min(1).optional()
12
- });
13
- var progressionSchema = z.object({
14
- name: z.string().min(1),
15
- progression: z.union([z.record(z.string(), z.number()), z.array(z.number())]),
16
- feature_type: z.array(z.string().min(1)).optional(),
17
- featureType: z.array(z.string().min(1)).optional(),
18
- category: z.array(z.string().min(1)).optional(),
19
- required: z.record(z.string(), z.array(z.string())).optional()
20
- });
21
-
22
- export {
23
- imageField,
24
- additionalSpellsEntrySchema,
25
- progressionSchema
26
- };
@@ -1,187 +0,0 @@
1
- import {
2
- poolGrantSchema,
3
- selectionPoolSchema,
4
- tabDeclSchema
5
- } from "./chunk-G6MHJDVT.js";
6
- import {
7
- casterTypeEnum
8
- } from "./chunk-CJYCVNW2.js";
9
- import {
10
- featureSchema
11
- } from "./chunk-B2QHP6UF.js";
12
- import {
13
- resourceSchema
14
- } from "./chunk-ZJXSXVFP.js";
15
- import {
16
- startingEquipmentEntrySchema,
17
- startingGoldSchema
18
- } from "./chunk-IN4M4X7P.js";
19
- import {
20
- choiceSchema
21
- } from "./chunk-OOL4KMG2.js";
22
- import {
23
- additionalSpellsEntrySchema,
24
- imageField,
25
- progressionSchema
26
- } from "./chunk-UA5KS2PL.js";
27
-
28
- // src/class/class.schema.ts
29
- import { z } from "zod";
30
- var abilityEnum = z.enum(["str", "dex", "con", "int", "wis", "cha"]);
31
- var skillEnum = z.enum([
32
- "acrobatics",
33
- "animal-handling",
34
- "arcana",
35
- "athletics",
36
- "deception",
37
- "history",
38
- "insight",
39
- "intimidation",
40
- "investigation",
41
- "medicine",
42
- "nature",
43
- "perception",
44
- "performance",
45
- "persuasion",
46
- "religion",
47
- "sleight-of-hand",
48
- "stealth",
49
- "survival"
50
- ]);
51
- var armorCategoryEnum = z.enum(["light", "medium", "heavy", "shield"]);
52
- var weaponCategoryEnum = z.enum(["simple", "martial"]);
53
- var hitDieEnum = z.enum(["d6", "d8", "d10", "d12"]);
54
- var editionEnum = z.enum(["2014", "2024"]);
55
- var weaponProficiencySchema = z.object({
56
- fixed: z.array(z.string()).optional(),
57
- categories: z.array(weaponCategoryEnum).optional(),
58
- conditional: z.array(z.object({
59
- category: weaponCategoryEnum,
60
- where_property: z.array(z.string()).nonempty()
61
- })).optional()
62
- }).refine(
63
- (w) => {
64
- var _a, _b, _c, _d, _e, _f;
65
- return ((_b = (_a = w.fixed) == null ? void 0 : _a.length) != null ? _b : 0) + ((_d = (_c = w.categories) == null ? void 0 : _c.length) != null ? _d : 0) + ((_f = (_e = w.conditional) == null ? void 0 : _e.length) != null ? _f : 0) > 0;
66
- },
67
- { message: "weapon proficiency must declare at least one of fixed/categories/conditional" }
68
- );
69
- var toolProficiencySchema = z.object({
70
- fixed: z.array(z.string()).optional(),
71
- choice: z.object({
72
- count: z.number().int().positive(),
73
- from: z.array(z.string()).nonempty()
74
- }).optional()
75
- }).refine((t) => {
76
- var _a, _b;
77
- return ((_b = (_a = t.fixed) == null ? void 0 : _a.length) != null ? _b : 0) > 0 || t.choice !== void 0;
78
- }, {
79
- message: "tool proficiency must declare fixed or choice"
80
- });
81
- var spellcastingSchema = z.object({
82
- caster_type: casterTypeEnum,
83
- ability: abilityEnum,
84
- preparation: z.enum(["known", "prepared"]),
85
- spell_list: z.string().min(1)
86
- });
87
- var weaponMasterySchema = z.object({
88
- // §2.7's ONE deliberate relaxation, and the phase's only non-additive edit. Measured: `starting_count`
89
- // has ZERO read sites in either repo, all 24 SRD class records are `weapon_mastery: null`, and the
90
- // converter population is zero too (26 of 28 class docs null; both object carriers DO carry the count).
91
- // It exists so the converter can re-emit a countless mastery object later. R4-G5 did NOT make it read: §6 takes
92
- // the count from the class TABLE COLUMN instead (`COUNT_COLUMNS` in `pc.table-column.ts`), because the column
93
- // is the truth on BOTH corpora, and `count.column` on the choice itself is booked to the G7 converter handoff.
94
- // `starting_count` therefore still has ZERO read sites.
95
- // A THREE-declaration edit (finding 11): here, `class.types.ts`, and the generator's COPIED
96
- // `interface WeaponMasteryConfig` in tools/srd-canonical/merger-rules/class-merge.ts.
97
- starting_count: z.number().int().nonnegative().optional(),
98
- scaling: z.record(z.string(), z.number().int().nonnegative()).optional()
99
- });
100
- var classTableRowSchema = z.object({
101
- prof_bonus: z.number().int().positive(),
102
- columns: z.record(z.string(), z.union([z.string(), z.number()])).optional(),
103
- feature_ids: z.array(z.string())
104
- });
105
- var classEntitySchema = z.object({
106
- slug: z.string().min(1),
107
- name: z.string().min(1),
108
- edition: editionEnum,
109
- source: z.string().min(1),
110
- description: z.string(),
111
- hit_die: hitDieEnum,
112
- primary_abilities: z.array(abilityEnum).nonempty(),
113
- // D2b-A (A-1): the class's recommended Standard Array (SRD 5.2 "Standard Array by Class"); absent on 2014 classes.
114
- standard_array: z.strictObject({
115
- str: z.number().int(),
116
- dex: z.number().int(),
117
- con: z.number().int(),
118
- int: z.number().int(),
119
- wis: z.number().int(),
120
- cha: z.number().int()
121
- }).optional(),
122
- saving_throws: z.array(abilityEnum).length(2),
123
- proficiencies: z.object({
124
- armor: z.array(armorCategoryEnum),
125
- weapons: weaponProficiencySchema,
126
- tools: toolProficiencySchema.optional()
127
- }),
128
- skill_choices: z.object({
129
- count: z.number().int().positive(),
130
- from: z.array(skillEnum).nonempty()
131
- }),
132
- // Zod strips unknown keys by default, so without this declaration an authored
133
- // `choices:` block is silently deleted by `parseClass`. Same spelling as
134
- // `raceEntitySchema` / `backgroundEntitySchema`.
135
- choices: z.array(choiceSchema).optional(),
136
- starting_equipment: z.array(startingEquipmentEntrySchema),
137
- starting_gold: startingGoldSchema.optional(),
138
- spellcasting: spellcastingSchema.nullable(),
139
- subclass_level: z.number().int().positive(),
140
- subclass_feature_name: z.string().min(1),
141
- weapon_mastery: weaponMasterySchema.nullable(),
142
- epic_boon_level: z.number().int().positive().nullable(),
143
- table: z.record(z.string(), classTableRowSchema),
144
- features_by_level: z.record(z.string(), z.array(featureSchema)),
145
- resources: z.array(resourceSchema),
146
- selection_pools: z.array(selectionPoolSchema).optional(),
147
- pool_grants: z.array(poolGrantSchema).optional(),
148
- tabs: z.array(tabDeclSchema).optional(),
149
- rendering_hint: z.string().optional(),
150
- // 28
151
- has_fluff: z.boolean().optional(),
152
- // 28
153
- has_fluff_images: z.boolean().optional(),
154
- // 27
155
- table_col_labels: z.array(z.string().min(1)).optional(),
156
- // 28
157
- starting_equipment_additional_from_background: z.boolean().optional(),
158
- // 28
159
- multiclassing: z.unknown().optional(),
160
- // FOUR arities measured incl. {} ×3; free-form 5etools keys
161
- // ("thieves' tools", requirements.or[].{dex,str}) — Q1 ruling
162
- cantrip_progression: z.array(z.number()).optional(),
163
- // 15
164
- prepared_spells: z.string().min(1).optional(),
165
- // formula string "<$level$> / 2 + <$int_mod$>"
166
- prepared_spells_change: z.string().min(1).optional(),
167
- // "restLong"
168
- prepared_spells_progression: z.array(z.number()).optional(),
169
- spells_known_progression: z.array(z.number()).optional(),
170
- spells_known_progression_fixed: z.array(z.number()).optional(),
171
- spells_known_progression_fixed_allow_lower_level: z.boolean().optional(),
172
- // ⚠️ BOOLEAN (finding 1)
173
- spells_known_progression_fixed_by_level: z.record(z.string(), z.record(z.string(), z.number())).optional(),
174
- // ⚠️ two-deep record (finding 1)
175
- feat_progression: z.array(progressionSchema).optional(),
176
- // 13
177
- optionalfeature_progression: z.array(progressionSchema).optional(),
178
- // 9 carriers; the ARRAY
179
- // progression arm rides 4 of them
180
- additional_spells: z.array(additionalSpellsEntrySchema).optional(),
181
- // 7
182
- image: imageField
183
- });
184
-
185
- export {
186
- classEntitySchema
187
- };
@@ -1,23 +0,0 @@
1
- import {
2
- subclassEntitySchema
3
- } from "./chunk-LNT64X7C.js";
4
- import {
5
- aliasFeaturesByLevelActionCost
6
- } from "./chunk-4U55VNC7.js";
7
-
8
- // src/subclass/subclass.parser.ts
9
- import { parseYaml } from "@archivist-gg/core";
10
- function parseSubclass(source) {
11
- const raw = parseYaml(source, ["name", "slug", "parent_class"]);
12
- if (!raw.success) return raw;
13
- aliasFeaturesByLevelActionCost(raw.data.features_by_level);
14
- const result = subclassEntitySchema.safeParse({ edition: "2014", ...raw.data });
15
- if (!result.success) {
16
- return { success: false, error: `subclass schema validation failed: ${result.error.message}` };
17
- }
18
- return { success: true, data: result.data };
19
- }
20
-
21
- export {
22
- parseSubclass
23
- };
@@ -1,58 +0,0 @@
1
- import {
2
- armorEntitySchema
3
- } from "./chunk-HS6FIOLP.js";
4
-
5
- // src/armor/armor.parser.ts
6
- import { parseYaml } from "@archivist-gg/core";
7
- var KNOWN_KEYS = /* @__PURE__ */ new Set([
8
- "name",
9
- "slug",
10
- "category",
11
- "ac",
12
- "strength_requirement",
13
- "stealth_disadvantage",
14
- "weight",
15
- "cost",
16
- "rarity",
17
- "source",
18
- "page",
19
- "edition",
20
- "entries",
21
- "raw",
22
- // Root extras declared on armorEntitySchema (spec §5). The schema declaring them is NOT
23
- // enough: this set is the second, independent gate — a key missing here is copied into
24
- // `raw` as well, so the two lists must move together.
25
- "rendering_hint",
26
- "icon",
27
- "has_fluff",
28
- "has_fluff_images",
29
- "image",
30
- // The alias is a KNOWN key so it is never copied into `raw` alongside the mapped
31
- // `strength_requirement` — that duplicate is the census row this fix empties.
32
- "strength_required"
33
- ]);
34
- function parseArmor(source) {
35
- var _a;
36
- const raw = parseYaml(source, ["name", "slug", "category", "ac"]);
37
- if (!raw.success) return raw;
38
- if (raw.data.strength_requirement === void 0 && typeof raw.data.strength_required === "number") {
39
- raw.data.strength_requirement = raw.data.strength_required;
40
- }
41
- const result = armorEntitySchema.safeParse(raw.data);
42
- if (!result.success) {
43
- return { success: false, error: `armor schema validation failed: ${result.error.message}` };
44
- }
45
- const entity = result.data;
46
- const extras = {};
47
- for (const [k, v] of Object.entries(raw.data)) {
48
- if (!KNOWN_KEYS.has(k)) extras[k] = v;
49
- }
50
- if (Object.keys(extras).length > 0) {
51
- entity.raw = { ...(_a = entity.raw) != null ? _a : {}, ...extras };
52
- }
53
- return { success: true, data: entity };
54
- }
55
-
56
- export {
57
- parseArmor
58
- };
@@ -1,158 +0,0 @@
1
- import {
2
- durationSchema
3
- } from "./chunk-WYGD2UGN.js";
4
- import {
5
- actionCostEnum,
6
- resetTriggerEnum,
7
- resourceConsumptionSchema
8
- } from "./chunk-ZJXSXVFP.js";
9
- import {
10
- choiceSchema
11
- } from "./chunk-OOL4KMG2.js";
12
- import {
13
- featureEffectSchema
14
- } from "./chunk-JXWNXIIZ.js";
15
- import {
16
- additionalSpellsEntrySchema,
17
- imageField,
18
- progressionSchema
19
- } from "./chunk-UA5KS2PL.js";
20
-
21
- // src/optional-feature/optional-feature.schema.ts
22
- import { z } from "zod";
23
- var editionEnum = z.enum(["2014", "2024"]);
24
- var abilityEnum = z.enum(["str", "dex", "con", "int", "wis", "cha"]);
25
- var wikilinkRegex = /^\[\[[^[\]]+\]\]$/;
26
- var namedRefSchema = z.object({ name: z.string().min(1), source: z.string().min(1).optional(), visible_stats: z.boolean().optional() });
27
- var prerequisiteSchema = z.discriminatedUnion("kind", [
28
- z.object({ kind: z.literal("level"), min: z.number().int().positive(), class: namedRefSchema.optional(), subclass: namedRefSchema.optional() }),
29
- z.object({ kind: z.literal("spell-known"), spell: z.string().regex(wikilinkRegex) }),
30
- z.object({ kind: z.literal("pact"), pact: z.enum(["tome", "blade", "chain", "talisman"]) }),
31
- z.object({ kind: z.literal("class"), class: z.string().regex(wikilinkRegex) }),
32
- z.object({ kind: z.literal("ability"), ability: abilityEnum, min: z.number().int().positive() }),
33
- z.object({ kind: z.literal("other"), detail: z.string() }),
34
- z.object({ kind: z.literal("optionalfeature"), optionalfeature: z.string().regex(wikilinkRegex) }),
35
- z.object({ kind: z.literal("spell-choose"), choose: z.string().min(1), entry: z.string().optional(), entry_summary: z.string().optional() })
36
- ]);
37
- var usesSchema = z.object({
38
- max: z.union([z.number(), z.string()]),
39
- recharge: resetTriggerEnum,
40
- /** Partial recovery, for a pool a rest does NOT fully refill (a sanity track that regains 1 per long
41
- * rest). Same shape a feature's `resources[].recovery` uses, so `ResolvedResource.recovery` — which
42
- * has carried the field since R4-G4 — is populated identically from either side. Optional: all 35
43
- * shipped `uses` carriers omit it and parse unchanged. */
44
- recovery: z.array(z.object({
45
- id: z.string().min(1),
46
- name: z.string().min(1),
47
- amount: z.union([z.number(), z.string()]),
48
- reset: resetTriggerEnum,
49
- restores: z.enum(["uses", "spell-slots"]).optional()
50
- })).optional()
51
- });
52
- var filterSpecSchema = z.object({
53
- rarity: z.array(z.string().min(1)).min(1),
54
- types: z.array(z.string().min(1)).optional(),
55
- exclude_types: z.array(z.string().min(1)).optional(),
56
- cursed: z.literal(false).optional()
57
- }).strict();
58
- var optionCreatesSchema = z.object({
59
- item: z.string().regex(wikilinkRegex).optional(),
60
- variant: z.object({ candidates: z.array(z.string().regex(wikilinkRegex)).min(1) }).strict().optional(),
61
- filter: filterSpecSchema.optional()
62
- }).strict().refine((c) => [c.item, c.variant, c.filter].filter((a) => a !== void 0).length === 1, { message: "creates needs exactly one of item, variant, filter" });
63
- var optionRowSchema = z.object({
64
- key: z.string().regex(/^[a-z0-9][a-z0-9._-]*$/, "an option key is lower-case, with no '#' and no whitespace"),
65
- name: z.string().min(1),
66
- min_level: z.number().int().min(1).max(20),
67
- attunement: z.boolean().optional(),
68
- creates: optionCreatesSchema
69
- }).strict();
70
- var infuseItemSchema = z.object({
71
- bonuses: z.object({
72
- ac: z.number().int().optional(),
73
- weapon_attack: z.number().int().optional(),
74
- weapon_damage: z.number().int().optional(),
75
- spell_attack: z.number().int().optional(),
76
- saving_throws: z.number().int().optional(),
77
- speed: z.object({ walk: z.number().int().optional(), fly: z.number().int().optional(), swim: z.number().int().optional(), climb: z.number().int().optional() }).strict().optional()
78
- }).strict().optional(),
79
- resist: z.array(z.string().min(1)).optional(),
80
- charges: z.object({ max: z.number().int().min(1), dice: z.string().optional(), recharge: z.string().optional(), recharge_amount: z.string().optional() }).strict().optional(),
81
- action: actionCostEnum.optional(),
82
- // ART-c1 (R-3 a): the Actions row's range, as data (B-8.4 draws "Self").
83
- range: z.string().min(1).optional()
84
- }).strict();
85
- var infuseBlockSchema = z.object({
86
- targets: z.array(z.object({
87
- kind: z.enum(["armor", "shield", "weapon", "gear"]),
88
- category: z.array(z.string().min(1)).min(1).optional(),
89
- property: z.string().min(1).optional(),
90
- name_any: z.array(z.string().min(1)).min(1).optional()
91
- }).strict()).min(1),
92
- targets_label: z.string().min(1).optional(),
93
- new_object: z.string().min(1).optional(),
94
- rarity: z.string().min(1).optional(),
95
- attunement: z.object({ required: z.literal(true) }).strict().optional(),
96
- // ART-c1 (R-3 b): the damage types the choice offers (v1 U-4 draws the TCE ten); absent keeps dnd5e's canonical list.
97
- choice: z.object({ kind: z.literal("damage-type"), options: z.array(z.string().min(1)).min(1).optional() }).strict().optional(),
98
- item: infuseItemSchema.optional(),
99
- scales_at: z.array(z.object({ level: z.number().int().min(1).max(20), item: infuseItemSchema }).strict()).optional()
100
- }).strict().refine((b) => {
101
- var _a;
102
- return ((_a = b.scales_at) != null ? _a : []).every((r, i, a) => i === 0 || a[i - 1].level < r.level);
103
- }, { message: "scales_at levels ascend" });
104
- var optionalFeatureEntitySchema = z.object({
105
- slug: z.string().min(1),
106
- name: z.string().min(1),
107
- edition: editionEnum,
108
- source: z.string().min(1),
109
- feature_type: z.string().min(1),
110
- description: z.string(),
111
- prerequisites: z.array(prerequisiteSchema),
112
- available_to: z.array(z.string().regex(wikilinkRegex)),
113
- effects: z.array(featureEffectSchema),
114
- action_cost: actionCostEnum.nullable().optional(),
115
- uses: usesSchema.nullable().optional(),
116
- consumes: resourceConsumptionSchema.nullable().optional(),
117
- duration: durationSchema.nullable().optional(),
118
- passive: z.boolean().optional(),
119
- // Phase 3 activatable buffs: an activatable boon folds its effects only while
120
- // its slug is present in state.active_buffs (toggled in the PoolTab).
121
- activatable: z.boolean().optional(),
122
- rendering_hint: z.string().optional(),
123
- // the ONE root with load-bearing VALUES (88 records, G4's)
124
- /** WHERE this resource is drawn. `band` puts it in the header strip beside HP; anything else, and the
125
- * default, leaves it to the Resources tab. The tab ALWAYS lists every resource — it is the complete
126
- * inventory of what the character can spend, and a row missing from it would read as a bug — so this
127
- * key only ever ADDS a second, curated home. Opt-in on purpose: the band's whole value is being short,
128
- * which an opt-out flag would erode one new grant at a time. */
129
- surface: z.enum(["band", "tab"]).optional(),
130
- additional_spells: z.array(additionalSpellsEntrySchema).optional(),
131
- // 54
132
- is_class_feature_variant: z.boolean().optional(),
133
- // 25
134
- has_fluff_images: z.boolean().optional(),
135
- // 2
136
- feat_progression: z.array(progressionSchema).optional(),
137
- // 1
138
- optionalfeature_progression: z.array(progressionSchema).optional(),
139
- // 1
140
- image: imageField,
141
- repeatable: z.literal(true).optional(),
142
- item_choice: z.enum(["learn", "create"]).optional(),
143
- options: z.array(optionRowSchema).optional(),
144
- infuse: infuseBlockSchema.optional(),
145
- // D2b-A (design §2.2 step 1): a pool member's own choices, the vocabulary features and feats use.
146
- choices: z.array(choiceSchema).optional()
147
- }).superRefine((d, ctx) => {
148
- var _a;
149
- if (d.repeatable && (!d.options || !d.item_choice)) ctx.addIssue({ code: "custom", message: "a repeatable note needs options and item_choice" });
150
- const keys = ((_a = d.options) != null ? _a : []).map((o) => o.key);
151
- if (new Set(keys).size !== keys.length) ctx.addIssue({ code: "custom", message: "option keys are unique" });
152
- });
153
-
154
- export {
155
- optionRowSchema,
156
- infuseBlockSchema,
157
- optionalFeatureEntitySchema
158
- };