@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
@@ -10,28 +10,6 @@ export interface ResolveResult {
10
10
  warnings: string[];
11
11
  }
12
12
  export declare function stripSlug(ref: string | null): string | null;
13
- /**
14
- * Resolve a background's `origin_feat` wikilink into a real FeatEntity + a display
15
- * name, using ONLY the EntityRegistry (no DOM). Lifted from the builder's
16
- * background-step so the resolver pipeline and the builder share ONE resolution
17
- * (R2-m7, [[always-retire-shims-edit-all]]). Handles both path-style refs
18
- * ("[[SRD 2024/Feats/Alert]]") and bare-slug refs ("[[my-feat]]"), plus the 2024
19
- * parenthetical-variant refs ("[[SRD 2024/Feats/Magic Initiate (Cleric)]]") that
20
- * resolve to the BASE feat ("magic-initiate") while keeping the full variant
21
- * string as the display name. Returns null when the ref is empty or resolves to no
22
- * feat (an unresolvable ref folds nothing into the pipeline).
23
- *
24
- * R4-G4 §8: this is a SEVEN-TIER cascade, first hit wins, and the granting
25
- * BACKGROUND's slug arrives as `ownerSlug` so the compendium-scoped tiers can read
26
- * its prefix. It replaces the old two-tier "exact slug, else FIRST tail match"
27
- * lookup, whose two defects were measured on the shipped corpora: a tail match on a
28
- * DIFFERENT real feat pre-empted the parenthetical strip (PHB 2024
29
- * "Magic Initiate; Cleric", tail `magic-initiate-cleric`, beat SRD 2024
30
- * "Magic Initiate" for every 2024 Acolyte / Sage, order-independently), and where
31
- * several same-NAMED feats exist the registry order decided which one won
32
- * (`EntityRegistry.search` sorts by lowercased name, so equal names fall through to
33
- * insertion order).
34
- */
35
13
  export declare function resolveOriginFeat(entities: EntityRegistry, originFeatRef: string | null | undefined, ownerSlug?: string | null): {
36
14
  feat: FeatEntity;
37
15
  display: string;
@@ -39,110 +17,34 @@ export declare function resolveOriginFeat(entities: EntityRegistry, originFeatRe
39
17
  export declare class PCResolver {
40
18
  private readonly entities;
41
19
  constructor(entities: EntityRegistry);
42
- /** Exposed so recalc() can apply equipment bonuses (Pass A / Pass B). */
43
20
  get registry(): EntityRegistry;
44
21
  resolve(character: Character): ResolveResult;
45
22
  }
46
- /**
47
- * 2024 Weapon Mastery: unions the persisted `weapon-mastery` picks across every
48
- * class/level `ClassEntry.choices[level]["weapon-mastery"]`. Returns both the
49
- * ORIGINAL full picked slugs (`full` — used for exact-match display-name lookup)
50
- * and their BARE-normalized form (`bare` — e.g. "srd-2024_greatsword" →
51
- * "greatsword"), each de-duplicated in first-seen order. Bare-authored picks
52
- * normalize to themselves. Non-string / non-array picks are ignored.
53
- */
54
23
  export declare function collectChosenWeaponMasteries(character: Character): {
55
24
  bare: string[];
56
25
  full: string[];
57
26
  };
58
- /**
59
- * R4-G7 T8 RIDER-23 · every `choices[<level>].feat` pick with the slot it was taken at: the index of its class entry and
60
- * the level key as a number (`null` when the key is not an integer). De-duplicated by slug in first-seen order (class
61
- * entries in order, level keys ascending as `Object.entries` yields integer keys), so a feat picked twice keeps its FIRST
62
- * slot. Slugs are bare (no `[[ ]]`). The resolver's one walk of class.choices for `feat` entries: the slug-only wrapper that
63
- * mapped it had no production caller after RIDER-23 and was retired in wave D fix round 1.
64
- */
65
27
  export declare function collectFeatPicks(character: Character): {
66
28
  slug: string;
67
29
  classIndex: number;
68
30
  level: number | null;
69
31
  }[];
70
- /**
71
- * Feat→spell application (3d). Walks a feat's OWN `choices` to find its spell
72
- * picks and turns each into a ResolvedSpell. A feat's spells sit behind a
73
- * `spell-list` select-inline whose CHOSEN branch nests `select-entity{spell}`
74
- * picks; the chosen spellcasting ability comes from the feat's
75
- * `spellcasting-ability` select-inline. `read(childId)` yields the persisted pick
76
- * for a child choice id (origin feat: `origin_choices["background:feat:<id>"]`;
77
- * class-slot feat: `choices[lvl]["feat:<id>"]`). Unresolvable spell slugs warn and
78
- * are skipped, mirroring the known-spell loop. classSlug stays null: a feat spell
79
- * is not owned by a class for DC/ability; the carried `ability` drives its casting.
80
- */
81
32
  export declare function collectFeatGrantedSpells(feat: FeatEntity, read: (childId: string) => ChoiceValue | undefined, entities: EntityRegistry, warnings: string[]): ResolvedSpell[];
82
- /**
83
- * Item→spell application (P4-T3). Walks the character's equipment for entries whose
84
- * resolved item is a spell scroll (carries the T1 `scroll_level` marker) AND names a
85
- * chosen spell via `overrides.spell`, turning each into a
86
- * ResolvedSpell{ source:"item", classSlug:null, prepared:true, alwaysPrepared:true }.
87
- * The casting `ability` is the character's OWN spellcasting ability when they have
88
- * one (`ownAbility`, the first caster class's ability), else the per-instance
89
- * `overrides.spell_ability`, else undefined (a no-ability scroll is left ability-less:
90
- * the plugin surfaces it without a DC; an ability is NEVER fabricated here).
91
- * `entryIndex` records the originating equipment index so the segmented dedupe keeps
92
- * two scrolls of one spell (and a scroll of a class-known spell) as their own rows.
93
- * Unresolvable spell slugs warn and are skipped, mirroring the known-spell + feat loops.
94
- * In-memory only: no KnownSpellObject{source:"item"} is injected (its strict schema
95
- * omits `ability`).
96
- */
97
33
  export declare function collectItemGrantedSpells(character: Character, ownAbility: Ability | null, entities: EntityRegistry, warnings: string[]): ResolvedSpell[];
98
- /**
99
- * Collapses duplicate resolved spells (3d Minor #2 carry-forward + P4-T3 segmented
100
- * dedupe). A spell can be emitted more than once: it may be BOTH in
101
- * `character.spells.known` AND a feat pick, or a feat may be taken as both origin +
102
- * class-slot, or an `additional_spells` grant (R4-G3b §5) may name a spell the character
103
- * already knows. A class-sourced copy owns a real DC via its `classSlug`, so it always
104
- * wins over a feat copy of the same slug; otherwise the FIRST-SEEN copy holds the slot.
105
- * Which copy holds the slot is not the whole answer, though: `alwaysPrepared` is OR-merged
106
- * onto the winner in BOTH collision orders (R4-G3b §5.2.8), so a hand-added Bless that a
107
- * subclass later grants stops counting against the prepared limit instead of counting
108
- * forever. `persisted` crosses the merge as well, in both orders (fix 1b): removability is
109
- * MEMBERSHIP in `character.spells.known`, so the flag belongs to the SLUG, not to whichever
110
- * copy won. Nothing else crosses: the winner keeps its own `source` / `classSlug` /
111
- * `entryIndex`. Insertion order
112
- * is preserved (a later class copy replaces an earlier feat copy in place), so the
113
- * Spells section never renders duplicate rows while a legitimately class-known copy is
114
- * never lost. Item-source spells carry INSTANCE identity: they key by
115
- * `slug + "#" + entryIndex`, so two scrolls of one spell stay two rows and a scroll of
116
- * a class-known spell keeps its OWN item row, never collapsing into / being collapsed
117
- * by a class/feat copy. The class/feat slug-only merge is unchanged. An AT-WILL copy (a pool member's innate grant) keys
118
- * by `slug + "#atwill"` (review D1, coordinator ruling 2026-09-28): it is a row of its own beside a copy the character
119
- * already has (the slotted cast can upcast and target others), neither row's flags cross to the other, and two at-will
120
- * copies of one spell are still one row.
121
- */
122
34
  export declare function dedupeResolvedSpells(spells: ResolvedSpell[]): ResolvedSpell[];
123
- /** Selected select-entity values (optional-features) and selected inline
124
- * options carrying effects[] become synthesized resolved features (SP2 Plan 3 §9).
125
- * The actions/resources engines consume these synthesized features, and the
126
- * effects-application pass (pc.feature-effects.ts → recalc) consumes their
127
- * effects[]. Scope: class/subclass level choices, plus race/background origin
128
- * choices (origin_choices keys are namespaced "race:<id>" / "background:<id>"). */
129
35
  export declare function collectChosenGrantedFeatures(character: Character, classes: ResolvedClass[], registry: {
130
36
  getByTypeAndSlug(type: string, slug: string): {
131
37
  data: Record<string, unknown>;
132
38
  } | undefined;
133
39
  }, race?: RaceEntity | null, background?: BackgroundEntity | null, memberSites?: PoolMemberSite[]): ResolvedFeature[];
134
- /**
135
- * `character.additional_features` → ResolvedFeatures (the DM-grant path).
136
- *
137
- * Deliberately NOT routed through `walkChoiceGrants`: that converter emits
138
- * `{id, name, description, effects, action}` and DROPS `uses`, which is correct there because a pool
139
- * pick's tracker is built separately by `resolveResourceIndex`'s pools loop. A campaign grant has no
140
- * pool, so nothing would ever build its tracker — the feature would render as a card with no counter.
141
- * This walk therefore converts `uses` into the feature's own `resources[]`, which
142
- * `resolveFeatureResources` already indexes, and the grant gets a tracker with no pool involved.
143
- *
144
- * A prose `uses.max` (the 4 shipped carriers that have one) yields no resource rather than a broken
145
- * tracker, matching the pools loop's rule; the feature still renders.
146
- */
40
+ export declare function collectFeatChoiceGrants(sites: ReadonlyArray<{
41
+ feat: FeatEntity;
42
+ via?: FeatVia | null;
43
+ read: (childId: string) => ChoiceValue | undefined;
44
+ }>, registry: {
45
+ getByTypeAndSlug(type: string, slug: string): {
46
+ data: Record<string, unknown>;
47
+ } | undefined;
48
+ }): ResolvedFeature[];
147
49
  export declare function collectAdditionalFeatures(character: Character, entities: EntityRegistry, warnings: string[]): ResolvedFeature[];
148
50
  export declare function collectResolvedFeatures(race: RaceEntity | null, classes: ResolvedClass[], background: BackgroundEntity | null, feats: FeatEntity[], featVia?: ReadonlyMap<string, FeatVia>): ResolvedFeature[];
@@ -1,60 +1 @@
1
- import {
2
- PCResolver,
3
- collectAdditionalFeatures,
4
- collectChosenGrantedFeatures,
5
- collectChosenWeaponMasteries,
6
- collectFeatGrantedSpells,
7
- collectFeatPicks,
8
- collectItemGrantedSpells,
9
- collectResolvedFeatures,
10
- dedupeResolvedSpells,
11
- resolveOriginFeat,
12
- stripSlug
13
- } from "../chunk-EJD47JHL.js";
14
- import "../chunk-2LULMQTF.js";
15
- import "../chunk-QA3YCOML.js";
16
- import "../chunk-64VNLMSG.js";
17
- import "../chunk-TOM66P2P.js";
18
- import "../chunk-KU3YLF6D.js";
19
- import "../chunk-5JXFJ5AU.js";
20
- import "../chunk-RD2MID3M.js";
21
- import "../chunk-LICYHPI3.js";
22
- import "../chunk-PVCEA4HZ.js";
23
- import "../chunk-KSTV7J2U.js";
24
- import "../chunk-DPUJDOKV.js";
25
- import "../chunk-LBEXLN6I.js";
26
- import "../chunk-NXUY5XQN.js";
27
- import "../chunk-W6GC6OKK.js";
28
- import "../chunk-B3DP42OM.js";
29
- import "../chunk-IUAAXXNO.js";
30
- import "../chunk-YHYTW5QA.js";
31
- import "../chunk-ZUQW5VBZ.js";
32
- import "../chunk-IHE6KVC3.js";
33
- import "../chunk-LHZXYFBU.js";
34
- import "../chunk-YBLDE5CG.js";
35
- import "../chunk-LVQLWRCU.js";
36
- import "../chunk-CM5CWO4K.js";
37
- import "../chunk-4J6DS3EJ.js";
38
- import "../chunk-EVMUJYUD.js";
39
- import "../chunk-VTTA2ALZ.js";
40
- import "../chunk-ZCTUYGNV.js";
41
- import "../chunk-7Q2VPKCD.js";
42
- import "../chunk-ZDAEGJH4.js";
43
- import "../chunk-3TM34RSJ.js";
44
- import "../chunk-PDJSUH24.js";
45
- import "../chunk-WELIKLZF.js";
46
- import "../chunk-4U55VNC7.js";
47
- import "../chunk-UA5KS2PL.js";
48
- export {
49
- PCResolver,
50
- collectAdditionalFeatures,
51
- collectChosenGrantedFeatures,
52
- collectChosenWeaponMasteries,
53
- collectFeatGrantedSpells,
54
- collectFeatPicks,
55
- collectItemGrantedSpells,
56
- collectResolvedFeatures,
57
- dedupeResolvedSpells,
58
- resolveOriginFeat,
59
- stripSlug
60
- };
1
+ import{PCResolver,collectAdditionalFeatures,collectChosenGrantedFeatures,collectChosenWeaponMasteries,collectFeatChoiceGrants,collectFeatGrantedSpells,collectFeatPicks,collectItemGrantedSpells,collectResolvedFeatures,dedupeResolvedSpells,resolveOriginFeat,stripSlug}from"../chunk-J5GL6FLP.js";import"../chunk-2EOGK6R6.js";import"../chunk-RQZCGXUZ.js";import"../chunk-GD7WRCNH.js";import"../chunk-FOLHTMSC.js";import"../chunk-4JEF3CET.js";import"../chunk-VTQ4RWEG.js";import"../chunk-J3RP5C7L.js";import"../chunk-WAUNLUFQ.js";import"../chunk-CEHL7PPC.js";import"../chunk-UBUKCRZ3.js";import"../chunk-KEXSF3CH.js";import"../chunk-PFQPP77Q.js";import"../chunk-QVWT67WA.js";import"../chunk-PKIMOVQG.js";import"../chunk-CMIEZQL4.js";import"../chunk-CSTAQQGX.js";import"../chunk-O776WL7O.js";import"../chunk-3LWOVRLA.js";import"../chunk-DVUXUIPV.js";import"../chunk-YGH7S5ZF.js";import"../chunk-4IAMSRHD.js";import"../chunk-3QQOATV3.js";import"../chunk-DZITM5AG.js";import"../chunk-PZ4L2EEG.js";import"../chunk-QMEKQTUT.js";import"../chunk-EAARMPCW.js";import"../chunk-CAPYNIGK.js";import"../chunk-63YJPWTM.js";import"../chunk-4KVVAENP.js";import"../chunk-7EL3GWWJ.js";import"../chunk-BREHZNTL.js";import"../chunk-7FPQJDFD.js";import"../chunk-EVT7MGAC.js";import"../chunk-S5UCI27C.js";import"../chunk-ZVL5FXXO.js";import"../chunk-I26FHSI6.js";export{PCResolver,collectAdditionalFeatures,collectChosenGrantedFeatures,collectChosenWeaponMasteries,collectFeatChoiceGrants,collectFeatGrantedSpells,collectFeatPicks,collectItemGrantedSpells,collectResolvedFeatures,dedupeResolvedSpells,resolveOriginFeat,stripSlug};
@@ -1,11 +1,3 @@
1
1
  import type { ResolvedCharacter, DerivedStats, FeatureSource } from "./pc.types.js";
2
2
  import type { FormulaBindings } from "@archivist-gg/dnd5e/dnd/resource-formula";
3
- /** Build the DSL bindings for a resource granted via `source`. `class_level`
4
- * is the character's level in the granting class; for a `subclass` source it
5
- * is the level in the class that OWNS that subclass, and it falls back to the
6
- * total level for race/background/feat sources (or when the class isn't found).
7
- * Also binds `columns` · the numeric values of that (sub)class's table row at
8
- * `class_level` (empty when there is no table/row), backing the `column('Name')`
9
- * accessor in the DSL. Ability mods come from the final (post-bonus) derived mods.
10
- * `class_level` comes from `resourceLevelFor` (pc.resources.ts), the one derivation. */
11
3
  export declare function resourceBindings(resolved: ResolvedCharacter, derived: DerivedStats, source: FeatureSource): FormulaBindings;
@@ -1,42 +1 @@
1
- import {
2
- resourceLevelFor
3
- } from "../chunk-KSTV7J2U.js";
4
- import "../chunk-DPUJDOKV.js";
5
- import {
6
- numericColumnsAt
7
- } from "../chunk-IUAAXXNO.js";
8
- import "../chunk-LVQLWRCU.js";
9
- import "../chunk-EVMUJYUD.js";
10
- import "../chunk-VTTA2ALZ.js";
11
- import "../chunk-PDJSUH24.js";
12
- import "../chunk-WELIKLZF.js";
13
-
14
- // src/pc/pc.resource-seed.ts
15
- function resourceBindings(resolved, derived, source) {
16
- var _a, _b, _c, _d;
17
- const classLevel = resourceLevelFor(source, resolved);
18
- let table;
19
- if (source.kind === "class") table = (_b = (_a = resolved.classes.find((c) => {
20
- var _a2;
21
- return ((_a2 = c.entity) == null ? void 0 : _a2.slug) === source.slug;
22
- })) == null ? void 0 : _a.entity) == null ? void 0 : _b.table;
23
- else if (source.kind === "subclass") table = (_d = (_c = resolved.classes.find((c) => {
24
- var _a2;
25
- return ((_a2 = c.subclass) == null ? void 0 : _a2.slug) === source.slug;
26
- })) == null ? void 0 : _c.subclass) == null ? void 0 : _d.table;
27
- return {
28
- level: resolved.totalLevel,
29
- class_level: classLevel,
30
- prof: derived.proficiencyBonus,
31
- str_mod: derived.mods.str,
32
- dex_mod: derived.mods.dex,
33
- con_mod: derived.mods.con,
34
- int_mod: derived.mods.int,
35
- wis_mod: derived.mods.wis,
36
- cha_mod: derived.mods.cha,
37
- columns: numericColumnsAt(table, classLevel)
38
- };
39
- }
40
- export {
41
- resourceBindings
42
- };
1
+ import{resourceLevelFor}from"../chunk-KEXSF3CH.js";import"../chunk-PFQPP77Q.js";import"../chunk-PKIMOVQG.js";import"../chunk-CMIEZQL4.js";import{numericColumnsAt}from"../chunk-CSTAQQGX.js";import"../chunk-O776WL7O.js";import"../chunk-DVUXUIPV.js";import"../chunk-YGH7S5ZF.js";import"../chunk-4IAMSRHD.js";import"../chunk-DZITM5AG.js";import"../chunk-PZ4L2EEG.js";import"../chunk-QMEKQTUT.js";import"../chunk-EAARMPCW.js";import"../chunk-CAPYNIGK.js";import"../chunk-63YJPWTM.js";import"../chunk-BREHZNTL.js";import"../chunk-7FPQJDFD.js";import"../chunk-EVT7MGAC.js";function resourceBindings(resolved,derived,source){var _a,_b,_c,_d;const classLevel=resourceLevelFor(source,resolved);let table;if(source.kind==="class")table=(_b=(_a=resolved.classes.find(c=>{var _a2;return((_a2=c.entity)==null?void 0:_a2.slug)===source.slug}))==null?void 0:_a.entity)==null?void 0:_b.table;else if(source.kind==="subclass")table=(_d=(_c=resolved.classes.find(c=>{var _a2;return((_a2=c.subclass)==null?void 0:_a2.slug)===source.slug}))==null?void 0:_c.subclass)==null?void 0:_d.table;return{level:resolved.totalLevel,class_level:classLevel,prof:derived.proficiencyBonus,str_mod:derived.mods.str,dex_mod:derived.mods.dex,con_mod:derived.mods.con,int_mod:derived.mods.int,wis_mod:derived.mods.wis,cha_mod:derived.mods.cha,columns:numericColumnsAt(table,classLevel)}}export{resourceBindings};
@@ -1,27 +1,5 @@
1
1
  import type { FeatureSource, ResolvedCharacter, ResolvedFeature, ResolvedPool, ResolvedPoolEntry, DerivedStats } from "./pc.types.js";
2
2
  import type { ResourceRecovery, ResourceDie, ResourceScaleStep, ResetTrigger } from "../types/resource.js";
3
- /** The level a resource granted via `source` scales against (R4-G4 §6.2.4, ONE derivation): the
4
- * character's level in the granting class; for a `subclass` source the level in the class that OWNS
5
- * that subclass; the total level for race / background / feat sources, or when the class is not found.
6
- * `resourceBindings` (pc.resource-seed.ts) binds `class_level` through this function, and R4-G4 T3
7
- * (§6.2.4 / §6.2.5) routed the plugin's three former TOTAL-level reads through it too, so
8
- * `class_level`, `scales_at` and the die can no longer disagree. T4 added a fourth read, the die label
9
- * of `renderSpendControl`, and T5 a fifth, the die label of the pool tab's dice head.
10
- *
11
- * The units, re-measured 2026-09-06 on the SHIPPED plugin tree with
12
- * `grep -rn "resourceLevelFor(" packages/obsidian/src`, which returns FOUR lines: FIVE READS reach
13
- * this function through FOUR call EXPRESSIONS living in FOUR functions across FOUR files. The
14
- * expressions are the plugin SEED (`seedFeatureUses` in `pc.resource-seed.ts`, for the level it hands
15
- * `resolveMaxCountAt`), the module-private `resourceLevel(id, ctx)` helper of
16
- * `components/actions/feature-rows.ts` (which resolves the owner from `resolved.resources` and falls
17
- * back to the total level when there is none), `renderSpendControl`
18
- * (`components/actions/spend-control.ts`) and `renderPoolHead` (`components/pool-tab.ts`). The count
19
- * of READS is one higher than the count of expressions because `resourceLevel` serves TWO
20
- * `resolveScalingDie` die labels, one in `renderCardResource` and one in `formatFeatureAttackNote`:
21
- * so THREE of the five reads call this function directly (the seed, the spend control, the pool head)
22
- * and TWO reach it through `resourceLevel`. Each render-time reader passes the owner its index entry
23
- * already carries, so a die label and the tracker beside it read the same level. So a
24
- * Barbarian 5 / Fighter 5 reads the level-5 Rage count, not the level-10 one. */
25
3
  export declare function resourceLevelFor(source: FeatureSource, resolved: ResolvedCharacter): number;
26
4
  export type ResourceOwner = {
27
5
  kind: "feature";
@@ -50,49 +28,13 @@ export interface ResolvedResource {
50
28
  scalesAt?: ResourceScaleStep[];
51
29
  recovery?: ResolvedRecovery[];
52
30
  owner: ResourceOwner;
53
- /** Which control draws this resource — the declaring note's `rendering_hint`, carried verbatim and
54
- * never interpreted here. The renderer owns the hint → component table; the engine only delivers the
55
- * string, so adding a component is a change in ONE table and adding a resource is no code at all. */
56
31
  renderingHint?: string;
57
- /** `band` = also drawn in the header strip. Absent = the Resources tab alone. */
58
32
  surface?: "band" | "tab";
33
+ equivalentIds?: readonly string[];
59
34
  }
60
35
  export type ResourceIndex = ReadonlyMap<string, ResolvedResource>;
61
- /** KIND first (the schema key; absent = `uses`, UR2), FLAVOUR second (`action` / `reset`): a
62
- * `spell-slots` entry is ALWAYS manual (the slot picker), whatever its action / reset say; a `uses`
63
- * entry is a rest restore when its `reset` is `short-rest` or `long-rest` AND it carries no `action`,
64
- * else manual (R4-G4 §7.2, invariant 12). The other rest-shaped triggers (`either`, `dawn`, `dusk`)
65
- * read manual here: §7.1's partition of the 33 shipped entries has no carrier among them, and §15
66
- * keeps the reset VOCABULARY of the rest arm deferred to G8.
67
- *
68
- * BOTH arms it routes are LANDED as of R4-G4 T7, and its CALLERS are counted here rather than its
69
- * grep hits, because a docblock that names the function moves its own grep count. Measured
70
- * 2026-09-05 on both trees: dnd5e has exactly ONE caller, `toResolvedResource` below, which STAMPS
71
- * the kind and the flavour onto every entry of every indexed resource, so `pushPartialRecoveries`
72
- * (pc.rest.ts) reads that stamp to emit the rest arm's partial category and never calls this
73
- * function itself; the plugin has exactly ONE, `renderRecoveryAction` (blocks/feature-card.ts),
74
- * which calls it directly and picks the card's arm from the KIND, then the FLAVOUR
75
- * (`grep -rn "resolveRecovery" packages/obsidian/src` returns THREE lines there: the import, that
76
- * call and one docblock mention). */
77
36
  export declare function resolveRecovery(entry: ResourceRecovery): ResolvedRecovery;
78
- /** ONE walk over `features[].feature.resources` (the walk `findResourceById` used to do per call). The
79
- * owner is the DECLARING feature; a duplicate id keeps the FIRST declaration (seeding keeps its own
80
- * max-of-maxes merge). Reads the features array ONLY. `name` falls back to the owning feature's name,
81
- * the rule `findResourceById` carried, for resources synthesised from older fixtures that omit it. */
82
37
  export declare function resolveFeatureResources(features: ReadonlyArray<ResolvedFeature>): ResourceIndex;
83
- /** The resource id a pool pick's own tracker uses (spec §5.2): a repeatable copy keys by its pick key, every other pick by its slug.
84
- * A repeatable (non-item-bound) copy keys its tracker by its KEY, so two copies are two trackers; `param != null` keeps a cast
85
- * fixture without the field on the slug. ONE rule for both sides: dnd5e seeds by it and the plugin's pick tracker reads by it
86
- * (ART-c1, R-3 c). */
87
38
  export declare function pickResourceId(entry: Pick<ResolvedPoolEntry, "slug" | "key" | "param">): string;
88
- /** The full index: the feature resources (`resolveFeatureResources`) plus the pool picks' own
89
- * `uses` (R4-G4 §12, LANDED at T7b). A pure function of `resolved.features` and `resolved.pools`,
90
- * each guarded `?? []` because the cast fixtures behind the rest suites in both repos carry
91
- * neither; `computeRestPlan` derives it per call and never reads `resolved.resources`, the
92
- * resolver stores it on `resolved.resources` after pools resolve, and the resolver suite pins the
93
- * stored index equal to a fresh derivation. */
94
39
  export declare function resolveResourceIndex(resolved: ResolvedCharacter): ResourceIndex;
95
- /** 8 + prof + mod(ability) when the pool's owning class's subclass carries `spellcasting.ability` AND
96
- * `resolveSpellcasting` returns null for that class (no caster profile: the Four Elements shape); null
97
- * otherwise. Reads `subclass.spellcasting.ability` and NEVER `dc_formula` (R4-G4 §11.2). */
98
40
  export declare function poolSaveDC(resolved: ResolvedCharacter, derived: DerivedStats, pool: ResolvedPool): number | null;
@@ -1,23 +1 @@
1
- import {
2
- pickResourceId,
3
- poolSaveDC,
4
- resolveFeatureResources,
5
- resolveRecovery,
6
- resolveResourceIndex,
7
- resourceLevelFor
8
- } from "../chunk-KSTV7J2U.js";
9
- import "../chunk-DPUJDOKV.js";
10
- import "../chunk-IUAAXXNO.js";
11
- import "../chunk-LVQLWRCU.js";
12
- import "../chunk-EVMUJYUD.js";
13
- import "../chunk-VTTA2ALZ.js";
14
- import "../chunk-PDJSUH24.js";
15
- import "../chunk-WELIKLZF.js";
16
- export {
17
- pickResourceId,
18
- poolSaveDC,
19
- resolveFeatureResources,
20
- resolveRecovery,
21
- resolveResourceIndex,
22
- resourceLevelFor
23
- };
1
+ import{pickResourceId,poolSaveDC,resolveFeatureResources,resolveRecovery,resolveResourceIndex,resourceLevelFor}from"../chunk-KEXSF3CH.js";import"../chunk-PFQPP77Q.js";import"../chunk-PKIMOVQG.js";import"../chunk-CMIEZQL4.js";import"../chunk-CSTAQQGX.js";import"../chunk-O776WL7O.js";import"../chunk-DVUXUIPV.js";import"../chunk-YGH7S5ZF.js";import"../chunk-4IAMSRHD.js";import"../chunk-DZITM5AG.js";import"../chunk-PZ4L2EEG.js";import"../chunk-QMEKQTUT.js";import"../chunk-EAARMPCW.js";import"../chunk-CAPYNIGK.js";import"../chunk-63YJPWTM.js";import"../chunk-BREHZNTL.js";import"../chunk-7FPQJDFD.js";import"../chunk-EVT7MGAC.js";export{pickResourceId,poolSaveDC,resolveFeatureResources,resolveRecovery,resolveResourceIndex,resourceLevelFor};
@@ -2,23 +2,12 @@ import type { EntityRegistry } from "@archivist-gg/core";
2
2
  import type { ResetTrigger } from "../types/resource.js";
3
3
  import type { Character, DerivedStats, EquipmentEntryState, ResolvedCharacter } from "./pc.types.js";
4
4
  export type RestType = "short" | "long";
5
- export type RestCategoryId = "hp-to-max" | "hd-regain" | "spell-slots" | "pact-slots" | "exhaustion" | "hp-modifier-reset" | `feature:${string}` | `item:${number}`
6
- /** R4-G5 §4.4.2: END an active buff whose carrier declares a structured `duration`. The tail is the STORED
7
- * `state.active_buffs` key (a class feature's `id` or a pool entry's resolved `slug`). Emitted by
8
- * `pushBuffEnds` below and read by the plugin's `applyRestResets`, whose `buff:` arm removes that key
9
- * from `state.active_buffs`. That arm is the plugin half of R4-G5 Task 6: this type is the task's
10
- * dnd5e hard edge and is committed first. */
11
- | `buff:${string}`;
5
+ export type RestCategoryId = "hp-to-max" | "hd-regain" | "spell-slots" | "pact-slots" | "exhaustion" | "hp-modifier-reset" | `feature:${string}` | `item:${number}` | `buff:${string}`;
12
6
  export interface RestCategory {
13
7
  id: RestCategoryId;
14
8
  label: string;
15
9
  preview: string;
16
- /** R4-G4 §7.2.2: a PARTIAL restore from a `recovery[]` entry of kind `uses` and flavour `rest` (N uses, or "all"),
17
- * emitted only when the resource's own `reset` does not already fire at this rest. Absent = the own reset (to 0). */
18
10
  restore?: number | "all";
19
- /** ART-c1 Task 9c (S-4, controller ruling 10): an `item:` category's recharge, the amount its rule restores ("1d6+1",
20
- * "3", "all") and the charges before the rest. The sheet's rest dialog rolls a DICE amount once when it opens and the
21
- * rest applies `min(max, current + n)`; this plan stays pure and rolls nothing. */
22
11
  recharge?: {
23
12
  amount: string;
24
13
  current: number;
@@ -32,21 +21,13 @@ export interface RestPlan {
32
21
  die: string;
33
22
  remaining: number;
34
23
  }>;
35
- /** Internal: per-die HD-regain target captured at plan time so apply is idempotent. */
36
24
  hdRegainDist?: Array<{
37
25
  die: string;
38
26
  targetUsed: number;
39
27
  }>;
40
28
  }
41
- /** The persisted item-charge recovery vocabulary (`pc.schema.ts` `equipmentEntryStateSchema.recovery.reset`). */
42
29
  export type ItemRecoveryReset = NonNullable<EquipmentEntryState["recovery"]>["reset"];
43
- /** Every reset a counter can carry: a feature resource's `ResetTrigger` or an item's recovery reset. The two
44
- * vocabularies share only `dawn`, which means the same thing in both. */
45
30
  export type AnyReset = ResetTrigger | ItemRecoveryReset;
46
- /** The earliest rest that restores `reset` in full, or `null` when none does. A value outside both vocabularies (raw
47
- * note data reaches here unvalidated) is restored by no rest: an OWN-property lookup, so a prototype key such as
48
- * `constructor` is not a reset either. */
49
31
  export declare function earliestRestoringRest(reset: AnyReset): RestType | null;
50
- /** Whether a rest of `type` restores `reset` in full: the earliest rest that restores it is no longer than `type`. */
51
32
  export declare function restRestores(type: RestType, reset: AnyReset): boolean;
52
33
  export declare function computeRestPlan(character: Character, resolved: ResolvedCharacter, derived: DerivedStats, registry: EntityRegistry | null, type: RestType): RestPlan;