@archivist-gg/dnd5e 0.3.19 → 0.3.24

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. package/LICENSE +48 -21
  2. package/README.md +26 -48
  3. package/dist/armor/armor.codec.d.ts +0 -7
  4. package/dist/armor/armor.codec.js +1 -9
  5. package/dist/armor/armor.parser.js +1 -8
  6. package/dist/armor/armor.schema.js +1 -7
  7. package/dist/armor/armor.types.d.ts +0 -3
  8. package/dist/background/background.codec.d.ts +0 -6
  9. package/dist/background/background.codec.js +1 -12
  10. package/dist/background/background.parser.js +1 -11
  11. package/dist/background/background.schema.js +1 -12
  12. package/dist/background/background.types.d.ts +0 -5
  13. package/dist/chunk-2EOGK6R6.js +1 -0
  14. package/dist/chunk-2HRRH3WL.js +1 -0
  15. package/dist/chunk-2LCGKNVM.js +1 -0
  16. package/dist/chunk-2NUDWOFG.js +1 -0
  17. package/dist/chunk-334WLI7V.js +1 -0
  18. package/dist/chunk-3LWOVRLA.js +1 -0
  19. package/dist/chunk-3QQOATV3.js +1 -0
  20. package/dist/chunk-4E2GIWJE.js +1 -0
  21. package/dist/chunk-4GN3GYMP.js +1 -0
  22. package/dist/chunk-4IAMSRHD.js +1 -0
  23. package/dist/chunk-4JEF3CET.js +1 -0
  24. package/dist/chunk-4KVVAENP.js +1 -0
  25. package/dist/chunk-56JK6VCL.js +1 -0
  26. package/dist/chunk-5FEXHY4U.js +1 -0
  27. package/dist/chunk-63YJPWTM.js +1 -0
  28. package/dist/chunk-6ASJ3MVB.js +1 -0
  29. package/dist/chunk-6IC53O3Q.js +1 -0
  30. package/dist/chunk-6LCNV26D.js +1 -0
  31. package/dist/chunk-6W253VHH.js +1 -0
  32. package/dist/chunk-7AKJBRBD.js +1 -0
  33. package/dist/chunk-7EL3GWWJ.js +1 -0
  34. package/dist/chunk-7FPQJDFD.js +1 -0
  35. package/dist/chunk-7J5BNH2D.js +1 -0
  36. package/dist/chunk-7LPKI27J.js +1 -0
  37. package/dist/chunk-7UPYRKMF.js +1 -0
  38. package/dist/chunk-A7H6LX47.js +1 -0
  39. package/dist/chunk-AINRPPLH.js +1 -0
  40. package/dist/chunk-BC52J4LA.js +1 -0
  41. package/dist/chunk-BCXGB4HP.js +1 -0
  42. package/dist/chunk-BGX36NPE.js +1 -0
  43. package/dist/chunk-BPKG6RZ7.js +1 -0
  44. package/dist/chunk-BREHZNTL.js +1 -0
  45. package/dist/chunk-BZ6BGGZS.js +1 -0
  46. package/dist/chunk-CAPYNIGK.js +1 -0
  47. package/dist/chunk-CCFIINBA.js +1 -0
  48. package/dist/chunk-CMIEZQL4.js +1 -0
  49. package/dist/chunk-DVUXUIPV.js +1 -0
  50. package/dist/chunk-DY6FVAGA.js +1 -0
  51. package/dist/chunk-DZITM5AG.js +1 -0
  52. package/dist/chunk-DZKSXSJF.js +1 -0
  53. package/dist/chunk-EAARMPCW.js +1 -0
  54. package/dist/chunk-EVT7MGAC.js +1 -0
  55. package/dist/chunk-FOLHTMSC.js +1 -0
  56. package/dist/chunk-GCYUCIDN.js +1 -0
  57. package/dist/chunk-GIOV6JW7.js +1 -0
  58. package/dist/chunk-HCK6IUB3.js +1 -0
  59. package/dist/chunk-HR5MKCP2.js +1 -0
  60. package/dist/chunk-I26FHSI6.js +1 -0
  61. package/dist/chunk-I4O2FIDT.js +1 -0
  62. package/dist/chunk-IGVRLGLM.js +1 -0
  63. package/dist/chunk-IHPLT2ZT.js +1 -0
  64. package/dist/chunk-IOCJIWCV.js +1 -0
  65. package/dist/chunk-JXDX2DKF.js +1 -0
  66. package/dist/chunk-KBFSJ5WE.js +1 -0
  67. package/dist/chunk-KM75CC6Q.js +1 -0
  68. package/dist/chunk-KZDDFG4O.js +1 -0
  69. package/dist/chunk-LJNT3PJP.js +1 -0
  70. package/dist/chunk-LR6UMA5V.js +1 -0
  71. package/dist/chunk-M6RPOLKS.js +1 -0
  72. package/dist/chunk-MC6PLWRZ.js +1 -0
  73. package/dist/chunk-MGGKZGLG.js +1 -0
  74. package/dist/chunk-N3RYJ7RE.js +1 -0
  75. package/dist/chunk-NEMX7QGG.js +1 -0
  76. package/dist/chunk-NI364WV7.js +1 -0
  77. package/dist/chunk-O2QZ73GA.js +1 -0
  78. package/dist/chunk-O776WL7O.js +1 -0
  79. package/dist/chunk-OTFNINUY.js +1 -0
  80. package/dist/chunk-PQAVMK3T.js +1 -0
  81. package/dist/chunk-PZ3ZZ5H5.js +1 -0
  82. package/dist/chunk-PZ4L2EEG.js +1 -0
  83. package/dist/chunk-PZUPZBTN.js +1 -0
  84. package/dist/chunk-QBA757AU.js +1 -0
  85. package/dist/chunk-QFIGPOFW.js +1 -0
  86. package/dist/chunk-QMEKQTUT.js +1 -0
  87. package/dist/chunk-QVWT67WA.js +1 -0
  88. package/dist/chunk-RDXQAZBA.js +1 -0
  89. package/dist/chunk-RE5Z5RNK.js +1 -0
  90. package/dist/chunk-RL4VY2AL.js +1 -0
  91. package/dist/chunk-RQGTBHJW.js +1 -0
  92. package/dist/chunk-RQZCGXUZ.js +1 -0
  93. package/dist/chunk-S5UCI27C.js +1 -0
  94. package/dist/chunk-SEOASDO4.js +1 -0
  95. package/dist/chunk-SU4MEZ5P.js +1 -0
  96. package/dist/chunk-T55DELVL.js +1 -0
  97. package/dist/chunk-TKIEPC6F.js +1 -0
  98. package/dist/chunk-TLXFGGWH.js +1 -0
  99. package/dist/chunk-UBUKCRZ3.js +1 -0
  100. package/dist/chunk-V6NQ547U.js +1 -0
  101. package/dist/chunk-VA3ZWV7C.js +1 -0
  102. package/dist/chunk-VIP3FH2O.js +1 -0
  103. package/dist/chunk-VTQ4RWEG.js +1 -0
  104. package/dist/chunk-WUHTSLG4.js +1 -0
  105. package/dist/chunk-X22SISGM.js +1 -0
  106. package/dist/chunk-XKJXT2PN.js +1 -0
  107. package/dist/chunk-XQMKH4R4.js +1 -0
  108. package/dist/chunk-YGH7S5ZF.js +1 -0
  109. package/dist/chunk-ZE46ADXS.js +1 -0
  110. package/dist/chunk-ZI3FEUX3.js +1 -0
  111. package/dist/class/class.codec.d.ts +0 -7
  112. package/dist/class/class.codec.js +1 -18
  113. package/dist/class/class.parser.js +1 -17
  114. package/dist/class/class.schema.d.ts +2 -1
  115. package/dist/class/class.schema.js +1 -15
  116. package/dist/class/class.slug.d.ts +0 -11
  117. package/dist/class/class.slug.js +1 -8
  118. package/dist/class/class.standard-array.d.ts +0 -7
  119. package/dist/class/class.standard-array.js +1 -20
  120. package/dist/class/class.types.d.ts +0 -20
  121. package/dist/condition/condition.codec.d.ts +0 -6
  122. package/dist/condition/condition.parser.d.ts +0 -10
  123. package/dist/condition/condition.parser.js +1 -7
  124. package/dist/condition/condition.schema.d.ts +0 -16
  125. package/dist/condition/condition.types.d.ts +0 -3
  126. package/dist/data-srd/index.generated.js +1 -146
  127. package/dist/dnd/amount-text.d.ts +3 -30
  128. package/dist/dnd/amount-text.js +1 -15
  129. package/dist/dnd/constants.d.ts +0 -18
  130. package/dist/dnd/constants.js +1 -42
  131. package/dist/dnd/formula-tags.d.ts +0 -2
  132. package/dist/dnd/formula-tags.js +1 -119
  133. package/dist/dnd/math.d.ts +0 -26
  134. package/dist/dnd/math.js +1 -45
  135. package/dist/dnd/prose-tags.d.ts +1 -15
  136. package/dist/dnd/prose-tags.js +1 -18
  137. package/dist/dnd/resource-die.d.ts +0 -4
  138. package/dist/dnd/resource-die.js +1 -17
  139. package/dist/dnd/resource-formula.d.ts +0 -43
  140. package/dist/dnd/resource-formula.js +1 -14
  141. package/dist/dnd/resource-words.d.ts +0 -2
  142. package/dist/dnd/resource-words.js +1 -30
  143. package/dist/dnd/srd-tag-converter.d.ts +0 -21
  144. package/dist/dnd/srd-tag-converter.js +1 -12
  145. package/dist/dnd/tag-grammar.js +1 -12
  146. package/dist/dnd/warn-once.js +1 -8
  147. package/dist/encounter/encounter.ai-schema.js +1 -8
  148. package/dist/entities/base-item-resolver.d.ts +0 -26
  149. package/dist/entities/base-item-resolver.js +1 -11
  150. package/dist/entities/registry-revision.d.ts +0 -15
  151. package/dist/entities/registry-revision.js +1 -10
  152. package/dist/entities/slug.d.ts +1 -31
  153. package/dist/entities/slug.js +1 -12
  154. package/dist/entities/wikilink-display.d.ts +0 -2
  155. package/dist/entities/wikilink-display.js +1 -10
  156. package/dist/feat/feat.category-codes.d.ts +1 -26
  157. package/dist/feat/feat.category-codes.js +1 -14
  158. package/dist/feat/feat.codec.d.ts +0 -6
  159. package/dist/feat/feat.codec.js +1 -12
  160. package/dist/feat/feat.parser.js +1 -11
  161. package/dist/feat/feat.schema.d.ts +22 -1
  162. package/dist/feat/feat.schema.js +1 -10
  163. package/dist/feat/feat.types.d.ts +0 -6
  164. package/dist/index.js +45 -141495
  165. package/dist/inline-tag-parser.js +1 -6
  166. package/dist/item/item.actions-map.d.ts +4 -63
  167. package/dist/item/item.actions-map.js +1 -10
  168. package/dist/item/item.ai-schema.js +1 -6
  169. package/dist/item/item.attunement.d.ts +0 -14
  170. package/dist/item/item.attunement.js +1 -6
  171. package/dist/item/item.bonuses.js +1 -10
  172. package/dist/item/item.codec.js +1 -9
  173. package/dist/item/item.conditions.d.ts +0 -7
  174. package/dist/item/item.conditions.js +1 -11
  175. package/dist/item/item.conditions.types.d.ts +0 -2
  176. package/dist/item/item.cost.js +1 -29
  177. package/dist/item/item.enrichment.js +1 -9
  178. package/dist/item/item.icon.d.ts +0 -8
  179. package/dist/item/item.icon.js +1 -211
  180. package/dist/item/item.parser.js +1 -8
  181. package/dist/item/item.schema.d.ts +2 -0
  182. package/dist/item/item.schema.js +1 -11
  183. package/dist/item/item.types.d.ts +2 -28
  184. package/dist/monster/monster.ai-schema.js +1 -6
  185. package/dist/monster/monster.codec.d.ts +0 -10
  186. package/dist/monster/monster.enrichment.js +1 -19
  187. package/dist/monster/monster.format.d.ts +0 -69
  188. package/dist/monster/monster.format.js +1 -78
  189. package/dist/monster/monster.parser.d.ts +0 -4
  190. package/dist/monster/monster.parser.js +1 -15
  191. package/dist/monster/monster.resolve.d.ts +0 -4
  192. package/dist/monster/monster.schema.d.ts +0 -9
  193. package/dist/monster/monster.schema.js +1 -34
  194. package/dist/monster/monster.types.d.ts +0 -3
  195. package/dist/monster/monster.types.js +1 -1
  196. package/dist/optional-feature/optional-feature.codec.d.ts +0 -11
  197. package/dist/optional-feature/optional-feature.codec.js +1 -13
  198. package/dist/optional-feature/optional-feature.parser.js +1 -12
  199. package/dist/optional-feature/optional-feature.schema.d.ts +21 -1
  200. package/dist/optional-feature/optional-feature.schema.js +1 -15
  201. package/dist/pack.d.ts +0 -9
  202. package/dist/pc/conditions.constants.js +1 -6
  203. package/dist/pc/decision-recognizer.js +1 -8
  204. package/dist/pc/pc.additional-spells.d.ts +0 -24
  205. package/dist/pc/pc.additional-spells.js +1 -26
  206. package/dist/pc/pc.amount-bindings.d.ts +0 -25
  207. package/dist/pc/pc.amount-bindings.js +1 -28
  208. package/dist/pc/pc.asi-flatten.d.ts +0 -59
  209. package/dist/pc/pc.asi-flatten.js +1 -16
  210. package/dist/pc/pc.conditions.d.ts +1 -0
  211. package/dist/pc/pc.conditions.js +1 -6
  212. package/dist/pc/pc.containment.d.ts +0 -5
  213. package/dist/pc/pc.containment.js +1 -24
  214. package/dist/pc/pc.decision-engine.d.ts +0 -145
  215. package/dist/pc/pc.decision-engine.js +1 -55
  216. package/dist/pc/pc.defense-normalize.d.ts +0 -10
  217. package/dist/pc/pc.defense-normalize.js +1 -6
  218. package/dist/pc/pc.entry-overrides.d.ts +0 -58
  219. package/dist/pc/pc.entry-overrides.js +1 -41
  220. package/dist/pc/pc.equipment.d.ts +2 -22
  221. package/dist/pc/pc.equipment.js +1 -34
  222. package/dist/pc/pc.feature-effects.d.ts +22 -281
  223. package/dist/pc/pc.feature-effects.js +1 -39
  224. package/dist/pc/pc.formula-context.js +1 -11
  225. package/dist/pc/pc.infusions.d.ts +0 -65
  226. package/dist/pc/pc.infusions.js +1 -65
  227. package/dist/pc/pc.item-effects.d.ts +18 -0
  228. package/dist/pc/pc.member-choices.d.ts +3 -66
  229. package/dist/pc/pc.member-choices.js +1 -39
  230. package/dist/pc/pc.parser.js +1 -58
  231. package/dist/pc/pc.pools.d.ts +7 -10
  232. package/dist/pc/pc.pools.js +1 -27
  233. package/dist/pc/pc.proficiencies.d.ts +0 -40
  234. package/dist/pc/pc.proficiencies.js +1 -156
  235. package/dist/pc/pc.proficiency-grants.d.ts +0 -26
  236. package/dist/pc/pc.proficiency-normalize.d.ts +0 -35
  237. package/dist/pc/pc.proficiency-normalize.js +1 -18
  238. package/dist/pc/pc.proficiency-query.d.ts +0 -13
  239. package/dist/pc/pc.proficiency-query.js +1 -27
  240. package/dist/pc/pc.recalc.d.ts +7 -131
  241. package/dist/pc/pc.recalc.js +1 -1042
  242. package/dist/pc/pc.resolver.d.ts +0 -107
  243. package/dist/pc/pc.resolver.js +1 -60
  244. package/dist/pc/pc.resource-seed.d.ts +0 -8
  245. package/dist/pc/pc.resource-seed.js +1 -42
  246. package/dist/pc/pc.resources.d.ts +1 -59
  247. package/dist/pc/pc.resources.js +1 -23
  248. package/dist/pc/pc.rest.d.ts +1 -20
  249. package/dist/pc/pc.rest.js +1 -231
  250. package/dist/pc/pc.schema.d.ts +0 -2
  251. package/dist/pc/pc.schema.js +1 -9
  252. package/dist/pc/pc.slotting.d.ts +0 -29
  253. package/dist/pc/pc.slotting.js +1 -28
  254. package/dist/pc/pc.speeds.d.ts +19 -0
  255. package/dist/pc/pc.spell-scope.d.ts +0 -16
  256. package/dist/pc/pc.spellcasting.d.ts +0 -70
  257. package/dist/pc/pc.spellcasting.js +1 -28
  258. package/dist/pc/pc.table-column.d.ts +0 -22
  259. package/dist/pc/pc.table-column.js +1 -18
  260. package/dist/pc/pc.tool-picks.d.ts +0 -27
  261. package/dist/pc/pc.tool-picks.js +1 -18
  262. package/dist/pc/pc.types.d.ts +54 -374
  263. package/dist/pc/pc.weapon-grant.d.ts +0 -6
  264. package/dist/pc/pool-layout.d.ts +0 -39
  265. package/dist/pc/pool-layout.js +1 -18
  266. package/dist/pc/resource-equivalents.d.ts +2 -40
  267. package/dist/pc/roll-scope.js +1 -8
  268. package/dist/pc/roll-tag-labels.d.ts +0 -32
  269. package/dist/pc/roll-tag-labels.js +1 -17
  270. package/dist/pc/spell-source.d.ts +0 -11
  271. package/dist/pc/spell-source.js +1 -8
  272. package/dist/race/race.codec.d.ts +0 -6
  273. package/dist/race/race.codec.js +1 -15
  274. package/dist/race/race.parser.js +1 -14
  275. package/dist/race/race.schema.d.ts +0 -8
  276. package/dist/race/race.schema.js +1 -14
  277. package/dist/race/race.structural.d.ts +0 -6
  278. package/dist/race/race.structural.js +1 -6
  279. package/dist/race/race.types.d.ts +0 -8
  280. package/dist/schemas/attack-schema.d.ts +5 -0
  281. package/dist/schemas/caster-type-schema.d.ts +1 -6
  282. package/dist/schemas/caster-type-schema.js +1 -6
  283. package/dist/schemas/choice-schema.js +1 -7
  284. package/dist/schemas/duration-schema.d.ts +0 -2
  285. package/dist/schemas/duration-schema.js +1 -6
  286. package/dist/schemas/entity-extras-schema.d.ts +0 -30
  287. package/dist/schemas/entity-extras-schema.js +1 -10
  288. package/dist/schemas/equipment-grant-schema.d.ts +0 -2
  289. package/dist/schemas/equipment-grant-schema.js +1 -12
  290. package/dist/schemas/feature-alias.d.ts +0 -27
  291. package/dist/schemas/feature-effect-schema.d.ts +21 -1
  292. package/dist/schemas/feature-effect-schema.js +1 -6
  293. package/dist/schemas/feature-schema.d.ts +0 -6
  294. package/dist/schemas/feature-schema.js +1 -12
  295. package/dist/schemas/resource-schema.d.ts +1 -34
  296. package/dist/schemas/resource-schema.js +1 -12
  297. package/dist/schemas/selection-pool-schema.js +1 -10
  298. package/dist/spell/casting-time.d.ts +0 -15
  299. package/dist/spell/casting-time.js +1 -6
  300. package/dist/spell/spell.access.d.ts +0 -6
  301. package/dist/spell/spell.access.js +1 -45
  302. package/dist/spell/spell.ai-schema.js +1 -6
  303. package/dist/spell/spell.codec.js +1 -9
  304. package/dist/spell/spell.enrichment.js +1 -9
  305. package/dist/spell/spell.filter.d.ts +0 -5
  306. package/dist/spell/spell.filter.js +1 -75
  307. package/dist/spell/spell.parser.d.ts +0 -31
  308. package/dist/spell/spell.parser.js +1 -16
  309. package/dist/spell/spell.scaling.d.ts +0 -46
  310. package/dist/spell/spell.scaling.js +1 -79
  311. package/dist/spell/spell.schema.js +1 -7
  312. package/dist/spell/spell.types.d.ts +0 -7
  313. package/dist/srd/retired-items.d.ts +0 -4
  314. package/dist/srd/retired-items.js +1 -11
  315. package/dist/srd-store.d.ts +0 -33
  316. package/dist/subclass/subclass.codec.d.ts +0 -8
  317. package/dist/subclass/subclass.codec.js +1 -17
  318. package/dist/subclass/subclass.parser.js +1 -16
  319. package/dist/subclass/subclass.schema.d.ts +2 -1
  320. package/dist/subclass/subclass.schema.js +1 -14
  321. package/dist/subclass/subclass.types.d.ts +0 -3
  322. package/dist/types/attack.d.ts +2 -0
  323. package/dist/types/casting-option.d.ts +0 -4
  324. package/dist/types/choice.d.ts +1 -72
  325. package/dist/types/choice.js +1 -24
  326. package/dist/types/edition.d.ts +0 -3
  327. package/dist/types/equipment-grant.d.ts +1 -27
  328. package/dist/types/equipment-grant.js +1 -12
  329. package/dist/types/feature-effect.d.ts +4 -22
  330. package/dist/types/feature.d.ts +0 -22
  331. package/dist/types/optional-feature.types.d.ts +1 -31
  332. package/dist/types/resource.d.ts +1 -21
  333. package/dist/types/selection-pool.d.ts +0 -24
  334. package/dist/weapon/weapon-mastery.d.ts +0 -1
  335. package/dist/weapon/weapon.classify.d.ts +0 -11
  336. package/dist/weapon/weapon.classify.js +1 -7
  337. package/dist/weapon/weapon.codec.d.ts +0 -9
  338. package/dist/weapon/weapon.codec.js +1 -9
  339. package/dist/weapon/weapon.parser.js +1 -8
  340. package/dist/weapon/weapon.schema.js +1 -7
  341. package/dist/weapon/weapon.types.d.ts +0 -3
  342. package/package.json +3 -3
  343. package/src/data-srd/ATTRIBUTION.md +1 -1
  344. package/dist/chunk-2FRUSVZS.js +0 -489
  345. package/dist/chunk-2LULMQTF.js +0 -14
  346. package/dist/chunk-3LWMFYKS.js +0 -57
  347. package/dist/chunk-3SFGWFVQ.js +0 -19
  348. package/dist/chunk-3SIUAFDQ.js +0 -18
  349. package/dist/chunk-3TM34RSJ.js +0 -23
  350. package/dist/chunk-4J6DS3EJ.js +0 -30
  351. package/dist/chunk-4U55VNC7.js +0 -22
  352. package/dist/chunk-5GKJAUMX.js +0 -59
  353. package/dist/chunk-5JXFJ5AU.js +0 -26
  354. package/dist/chunk-64VNLMSG.js +0 -375
  355. package/dist/chunk-656QCX4U.js +0 -22
  356. package/dist/chunk-6GNXYAYP.js +0 -25
  357. package/dist/chunk-6PXTNCBP.js +0 -133
  358. package/dist/chunk-6X2NV665.js +0 -33
  359. package/dist/chunk-7Q2VPKCD.js +0 -181
  360. package/dist/chunk-7XJHI5H5.js +0 -709
  361. package/dist/chunk-A54HHCWW.js +0 -67
  362. package/dist/chunk-B2QHP6UF.js +0 -159
  363. package/dist/chunk-B3DP42OM.js +0 -55
  364. package/dist/chunk-BJGOSM76.js +0 -18
  365. package/dist/chunk-BJWSOQUC.js +0 -133
  366. package/dist/chunk-CJYCVNW2.js +0 -7
  367. package/dist/chunk-CM5CWO4K.js +0 -735
  368. package/dist/chunk-DEEHHLAP.js +0 -271
  369. package/dist/chunk-DPUJDOKV.js +0 -365
  370. package/dist/chunk-EJD47JHL.js +0 -1838
  371. package/dist/chunk-EJP263OP.js +0 -186
  372. package/dist/chunk-EVMUJYUD.js +0 -195
  373. package/dist/chunk-EYX4JMAU.js +0 -101
  374. package/dist/chunk-FC4IGH5Y.js +0 -18
  375. package/dist/chunk-FJYBLXV7.js +0 -89
  376. package/dist/chunk-FMUD3LDV.js +0 -19
  377. package/dist/chunk-FMYWORTP.js +0 -93
  378. package/dist/chunk-FVXLP7P3.js +0 -18
  379. package/dist/chunk-G6MHJDVT.js +0 -41
  380. package/dist/chunk-GVWEFECG.js +0 -18
  381. package/dist/chunk-HHBD4SQ6.js +0 -24
  382. package/dist/chunk-HS6FIOLP.js +0 -52
  383. package/dist/chunk-HY2SRSVM.js +0 -23
  384. package/dist/chunk-IHE6KVC3.js +0 -13
  385. package/dist/chunk-IN4M4X7P.js +0 -34
  386. package/dist/chunk-IUAAXXNO.js +0 -58
  387. package/dist/chunk-JXWNXIIZ.js +0 -219
  388. package/dist/chunk-K5NJBTE2.js +0 -18
  389. package/dist/chunk-KR6JF3BF.js +0 -14
  390. package/dist/chunk-KSTV7J2U.js +0 -112
  391. package/dist/chunk-KU3YLF6D.js +0 -106
  392. package/dist/chunk-LBEXLN6I.js +0 -91
  393. package/dist/chunk-LHZXYFBU.js +0 -94
  394. package/dist/chunk-LICYHPI3.js +0 -237
  395. package/dist/chunk-LNT64X7C.js +0 -81
  396. package/dist/chunk-LSLSG67V.js +0 -31
  397. package/dist/chunk-LVQLWRCU.js +0 -15
  398. package/dist/chunk-MYY2C5MB.js +0 -233
  399. package/dist/chunk-NKZMQV2C.js +0 -19
  400. package/dist/chunk-NTU2DXNG.js +0 -355
  401. package/dist/chunk-NXUY5XQN.js +0 -1062
  402. package/dist/chunk-NZO7M5GV.js +0 -18
  403. package/dist/chunk-OOL4KMG2.js +0 -71
  404. package/dist/chunk-OOSRUJBI.js +0 -19
  405. package/dist/chunk-PDJSUH24.js +0 -110
  406. package/dist/chunk-PTXBIDG7.js +0 -63
  407. package/dist/chunk-PVCEA4HZ.js +0 -6
  408. package/dist/chunk-QA3YCOML.js +0 -101
  409. package/dist/chunk-QFWQKS3M.js +0 -110
  410. package/dist/chunk-QS5L5YTJ.js +0 -24
  411. package/dist/chunk-QYZV2MQA.js +0 -97
  412. package/dist/chunk-RD2MID3M.js +0 -292
  413. package/dist/chunk-S3YUXDSC.js +0 -278
  414. package/dist/chunk-S7REMWW4.js +0 -21
  415. package/dist/chunk-TOM66P2P.js +0 -38
  416. package/dist/chunk-TRBGC4ZG.js +0 -112
  417. package/dist/chunk-UA5KS2PL.js +0 -26
  418. package/dist/chunk-UJCK5IW4.js +0 -187
  419. package/dist/chunk-UNYR5GLI.js +0 -23
  420. package/dist/chunk-UZXG6QSY.js +0 -58
  421. package/dist/chunk-VN5DLURA.js +0 -158
  422. package/dist/chunk-VP5TIXDK.js +0 -178
  423. package/dist/chunk-VPYBK2MG.js +0 -18
  424. package/dist/chunk-VTTA2ALZ.js +0 -16
  425. package/dist/chunk-W6GC6OKK.js +0 -16
  426. package/dist/chunk-WELIKLZF.js +0 -256
  427. package/dist/chunk-WOHX7YTH.js +0 -165
  428. package/dist/chunk-WSVMLNTO.js +0 -31
  429. package/dist/chunk-WYGD2UGN.js +0 -14
  430. package/dist/chunk-XCFC7LGF.js +0 -122
  431. package/dist/chunk-XJ2F2WO6.js +0 -8
  432. package/dist/chunk-XTEFPUSN.js +0 -23
  433. package/dist/chunk-YBLDE5CG.js +0 -42
  434. package/dist/chunk-YDGMBMYI.js +0 -25
  435. package/dist/chunk-YHYTW5QA.js +0 -20
  436. package/dist/chunk-ZCTUYGNV.js +0 -26
  437. package/dist/chunk-ZDAEGJH4.js +0 -102
  438. package/dist/chunk-ZJXSXVFP.js +0 -58
  439. package/dist/chunk-ZOWKWMD2.js +0 -18
  440. package/dist/chunk-ZUQW5VBZ.js +0 -89
@@ -1,17 +1 @@
1
- import {
2
- subclassCodec
3
- } from "../chunk-NZO7M5GV.js";
4
- import "../chunk-UNYR5GLI.js";
5
- import "../chunk-LNT64X7C.js";
6
- import "../chunk-4U55VNC7.js";
7
- import "../chunk-G6MHJDVT.js";
8
- import "../chunk-CJYCVNW2.js";
9
- import "../chunk-B2QHP6UF.js";
10
- import "../chunk-WYGD2UGN.js";
11
- import "../chunk-ZJXSXVFP.js";
12
- import "../chunk-OOL4KMG2.js";
13
- import "../chunk-JXWNXIIZ.js";
14
- import "../chunk-UA5KS2PL.js";
15
- export {
16
- subclassCodec
17
- };
1
+ import{subclassCodec}from"../chunk-7AKJBRBD.js";import"../chunk-TLXFGGWH.js";import"../chunk-7J5BNH2D.js";import"../chunk-S5UCI27C.js";import"../chunk-GCYUCIDN.js";import"../chunk-X22SISGM.js";import"../chunk-V6NQ547U.js";import"../chunk-ZE46ADXS.js";import"../chunk-CCFIINBA.js";import"../chunk-KBFSJ5WE.js";import"../chunk-6IC53O3Q.js";import"../chunk-I26FHSI6.js";export{subclassCodec};
@@ -1,16 +1 @@
1
- import {
2
- parseSubclass
3
- } from "../chunk-UNYR5GLI.js";
4
- import "../chunk-LNT64X7C.js";
5
- import "../chunk-4U55VNC7.js";
6
- import "../chunk-G6MHJDVT.js";
7
- import "../chunk-CJYCVNW2.js";
8
- import "../chunk-B2QHP6UF.js";
9
- import "../chunk-WYGD2UGN.js";
10
- import "../chunk-ZJXSXVFP.js";
11
- import "../chunk-OOL4KMG2.js";
12
- import "../chunk-JXWNXIIZ.js";
13
- import "../chunk-UA5KS2PL.js";
14
- export {
15
- parseSubclass
16
- };
1
+ import{parseSubclass}from"../chunk-TLXFGGWH.js";import"../chunk-7J5BNH2D.js";import"../chunk-S5UCI27C.js";import"../chunk-GCYUCIDN.js";import"../chunk-X22SISGM.js";import"../chunk-V6NQ547U.js";import"../chunk-ZE46ADXS.js";import"../chunk-CCFIINBA.js";import"../chunk-KBFSJ5WE.js";import"../chunk-6IC53O3Q.js";import"../chunk-I26FHSI6.js";export{parseSubclass};
@@ -15,7 +15,7 @@ export declare const subclassEntitySchema: z.ZodObject<{
15
15
  full: "full";
16
16
  pact: "pact";
17
17
  third: "third";
18
- artificer: "artificer";
18
+ "half-up": "half-up";
19
19
  }>>;
20
20
  ability: z.ZodEnum<{
21
21
  str: "str";
@@ -66,6 +66,7 @@ export declare const subclassEntitySchema: z.ZodObject<{
66
66
  band: "band";
67
67
  tab: "tab";
68
68
  }>>;
69
+ equivalent_ids: z.ZodOptional<z.ZodArray<z.ZodString>>;
69
70
  recovery: z.ZodOptional<z.ZodArray<z.ZodObject<{
70
71
  id: z.ZodString;
71
72
  name: z.ZodString;
@@ -1,14 +1 @@
1
- import {
2
- subclassEntitySchema
3
- } from "../chunk-LNT64X7C.js";
4
- import "../chunk-G6MHJDVT.js";
5
- import "../chunk-CJYCVNW2.js";
6
- import "../chunk-B2QHP6UF.js";
7
- import "../chunk-WYGD2UGN.js";
8
- import "../chunk-ZJXSXVFP.js";
9
- import "../chunk-OOL4KMG2.js";
10
- import "../chunk-JXWNXIIZ.js";
11
- import "../chunk-UA5KS2PL.js";
12
- export {
13
- subclassEntitySchema
14
- };
1
+ import{subclassEntitySchema}from"../chunk-7J5BNH2D.js";import"../chunk-GCYUCIDN.js";import"../chunk-X22SISGM.js";import"../chunk-V6NQ547U.js";import"../chunk-ZE46ADXS.js";import"../chunk-CCFIINBA.js";import"../chunk-KBFSJ5WE.js";import"../chunk-6IC53O3Q.js";import"../chunk-I26FHSI6.js";export{subclassEntitySchema};
@@ -18,12 +18,10 @@ export interface SubclassEntity {
18
18
  selection_pools?: SelectionPool[];
19
19
  pool_grants?: PoolGrant[];
20
20
  tabs?: TabDecl[];
21
- /** Converter/bundle extras declared by subclass.schema.ts §2.7; all optional, none read today. */
22
21
  rendering_hint?: string;
23
22
  short_name?: string;
24
23
  has_fluff?: boolean;
25
24
  has_fluff_images?: boolean;
26
- /** RAW 5etools passthrough (single measured key-set `{_subclassFluff:{…}}`): mirrors `z.unknown()`. */
27
25
  fluff?: unknown;
28
26
  table_col_labels?: string[];
29
27
  cantrip_progression?: number[];
@@ -33,6 +31,5 @@ export interface SubclassEntity {
33
31
  feat_progression?: ProgressionEntry[];
34
32
  optionalfeature_progression?: ProgressionEntry[];
35
33
  additional_spells?: AdditionalSpellsEntry[];
36
- /** One wikilink, or an array of them for the multi-fluff-image emit. */
37
34
  image?: string | string[];
38
35
  }
@@ -19,4 +19,6 @@ export interface Attack {
19
19
  properties?: string[];
20
20
  range?: AttackRange;
21
21
  condition?: string;
22
+ weapon_category?: "simple" | "martial";
23
+ mastery?: string;
22
24
  }
@@ -1,7 +1,3 @@
1
- /** A single alternate casting mode for a spell (e.g. a different shape, range,
2
- * or scaling). Lives in dnd5e so the build-time SRD spell merger can consume
3
- * it without a tools→obsidian reverse edge; obsidian `spell.types` re-exports
4
- * it for the renderer/parser. */
5
1
  export interface CastingOption {
6
2
  type: string;
7
3
  damage_roll?: string;
@@ -3,107 +3,38 @@ import type { FeatureEffect } from "./feature-effect.js";
3
3
  export type Ability = keyof Abilities;
4
4
  export type SkillSlug = "acrobatics" | "animal-handling" | "arcana" | "athletics" | "deception" | "history" | "insight" | "intimidation" | "investigation" | "medicine" | "nature" | "perception" | "performance" | "persuasion" | "religion" | "sleight-of-hand" | "stealth" | "survival";
5
5
  export declare const ALL_SKILL_SLUGS: SkillSlug[];
6
- /** The language vocabulary the engine matches every language grant and pick
7
- * against: 8 standard + 8 exotic + 2 SECRET. It is NOT "the SRD language set" —
8
- * the two secret languages are class-taught and appear on no SRD language list.
9
- * Slugs are edition-agnostic, apostrophe-retaining and canonical under
10
- * `toProfSlug`, exactly as ALL_TOOLS is.
11
- *
12
- * A cross-repo CONTRACT with three kinds of consumer, so widening this list is a
13
- * data change at all three · named by symbol, because line cites rot:
14
- * · the SRD GENERATOR: `race-merge.ts` builds `KNOWN_LANGUAGES = new Set(ALL_LANGUAGES)`
15
- * and `extractLanguagesFromTraits` gates species prose tokens through it, so
16
- * this constant is INPUT DATA to canonical species output. That name belongs
17
- * to the generator and to nothing else. Guarded by
18
- * `tests/srd-canonical/merger-rules/srd-race-languages.test.ts`.
19
- * · the ENGINE: `enumerateOptions` uses it as the from-less `domain:"language"`
20
- * picker pool, and `computeEffectiveProficiencies` canonicalizes grants, picks
21
- * and manual adds against it through `pc.decision-engine.ts`'s one canonical
22
- * comparison, `matchPool` — a module-level helper it shares with its other call
23
- * sites, not one of its own. `computeEffectiveProficiencies` reads ALL_LANGUAGES
24
- * from HERE, directly — it does not go through the generator's KNOWN_LANGUAGES.
25
- * · the PLUGIN: `proficiency-picker.ts` (D4 A) lists STANDARD, EXOTIC ("Rare") and
26
- * SECRET_LANGUAGES as its Languages rows, plus any held or removed value they miss.
27
- * Membership is also what makes two spellings of one language FOLD onto a single
28
- * row: a vocabulary MISS keys on the raw string and splits the row in two. */
29
6
  export declare const STANDARD_LANGUAGES: string[];
30
7
  export declare const EXOTIC_LANGUAGES: string[];
31
- /** Secret languages: granted by a class feature (Druid, Rogue), never carried by a
32
- * race or background language list. `thieves'-cant` RETAINS the ASCII apostrophe —
33
- * the file's stated convention, and the slug `toProfSlug` already produces from
34
- * both live spellings (the converter's `Thieves' Cant` and the 2014 SRD prose's
35
- * U+2019 form). */
36
8
  export declare const SECRET_LANGUAGES: string[];
37
9
  export declare const ALL_LANGUAGES: string[];
38
- /** The SRD tool set: 17 artisan's tools + 10 musical instruments + 2 gaming sets
39
- * + 6 other tools = 35. Like ALL_LANGUAGES this is a SINGLE edition-agnostic
40
- * list covering 2014 and 2024, and where the two editions name the same tool
41
- * differently the 2024 name wins. Across all 35 entries there is exactly one
42
- * such delta: `Playing Card Set` (2014) vs `Playing Cards` (2024), resolved
43
- * here to "playing-cards".
44
- *
45
- * Apostrophes are RETAINED ("thieves'-tools", "calligrapher's-supplies").
46
- * These are the slugs the product already emits · see
47
- * `tools/srd-canonical/merger-rules/background-merge.ts`, whose output is live
48
- * in `background.2024.json` · and humanizeProficiency is apostrophe-safe.
49
- * Stripping the apostrophes would diverge from that live data and CREATE the
50
- * collision it would claim to avoid.
51
- *
52
- * Every entry is already canonical under toProfSlug (identity) and the set is
53
- * collision-free under it. Ordering is alphabetical within each subset, and
54
- * ALL_TOOLS composes the four subsets in that order, mirroring
55
- * ALL_LANGUAGES = STANDARD + EXOTIC + SECRET. The list is a cross-repo contract: a
56
- * one-entry divergence is silent and permanent, so it is pinned verbatim. */
57
10
  export declare const ARTISANS_TOOLS: string[];
58
11
  export declare const MUSICAL_INSTRUMENTS: string[];
59
12
  export declare const GAMING_SETS: string[];
60
13
  export declare const OTHER_TOOLS: string[];
61
14
  export declare const ALL_TOOLS: string[];
62
15
  export type FeatCategory = "origin" | "general" | "fighting-style" | "epic-boon";
63
- /** Closed, enumerated registry filter — YAML can never express a query the
64
- * engine would apply unsafely. `"self"` resolves against the owning
65
- * class/subclass at ledger-build time. */
66
16
  export interface EntityFilter {
67
17
  feature_type?: string;
68
18
  category?: string;
69
19
  parent_class?: "self";
70
20
  available_to?: "self";
71
- /** Weapon proficiency class. Matched against a weapon entity's compound
72
- * `category` (e.g. "martial-melee") by prefix, so "martial" covers both
73
- * martial-melee and martial-ranged. */
74
21
  weapon_category?: "simple" | "martial";
75
- /** Armor proficiency class. Matched against an armor entity's `category`
76
- * field exactly; "shield" selects shields. */
77
22
  armor_category?: "light" | "medium" | "heavy" | "shield";
78
- /** Item axis: an item entity's `type` ("instrument", "artisan's tools", "gaming set"); ANY listed type matches.
79
- * Compared case-insensitively with apostrophes, separators and a plural "s" folded (`categoryWords` in
80
- * pc.tool-picks.ts), so "artisans tools" matches "artisan's tools". A starting-equipment tool category
81
- * (`musical-instrument`, `artisan's-tools`, `gaming-set`, or an `X-or-Y` union of them) sets it. */
82
23
  item_type?: string[];
83
- /** Item axis: true keeps only MUNDANE items, dropping one whose `rarity` names a magic tier. Starting gear sets
84
- * it, because magic instruments (Instrument of Scribing, +3 Rhythm-Maker's Drum) also carry `type: instrument`. */
85
24
  mundane?: boolean;
86
- /** Spell axis: filter spells by class list, level, and edition. Set together on a
87
- * select-entity{entity_type:"spell"} choice (e.g. Magic Initiate). */
88
25
  list?: string;
89
26
  level?: number;
90
27
  edition?: string;
91
- /** D2b-A: true keeps only spells a note marks `ritual` (Pact of the Tome's rituals). */
92
28
  ritual?: boolean;
29
+ inventory?: boolean;
93
30
  }
94
31
  export interface InlineOption {
95
32
  value: string;
96
33
  label: string;
97
34
  description?: string;
98
- /** Applied via a synthesized resolved feature when the option is selected. */
99
35
  effects?: FeatureEffect[];
100
- /** Nested decisions revealed when this option is selected (recursive). */
101
36
  choices?: Choice[];
102
37
  }
103
- /** The four game-agnostic decision primitives. All game knowledge (which
104
- * options, which counts) lives in data — authored in the SRD overlay or
105
- * inline in homebrew entity notes. `id` is the persistence key under
106
- * `ClassEntry.choices[level]` / `Character.origin_choices`. */
107
38
  export type Choice = {
108
39
  kind: "select-inline";
109
40
  id: string;
@@ -118,8 +49,6 @@ export type Choice = {
118
49
  entity_type: string;
119
50
  from?: string[];
120
51
  where?: EntityFilter;
121
- /** D2b-A: the pick names a TARGET (the cantrip a blast invocation's rider reaches), not a grant: nothing it picks
122
- * becomes the character's own (a spell, a feat, a feature). */
123
52
  target?: true;
124
53
  } | {
125
54
  kind: "select-proficiency";
@@ -1,24 +1 @@
1
- import {
2
- ALL_LANGUAGES,
3
- ALL_SKILL_SLUGS,
4
- ALL_TOOLS,
5
- ARTISANS_TOOLS,
6
- EXOTIC_LANGUAGES,
7
- GAMING_SETS,
8
- MUSICAL_INSTRUMENTS,
9
- OTHER_TOOLS,
10
- SECRET_LANGUAGES,
11
- STANDARD_LANGUAGES
12
- } from "../chunk-KU3YLF6D.js";
13
- export {
14
- ALL_LANGUAGES,
15
- ALL_SKILL_SLUGS,
16
- ALL_TOOLS,
17
- ARTISANS_TOOLS,
18
- EXOTIC_LANGUAGES,
19
- GAMING_SETS,
20
- MUSICAL_INSTRUMENTS,
21
- OTHER_TOOLS,
22
- SECRET_LANGUAGES,
23
- STANDARD_LANGUAGES
24
- };
1
+ import{ALL_LANGUAGES,ALL_SKILL_SLUGS,ALL_TOOLS,ARTISANS_TOOLS,EXOTIC_LANGUAGES,GAMING_SETS,MUSICAL_INSTRUMENTS,OTHER_TOOLS,SECRET_LANGUAGES,STANDARD_LANGUAGES}from"../chunk-4JEF3CET.js";export{ALL_LANGUAGES,ALL_SKILL_SLUGS,ALL_TOOLS,ARTISANS_TOOLS,EXOTIC_LANGUAGES,GAMING_SETS,MUSICAL_INSTRUMENTS,OTHER_TOOLS,SECRET_LANGUAGES,STANDARD_LANGUAGES};
@@ -1,4 +1 @@
1
- /** The two D&D 5e rules editions Archivist canonicalizes content for.
2
- * Single source of truth — obsidian `class.types` and the dnd5e entity
3
- * types both import it from here. */
4
1
  export type Edition = "2014" | "2024";
@@ -1,14 +1,4 @@
1
- /** One thing a starting-equipment option grants. `item` is a BARE compendium
2
- * slug (e.g. "chain-mail"); the seeder resolves it to the full edition slug.
3
- * `category` is a player-picked class of item ("martial-weapon",
4
- * "simple-weapon", "martial-melee-weapon", "any-armor", "shield",
5
- * "musical-instrument", "artisan's-tools", "gaming-set", a tool `X-or-Y` union;
6
- * the vocabulary is `categoryToEntitySelect`'s in pc.decision-engine.ts) resolved
7
- * by a nested select-entity. `gold` is gp folded into the bundle. */
8
- export type EquipmentGrant =
9
- /** `contains_value` (COPPER; `1500` = 15 gp) is seeded as gold by the plugin's starting-equipment seeder
10
- * (R4-G3b §9); `worth_value` is never seeded; `display_name` is read by grantLabel. */
11
- {
1
+ export type EquipmentGrant = {
12
2
  item: string;
13
3
  qty?: number;
14
4
  contains_value?: number;
@@ -21,30 +11,16 @@ export type EquipmentGrant =
21
11
  } | {
22
12
  gold: number;
23
13
  };
24
- /** THE rule for which grant is a player-picked CATEGORY: an object whose `category` is a non-empty string. Shared by
25
- * the engine's nested-pick synthesis and the plugin's seeder, so the nth category grant of an option always
26
- * consumes the nth pick key and the two can never count a malformed grant differently. */
27
14
  export declare function isCategoryGrant(g: unknown): g is Extract<EquipmentGrant, {
28
15
  category: string;
29
16
  }>;
30
- /** The persistence key of the nested pick for grant `k` of option `j` of starting-equipment entry `i`: the one
31
- * spelling the engine emits and the plugin reads. `k` indexes the option's WHOLE grant list, not its category
32
- * grants alone. */
33
17
  export declare const equipmentCategoryKey: (i: number, j: number, k: number) => string;
34
- /** The ORDERED pick keys of one option's category grants, the order `resolveGrants` consumes them in. */
35
18
  export declare const equipmentCategoryKeys: (grants: readonly unknown[], i: number, j: number) => string[];
36
- /** True for a starting-equipment decision key (`equipment-<i>` and its nested picks). The Equipment step owns
37
- * these; every other step's decision strip leaves them out. */
38
19
  export declare const isStartingEquipmentKey: (key: string) => boolean;
39
- /** One selectable option of a `kind:"choice"` starting-equipment entry. `label`
40
- * is the human display string (the `.pc-cb-eqopt` text); `grants` is what seeds. */
41
20
  export interface EquipmentOption {
42
21
  label: string;
43
22
  grants: EquipmentGrant[];
44
23
  }
45
- /** Structured starting equipment. Shared by class + background. A `fixed` entry
46
- * may carry a `label` for the un-parsed (prose fallback) case where `grants`
47
- * is empty — it then displays but seeds nothing (graceful degradation). */
48
24
  export type StartingEquipmentEntry = {
49
25
  kind: "choice";
50
26
  options: EquipmentOption[];
@@ -56,8 +32,6 @@ export type StartingEquipmentEntry = {
56
32
  kind: "gold";
57
33
  amount: number;
58
34
  };
59
- /** Buy-with-Gold budget. `fixed` gp (2024) or a `dice`×`multiplier` roll (2014
60
- * "XdY × 10"); average is derived by the consumer. */
61
35
  export interface StartingGold {
62
36
  fixed?: number;
63
37
  dice?: string;
@@ -1,12 +1 @@
1
- import {
2
- equipmentCategoryKey,
3
- equipmentCategoryKeys,
4
- isCategoryGrant,
5
- isStartingEquipmentKey
6
- } from "../chunk-2LULMQTF.js";
7
- export {
8
- equipmentCategoryKey,
9
- equipmentCategoryKeys,
10
- isCategoryGrant,
11
- isStartingEquipmentKey
12
- };
1
+ import{equipmentCategoryKey,equipmentCategoryKeys,isCategoryGrant,isStartingEquipmentKey}from"../chunk-2EOGK6R6.js";export{equipmentCategoryKey,equipmentCategoryKeys,isCategoryGrant,isStartingEquipmentKey};
@@ -1,18 +1,6 @@
1
1
  import type { Ability } from "./choice.js";
2
2
  export type SenseType = "darkvision" | "blindsight" | "tremorsense" | "truesight";
3
- /** A damage rider's weapon scope, the `damage-bonus` arm's structured `applies_to` words (ART-c1 Task 9b, controller
4
- * ruling 8): `melee` and `ranged` are the weapon's CATEGORY (a thrown melee weapon stays melee), `unarmed` the engine's
5
- * Unarmed Strike row, `finesse` and `thrown` the row's properties, and `weapon` every attack row (today's reach, the
6
- * Unarmed Strike row included). A list reaches a row when ANY word matches it. */
7
- export type WeaponScope = "weapon" | "melee" | "ranged" | "unarmed" | "finesse" | "thrown";
8
- /** A spell damage rider's spell scope, the `damage-bonus` arm's `spell_scope` (found 2026-09-29: Potent Spellcasting,
9
- * Empowered Evocation, Elemental Affinity and Radiant Soul said which spells they reach only in prose, so they reached
10
- * none). The rider reaches a character's spell that DEALS DAMAGE when every word it carries matches: `list` the spell is
11
- * on that class's list, `level` its exact level (0 = cantrip), `school` its school, `damage_types` it deals ANY of them,
12
- * `damage_type_pick` it deals the damage type the character chose at that `select-inline` (its option value or a type
13
- * named in its label, "Red (Fire)"), `spells` it is one of these (a name or a slug). `once`: the rider adds to ONE damage
14
- * roll of the casting, however many rolls or targets the spell has ("one damage roll of that spell"). Read with
15
- * `applies_to: spell` or `all`; `all` with no scope reaches every damaging spell. */
3
+ export type WeaponScope = "weapon" | "melee" | "ranged" | "unarmed" | "finesse" | "thrown" | "pact-weapon";
16
4
  export interface SpellScope {
17
5
  list?: string;
18
6
  level?: number;
@@ -22,23 +10,16 @@ export interface SpellScope {
22
10
  spells?: string[];
23
11
  once?: boolean;
24
12
  }
25
- /** Present on every arm: whose numbers the effect changes. Absent === "self". The engine's fold readers skip
26
- * every effect whose subject is present and not "self" (`foldsOnSelf` in pc.feature-effects.ts). */
27
13
  type Subject = {
28
14
  subject?: string;
29
15
  };
30
- /** A prose qualifier, carried for display; on `apply-condition` and `immune-condition` the `condition` key is the
31
- * condition NAME instead, so those two arms do not carry this qualifier. */
32
16
  type Qualified = {
33
17
  condition?: string;
34
18
  } & Subject;
35
- /**
36
- * Hand-written MIRROR of `featureEffectSchema` (schemas/feature-effect-schema.ts). The two are cross-checked at the
37
- * four parser returns and by `_kindPin` in the schema file; edit both in the same commit.
38
- */
39
19
  export type FeatureEffect = ({
40
20
  kind: "initiative-bonus";
41
- value: number;
21
+ value?: number;
22
+ amount?: string;
42
23
  } & Qualified) | ({
43
24
  kind: "skill-bonus";
44
25
  skills: string[];
@@ -139,6 +120,7 @@ export type FeatureEffect = ({
139
120
  level: number;
140
121
  count: number;
141
122
  }[];
123
+ applies_to?: WeaponScope | WeaponScope[];
142
124
  } & Qualified) | ({
143
125
  kind: "reroll-damage";
144
126
  max_reroll: number;
@@ -3,24 +3,10 @@ import type { Resource, ResourceConsumption, ActionCost } from "./resource.js";
3
3
  import type { Attack } from "./attack.js";
4
4
  import type { FeatureEffect } from "./feature-effect.js";
5
5
  import type { Duration } from "../schemas/duration-schema.js";
6
- /**
7
- * Recharge / per-day usage limits on a Feature (e.g. monster action).
8
- *
9
- * - `recharge_on_roll`: at the start of each turn, recharges on a d6 roll
10
- * ≥ `param`. Renders as "Recharge {param}-6" (or "Recharge 6" when param=6).
11
- * - `per_day`: usable `param` times per day. Renders as "{param}/Day".
12
- * - `per_short_rest` / `per_long_rest`: usable `param` times per rest.
13
- */
14
6
  export interface FeatureRecharge {
15
7
  type: "recharge_on_roll" | "per_day" | "per_short_rest" | "per_long_rest";
16
8
  param: number;
17
9
  }
18
- /** The converter's 14-key companion binding (R4-G5 §7, ruling G5-UR2 "declare now, card after the G7 re-emit").
19
- * DECLARED, not read: the converter withholds the key today (`P9_NOT_EMITTED_FIELDS`), 0 converted and 0 bundle
20
- * notes carry it, and the Passive-tab card is a G8 booking. Every closed-vocabulary leaf is a plain `string` and
21
- * every position the converter can emit as null is `| null`, for the reason the schema mirror states: a class,
22
- * subclass or race parser refuses a WHOLE document on one nested leaf failure, so a mirror stricter than the
23
- * emitter is a total-loss risk on the day the re-emit lands. */
24
10
  export interface FeatureCompanion {
25
11
  statblock?: string;
26
12
  statblock_wikilink?: string | null;
@@ -81,15 +67,10 @@ export interface Feature {
81
67
  sub_features?: Feature[];
82
68
  resources?: Resource[];
83
69
  recharge?: FeatureRecharge;
84
- /** Phase 3 activatable buffs: when true, the feature's effects fold only while
85
- * its `id` is present in `Character.state.active_buffs` (toggled in the UI). */
86
70
  activatable?: boolean;
87
- /** Always-on marker; renders a "Passive" tag. */
88
71
  passive?: boolean;
89
- /** How long the buff lasts; rendered as a static label (no live countdown). */
90
72
  duration?: Duration;
91
73
  class_source?: string;
92
- /** Always "" on every measured carrier — never constrain it non-empty. */
93
74
  rendering_hint?: string;
94
75
  subclass_short_name?: string;
95
76
  subclass_source?: string;
@@ -97,14 +78,11 @@ export interface Feature {
97
78
  is_class_feature_variant?: boolean;
98
79
  gain_subclass_feature?: boolean;
99
80
  gain_subclass_feature_has_content?: boolean;
100
- /** 5etools entry type; values {"inset","item"}. */
101
81
  type?: string;
102
82
  action_cost?: ActionCost;
103
83
  save?: {
104
84
  ability: string;
105
85
  dc_formula: string;
106
86
  };
107
- /** The companion this feature binds (R4-G5 §7). Declared so the class / subclass / race parsers stop stripping
108
- * it on the day the G7 re-emit lands; nothing reads it in G5. */
109
87
  companion?: FeatureCompanion;
110
88
  }
@@ -4,13 +4,7 @@ import type { ActionCost, ResetTrigger, ResourceConsumption } from "./resource.j
4
4
  import type { Duration } from "../schemas/duration-schema.js";
5
5
  import type { Edition } from "./edition.js";
6
6
  import type { AdditionalSpellsEntry, ProgressionEntry } from "../schemas/entity-extras-schema.js";
7
- /**
8
- * Documentation-only union of the canonical SRD feature types. The
9
- * `feature_type` field is now an open string (see {@link OptionalFeatureEntity})
10
- * so homebrew categories parse; this union is kept purely as a reference list.
11
- */
12
- export type OptionalFeatureKind = "invocation" | "fighting_style" | "metamagic" | "maneuver" | "infusion" | "artificer_plan" | "pact_boon";
13
- /** A class/subclass named reference carried by a level prerequisite; mirrors namedRefSchema. */
7
+ export type OptionalFeatureKind = "invocation" | "fighting_style" | "metamagic" | "maneuver" | "infusion" | "pact_boon";
14
8
  export type OptionalFeatureNamedRef = {
15
9
  name: string;
16
10
  source?: string;
@@ -46,7 +40,6 @@ export type OptionalFeaturePrerequisite = {
46
40
  entry?: string;
47
41
  entry_summary?: string;
48
42
  };
49
- /** ART-a (spec §4.2). */
50
43
  export interface FilterSpec {
51
44
  rarity: string[];
52
45
  types?: string[];
@@ -89,7 +82,6 @@ export interface InfuseItem {
89
82
  recharge_amount?: string;
90
83
  };
91
84
  action?: ActionCost;
92
- /** ART-c1 (R-3 a): the Actions row's range ("Self"); absent draws no range. */
93
85
  range?: string;
94
86
  }
95
87
  export interface InfuseTarget {
@@ -121,53 +113,31 @@ export interface OptionalFeatureEntity {
121
113
  name: string;
122
114
  edition: Edition;
123
115
  source: string;
124
- /** Open string category (e.g. "invocation"); see {@link OptionalFeatureKind} for canonical SRD values. */
125
116
  feature_type: string;
126
117
  description: string;
127
118
  prerequisites: OptionalFeaturePrerequisite[];
128
- /** Wikilinks to classes/subclasses that can pick this option. */
129
119
  available_to: string[];
130
- /** Mechanical effects mirrored on Feat — same shape. */
131
120
  effects: FeatureEffect[];
132
- /** Optional action economy when the option grants an active ability. */
133
121
  action_cost?: ActionCost | null;
134
- /** Optional uses tracker. */
135
122
  uses?: {
136
123
  max: number | string;
137
124
  recharge: ResetTrigger;
138
125
  } | null;
139
- /** Resource cost to use this option (e.g. burn a Seal). */
140
126
  consumes?: ResourceConsumption | null;
141
- /** How long the granted effect lasts (rendered as a label in Phase 2). */
142
127
  duration?: Duration | null;
143
- /** Always-on marker; renders a "Passive" tag. */
144
128
  passive?: boolean;
145
- /** Phase 3 activatable buffs: when true, the boon's effects fold only while its
146
- * slug is present in `Character.state.active_buffs` (toggled in the PoolTab). */
147
129
  activatable?: boolean;
148
- /** Converter extras declared by optional-feature.schema.ts §2.5; all optional.
149
- * `rendering_hint` is the ONE of these whose VALUES are load-bearing (88 records carry a
150
- * real marker such as `dice-pool`); reading it is G4's row, declaring it is this one's. */
151
130
  rendering_hint?: string;
152
- /** `band` = also drawn in the header strip. Absent/`tab` = the Resources tab only. */
153
131
  surface?: "band" | "tab";
154
132
  additional_spells?: AdditionalSpellsEntry[];
155
133
  is_class_feature_variant?: boolean;
156
134
  has_fluff_images?: boolean;
157
135
  feat_progression?: ProgressionEntry[];
158
136
  optionalfeature_progression?: ProgressionEntry[];
159
- /** One wikilink, or an array of them for the multi-fluff-image emit. */
160
137
  image?: string | string[];
161
- /** ART-a (spec §4.1): a pick is a COPY `<note slug>#<param>`; needs `options` and `item_choice`. */
162
138
  repeatable?: true;
163
- /** `learn`: the param is the item's FULL slug (TCE); `create`: the param is a row key, the item chosen at Create (EFA). */
164
139
  item_choice?: "learn" | "create";
165
- /** The table a copy's param must satisfy (spec §4.2). */
166
140
  options?: OptionRow[];
167
- /** This member infuses an existing object; its effect is an item-vocabulary overlay (spec §4.2). */
168
141
  infuse?: InfuseBlock;
169
- /** D2b-A (design §2.2 step 1): the member's OWN choices (Lessons of the First Ones' Origin feat, Superior Technique's
170
- * maneuver, Pact of the Tome's cantrips and rituals), in the same `Choice` vocabulary features and feats use. Absent,
171
- * the engine derives them from the raw keys the note already carries (`memberChoices`, `pc.member-choices.ts`). */
172
142
  choices?: Choice[];
173
143
  }
@@ -1,5 +1,3 @@
1
- /** `either` = recovered by a short OR a long rest (R4-G3a §8.2; the 43 "short or
2
- * long rest" rows). Kept in step with `resetTriggerEnum` in schemas/resource-schema.ts. */
3
1
  export type ResetTrigger = "short-rest" | "long-rest" | "either" | "dawn" | "dusk" | "turn" | "round" | "custom";
4
2
  export type ActionCost = "action" | "bonus-action" | "reaction" | "free" | "special";
5
3
  export interface ResourceDie {
@@ -13,17 +11,6 @@ export interface ResourceRecovery {
13
11
  action?: ActionCost;
14
12
  uses?: number;
15
13
  reset: ResetTrigger;
16
- /** The recovery KIND; absent = `uses` (R4-G4 §7, UR2), applied by the RESOLVER
17
- * (pc/pc.resources.ts `resolveRecovery`) and never by a schema default, because
18
- * the sheet reads RAW entities. The CARRIERS, re-measured 2026-09-05 after R4-G4
19
- * T2b's regen shipped the bundle (this sentence was authored at T2, BEFORE that
20
- * regen, and said ZERO, which it no longer is): `grep -rl "restores:" --include='*.md'`
21
- * returns the TWO bundle Wizard notes (`SRD 2024/Classes/Wizard.md` and
22
- * `SRD 5e/Classes/Wizard.md`), whose Arcane Recovery rows T2b's overlay stamps
23
- * `spell-slots` and which §7.1 measured as the only spell-slot recoveries in shipped
24
- * data; the embedded `.compendium-bundle/index.json` carries the key on one line for
25
- * the same two rows; the converter corpus carries it on NO note. Kept in step with
26
- * `resourceSchema.recovery` in schemas/resource-schema.ts. */
27
14
  restores?: "uses" | "spell-slots";
28
15
  }
29
16
  export interface ResourceScaleStep {
@@ -41,24 +28,17 @@ export interface Resource {
41
28
  scales_at?: ResourceScaleStep[];
42
29
  die?: ResourceDie;
43
30
  reset: ResetTrigger;
44
- /** Presentation, carried and never interpreted by the engine: which control draws this resource.
45
- * The renderer owns the hint → component table. */
46
31
  rendering_hint?: string;
47
- /** `band` = also drawn in the header strip; absent = the Resources tab alone. */
48
32
  surface?: "band" | "tab";
49
33
  consumes?: ResourceConsumesLink;
50
34
  recovery?: ResourceRecovery[];
35
+ equivalent_ids?: string[];
51
36
  }
52
37
  export interface ResourceConsumption {
53
38
  source?: "resource" | "class-column" | "attack-dice" | "spell-slots";
54
39
  resource?: string;
55
40
  column?: string;
56
- /** The MINIMUM spend when `amount_max` is present, otherwise the exact spend. */
57
41
  amount: number;
58
- /** Upper bound of a RANGE spend (`amount` .. `amount_max`), int and positive.
59
- * DECLARED only in R4-G3a §9: zero emitted carriers, zero readers; spending a
60
- * range is G4's. Kept in step with `resourceConsumptionSchema` in
61
- * schemas/resource-schema.ts, whose refine is undefined-safe. */
62
42
  amount_max?: number;
63
43
  expend_condition?: "roll_succeeds" | "roll_fails" | "target_takes_damage" | "always";
64
44
  free_uses?: {
@@ -1,4 +1,3 @@
1
- /** ART-a (spec §4.5): the at-once counter of an item-bound pool; its defaults are applied at read (`poolActiveWords`). */
2
1
  export interface PoolActive {
3
2
  column: string;
4
3
  label: string;
@@ -7,8 +6,6 @@ export interface PoolActive {
7
6
  create_label?: string;
8
7
  create_verb?: string;
9
8
  }
10
- /** A (sub)class-declared selectable pool (e.g. Interdict Boons). The engine is
11
- * generic: every game-specific string lives here in data, never in code. */
12
9
  export interface SelectionPool {
13
10
  id: string;
14
11
  label: string;
@@ -19,19 +16,14 @@ export interface SelectionPool {
19
16
  available_to: "self";
20
17
  };
21
18
  };
22
- /** Pick count read from the owning class table column at the current level. `label` is the known-counter word,
23
- * read through `poolCountLabel` (absent reads "Known", ART-a spec §4.5). */
24
19
  count: {
25
20
  column: string;
26
21
  label?: string;
27
22
  };
28
23
  replaceable?: boolean;
29
- /** ART-a (spec §4.5): the at-once counter (Infused Items, Magic Items). */
30
24
  active?: PoolActive;
31
- /** ART-a (spec §4.5): a resource id the tab head shows when the pool spends none of its own. */
32
25
  head_resource?: string;
33
26
  }
34
- /** Subclass auto-grants that extend a named pool and do NOT count toward picks. */
35
27
  export interface PoolGrant {
36
28
  pool: string;
37
29
  grants: Array<{
@@ -39,24 +31,8 @@ export interface PoolGrant {
39
31
  at_level: number;
40
32
  }>;
41
33
  }
42
- /** Presentation hint for a data-declared tab. `dice-pool` / `point-pool` are DERIVED from the
43
- * members' `rendering_hint` at resolve time onto `ResolvedPool.layout` (pc/pool-layout.ts), and that
44
- * derivation is UNCONDITIONAL: it runs whether or not the declaration carries a `layout`. R4-G4 T5
45
- * LANDED the precedence in the plugin: `TabsContainer`'s dynamic-pool-tab loop reads the AUTHORED
46
- * value first, then `ResolvedPool.layout`. Since PT (spec §9) every pool tab draws one table and the value
47
- * picks only the tab's HEAD (`poolPresentation`); `spell-like` and `blocks` still parse and are ignored.
48
- * R4-G5 CLOSED that list, and NOT by adding values: `pool-selection` and `stance` never get a layout value
49
- * (measured, spec §10: the three `stance`-hinted documents are field-identical to three unhinted siblings, and
50
- * `pool-selection`'s meaning is delivered by `spell-like` plus the §5 head), and `granted-die-to-ally` is a
51
- * PER-ROW affordance (`EntryAffordance` below), never a pool layout: mapping it here would bury four maneuvers
52
- * under 39 on one vote of 43. This union keeps its four members and `RENDERING_HINT_LAYOUT` its two keys. */
53
34
  export type PoolLayout = "spell-like" | "blocks" | "dice-pool" | "point-pool";
54
- /** A PER-ENTRY affordance derived from ONE optional feature's own `rendering_hint` (R4-G5 §4.2.1). The sibling of
55
- * `PoolLayout`, and deliberately not part of it: a layout is a POOL-level MAJORITY vote, so a hint carried by
56
- * four of 43 maneuvers could never win one, and mapping it would be a monotone loss for the other 39. The table,
57
- * the derivation and the caption live in `pc/pool-layout.ts`. ONE member today. */
58
35
  export type EntryAffordance = "granted-die";
59
- /** A data-declared tab that renders a pool (one generic pool-tab per declaration). */
60
36
  export interface TabDecl {
61
37
  id: string;
62
38
  label: string;
@@ -4,7 +4,6 @@ export declare const MASTERY: Record<string, {
4
4
  gist: string;
5
5
  }>;
6
6
  export declare function masteryLabel(slug: string): string | undefined;
7
- /** One-line effect gist for a mastery slug (or undefined for an unknown slug). */
8
7
  export declare function masteryGist(slug: string): string | undefined;
9
8
  export declare function masteryDerived(slug: string, abilityMod: number, proficiencyBonus: number): {
10
9
  label: string;