@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,93 +0,0 @@
1
- import {
2
- actionCostEnum,
3
- resourceSchema
4
- } from "./chunk-ZJXSXVFP.js";
5
- import {
6
- choiceSchema
7
- } from "./chunk-OOL4KMG2.js";
8
- import {
9
- featureEffectSchema
10
- } from "./chunk-JXWNXIIZ.js";
11
- import {
12
- additionalSpellsEntrySchema,
13
- imageField,
14
- progressionSchema
15
- } from "./chunk-UA5KS2PL.js";
16
-
17
- // src/feat/feat.schema.ts
18
- import { z } from "zod";
19
- var abilityEnum = z.enum(["str", "dex", "con", "int", "wis", "cha"]);
20
- var editionEnum = z.enum(["2014", "2024"]);
21
- var categoryEnum = z.enum(["origin", "general", "fighting-style", "epic-boon"]);
22
- var prerequisiteSchema = z.discriminatedUnion("kind", [
23
- z.object({ kind: z.literal("ability"), ability: abilityEnum, min: z.number().int().positive() }),
24
- z.object({ kind: z.literal("level"), min: z.number().int().positive() }),
25
- z.object({ kind: z.literal("spellcaster") }),
26
- z.object({
27
- kind: z.literal("proficiency"),
28
- proficiency_type: z.enum(["armor", "weapon", "tool", "skill", "saving-throw"]),
29
- value: z.string().min(1)
30
- }),
31
- z.object({ kind: z.literal("race"), slug: z.string().min(1) }),
32
- z.object({ kind: z.literal("class"), slug: z.string().min(1) }),
33
- // The exclusive-feat-category and feat-category arms carry a raw 5etools category code, not a
34
- // slug; featCategoryLabel names it. The rest carry slugs the renderer humanizes, except other,
35
- // which carries free prose that prereqText returns verbatim.
36
- z.object({ kind: z.literal("feat"), slug: z.string().min(1) }),
37
- z.object({ kind: z.literal("campaign"), slug: z.string().min(1) }),
38
- z.object({ kind: z.literal("exclusive-feat-category"), slug: z.string().min(1) }),
39
- z.object({ kind: z.literal("feature"), slug: z.string().min(1) }),
40
- z.object({ kind: z.literal("other"), detail: z.string().min(1) }),
41
- z.object({ kind: z.literal("feat-category"), slug: z.string().min(1) }),
42
- z.object({ kind: z.literal("background"), slug: z.string().min(1) })
43
- ]);
44
- var featEntitySchema = z.object({
45
- slug: z.string().min(1),
46
- name: z.string().min(1),
47
- edition: editionEnum,
48
- source: z.string().min(1),
49
- category: categoryEnum,
50
- description: z.string(),
51
- prerequisites: z.array(prerequisiteSchema),
52
- benefits: z.array(z.string()),
53
- effects: z.array(featureEffectSchema),
54
- grants_asi: z.object({
55
- amount: z.number().int().positive(),
56
- pool: z.array(abilityEnum).optional()
57
- }).nullable(),
58
- repeatable: z.boolean(),
59
- choices: z.array(choiceSchema),
60
- rendering_hint: z.string().optional(),
61
- additional_spells: z.array(additionalSpellsEntrySchema).optional(),
62
- // 71
63
- has_fluff: z.boolean().optional(),
64
- // 0 carriers — symmetry, §9.4
65
- has_fluff_images: z.boolean().optional(),
66
- // 41
67
- trait_tags: z.unknown().optional(),
68
- // 7, nullable measured — same passthrough family
69
- optionalfeature_progression: z.array(progressionSchema).optional(),
70
- // 4
71
- resources: z.array(resourceSchema).optional(),
72
- // closes the feat.types.ts `Feat.resources` schema/type asymmetry (C).
73
- // CONVERTER carriers since import-5etools cb382b6 (feat-mapper `mapFeatEconomy`): 69 of 287 feat docs,
74
- // 72 entries (41 `prof`, 29 `1`, Lucky PHB `3`, Boon of Recovery `10` + die d10), ids owner-namespaced
75
- // `<feat-slug-tail>:<tracker-slug>`; 0 SRD-bundle carriers. The resolver carries them onto the
76
- // synthesized feat feature, so each draws a tracker. Import resourceSchema.
77
- action_cost: actionCostEnum.optional(),
78
- // ruling R-G1b-5 (gate1-r1 f1): a TOP-LEVEL entity key. SRD bundle:
79
- // one feat per edition (`SRD 2024/Feats/Boon of the Night Spirit.md` bonus-action; SRD 5e Grappler
80
- // `action` through the `feat_features` overlay since 0.3.11). CONVERTER: 76 of 287 feat docs since
81
- // import-5etools 1002a6c (31 bonus-action, 34 reaction, 11 action). Top-level at entity level
82
- // — the ninth SRD-control non-kept row: top-level on the ENTITY, not featureSchema-shaped
83
- // (finding 14's nine rows split 4 featureSchema / 4 §2.8-arity / this one, which needed its own
84
- // declaration — gate1-r4 R4-1). `actionCostEnum` is exported from
85
- // `schemas/resource-schema.ts` (optionalFeatureEntitySchema already imports it). MAPPED since
86
- // R4-G3a §10.2.3: the resolver aliases it onto the resolved feature's `action`, which is what
87
- // draws the feat note's Action line and files the row under that economy.
88
- image: imageField
89
- });
90
-
91
- export {
92
- featEntitySchema
93
- };
@@ -1,18 +0,0 @@
1
- import {
2
- parseOptionalFeature
3
- } from "./chunk-FMUD3LDV.js";
4
-
5
- // src/optional-feature/optional-feature.codec.ts
6
- import yaml from "js-yaml";
7
- var optionalFeatureCodec = {
8
- parse(doc) {
9
- return parseOptionalFeature(doc.body);
10
- },
11
- serialize(entity) {
12
- return yaml.dump(entity, { lineWidth: -1, sortKeys: false });
13
- }
14
- };
15
-
16
- export {
17
- optionalFeatureCodec
18
- };
@@ -1,41 +0,0 @@
1
- // src/schemas/selection-pool-schema.ts
2
- import { z } from "zod";
3
- var wikilinkRegex = /^\[\[[^[\]]+\]\]$/;
4
- var selectionPoolSchema = z.object({
5
- id: z.string().min(1),
6
- label: z.string().min(1),
7
- source: z.object({
8
- entity_type: z.literal("optional-feature"),
9
- where: z.object({
10
- feature_type: z.string().min(1),
11
- available_to: z.literal("self")
12
- })
13
- }),
14
- // ART-a (spec §4.5): `count.label`, `active` and `head_resource` carry NO zod default: the defaults are applied at
15
- // read by `poolCountLabel` / `poolActiveWords`, so a parse never adds a key (the importer's round trip).
16
- count: z.object({ column: z.string().min(1), label: z.string().min(1).optional() }),
17
- replaceable: z.boolean().optional(),
18
- active: z.object({ column: z.string().min(1), label: z.string().min(1), verb: z.string().min(1), counter_label: z.string().min(1).optional(), create_label: z.string().min(1).optional(), create_verb: z.string().min(1).optional() }).optional(),
19
- head_resource: z.string().min(1).optional()
20
- });
21
- var poolGrantSchema = z.object({
22
- pool: z.string().min(1),
23
- grants: z.array(z.object({
24
- feature: z.string().regex(wikilinkRegex),
25
- at_level: z.number().int().positive()
26
- }))
27
- });
28
- var tabDeclSchema = z.object({
29
- id: z.string().min(1),
30
- label: z.string().min(1),
31
- renders: z.object({
32
- pool: z.string().min(1),
33
- layout: z.enum(["spell-like", "blocks", "dice-pool", "point-pool"]).optional()
34
- })
35
- });
36
-
37
- export {
38
- selectionPoolSchema,
39
- poolGrantSchema,
40
- tabDeclSchema
41
- };
@@ -1,18 +0,0 @@
1
- import {
2
- parseClass
3
- } from "./chunk-XTEFPUSN.js";
4
-
5
- // src/class/class.codec.ts
6
- import yaml from "js-yaml";
7
- var classCodec = {
8
- parse(doc) {
9
- return parseClass(doc.body);
10
- },
11
- serialize(entity) {
12
- return yaml.dump(entity, { lineWidth: -1, sortKeys: false });
13
- }
14
- };
15
-
16
- export {
17
- classCodec
18
- };
@@ -1,24 +0,0 @@
1
- import {
2
- evaluateConditions
3
- } from "./chunk-A54HHCWW.js";
4
-
5
- // src/item/item.bonuses.ts
6
- function isConditionalBonus(x) {
7
- return !!x && typeof x === "object" && typeof x.value === "number" && Array.isArray(x.when);
8
- }
9
- function readNumericBonus(raw, ctx) {
10
- if (raw === void 0 || raw === null) return null;
11
- if (typeof raw === "number") {
12
- return raw === 0 ? null : { kind: "applied", value: raw };
13
- }
14
- if (!isConditionalBonus(raw)) return null;
15
- if (raw.value === 0) return null;
16
- const outcome = evaluateConditions(raw.when, ctx);
17
- if (outcome === "true") return { kind: "applied", value: raw.value };
18
- if (outcome === "false") return { kind: "skipped" };
19
- return { kind: "informational", value: raw.value, conditions: raw.when };
20
- }
21
-
22
- export {
23
- readNumericBonus
24
- };
@@ -1,52 +0,0 @@
1
- import {
2
- imageField
3
- } from "./chunk-UA5KS2PL.js";
4
-
5
- // src/armor/armor.schema.ts
6
- import { z } from "zod";
7
- var acSchema = z.object({
8
- base: z.number().int(),
9
- flat: z.number().int().default(0),
10
- add_dex: z.boolean().default(false),
11
- dex_max: z.number().int().nonnegative().optional(),
12
- add_con: z.boolean().default(false),
13
- add_wis: z.boolean().default(false),
14
- description: z.string().optional()
15
- });
16
- var armorEntitySchema = z.object({
17
- name: z.string().min(1),
18
- slug: z.string().min(1),
19
- category: z.string(),
20
- ac: acSchema,
21
- strength_requirement: z.number().int().optional(),
22
- stealth_disadvantage: z.boolean().optional(),
23
- weight: z.union([z.number(), z.string()]).optional(),
24
- cost: z.string().optional(),
25
- rarity: z.string().optional(),
26
- source: z.string().optional(),
27
- page: z.number().int().optional(),
28
- edition: z.string().optional(),
29
- entries: z.array(z.unknown()).optional(),
30
- // Root extras the converter and the SRD bundle emit on more than one root (spec §5).
31
- // Carrier counts measured on the G1b close census. `rendering_hint` is ALWAYS the empty
32
- // string today, so `.min(1)` is forbidden here.
33
- rendering_hint: z.string().optional(),
34
- // 27
35
- // The icon key (I3): a key of the renderer's icon set or a Lucide name; itemIconKey reads it first.
36
- icon: z.string().optional(),
37
- has_fluff: z.boolean().optional(),
38
- // 0 carriers — symmetry with weapon
39
- has_fluff_images: z.boolean().optional(),
40
- // 13
41
- // Already `.optional()` at its source — never append a second one.
42
- image: imageField,
43
- // 0 today (images-OFF tree)
44
- raw: z.record(z.string(), z.unknown()).optional()
45
- // `.loose()` is load-bearing for the `strength_required` alias (armor.parser.ts): the alias
46
- // rides through onto the typed output as an inert extra, which is what keeps its census
47
- // disposal `kept` instead of minting a `stripped` row. See the parser's comment.
48
- }).loose();
49
-
50
- export {
51
- armorEntitySchema
52
- };
@@ -1,23 +0,0 @@
1
- import {
2
- raceEntitySchema
3
- } from "./chunk-FJYBLXV7.js";
4
- import {
5
- aliasFeatureListActionCost
6
- } from "./chunk-4U55VNC7.js";
7
-
8
- // src/race/race.parser.ts
9
- import { parseYaml } from "@archivist-gg/core";
10
- function parseRace(source) {
11
- const raw = parseYaml(source, ["name", "slug"]);
12
- if (!raw.success) return raw;
13
- aliasFeatureListActionCost(raw.data.traits);
14
- const result = raceEntitySchema.safeParse({ edition: "2014", ...raw.data });
15
- if (!result.success) {
16
- return { success: false, error: `race schema validation failed: ${result.error.message}` };
17
- }
18
- return { success: true, data: result.data };
19
- }
20
-
21
- export {
22
- parseRace
23
- };
@@ -1,13 +0,0 @@
1
- // src/item/item.attunement.ts
2
- function requiresAttunement(entity) {
3
- if (!entity || !("attunement" in entity)) return false;
4
- const a = entity.attunement;
5
- if (a === true) return true;
6
- if (typeof a === "string") return a.length > 0;
7
- if (typeof a === "object" && a !== null) return a.required === true;
8
- return false;
9
- }
10
-
11
- export {
12
- requiresAttunement
13
- };
@@ -1,34 +0,0 @@
1
- // src/schemas/equipment-grant-schema.ts
2
- import { z } from "zod";
3
- var equipmentGrantSchema = z.union([
4
- z.object({
5
- item: z.string().min(1),
6
- qty: z.number().int().positive().optional(),
7
- contains_value: z.number().int().nonnegative().optional(),
8
- display_name: z.string().min(1).optional(),
9
- worth_value: z.number().int().nonnegative().optional()
10
- }).strict(),
11
- z.object({ category: z.string().min(1), qty: z.number().int().positive().optional(), display_name: z.string().min(1).optional() }).strict(),
12
- z.object({ gold: z.number().int().positive() }).strict()
13
- ]);
14
- var equipmentOptionSchema = z.object({
15
- label: z.string().min(1),
16
- grants: z.array(equipmentGrantSchema)
17
- }).strict();
18
- var startingEquipmentEntrySchema = z.discriminatedUnion("kind", [
19
- z.object({ kind: z.literal("choice"), options: z.array(equipmentOptionSchema).nonempty() }).strict(),
20
- z.object({ kind: z.literal("fixed"), label: z.string().min(1).optional(), grants: z.array(equipmentGrantSchema) }).strict(),
21
- z.object({ kind: z.literal("gold"), amount: z.number().int().positive() }).strict()
22
- ]);
23
- var startingGoldSchema = z.object({
24
- fixed: z.number().int().nonnegative().optional(),
25
- dice: z.string().min(1).optional(),
26
- multiplier: z.number().int().positive().optional()
27
- }).strict();
28
-
29
- export {
30
- equipmentGrantSchema,
31
- equipmentOptionSchema,
32
- startingEquipmentEntrySchema,
33
- startingGoldSchema
34
- };
@@ -1,58 +0,0 @@
1
- // src/pc/pc.table-column.ts
2
- function readTableColumn(table, level, keys) {
3
- var _a;
4
- const cols = (_a = table == null ? void 0 : table[level]) == null ? void 0 : _a.columns;
5
- if (!cols) return null;
6
- for (const k of keys) {
7
- const raw = cols[k];
8
- if (raw === void 0 || raw === null) continue;
9
- const n = typeof raw === "number" ? raw : parseInt(String(raw), 10);
10
- if (!Number.isNaN(n)) return n;
11
- }
12
- return null;
13
- }
14
- function numericColumnsAt(table, level) {
15
- var _a;
16
- const out = {};
17
- const cols = (_a = table == null ? void 0 : table[level]) == null ? void 0 : _a.columns;
18
- if (!cols) return out;
19
- for (const [k, raw] of Object.entries(cols)) {
20
- if (raw === void 0 || raw === null) continue;
21
- const n = typeof raw === "number" ? raw : parseInt(String(raw), 10);
22
- if (!Number.isNaN(n)) out[k] = n;
23
- }
24
- return out;
25
- }
26
- var COUNT_COLUMNS = {
27
- "weapon-mastery": ["Weapon Mastery"]
28
- };
29
- function countColumnsFor(choiceId) {
30
- if (!Object.prototype.hasOwnProperty.call(COUNT_COLUMNS, choiceId)) return void 0;
31
- return COUNT_COLUMNS[choiceId];
32
- }
33
- function diceColumnAt(table, level, key) {
34
- var _a;
35
- const cols = (_a = table == null ? void 0 : table[level]) == null ? void 0 : _a.columns;
36
- if (!cols || !Object.prototype.hasOwnProperty.call(cols, key)) return null;
37
- const raw = cols[key];
38
- if (typeof raw !== "string") return null;
39
- const cell = raw.trim();
40
- return /^\d+d\d+$/i.test(cell) ? cell : null;
41
- }
42
- var UNARMED_DIE_COLUMNS = {
43
- "martial-arts": "Martial Arts"
44
- };
45
- function unarmedDieColumnFor(featureSlug) {
46
- if (!Object.prototype.hasOwnProperty.call(UNARMED_DIE_COLUMNS, featureSlug)) return void 0;
47
- return UNARMED_DIE_COLUMNS[featureSlug];
48
- }
49
-
50
- export {
51
- readTableColumn,
52
- numericColumnsAt,
53
- COUNT_COLUMNS,
54
- countColumnsFor,
55
- diceColumnAt,
56
- UNARMED_DIE_COLUMNS,
57
- unarmedDieColumnFor
58
- };
@@ -1,219 +0,0 @@
1
- // src/schemas/feature-effect-schema.ts
2
- import { z } from "zod";
3
- var abilityEnum = z.enum(["str", "dex", "con", "int", "wis", "cha"]);
4
- var subjectField = z.string().min(1).optional();
5
- var conditionField = z.string().optional();
6
- var weaponScopeEnum = z.enum(["weapon", "melee", "ranged", "unarmed", "finesse", "thrown"]);
7
- var spellScopeSchema = z.object({
8
- list: z.string().min(1).optional(),
9
- level: z.number().int().min(0).max(9).optional(),
10
- school: z.string().min(1).optional(),
11
- damage_types: z.array(z.string().min(1)).min(1).optional(),
12
- damage_type_pick: z.string().min(1).optional(),
13
- spells: z.array(z.string().min(1)).min(1).optional(),
14
- once: z.boolean().optional()
15
- }).strict();
16
- var featureEffectSchema = z.discriminatedUnion("kind", [
17
- z.object({ kind: z.literal("initiative-bonus"), value: z.number().int(), condition: conditionField, subject: subjectField }),
18
- z.object({ kind: z.literal("skill-bonus"), skills: z.array(z.string().min(1)).nonempty(), ability: abilityEnum, minimum: z.number().int().optional(), condition: conditionField, subject: subjectField }),
19
- // SL (2026-09-27): the `skill-bonus` twin for saving throws (Aura of Protection). `saves` absent = every save; `inactive_while` turns
20
- // the bonus off while the character is incapacitated (any condition that disables actions) or unconscious.
21
- z.object({
22
- kind: z.literal("save-bonus"),
23
- ability: abilityEnum,
24
- minimum: z.number().int().optional(),
25
- saves: z.array(abilityEnum).nonempty().optional(),
26
- inactive_while: z.enum(["incapacitated", "unconscious"]).optional(),
27
- condition: conditionField,
28
- subject: subjectField
29
- }),
30
- // Jack of All Trades / Remarkable Athlete: half the proficiency bonus, and ONLY on a skill the character is
31
- // not already proficient in — the "doesn't otherwise use your Proficiency Bonus" clause is the whole mechanic,
32
- // so it is the kind's semantics, not a field. `skills` omitted = every skill (Jack of All Trades); a list
33
- // narrows it (Remarkable Athlete). `round` is authored because the two printed features disagree: Jack of All
34
- // Trades rounds down, Remarkable Athlete rounds up.
35
- z.object({ kind: z.literal("half-proficiency"), skills: z.array(z.string().min(1)).nonempty().optional(), round: z.enum(["down", "up"]).optional(), condition: conditionField, subject: subjectField }),
36
- // `condition` here is the condition NAME (frightened, poisoned); the qualifier is `while`.
37
- z.object({ kind: z.literal("immune-condition"), condition: z.string().min(1), while: z.string().optional(), subject: subjectField }),
38
- z.object({ kind: z.literal("resistance"), damage_type: z.string().min(1), condition: conditionField, subject: subjectField }),
39
- z.object({ kind: z.literal("hp-per-level-bonus"), value: z.number().int(), condition: conditionField, subject: subjectField }),
40
- z.object({
41
- kind: z.literal("speed-bonus"),
42
- mode: z.enum(["walk", "fly", "swim", "climb", "burrow"]),
43
- value: z.number().int(),
44
- // when true, value is an absolute floor (Math.max), not additive; currently
45
- // only surfaced for mode:"walk" · other modes have no derived speed yet.
46
- set: z.boolean().optional(),
47
- // R4-G7 §7.3: the WHOLE progression lives inside the effect, because the overlay's `class_features`
48
- // map is keyed `<class>:<feature-slug>` with no level component and, after §7.1's fold, the sheet
49
- // reads exactly ONE copy of a repeated feature. The engine takes the highest entry at or below the
50
- // effect's OWN source level (`levelFor`), and applies it to the additive bonus and to a `set` floor
51
- // alike. The Monk's Unarmored Movement is the shipped carrier shape.
52
- scales_at: z.array(z.object({ level: z.number().int().min(1).max(20), value: z.number().int() })).optional(),
53
- condition: conditionField,
54
- subject: subjectField
55
- }),
56
- z.object({
57
- // The attunement CAP, as data. `value` is an absolute cap ("you can now attune to up to four"),
58
- // never an increment, so two grants MAX rather than sum and a grant can never lower the cap:
59
- // recalc folds it as Math.max(3, granted). `scales_at` carries a whole progression on ONE effect —
60
- // the `speed-bonus` / `extra-attack` shape (R4-G7 §7.3) — because the overlay has no level axis and
61
- // the Artificer's three steps (10 -> 4, 14 -> 5, 18 -> 6) would otherwise need three separate
62
- // features, one of which is embedded prose inside another feature's description.
63
- kind: z.literal("attunement-limit"),
64
- value: z.number().int().positive(),
65
- scales_at: z.array(z.object({ level: z.number().int().min(1).max(20), value: z.number().int().positive() })).optional(),
66
- condition: conditionField,
67
- subject: subjectField
68
- }),
69
- z.object({
70
- kind: z.literal("sense"),
71
- type: z.enum(["darkvision", "blindsight", "tremorsense", "truesight"]),
72
- range: z.number().int().nonnegative(),
73
- condition: conditionField,
74
- subject: subjectField
75
- }),
76
- // `condition` here is the condition NAME being applied.
77
- z.object({
78
- kind: z.literal("apply-condition"),
79
- condition: z.string().min(1),
80
- duration: z.string().optional(),
81
- ends_on: z.array(z.string()).optional(),
82
- save_repeat: z.object({ ability: z.string().min(1), timing: z.string().min(1) }).optional(),
83
- subject: subjectField
84
- }),
85
- z.object({
86
- kind: z.literal("damage-bonus"),
87
- // intentionally an open string, NOT a damage-type enum: must accept the
88
- // literal "chosen" (player-selected damage type at action time) alongside
89
- // canonical damage types. Do not tighten to an enum.
90
- damage_type: z.string().min(1),
91
- amount: z.string().min(1),
92
- // ART-c1 Task 9b: `spell` and `all` as before, or a weapon scope, one word or an any-of list, which the engine
93
- // evaluates per attack row (pc.recalc.ts `riderReachesRow`). `weapon`, like an absent value, reaches every row.
94
- applies_to: z.union([z.enum(["spell", "all"]), weaponScopeEnum, z.array(weaponScopeEnum).min(1)]).optional(),
95
- // The spells a `spell` or `all` rider reaches (Potent Spellcasting's Cleric cantrips, Empowered Evocation's Wizard
96
- // evocation spells); pc.recalc.ts `spellsInScope` reads it. A `spell` rider without one reaches only the spells its
97
- // pool member's data names (Agonizing Blast's target pick); an `all` rider without one reaches every damaging spell.
98
- spell_scope: spellScopeSchema.optional(),
99
- condition: conditionField,
100
- subject: subjectField
101
- }),
102
- z.object({
103
- kind: z.literal("proficiency"),
104
- proficiency_type: z.enum(["skill", "tool", "language", "saving-throw", "armor", "weapon"]),
105
- value: z.string().min(1),
106
- expertise: z.boolean().optional(),
107
- condition: conditionField,
108
- subject: subjectField
109
- }),
110
- z.object({ kind: z.literal("ac-bonus"), value: z.number().int(), requires_armor: z.boolean().optional(), condition: conditionField, subject: subjectField }),
111
- z.object({
112
- kind: z.literal("unarmored-ac"),
113
- abilities: z.array(abilityEnum),
114
- base: z.number().int().optional(),
115
- allow_shield: z.boolean().optional(),
116
- condition: conditionField,
117
- subject: subjectField
118
- }),
119
- z.object({
120
- kind: z.literal("unarmed-strike"),
121
- // R4-G7 §7.2: a bare die expression, `<count>d<faces>`. `resolveUnarmedStrike` averages the flat arm with
122
- // /^(\d+)d(\d+)$/ and silently averages anything else as 1, so a modifier tail ("1d6+1") or a missing
123
- // half ("d6", "1d") must refuse here rather than mis-average there. The `i` arm keeps an authored `1D6`.
124
- dice: z.union([z.string().regex(/^\d+d\d+$/i), z.object({ column: z.string().min(1) })]).optional(),
125
- abilities: z.array(abilityEnum).nonempty().optional(),
126
- condition: conditionField,
127
- subject: subjectField
128
- }),
129
- z.object({
130
- kind: z.literal("weapon-ability"),
131
- ability: z.union([abilityEnum, z.literal("spellcasting")]),
132
- weapons: z.union([z.literal("chosen"), z.string(), z.array(z.string())]).optional(),
133
- condition: conditionField,
134
- subject: subjectField
135
- }),
136
- z.object({
137
- kind: z.literal("roll-modifier"),
138
- mode: z.enum(["advantage", "disadvantage", "reroll", "add-d4"]),
139
- roll: z.enum(["ability-check", "saving-throw", "attack", "any"]),
140
- scope: z.string().optional(),
141
- condition: conditionField,
142
- subject: subjectField
143
- }),
144
- z.object({
145
- kind: z.literal("extra-attack"),
146
- // `count` is EXTRA attacks, never total attacks: the engine renders `1 + count`.
147
- count: z.number().int().positive(),
148
- // R4-G7 §7.3, the `speed-bonus` twin: the SRD 5e Fighter's one Extra Attack feature carries its whole
149
- // 5 / 11 / 20 progression here, because `bucketFeaturesByLevel` emits one overlay record into every
150
- // `gained_at` bucket and a per-copy count cannot be authored.
151
- scales_at: z.array(z.object({ level: z.number().int().min(1).max(20), count: z.number().int().positive() })).optional(),
152
- condition: conditionField,
153
- subject: subjectField
154
- }),
155
- z.object({
156
- kind: z.literal("crit-range"),
157
- min_roll: z.number().int().min(2).max(20),
158
- applies_to: z.enum(["weapon", "spell", "all"]).optional(),
159
- condition: conditionField,
160
- subject: subjectField
161
- }),
162
- z.object({
163
- kind: z.literal("reroll-damage"),
164
- max_reroll: z.number().int().positive(),
165
- applies_to: z.enum(["weapon", "spell", "all"]).optional(),
166
- once_per_die: z.boolean().optional(),
167
- condition: conditionField,
168
- subject: subjectField
169
- }),
170
- z.object({ kind: z.literal("attack-rule"), flag: z.enum(["no-ranged-in-melee-disadvantage"]), condition: conditionField, subject: subjectField }),
171
- // R4-G1a declared these seven converter-emitted arms with the engine folding NOTHING for them
172
- // (spec D3). R4-G3a §3-§7 gives SIX of them semantics: immunity / vulnerability FOLD (defenses
173
- // pane); temp-hp / heal / extra-action are still NOT folded, the plugin reads them raw as
174
- // row-local captions; save-outcome FOLDS (save-chip tag rail).
175
- // `ability-score-increase` folds FLAT at the fold since R4-G3b §4 (fixed-list arms only; `chosen` arms
176
- // are the ASI slot's second encoding; `max` is unread by user ruling).
177
- // Damage immunity / vulnerability. NOT `immune-condition`, which is condition immunity.
178
- z.object({ kind: z.literal("immunity"), damage_type: z.string().min(1), condition: conditionField, subject: subjectField }),
179
- z.object({ kind: z.literal("vulnerability"), damage_type: z.string().min(1), condition: conditionField, subject: subjectField }),
180
- // `amount` is the open non-empty STRING `damage-bonus.amount` already uses: "2d6", "5", "your Artificer level".
181
- z.object({ kind: z.literal("temp-hp"), amount: z.string().min(1), condition: conditionField, subject: subjectField }),
182
- z.object({ kind: z.literal("heal"), amount: z.string().min(1), condition: conditionField, subject: subjectField }),
183
- z.object({
184
- kind: z.literal("ability-score-increase"),
185
- // "chosen" follows `weapon-ability.weapons`; the list follows `unarmored-ac.abilities`.
186
- abilities: z.union([z.literal("chosen"), z.array(abilityEnum).min(1)]),
187
- amount: z.number().int().positive(),
188
- // Required-WITH-NULL, never optional: "the prose stated no cap" and "the extractor forgot" must not look alike.
189
- choose: z.number().int().positive().nullable(),
190
- max: z.number().int().positive().nullable(),
191
- condition: conditionField,
192
- subject: subjectField
193
- }).refine((e) => e.abilities === "chosen" === (e.choose !== null), {
194
- path: ["choose"],
195
- message: 'choose is required IFF abilities is "chosen": a fixed LIST is its own count'
196
- }),
197
- // `extra-action` is an additional ACTION on your turn; `extra-attack` is attacks WITHIN the Attack action.
198
- z.object({
199
- kind: z.literal("extra-action"),
200
- count: z.number().int().positive(),
201
- action_type: z.enum(["action", "bonus-action", "reaction"]),
202
- condition: conditionField,
203
- subject: subjectField
204
- }),
205
- // `save-outcome` remaps the OUTCOME; `roll-modifier` modifies the ROLL.
206
- z.object({
207
- kind: z.literal("save-outcome"),
208
- ability: z.union([abilityEnum, z.literal("any")]),
209
- on_success: z.enum(["none", "half", "full"]),
210
- on_failure: z.enum(["none", "half", "full"]),
211
- applies_to: z.string().nullable(),
212
- condition: conditionField,
213
- subject: subjectField
214
- })
215
- ]);
216
-
217
- export {
218
- featureEffectSchema
219
- };
@@ -1,18 +0,0 @@
1
- import {
2
- parseWeapon
3
- } from "./chunk-XCFC7LGF.js";
4
-
5
- // src/weapon/weapon.codec.ts
6
- import yaml from "js-yaml";
7
- var weaponCodec = {
8
- parse(doc) {
9
- return parseWeapon(doc.body);
10
- },
11
- serialize(entity) {
12
- return yaml.dump(entity, { lineWidth: -1, sortKeys: false });
13
- }
14
- };
15
-
16
- export {
17
- weaponCodec
18
- };
@@ -1,14 +0,0 @@
1
- // src/pc/spell-source.ts
2
- var SPELL_SOURCE = {
3
- class: { ownAbility: false, section: "spellbook", freeCastWhenNoSlot: false, showInPrepare: true, countsAsGranted: false },
4
- feat: { ownAbility: true, section: "spellbook", freeCastWhenNoSlot: true, showInPrepare: true, countsAsGranted: true },
5
- item: { ownAbility: false, section: "consumable", freeCastWhenNoSlot: false, showInPrepare: false, countsAsGranted: true },
6
- race: { ownAbility: true, section: "spellbook", freeCastWhenNoSlot: true, showInPrepare: true, countsAsGranted: true },
7
- domain: { ownAbility: false, section: "spellbook", freeCastWhenNoSlot: false, showInPrepare: true, countsAsGranted: false }
8
- };
9
- var spellSource = (s) => SPELL_SOURCE[s.source];
10
-
11
- export {
12
- SPELL_SOURCE,
13
- spellSource
14
- };