@archivist-gg/dnd5e 0.3.19 → 0.3.24

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 (440) 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-2LCGKNVM.js +1 -0
  16. package/dist/chunk-2NUDWOFG.js +1 -0
  17. package/dist/chunk-334WLI7V.js +1 -0
  18. package/dist/chunk-3LWOVRLA.js +1 -0
  19. package/dist/chunk-3QQOATV3.js +1 -0
  20. package/dist/chunk-4E2GIWJE.js +1 -0
  21. package/dist/chunk-4GN3GYMP.js +1 -0
  22. package/dist/chunk-4IAMSRHD.js +1 -0
  23. package/dist/chunk-4JEF3CET.js +1 -0
  24. package/dist/chunk-4KVVAENP.js +1 -0
  25. package/dist/chunk-56JK6VCL.js +1 -0
  26. package/dist/chunk-5FEXHY4U.js +1 -0
  27. package/dist/chunk-63YJPWTM.js +1 -0
  28. package/dist/chunk-6ASJ3MVB.js +1 -0
  29. package/dist/chunk-6IC53O3Q.js +1 -0
  30. package/dist/chunk-6LCNV26D.js +1 -0
  31. package/dist/chunk-6W253VHH.js +1 -0
  32. package/dist/chunk-7AKJBRBD.js +1 -0
  33. package/dist/chunk-7EL3GWWJ.js +1 -0
  34. package/dist/chunk-7FPQJDFD.js +1 -0
  35. package/dist/chunk-7J5BNH2D.js +1 -0
  36. package/dist/chunk-7LPKI27J.js +1 -0
  37. package/dist/chunk-7UPYRKMF.js +1 -0
  38. package/dist/chunk-A7H6LX47.js +1 -0
  39. package/dist/chunk-AINRPPLH.js +1 -0
  40. package/dist/chunk-BC52J4LA.js +1 -0
  41. package/dist/chunk-BCXGB4HP.js +1 -0
  42. package/dist/chunk-BGX36NPE.js +1 -0
  43. package/dist/chunk-BPKG6RZ7.js +1 -0
  44. package/dist/chunk-BREHZNTL.js +1 -0
  45. package/dist/chunk-BZ6BGGZS.js +1 -0
  46. package/dist/chunk-CAPYNIGK.js +1 -0
  47. package/dist/chunk-CCFIINBA.js +1 -0
  48. package/dist/chunk-CMIEZQL4.js +1 -0
  49. package/dist/chunk-DVUXUIPV.js +1 -0
  50. package/dist/chunk-DY6FVAGA.js +1 -0
  51. package/dist/chunk-DZITM5AG.js +1 -0
  52. package/dist/chunk-DZKSXSJF.js +1 -0
  53. package/dist/chunk-EAARMPCW.js +1 -0
  54. package/dist/chunk-EVT7MGAC.js +1 -0
  55. package/dist/chunk-FOLHTMSC.js +1 -0
  56. package/dist/chunk-GCYUCIDN.js +1 -0
  57. package/dist/chunk-GIOV6JW7.js +1 -0
  58. package/dist/chunk-HCK6IUB3.js +1 -0
  59. package/dist/chunk-HR5MKCP2.js +1 -0
  60. package/dist/chunk-I26FHSI6.js +1 -0
  61. package/dist/chunk-I4O2FIDT.js +1 -0
  62. package/dist/chunk-IGVRLGLM.js +1 -0
  63. package/dist/chunk-IHPLT2ZT.js +1 -0
  64. package/dist/chunk-IOCJIWCV.js +1 -0
  65. package/dist/chunk-JXDX2DKF.js +1 -0
  66. package/dist/chunk-KBFSJ5WE.js +1 -0
  67. package/dist/chunk-KM75CC6Q.js +1 -0
  68. package/dist/chunk-KZDDFG4O.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-MC6PLWRZ.js +1 -0
  73. package/dist/chunk-MGGKZGLG.js +1 -0
  74. package/dist/chunk-N3RYJ7RE.js +1 -0
  75. package/dist/chunk-NEMX7QGG.js +1 -0
  76. package/dist/chunk-NI364WV7.js +1 -0
  77. package/dist/chunk-O2QZ73GA.js +1 -0
  78. package/dist/chunk-O776WL7O.js +1 -0
  79. package/dist/chunk-OTFNINUY.js +1 -0
  80. package/dist/chunk-PQAVMK3T.js +1 -0
  81. package/dist/chunk-PZ3ZZ5H5.js +1 -0
  82. package/dist/chunk-PZ4L2EEG.js +1 -0
  83. package/dist/chunk-PZUPZBTN.js +1 -0
  84. package/dist/chunk-QBA757AU.js +1 -0
  85. package/dist/chunk-QFIGPOFW.js +1 -0
  86. package/dist/chunk-QMEKQTUT.js +1 -0
  87. package/dist/chunk-QVWT67WA.js +1 -0
  88. package/dist/chunk-RDXQAZBA.js +1 -0
  89. package/dist/chunk-RE5Z5RNK.js +1 -0
  90. package/dist/chunk-RL4VY2AL.js +1 -0
  91. package/dist/chunk-RQGTBHJW.js +1 -0
  92. package/dist/chunk-RQZCGXUZ.js +1 -0
  93. package/dist/chunk-S5UCI27C.js +1 -0
  94. package/dist/chunk-SEOASDO4.js +1 -0
  95. package/dist/chunk-SU4MEZ5P.js +1 -0
  96. package/dist/chunk-T55DELVL.js +1 -0
  97. package/dist/chunk-TKIEPC6F.js +1 -0
  98. package/dist/chunk-TLXFGGWH.js +1 -0
  99. package/dist/chunk-UBUKCRZ3.js +1 -0
  100. package/dist/chunk-V6NQ547U.js +1 -0
  101. package/dist/chunk-VA3ZWV7C.js +1 -0
  102. package/dist/chunk-VIP3FH2O.js +1 -0
  103. package/dist/chunk-VTQ4RWEG.js +1 -0
  104. package/dist/chunk-WUHTSLG4.js +1 -0
  105. package/dist/chunk-X22SISGM.js +1 -0
  106. package/dist/chunk-XKJXT2PN.js +1 -0
  107. package/dist/chunk-XQMKH4R4.js +1 -0
  108. package/dist/chunk-YGH7S5ZF.js +1 -0
  109. package/dist/chunk-ZE46ADXS.js +1 -0
  110. package/dist/chunk-ZI3FEUX3.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 +2 -1
  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 +22 -1
  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 +2 -0
  182. package/dist/item/item.schema.js +1 -11
  183. package/dist/item/item.types.d.ts +2 -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 +21 -1
  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 +0 -25
  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 +0 -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 +0 -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 +22 -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 +18 -0
  228. package/dist/pc/pc.member-choices.d.ts +3 -66
  229. package/dist/pc/pc.member-choices.js +1 -39
  230. package/dist/pc/pc.parser.js +1 -58
  231. package/dist/pc/pc.pools.d.ts +7 -10
  232. package/dist/pc/pc.pools.js +1 -27
  233. package/dist/pc/pc.proficiencies.d.ts +0 -40
  234. package/dist/pc/pc.proficiencies.js +1 -156
  235. package/dist/pc/pc.proficiency-grants.d.ts +0 -26
  236. package/dist/pc/pc.proficiency-normalize.d.ts +0 -35
  237. package/dist/pc/pc.proficiency-normalize.js +1 -18
  238. package/dist/pc/pc.proficiency-query.d.ts +0 -13
  239. package/dist/pc/pc.proficiency-query.js +1 -27
  240. package/dist/pc/pc.recalc.d.ts +7 -131
  241. package/dist/pc/pc.recalc.js +1 -1042
  242. package/dist/pc/pc.resolver.d.ts +0 -107
  243. package/dist/pc/pc.resolver.js +1 -60
  244. package/dist/pc/pc.resource-seed.d.ts +0 -8
  245. package/dist/pc/pc.resource-seed.js +1 -42
  246. package/dist/pc/pc.resources.d.ts +1 -59
  247. package/dist/pc/pc.resources.js +1 -23
  248. package/dist/pc/pc.rest.d.ts +1 -20
  249. package/dist/pc/pc.rest.js +1 -231
  250. package/dist/pc/pc.schema.d.ts +0 -2
  251. package/dist/pc/pc.schema.js +1 -9
  252. package/dist/pc/pc.slotting.d.ts +0 -29
  253. package/dist/pc/pc.slotting.js +1 -28
  254. package/dist/pc/pc.speeds.d.ts +19 -0
  255. package/dist/pc/pc.spell-scope.d.ts +0 -16
  256. package/dist/pc/pc.spellcasting.d.ts +0 -70
  257. package/dist/pc/pc.spellcasting.js +1 -28
  258. package/dist/pc/pc.table-column.d.ts +0 -22
  259. package/dist/pc/pc.table-column.js +1 -18
  260. package/dist/pc/pc.tool-picks.d.ts +0 -27
  261. package/dist/pc/pc.tool-picks.js +1 -18
  262. package/dist/pc/pc.types.d.ts +54 -374
  263. package/dist/pc/pc.weapon-grant.d.ts +0 -6
  264. package/dist/pc/pool-layout.d.ts +0 -39
  265. package/dist/pc/pool-layout.js +1 -18
  266. package/dist/pc/resource-equivalents.d.ts +2 -40
  267. package/dist/pc/roll-scope.js +1 -8
  268. package/dist/pc/roll-tag-labels.d.ts +0 -32
  269. package/dist/pc/roll-tag-labels.js +1 -17
  270. package/dist/pc/spell-source.d.ts +0 -11
  271. package/dist/pc/spell-source.js +1 -8
  272. package/dist/race/race.codec.d.ts +0 -6
  273. package/dist/race/race.codec.js +1 -15
  274. package/dist/race/race.parser.js +1 -14
  275. package/dist/race/race.schema.d.ts +0 -8
  276. package/dist/race/race.schema.js +1 -14
  277. package/dist/race/race.structural.d.ts +0 -6
  278. package/dist/race/race.structural.js +1 -6
  279. package/dist/race/race.types.d.ts +0 -8
  280. package/dist/schemas/attack-schema.d.ts +5 -0
  281. package/dist/schemas/caster-type-schema.d.ts +1 -6
  282. package/dist/schemas/caster-type-schema.js +1 -6
  283. package/dist/schemas/choice-schema.js +1 -7
  284. package/dist/schemas/duration-schema.d.ts +0 -2
  285. package/dist/schemas/duration-schema.js +1 -6
  286. package/dist/schemas/entity-extras-schema.d.ts +0 -30
  287. package/dist/schemas/entity-extras-schema.js +1 -10
  288. package/dist/schemas/equipment-grant-schema.d.ts +0 -2
  289. package/dist/schemas/equipment-grant-schema.js +1 -12
  290. package/dist/schemas/feature-alias.d.ts +0 -27
  291. package/dist/schemas/feature-effect-schema.d.ts +21 -1
  292. package/dist/schemas/feature-effect-schema.js +1 -6
  293. package/dist/schemas/feature-schema.d.ts +0 -6
  294. package/dist/schemas/feature-schema.js +1 -12
  295. package/dist/schemas/resource-schema.d.ts +1 -34
  296. package/dist/schemas/resource-schema.js +1 -12
  297. package/dist/schemas/selection-pool-schema.js +1 -10
  298. package/dist/spell/casting-time.d.ts +0 -15
  299. package/dist/spell/casting-time.js +1 -6
  300. package/dist/spell/spell.access.d.ts +0 -6
  301. package/dist/spell/spell.access.js +1 -45
  302. package/dist/spell/spell.ai-schema.js +1 -6
  303. package/dist/spell/spell.codec.js +1 -9
  304. package/dist/spell/spell.enrichment.js +1 -9
  305. package/dist/spell/spell.filter.d.ts +0 -5
  306. package/dist/spell/spell.filter.js +1 -75
  307. package/dist/spell/spell.parser.d.ts +0 -31
  308. package/dist/spell/spell.parser.js +1 -16
  309. package/dist/spell/spell.scaling.d.ts +0 -46
  310. package/dist/spell/spell.scaling.js +1 -79
  311. package/dist/spell/spell.schema.js +1 -7
  312. package/dist/spell/spell.types.d.ts +0 -7
  313. package/dist/srd/retired-items.d.ts +0 -4
  314. package/dist/srd/retired-items.js +1 -11
  315. package/dist/srd-store.d.ts +0 -33
  316. package/dist/subclass/subclass.codec.d.ts +0 -8
  317. package/dist/subclass/subclass.codec.js +1 -17
  318. package/dist/subclass/subclass.parser.js +1 -16
  319. package/dist/subclass/subclass.schema.d.ts +2 -1
  320. package/dist/subclass/subclass.schema.js +1 -14
  321. package/dist/subclass/subclass.types.d.ts +0 -3
  322. package/dist/types/attack.d.ts +2 -0
  323. package/dist/types/casting-option.d.ts +0 -4
  324. package/dist/types/choice.d.ts +1 -72
  325. package/dist/types/choice.js +1 -24
  326. package/dist/types/edition.d.ts +0 -3
  327. package/dist/types/equipment-grant.d.ts +1 -27
  328. package/dist/types/equipment-grant.js +1 -12
  329. package/dist/types/feature-effect.d.ts +4 -22
  330. package/dist/types/feature.d.ts +0 -22
  331. package/dist/types/optional-feature.types.d.ts +1 -31
  332. package/dist/types/resource.d.ts +1 -21
  333. package/dist/types/selection-pool.d.ts +0 -24
  334. package/dist/weapon/weapon-mastery.d.ts +0 -1
  335. package/dist/weapon/weapon.classify.d.ts +0 -11
  336. package/dist/weapon/weapon.classify.js +1 -7
  337. package/dist/weapon/weapon.codec.d.ts +0 -9
  338. package/dist/weapon/weapon.codec.js +1 -9
  339. package/dist/weapon/weapon.parser.js +1 -8
  340. package/dist/weapon/weapon.schema.js +1 -7
  341. package/dist/weapon/weapon.types.d.ts +0 -3
  342. package/package.json +3 -3
  343. package/src/data-srd/ATTRIBUTION.md +1 -1
  344. package/dist/chunk-2FRUSVZS.js +0 -489
  345. package/dist/chunk-2LULMQTF.js +0 -14
  346. package/dist/chunk-3LWMFYKS.js +0 -57
  347. package/dist/chunk-3SFGWFVQ.js +0 -19
  348. package/dist/chunk-3SIUAFDQ.js +0 -18
  349. package/dist/chunk-3TM34RSJ.js +0 -23
  350. package/dist/chunk-4J6DS3EJ.js +0 -30
  351. package/dist/chunk-4U55VNC7.js +0 -22
  352. package/dist/chunk-5GKJAUMX.js +0 -59
  353. package/dist/chunk-5JXFJ5AU.js +0 -26
  354. package/dist/chunk-64VNLMSG.js +0 -375
  355. package/dist/chunk-656QCX4U.js +0 -22
  356. package/dist/chunk-6GNXYAYP.js +0 -25
  357. package/dist/chunk-6PXTNCBP.js +0 -133
  358. package/dist/chunk-6X2NV665.js +0 -33
  359. package/dist/chunk-7Q2VPKCD.js +0 -181
  360. package/dist/chunk-7XJHI5H5.js +0 -709
  361. package/dist/chunk-A54HHCWW.js +0 -67
  362. package/dist/chunk-B2QHP6UF.js +0 -159
  363. package/dist/chunk-B3DP42OM.js +0 -55
  364. package/dist/chunk-BJGOSM76.js +0 -18
  365. package/dist/chunk-BJWSOQUC.js +0 -133
  366. package/dist/chunk-CJYCVNW2.js +0 -7
  367. package/dist/chunk-CM5CWO4K.js +0 -735
  368. package/dist/chunk-DEEHHLAP.js +0 -271
  369. package/dist/chunk-DPUJDOKV.js +0 -365
  370. package/dist/chunk-EJD47JHL.js +0 -1838
  371. package/dist/chunk-EJP263OP.js +0 -186
  372. package/dist/chunk-EVMUJYUD.js +0 -195
  373. package/dist/chunk-EYX4JMAU.js +0 -101
  374. package/dist/chunk-FC4IGH5Y.js +0 -18
  375. package/dist/chunk-FJYBLXV7.js +0 -89
  376. package/dist/chunk-FMUD3LDV.js +0 -19
  377. package/dist/chunk-FMYWORTP.js +0 -93
  378. package/dist/chunk-FVXLP7P3.js +0 -18
  379. package/dist/chunk-G6MHJDVT.js +0 -41
  380. package/dist/chunk-GVWEFECG.js +0 -18
  381. package/dist/chunk-HHBD4SQ6.js +0 -24
  382. package/dist/chunk-HS6FIOLP.js +0 -52
  383. package/dist/chunk-HY2SRSVM.js +0 -23
  384. package/dist/chunk-IHE6KVC3.js +0 -13
  385. package/dist/chunk-IN4M4X7P.js +0 -34
  386. package/dist/chunk-IUAAXXNO.js +0 -58
  387. package/dist/chunk-JXWNXIIZ.js +0 -219
  388. package/dist/chunk-K5NJBTE2.js +0 -18
  389. package/dist/chunk-KR6JF3BF.js +0 -14
  390. package/dist/chunk-KSTV7J2U.js +0 -112
  391. package/dist/chunk-KU3YLF6D.js +0 -106
  392. package/dist/chunk-LBEXLN6I.js +0 -91
  393. package/dist/chunk-LHZXYFBU.js +0 -94
  394. package/dist/chunk-LICYHPI3.js +0 -237
  395. package/dist/chunk-LNT64X7C.js +0 -81
  396. package/dist/chunk-LSLSG67V.js +0 -31
  397. package/dist/chunk-LVQLWRCU.js +0 -15
  398. package/dist/chunk-MYY2C5MB.js +0 -233
  399. package/dist/chunk-NKZMQV2C.js +0 -19
  400. package/dist/chunk-NTU2DXNG.js +0 -355
  401. package/dist/chunk-NXUY5XQN.js +0 -1062
  402. package/dist/chunk-NZO7M5GV.js +0 -18
  403. package/dist/chunk-OOL4KMG2.js +0 -71
  404. package/dist/chunk-OOSRUJBI.js +0 -19
  405. package/dist/chunk-PDJSUH24.js +0 -110
  406. package/dist/chunk-PTXBIDG7.js +0 -63
  407. package/dist/chunk-PVCEA4HZ.js +0 -6
  408. package/dist/chunk-QA3YCOML.js +0 -101
  409. package/dist/chunk-QFWQKS3M.js +0 -110
  410. package/dist/chunk-QS5L5YTJ.js +0 -24
  411. package/dist/chunk-QYZV2MQA.js +0 -97
  412. package/dist/chunk-RD2MID3M.js +0 -292
  413. package/dist/chunk-S3YUXDSC.js +0 -278
  414. package/dist/chunk-S7REMWW4.js +0 -21
  415. package/dist/chunk-TOM66P2P.js +0 -38
  416. package/dist/chunk-TRBGC4ZG.js +0 -112
  417. package/dist/chunk-UA5KS2PL.js +0 -26
  418. package/dist/chunk-UJCK5IW4.js +0 -187
  419. package/dist/chunk-UNYR5GLI.js +0 -23
  420. package/dist/chunk-UZXG6QSY.js +0 -58
  421. package/dist/chunk-VN5DLURA.js +0 -158
  422. package/dist/chunk-VP5TIXDK.js +0 -178
  423. package/dist/chunk-VPYBK2MG.js +0 -18
  424. package/dist/chunk-VTTA2ALZ.js +0 -16
  425. package/dist/chunk-W6GC6OKK.js +0 -16
  426. package/dist/chunk-WELIKLZF.js +0 -256
  427. package/dist/chunk-WOHX7YTH.js +0 -165
  428. package/dist/chunk-WSVMLNTO.js +0 -31
  429. package/dist/chunk-WYGD2UGN.js +0 -14
  430. package/dist/chunk-XCFC7LGF.js +0 -122
  431. package/dist/chunk-XJ2F2WO6.js +0 -8
  432. package/dist/chunk-XTEFPUSN.js +0 -23
  433. package/dist/chunk-YBLDE5CG.js +0 -42
  434. package/dist/chunk-YDGMBMYI.js +0 -25
  435. package/dist/chunk-YHYTW5QA.js +0 -20
  436. package/dist/chunk-ZCTUYGNV.js +0 -26
  437. package/dist/chunk-ZDAEGJH4.js +0 -102
  438. package/dist/chunk-ZJXSXVFP.js +0 -58
  439. package/dist/chunk-ZOWKWMD2.js +0 -18
  440. 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
- };