@archivist-gg/dnd5e 0.3.11 → 0.3.17

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 (192) hide show
  1. package/LICENSES/SRD.md +38 -3
  2. package/dist/armor/armor.codec.js +3 -3
  3. package/dist/armor/armor.parser.js +2 -2
  4. package/dist/armor/armor.schema.d.ts +1 -0
  5. package/dist/armor/armor.schema.js +1 -1
  6. package/dist/armor/armor.types.d.ts +2 -0
  7. package/dist/background/background.codec.js +5 -5
  8. package/dist/background/background.parser.js +4 -4
  9. package/dist/background/background.schema.js +3 -3
  10. package/dist/{chunk-XTRDCSJB.js → chunk-2JSQE3DD.js} +15 -1
  11. package/dist/chunk-2LULMQTF.js +14 -0
  12. package/dist/{chunk-MAH6DCRI.js → chunk-2UDSN6VW.js} +1 -1
  13. package/dist/chunk-3LWMFYKS.js +57 -0
  14. package/dist/{chunk-JCEV7KYN.js → chunk-3MGQFFNE.js} +1 -1
  15. package/dist/chunk-3VZZDKRA.js +1014 -0
  16. package/dist/{chunk-2DFENQIJ.js → chunk-5GKJAUMX.js} +2 -0
  17. package/dist/{chunk-2M34FLAY.js → chunk-5MXFW4O3.js} +9 -3
  18. package/dist/{chunk-4DOMDEBZ.js → chunk-6EI737IO.js} +1 -1
  19. package/dist/{chunk-G247QXWW.js → chunk-7ATNGKBS.js} +1 -1
  20. package/dist/{chunk-XY6X2APM.js → chunk-7Q2VPKCD.js} +17 -0
  21. package/dist/{chunk-T2SNEJOE.js → chunk-7QN7XSAK.js} +1 -1
  22. package/dist/{chunk-DNAJRMNN.js → chunk-A54HHCWW.js} +6 -7
  23. package/dist/{chunk-7YU4NPKR.js → chunk-AZRGFUSR.js} +1 -1
  24. package/dist/{chunk-PP2UHLBA.js → chunk-B3DP42OM.js} +5 -0
  25. package/dist/chunk-CM5CWO4K.js +735 -0
  26. package/dist/{chunk-MQ747UCR.js → chunk-DOXSFYLH.js} +70 -2
  27. package/dist/chunk-EJP263OP.js +186 -0
  28. package/dist/{chunk-SMLXZUBH.js → chunk-EYX4JMAU.js} +4 -1
  29. package/dist/{chunk-V6LJFP4R.js → chunk-FANQVQ3D.js} +2 -2
  30. package/dist/{chunk-AW3EHF3L.js → chunk-FC4IGH5Y.js} +1 -1
  31. package/dist/{chunk-23LZLBJK.js → chunk-G6MHJDVT.js} +6 -2
  32. package/dist/{chunk-JANNRGJC.js → chunk-G6PBI2BU.js} +1 -1
  33. package/dist/chunk-H5PTKYXL.js +101 -0
  34. package/dist/{chunk-LWFTHJIE.js → chunk-HHBD4SQ6.js} +1 -1
  35. package/dist/{chunk-JC5UNIVM.js → chunk-HS6FIOLP.js} +2 -0
  36. package/dist/chunk-HTYMW5CH.js +228 -0
  37. package/dist/chunk-IHE6KVC3.js +13 -0
  38. package/dist/{chunk-QHMWA3SZ.js → chunk-JCMUVZIK.js} +1 -1
  39. package/dist/{chunk-V373TRJE.js → chunk-JSM6JFZR.js} +198 -125
  40. package/dist/{chunk-LDDCNPHD.js → chunk-K5NJBTE2.js} +1 -1
  41. package/dist/chunk-KR6JF3BF.js +14 -0
  42. package/dist/{chunk-4ISR76DH.js → chunk-KSTV7J2U.js} +9 -3
  43. package/dist/chunk-LBEXLN6I.js +91 -0
  44. package/dist/{chunk-BLRW2UU6.js → chunk-LF5AGJA4.js} +2 -2
  45. package/dist/{chunk-UBBKSYBY.js → chunk-LHZXYFBU.js} +30 -1
  46. package/dist/{chunk-BIA32MQ5.js → chunk-MBX25B6D.js} +1 -1
  47. package/dist/{chunk-R2ZV233X.js → chunk-MYY2C5MB.js} +3 -3
  48. package/dist/{chunk-J77CKYV3.js → chunk-OFCSP6MT.js} +1 -1
  49. package/dist/{chunk-2INMRR3Q.js → chunk-ONTGZR5T.js} +326 -149
  50. package/dist/{chunk-MWCCGPG3.js → chunk-OOSRUJBI.js} +3 -2
  51. package/dist/{chunk-U3BABVJF.js → chunk-PKX6TGRE.js} +2 -2
  52. package/dist/{chunk-PJMG5XV3.js → chunk-PQZ4LM4Z.js} +1 -1
  53. package/dist/chunk-PXVNAY7T.js +84 -0
  54. package/dist/chunk-QH36K2PU.js +158 -0
  55. package/dist/{chunk-R747YKS7.js → chunk-QZSWN2KT.js} +1 -1
  56. package/dist/{chunk-CHUALUIX.js → chunk-RYLXAYIQ.js} +1 -1
  57. package/dist/{chunk-GFZ7PITJ.js → chunk-S3YUXDSC.js} +6 -1
  58. package/dist/{chunk-PZCE7DJM.js → chunk-T6QIF5XR.js} +31 -1
  59. package/dist/{chunk-CBEKVAX4.js → chunk-TULQ4FFX.js} +41 -13
  60. package/dist/{chunk-S56D6B6C.js → chunk-UUBJCNQU.js} +12 -3
  61. package/dist/{chunk-5N2GW72F.js → chunk-UZXG6QSY.js} +2 -1
  62. package/dist/{chunk-4XTNPNQB.js → chunk-VPYBK2MG.js} +1 -1
  63. package/dist/{chunk-3HX5VLWP.js → chunk-VRV3NNTA.js} +2 -2
  64. package/dist/{chunk-HZA7OE7N.js → chunk-XCFC7LGF.js} +2 -1
  65. package/dist/{chunk-BL3VELKP.js → chunk-Y5VVP73C.js} +1 -1
  66. package/dist/{chunk-PI4LLJG4.js → chunk-YD2VAHA6.js} +2 -2
  67. package/dist/{chunk-UIRMA5KM.js → chunk-YDGMBMYI.js} +1 -1
  68. package/dist/{chunk-NWDF5HG3.js → chunk-YKL6SHRJ.js} +1 -1
  69. package/dist/{chunk-6X4KUDMU.js → chunk-ZCTUYGNV.js} +7 -2
  70. package/dist/chunk-ZUQW5VBZ.js +89 -0
  71. package/dist/class/class.codec.js +7 -7
  72. package/dist/class/class.parser.js +6 -6
  73. package/dist/class/class.schema.d.ts +18 -0
  74. package/dist/class/class.schema.js +5 -5
  75. package/dist/class/class.standard-array.d.ts +16 -0
  76. package/dist/class/class.standard-array.js +20 -0
  77. package/dist/class/class.types.d.ts +3 -0
  78. package/dist/dnd/amount-text.d.ts +38 -0
  79. package/dist/dnd/amount-text.js +13 -0
  80. package/dist/dnd/resource-words.d.ts +4 -0
  81. package/dist/dnd/resource-words.js +30 -0
  82. package/dist/entities/base-item-resolver.js +2 -2
  83. package/dist/entities/slug.d.ts +18 -8
  84. package/dist/entities/slug.js +3 -1
  85. package/dist/feat/feat.codec.js +5 -5
  86. package/dist/feat/feat.parser.js +4 -4
  87. package/dist/feat/feat.schema.d.ts +41 -3
  88. package/dist/feat/feat.schema.js +3 -3
  89. package/dist/index.js +7513 -4177
  90. package/dist/item/item.actions-map.d.ts +40 -5
  91. package/dist/item/item.actions-map.js +5 -84
  92. package/dist/item/item.attunement.js +3 -9
  93. package/dist/item/item.bonuses.js +5 -2
  94. package/dist/item/item.codec.js +3 -3
  95. package/dist/item/item.conditions.js +4 -1
  96. package/dist/item/item.conditions.types.d.ts +4 -0
  97. package/dist/item/item.cost.d.ts +3 -0
  98. package/dist/item/item.cost.js +29 -0
  99. package/dist/item/item.icon.d.ts +15 -0
  100. package/dist/item/item.icon.js +211 -0
  101. package/dist/item/item.parser.js +2 -2
  102. package/dist/item/item.schema.d.ts +16 -1
  103. package/dist/item/item.schema.js +3 -1
  104. package/dist/item/item.types.d.ts +9 -2
  105. package/dist/monster/monster.parser.js +5 -5
  106. package/dist/monster/monster.schema.js +4 -4
  107. package/dist/optional-feature/optional-feature.codec.js +5 -4
  108. package/dist/optional-feature/optional-feature.parser.js +4 -3
  109. package/dist/optional-feature/optional-feature.schema.d.ts +255 -3
  110. package/dist/optional-feature/optional-feature.schema.js +7 -2
  111. package/dist/pc/pc.additional-spells.js +3 -3
  112. package/dist/pc/pc.amount-bindings.d.ts +32 -0
  113. package/dist/pc/pc.amount-bindings.js +23 -0
  114. package/dist/pc/pc.asi-flatten.d.ts +62 -1
  115. package/dist/pc/pc.asi-flatten.js +16 -0
  116. package/dist/pc/pc.conditions.js +1 -1
  117. package/dist/pc/pc.containment.d.ts +45 -0
  118. package/dist/pc/pc.containment.js +24 -0
  119. package/dist/pc/pc.decision-engine.d.ts +24 -3
  120. package/dist/pc/pc.decision-engine.js +26 -16
  121. package/dist/pc/pc.entry-overrides.d.ts +79 -0
  122. package/dist/pc/pc.entry-overrides.js +40 -0
  123. package/dist/pc/pc.equipment.d.ts +2 -2
  124. package/dist/pc/pc.equipment.js +19 -7
  125. package/dist/pc/pc.feature-effects.d.ts +12 -0
  126. package/dist/pc/pc.feature-effects.js +2 -2
  127. package/dist/pc/pc.infusions.d.ts +228 -0
  128. package/dist/pc/pc.infusions.js +64 -0
  129. package/dist/pc/pc.member-choices.d.ts +90 -0
  130. package/dist/pc/pc.member-choices.js +32 -0
  131. package/dist/pc/pc.parser.js +18 -1
  132. package/dist/pc/pc.pools.d.ts +8 -1
  133. package/dist/pc/pc.pools.js +13 -3
  134. package/dist/pc/pc.proficiencies.js +23 -15
  135. package/dist/pc/pc.proficiency-query.js +6 -0
  136. package/dist/pc/pc.recalc.d.ts +39 -36
  137. package/dist/pc/pc.recalc.js +115 -70
  138. package/dist/pc/pc.resolver.d.ts +2 -1
  139. package/dist/pc/pc.resolver.js +22 -14
  140. package/dist/pc/pc.resource-seed.js +1 -1
  141. package/dist/pc/pc.resources.d.ts +6 -1
  142. package/dist/pc/pc.resources.js +3 -1
  143. package/dist/pc/pc.rest.d.ts +21 -1
  144. package/dist/pc/pc.rest.js +52 -19
  145. package/dist/pc/pc.schema.d.ts +43 -2
  146. package/dist/pc/pc.schema.js +1 -1
  147. package/dist/pc/pc.slotting.d.ts +36 -3
  148. package/dist/pc/pc.slotting.js +13 -5
  149. package/dist/pc/pc.tool-picks.d.ts +51 -0
  150. package/dist/pc/pc.tool-picks.js +18 -0
  151. package/dist/pc/pc.types.d.ts +115 -14
  152. package/dist/pc/pc.weapon-grant.d.ts +15 -0
  153. package/dist/pc/pool-layout.d.ts +8 -0
  154. package/dist/pc/pool-layout.js +5 -3
  155. package/dist/pc/resource-equivalents.d.ts +44 -0
  156. package/dist/pc/spell-source.js +4 -9
  157. package/dist/race/race.codec.js +6 -6
  158. package/dist/race/race.parser.js +5 -5
  159. package/dist/race/race.schema.js +4 -4
  160. package/dist/schemas/attack-schema.d.ts +1 -1
  161. package/dist/schemas/choice-schema.js +2 -2
  162. package/dist/schemas/feature-effect-schema.d.ts +41 -3
  163. package/dist/schemas/feature-effect-schema.js +1 -1
  164. package/dist/schemas/feature-schema.js +3 -3
  165. package/dist/schemas/selection-pool-schema.d.ts +10 -0
  166. package/dist/schemas/selection-pool-schema.js +1 -1
  167. package/dist/spell/spell.codec.js +2 -2
  168. package/dist/spell/spell.parser.d.ts +6 -1
  169. package/dist/spell/spell.parser.js +5 -3
  170. package/dist/spell/spell.types.d.ts +10 -0
  171. package/dist/srd/retired-items.d.ts +14 -0
  172. package/dist/srd/retired-items.js +11 -0
  173. package/dist/subclass/subclass.codec.js +7 -7
  174. package/dist/subclass/subclass.parser.js +6 -6
  175. package/dist/subclass/subclass.schema.d.ts +10 -0
  176. package/dist/subclass/subclass.schema.js +5 -5
  177. package/dist/types/choice.d.ts +13 -0
  178. package/dist/types/equipment-grant.d.ts +18 -1
  179. package/dist/types/equipment-grant.js +12 -0
  180. package/dist/types/feature-effect.d.ts +12 -1
  181. package/dist/types/optional-feature.types.d.ts +84 -1
  182. package/dist/types/selection-pool.d.ts +18 -3
  183. package/dist/weapon/weapon.classify.d.ts +10 -8
  184. package/dist/weapon/weapon.classify.js +2 -2
  185. package/dist/weapon/weapon.codec.js +3 -3
  186. package/dist/weapon/weapon.parser.js +2 -2
  187. package/dist/weapon/weapon.schema.d.ts +1 -0
  188. package/dist/weapon/weapon.schema.js +1 -1
  189. package/dist/weapon/weapon.types.d.ts +2 -0
  190. package/package.json +1 -1
  191. package/dist/chunk-O4SRD3J5.js +0 -165
  192. package/dist/chunk-WXWPK3LI.js +0 -55
@@ -0,0 +1,91 @@
1
+ import {
2
+ bareEntitySlug
3
+ } from "./chunk-ZCTUYGNV.js";
4
+ import {
5
+ ABILITY_KEYS
6
+ } from "./chunk-WELIKLZF.js";
7
+
8
+ // src/pc/pc.asi-flatten.ts
9
+ function flattenAsiOrFeat(choice) {
10
+ var _a;
11
+ if (choice.kind !== "select-inline" || choice.id !== "asi-or-feat") return choice;
12
+ const featBranches = choice.options.filter((o) => {
13
+ var _a2;
14
+ return ((_a2 = o.choices) != null ? _a2 : []).some((c) => c.kind === "select-entity" && c.entity_type === "feat");
15
+ });
16
+ if (featBranches.length !== 1) return choice;
17
+ const inner = (_a = featBranches[0].choices) != null ? _a : [];
18
+ if (inner.length !== 1) return choice;
19
+ const only = inner[0];
20
+ if (only.kind !== "select-entity" || only.entity_type !== "feat") return choice;
21
+ return only;
22
+ }
23
+ var ASI_FEAT_BARE = "ability-score-improvement";
24
+ function legacyAsiBranch(block) {
25
+ if (!block || typeof block !== "object") return null;
26
+ const b = block;
27
+ if (typeof b.feat === "string") return null;
28
+ const asi = b.asi;
29
+ if (!asi || typeof asi !== "object" || Array.isArray(asi)) return null;
30
+ const out = {};
31
+ let any = false;
32
+ for (const ab of ABILITY_KEYS) {
33
+ const v = asi[ab];
34
+ if (typeof v === "number") {
35
+ out[ab] = v;
36
+ any = true;
37
+ }
38
+ }
39
+ return any ? out : null;
40
+ }
41
+ function convertibleLegacyAsi(block) {
42
+ const alloc = legacyAsiBranch(block);
43
+ if (!alloc) return null;
44
+ const branch = block["asi-or-feat"];
45
+ return branch === void 0 || branch === "asi" ? alloc : null;
46
+ }
47
+ function resolveLegacyAsiFeat(registry, classEntity) {
48
+ if (!classEntity) return null;
49
+ const prefix = classEntity.slug.split("_")[0];
50
+ const ranked = [];
51
+ for (const e of registry.search("", "feat", Number.POSITIVE_INFINITY)) {
52
+ if (bareEntitySlug(e.slug) !== ASI_FEAT_BARE) continue;
53
+ const data = e.data;
54
+ const choices = Array.isArray(data == null ? void 0 : data.choices) ? data.choices : [];
55
+ const points = choices.find((c) => (c == null ? void 0 : c.kind) === "ability-points" && typeof c.id === "string");
56
+ if (!points) continue;
57
+ ranked.push({
58
+ slug: e.slug,
59
+ childId: points.id,
60
+ prefixHit: e.slug.split("_")[0] === prefix,
61
+ editionHit: classEntity.edition !== void 0 && (data == null ? void 0 : data.edition) === classEntity.edition
62
+ });
63
+ }
64
+ ranked.sort((a, b) => Number(b.prefixHit) - Number(a.prefixHit) || Number(b.editionHit) - Number(a.editionHit) || (a.slug < b.slug ? -1 : a.slug > b.slug ? 1 : 0));
65
+ return ranked.length ? { slug: ranked[0].slug, childId: ranked[0].childId } : null;
66
+ }
67
+ function migrateLegacyAsiLevel(block, key, value, registry, classEntity) {
68
+ if (key !== "feat" && !key.startsWith("feat:")) return null;
69
+ const alloc = convertibleLegacyAsi(block);
70
+ if (!alloc) return null;
71
+ const asi = resolveLegacyAsiFeat(registry, classEntity);
72
+ if (!asi) return null;
73
+ const childKey = `feat:${asi.childId}`;
74
+ const isSwitch = key === "feat" && value !== asi.slug;
75
+ const out = {};
76
+ for (const [k, v] of Object.entries(block)) {
77
+ if (k === "asi-or-feat" || k === "asi" || k === childKey) continue;
78
+ out[k] = v;
79
+ }
80
+ out.feat = asi.slug;
81
+ if (!isSwitch) out[childKey] = alloc;
82
+ return out;
83
+ }
84
+
85
+ export {
86
+ flattenAsiOrFeat,
87
+ legacyAsiBranch,
88
+ convertibleLegacyAsi,
89
+ resolveLegacyAsiFeat,
90
+ migrateLegacyAsiLevel
91
+ };
@@ -2,13 +2,13 @@ import {
2
2
  poolGrantSchema,
3
3
  selectionPoolSchema,
4
4
  tabDeclSchema
5
- } from "./chunk-23LZLBJK.js";
5
+ } from "./chunk-G6MHJDVT.js";
6
6
  import {
7
7
  casterTypeEnum
8
8
  } from "./chunk-CJYCVNW2.js";
9
9
  import {
10
10
  featureSchema
11
- } from "./chunk-PI4LLJG4.js";
11
+ } from "./chunk-YD2VAHA6.js";
12
12
  import {
13
13
  resourceSchema
14
14
  } from "./chunk-ZJXSXVFP.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  resolveBaseItem
3
- } from "./chunk-WXWPK3LI.js";
3
+ } from "./chunk-CM5CWO4K.js";
4
4
 
5
5
  // src/pc/pc.slotting.ts
6
6
  function isItemEntity(e) {
@@ -38,6 +38,31 @@ function effectiveArmor(entity, registry) {
38
38
  }
39
39
  return null;
40
40
  }
41
+ function effectiveWeapon(entity, registry) {
42
+ if (isWeaponEntity(entity)) return entity;
43
+ if (isItemEntity(entity) && typeof entity.base_item === "string") {
44
+ const base = resolveBaseItem(entity.base_item, registry);
45
+ if ((base == null ? void 0 : base.entityType) === "weapon" && isWeaponEntity(base.data)) return base.data;
46
+ }
47
+ return null;
48
+ }
49
+ function isTwoHandedWeapon(entity, registry) {
50
+ if (!entity || typeof entity !== "object") return false;
51
+ const own = entity.properties;
52
+ if (Array.isArray(own) && own.length > 0) return own.some((p) => p === "two_handed");
53
+ if (!registry) return false;
54
+ const weapon = effectiveWeapon(entity, registry);
55
+ return !!weapon && Array.isArray(weapon.properties) && weapon.properties.some((p) => p === "two_handed");
56
+ }
57
+ function armorAcTerm(armor) {
58
+ var _a;
59
+ return armor.ac.base + ((_a = armor.ac.flat) != null ? _a : 0);
60
+ }
61
+ function slotAcTerms(armor, entry) {
62
+ var _a;
63
+ const bonus = (_a = entry == null ? void 0 : entry.overrides) == null ? void 0 : _a.ac_bonus;
64
+ return { armor: armor ? armorAcTerm(armor) : null, override: typeof bonus === "number" ? bonus : 0 };
65
+ }
41
66
  function defaultSlotForType(entityType, entity, registry) {
42
67
  if (entityType === "weapon") return "mainhand";
43
68
  if (entityType === "armor") {
@@ -61,5 +86,9 @@ export {
61
86
  resolveEntityForEntry,
62
87
  isShieldArmor,
63
88
  effectiveArmor,
89
+ effectiveWeapon,
90
+ isTwoHandedWeapon,
91
+ armorAcTerm,
92
+ slotAcTerms,
64
93
  defaultSlotForType
65
94
  };
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  parseClass
3
- } from "./chunk-NWDF5HG3.js";
3
+ } from "./chunk-YKL6SHRJ.js";
4
4
 
5
5
  // src/class/class.codec.ts
6
6
  import yaml from "js-yaml";
@@ -132,7 +132,7 @@ var CONDITION_TOOLTIPS_2014 = {
132
132
  paralyzed: [
133
133
  "Incapacitated. Speed 0.",
134
134
  "Auto-fail STR/DEX saves.",
135
- "Attacks against have advantage; melee within 5ft auto-crit."
135
+ "Attacks against have advantage; melee within 5 ft. auto-crit."
136
136
  ],
137
137
  petrified: [
138
138
  "Incapacitated. Speed 0.",
@@ -141,7 +141,7 @@ var CONDITION_TOOLTIPS_2014 = {
141
141
  ],
142
142
  poisoned: ["Disadvantage on attack rolls and ability checks."],
143
143
  prone: [
144
- "Attacks against within 5ft have advantage; beyond 5ft have disadvantage.",
144
+ "Attacks against within 5 ft. have advantage; beyond 5 ft. have disadvantage.",
145
145
  "Your attacks have disadvantage."
146
146
  ],
147
147
  restrained: [
@@ -155,7 +155,7 @@ var CONDITION_TOOLTIPS_2014 = {
155
155
  unconscious: [
156
156
  "Incapacitated, prone, dropped held items. Speed 0.",
157
157
  "Auto-fail STR/DEX saves.",
158
- "Attacks against have advantage; melee within 5ft auto-crit."
158
+ "Attacks against have advantage; melee within 5 ft. auto-crit."
159
159
  ]
160
160
  };
161
161
  var CONDITION_TOOLTIPS_2024 = {
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  subclassEntitySchema
3
- } from "./chunk-BLRW2UU6.js";
3
+ } from "./chunk-LF5AGJA4.js";
4
4
  import {
5
5
  aliasFeaturesByLevelActionCost
6
6
  } from "./chunk-4U55VNC7.js";