@elite-dangerous-almanac/core 0.2.8 → 0.2.9

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 (262) hide show
  1. package/PROVENANCE/astro/SOURCES.md +13 -12
  2. package/PROVENANCE/commodities/SOURCES.md +50 -6
  3. package/PROVENANCE/equipment/SOURCES.md +98 -20
  4. package/PROVENANCE/i18n/SOURCES.md +186 -80
  5. package/PROVENANCE/ships/SOURCES.md +344 -200
  6. package/README.md +10 -2
  7. package/THIRD_PARTY_NOTICES.md +11 -3
  8. package/dist/astro/body-rings.d.ts +2 -2
  9. package/dist/astro/codex-region-lookup.d.ts +1 -1
  10. package/dist/astro/codex-region-lookup.js +1 -1
  11. package/dist/astro/hand-authored-regions.d.ts +1 -1
  12. package/dist/astro/index.d.ts +1 -1
  13. package/dist/astro/index.js +1 -1
  14. package/dist/astro/naming-region-origins.d.ts +1 -1
  15. package/dist/astro/naming-region-origins.js +1 -1
  16. package/dist/astro/nebulae-all.d.ts +4 -6
  17. package/dist/astro/nebulae-all.js +1 -1
  18. package/dist/astro/nebulae-all.js.map +1 -1
  19. package/dist/astro/nebulae-planetary.d.ts +4 -5
  20. package/dist/astro/nebulae-planetary.js +1 -1
  21. package/dist/astro/nebulae-procgen.d.ts +3 -3
  22. package/dist/astro/nebulae-real.d.ts +3 -3
  23. package/dist/astro/nebulae.d.ts +8 -8
  24. package/dist/astro/permit-locked-regions.d.ts +2 -2
  25. package/dist/astro/permit-locked-systems.d.ts +1 -1
  26. package/dist/astro/permit-locks.d.ts +2 -2
  27. package/dist/astro/procedural-system.d.ts +3 -3
  28. package/dist/astro/procedural-system.js +1 -1
  29. package/dist/astro/system-address.d.ts +1 -1
  30. package/dist/astro/system-address.js +1 -1
  31. package/dist/astro/system-name.js +1 -1
  32. package/dist/{chunk-XSLPWM5N.js → chunk-2J6NNI3Y.js} +1 -1
  33. package/dist/{chunk-DWRNXUAX.js → chunk-2KIZN3BY.js} +1 -1
  34. package/dist/{chunk-J7BM5NGK.js → chunk-2TY42PTF.js} +1 -1
  35. package/dist/{chunk-773VO2GK.js → chunk-4T3TTYUT.js} +1 -1
  36. package/dist/{chunk-773VO2GK.js.map → chunk-4T3TTYUT.js.map} +1 -1
  37. package/dist/{chunk-W5ULI75F.js → chunk-7C7NJWCF.js} +1 -1
  38. package/dist/{chunk-W5ULI75F.js.map → chunk-7C7NJWCF.js.map} +1 -1
  39. package/dist/{chunk-IMNOEFUE.js → chunk-7Y5EK2VO.js} +1 -1
  40. package/dist/{chunk-IMNOEFUE.js.map → chunk-7Y5EK2VO.js.map} +1 -1
  41. package/dist/{chunk-2OBUSQA7.js → chunk-AAU7OM47.js} +1 -1
  42. package/dist/{chunk-2OBUSQA7.js.map → chunk-AAU7OM47.js.map} +1 -1
  43. package/dist/{chunk-GIGRBFIJ.js → chunk-AC3U7LRK.js} +1 -1
  44. package/dist/{chunk-GIGRBFIJ.js.map → chunk-AC3U7LRK.js.map} +1 -1
  45. package/dist/{chunk-BJU27V6C.js → chunk-AUBV6S7V.js} +1 -1
  46. package/dist/{chunk-BJU27V6C.js.map → chunk-AUBV6S7V.js.map} +1 -1
  47. package/dist/{chunk-DI5RXSJR.js → chunk-BVLBS2QY.js} +1 -1
  48. package/dist/{chunk-DI5RXSJR.js.map → chunk-BVLBS2QY.js.map} +1 -1
  49. package/dist/{chunk-IN36YSS4.js → chunk-C3YZ5KTA.js} +1 -1
  50. package/dist/{chunk-IN36YSS4.js.map → chunk-C3YZ5KTA.js.map} +1 -1
  51. package/dist/{chunk-6UNAD74Z.js → chunk-C4FUV6GF.js} +1 -1
  52. package/dist/{chunk-6UNAD74Z.js.map → chunk-C4FUV6GF.js.map} +1 -1
  53. package/dist/chunk-CEF7SMB2.js +1 -0
  54. package/dist/chunk-CEF7SMB2.js.map +1 -0
  55. package/dist/chunk-E2HDF6PJ.js +1 -0
  56. package/dist/chunk-E2HDF6PJ.js.map +1 -0
  57. package/dist/{chunk-OFZGNWBT.js → chunk-ETREYN5U.js} +1 -1
  58. package/dist/{chunk-OFZGNWBT.js.map → chunk-ETREYN5U.js.map} +1 -1
  59. package/dist/{chunk-KBCA4GEZ.js → chunk-FP2TQJZP.js} +1 -1
  60. package/dist/{chunk-YJAH6DFY.js → chunk-G7WARJ3X.js} +1 -1
  61. package/dist/chunk-G7WARJ3X.js.map +1 -0
  62. package/dist/{chunk-Z4OUB4SJ.js → chunk-GLTCCDN5.js} +1 -1
  63. package/dist/{chunk-Z4OUB4SJ.js.map → chunk-GLTCCDN5.js.map} +1 -1
  64. package/dist/chunk-GVNTKCVF.js +1 -0
  65. package/dist/chunk-GVNTKCVF.js.map +1 -0
  66. package/dist/{chunk-Q6YDPREF.js → chunk-GZLD7RTK.js} +1 -1
  67. package/dist/{chunk-Q6YDPREF.js.map → chunk-GZLD7RTK.js.map} +1 -1
  68. package/dist/{chunk-SC4MEHVY.js → chunk-HIJR7DOC.js} +1 -1
  69. package/dist/{chunk-SC4MEHVY.js.map → chunk-HIJR7DOC.js.map} +1 -1
  70. package/dist/{chunk-ETWMPMZP.js → chunk-K5JK3XQB.js} +1 -1
  71. package/dist/{chunk-GRIK3EDH.js → chunk-KY7KSPU6.js} +1 -1
  72. package/dist/{chunk-GRIK3EDH.js.map → chunk-KY7KSPU6.js.map} +1 -1
  73. package/dist/{chunk-EHFHRQEP.js → chunk-M4STXLXO.js} +1 -1
  74. package/dist/{chunk-EHFHRQEP.js.map → chunk-M4STXLXO.js.map} +1 -1
  75. package/dist/{chunk-5YEHJM6V.js → chunk-OSMBAFRW.js} +1 -1
  76. package/dist/{chunk-5YEHJM6V.js.map → chunk-OSMBAFRW.js.map} +1 -1
  77. package/dist/chunk-PIU24HRN.js +1 -0
  78. package/dist/chunk-PIU24HRN.js.map +1 -0
  79. package/dist/{chunk-ELT3FEA4.js → chunk-PKKBYBL4.js} +1 -1
  80. package/dist/{chunk-ELT3FEA4.js.map → chunk-PKKBYBL4.js.map} +1 -1
  81. package/dist/{chunk-6HMIF2RJ.js → chunk-Q647OXON.js} +1 -1
  82. package/dist/{chunk-6HMIF2RJ.js.map → chunk-Q647OXON.js.map} +1 -1
  83. package/dist/{chunk-BMQM4JBL.js → chunk-QPT2WJYN.js} +1 -1
  84. package/dist/{chunk-BMQM4JBL.js.map → chunk-QPT2WJYN.js.map} +1 -1
  85. package/dist/{chunk-3WGXGBW5.js → chunk-R2AEZYX7.js} +1 -1
  86. package/dist/{chunk-FJIWJYKO.js → chunk-RA4YJBU5.js} +1 -1
  87. package/dist/chunk-RA4YJBU5.js.map +1 -0
  88. package/dist/{chunk-MRLUWHGI.js → chunk-RJ3ZLQRB.js} +1 -1
  89. package/dist/{chunk-MRLUWHGI.js.map → chunk-RJ3ZLQRB.js.map} +1 -1
  90. package/dist/chunk-SFEQXUIA.js +1 -0
  91. package/dist/{chunk-WV7QCDL5.js → chunk-SIL356HB.js} +1 -1
  92. package/dist/{chunk-WV7QCDL5.js.map → chunk-SIL356HB.js.map} +1 -1
  93. package/dist/{chunk-OLKOWR7S.js → chunk-SS7HVNP5.js} +1 -1
  94. package/dist/{chunk-OLKOWR7S.js.map → chunk-SS7HVNP5.js.map} +1 -1
  95. package/dist/chunk-TRGHPX2O.js +1 -0
  96. package/dist/chunk-TRGHPX2O.js.map +1 -0
  97. package/dist/{chunk-GMTAFUAG.js → chunk-TYRH73MO.js} +1 -1
  98. package/dist/{chunk-GMTAFUAG.js.map → chunk-TYRH73MO.js.map} +1 -1
  99. package/dist/{chunk-7TVFV3VO.js → chunk-U3IRMXMR.js} +1 -1
  100. package/dist/{chunk-A7IVMYNF.js → chunk-U73MBQ45.js} +1 -1
  101. package/dist/{chunk-A7IVMYNF.js.map → chunk-U73MBQ45.js.map} +1 -1
  102. package/dist/{chunk-IZIIGK3W.js → chunk-UE22QU7A.js} +1 -1
  103. package/dist/{chunk-IZIIGK3W.js.map → chunk-UE22QU7A.js.map} +1 -1
  104. package/dist/{chunk-DBDCOHI4.js → chunk-UI5RROGI.js} +1 -1
  105. package/dist/{chunk-DBDCOHI4.js.map → chunk-UI5RROGI.js.map} +1 -1
  106. package/dist/chunk-URRPEUIK.js +1 -0
  107. package/dist/{chunk-QJECDMQQ.js.map → chunk-URRPEUIK.js.map} +1 -1
  108. package/dist/chunk-UTWZZOSA.js +1 -0
  109. package/dist/chunk-UTWZZOSA.js.map +1 -0
  110. package/dist/chunk-UVX7RCMP.js +1 -0
  111. package/dist/chunk-UVX7RCMP.js.map +1 -0
  112. package/dist/{chunk-7ATBEOVC.js → chunk-WG4DPXJI.js} +1 -1
  113. package/dist/{chunk-XFDMCPDW.js → chunk-WZIBBJHA.js} +1 -1
  114. package/dist/{chunk-XFDMCPDW.js.map → chunk-WZIBBJHA.js.map} +1 -1
  115. package/dist/{chunk-7EWZGDWY.js → chunk-X3MXPE7G.js} +1 -1
  116. package/dist/{chunk-7EWZGDWY.js.map → chunk-X3MXPE7G.js.map} +1 -1
  117. package/dist/{chunk-JCYOE3C4.js → chunk-XQJERZUS.js} +1 -1
  118. package/dist/{chunk-JCYOE3C4.js.map → chunk-XQJERZUS.js.map} +1 -1
  119. package/dist/{chunk-SD6GNFDX.js → chunk-YBE5M27G.js} +1 -1
  120. package/dist/{chunk-SD6GNFDX.js.map → chunk-YBE5M27G.js.map} +1 -1
  121. package/dist/chunk-ZBUTGTZ3.js +1 -0
  122. package/dist/chunk-ZBUTGTZ3.js.map +1 -0
  123. package/dist/commodities/commodities-all.d.ts +2 -2
  124. package/dist/commodities/commodities-all.js +1 -1
  125. package/dist/commodities/commodities-rare.d.ts +3 -4
  126. package/dist/commodities/commodities-rare.js +1 -1
  127. package/dist/commodities/commodities-standard.d.ts +7 -7
  128. package/dist/commodities/commodities-standard.js +1 -1
  129. package/dist/commodities/commodities.d.ts +12 -12
  130. package/dist/commodities/commodities.js +1 -1
  131. package/dist/commodities/index.js +1 -1
  132. package/dist/equipment/engineering.d.ts +11 -6
  133. package/dist/equipment/engineering.js +1 -1
  134. package/dist/equipment/index.d.ts +4 -4
  135. package/dist/equipment/index.js +1 -1
  136. package/dist/equipment/modification-journal.js +1 -1
  137. package/dist/equipment/modifications.d.ts +23 -14
  138. package/dist/equipment/modifications.js +1 -1
  139. package/dist/equipment/suits.d.ts +2 -145
  140. package/dist/equipment/suits.js +1 -1
  141. package/dist/equipment/tools.d.ts +102 -0
  142. package/dist/equipment/tools.js +1 -0
  143. package/dist/equipment/tools.js.map +1 -0
  144. package/dist/equipment/upgrade-costs.d.ts +2 -3
  145. package/dist/equipment/upgrade-costs.js +1 -1
  146. package/dist/equipment/weapons.d.ts +2 -135
  147. package/dist/equipment/weapons.js +1 -1
  148. package/dist/i18n/blueprints.d.ts +2 -3
  149. package/dist/i18n/blueprints.js +1 -1
  150. package/dist/i18n/commodities.d.ts +36 -0
  151. package/dist/i18n/commodities.js +1 -0
  152. package/dist/i18n/commodities.js.map +1 -0
  153. package/dist/i18n/experimental-effect-descriptions.d.ts +5 -6
  154. package/dist/i18n/experimental-effect-descriptions.js +1 -1
  155. package/dist/i18n/experimental-effects.d.ts +2 -3
  156. package/dist/i18n/experimental-effects.js +1 -1
  157. package/dist/i18n/index.d.ts +19 -9
  158. package/dist/i18n/index.js +1 -1
  159. package/dist/i18n/materials.d.ts +2 -4
  160. package/dist/i18n/materials.js +1 -1
  161. package/dist/i18n/micro-resources.d.ts +2 -4
  162. package/dist/i18n/micro-resources.js +1 -1
  163. package/dist/i18n/module-families.d.ts +3 -5
  164. package/dist/i18n/module-families.js +1 -1
  165. package/dist/i18n/modules.d.ts +3 -6
  166. package/dist/i18n/modules.js +1 -1
  167. package/dist/i18n/personal-modifications.d.ts +4 -6
  168. package/dist/i18n/personal-modifications.js +1 -1
  169. package/dist/i18n/personal-tools.d.ts +33 -0
  170. package/dist/i18n/personal-tools.js +1 -0
  171. package/dist/i18n/personal-tools.js.map +1 -0
  172. package/dist/i18n/personal-weapons.d.ts +3 -4
  173. package/dist/i18n/personal-weapons.js +1 -1
  174. package/dist/i18n/pre-engineered.d.ts +1 -1
  175. package/dist/i18n/slots.d.ts +2 -2
  176. package/dist/i18n/suits.d.ts +36 -6
  177. package/dist/i18n/suits.js +1 -1
  178. package/dist/materials/index.d.ts +4 -3
  179. package/dist/materials/index.js +1 -1
  180. package/dist/materials/materials-all.d.ts +2 -2
  181. package/dist/materials/materials-all.js +1 -1
  182. package/dist/materials/materials-raw.d.ts +3 -4
  183. package/dist/materials/materials-raw.js +1 -1
  184. package/dist/materials/materials.d.ts +18 -15
  185. package/dist/materials/materials.js +1 -1
  186. package/dist/materials/micro-resources-all.d.ts +2 -2
  187. package/dist/materials/micro-resources-all.js +1 -1
  188. package/dist/materials/micro-resources-component.d.ts +2 -2
  189. package/dist/materials/micro-resources-consumable.d.ts +2 -2
  190. package/dist/materials/micro-resources-data.d.ts +2 -2
  191. package/dist/materials/micro-resources-item.d.ts +2 -2
  192. package/dist/materials/micro-resources.d.ts +17 -14
  193. package/dist/materials/micro-resources.js +1 -1
  194. package/dist/ships/ammunition.d.ts +4 -4
  195. package/dist/ships/blueprint-costs.d.ts +13 -13
  196. package/dist/ships/blueprint-costs.js +1 -1
  197. package/dist/ships/blueprint-journal.d.ts +3 -3
  198. package/dist/ships/blueprint-journal.js +1 -1
  199. package/dist/ships/blueprints.d.ts +3 -3
  200. package/dist/ships/build-metrics.d.ts +2 -1
  201. package/dist/ships/build-metrics.js +1 -1
  202. package/dist/ships/default-loadouts.d.ts +2 -3
  203. package/dist/ships/default-loadouts.js +1 -1
  204. package/dist/ships/engineering-options.d.ts +29 -32
  205. package/dist/ships/engineering-options.js +1 -1
  206. package/dist/ships/engineering.d.ts +1 -2
  207. package/dist/ships/engineering.js +1 -1
  208. package/dist/ships/experimental-effect-costs.d.ts +1 -1
  209. package/dist/ships/gunsights.d.ts +3 -3
  210. package/dist/ships/heat.d.ts +1 -1
  211. package/dist/ships/index.d.ts +4 -5
  212. package/dist/ships/index.js +1 -1
  213. package/dist/ships/loadout-validation.d.ts +1 -1
  214. package/dist/ships/module-families.d.ts +1 -1
  215. package/dist/ships/modules-all.d.ts +2 -3
  216. package/dist/ships/modules-all.js +1 -1
  217. package/dist/ships/modules-core.d.ts +3 -3
  218. package/dist/ships/modules-hardpoint.d.ts +4 -5
  219. package/dist/ships/modules-hardpoint.js +1 -1
  220. package/dist/ships/modules-internal.d.ts +5 -6
  221. package/dist/ships/modules-internal.js +1 -1
  222. package/dist/ships/modules-utility.d.ts +3 -4
  223. package/dist/ships/modules-utility.js +1 -1
  224. package/dist/ships/modules.d.ts +26 -24
  225. package/dist/ships/modules.js +1 -1
  226. package/dist/ships/pre-engineered-stats.d.ts +1 -1
  227. package/dist/ships/pre-engineered-stats.js +1 -1
  228. package/dist/ships/pre-engineered.d.ts +9 -10
  229. package/dist/ships/pre-engineered.js +1 -1
  230. package/dist/ships/shield-capacitor.js +1 -1
  231. package/dist/ships/ship-loadout.d.ts +7 -7
  232. package/dist/ships/ship-loadout.js +1 -1
  233. package/dist/ships/ships.d.ts +1 -2
  234. package/dist/ships/ships.js +1 -1
  235. package/dist/ships/slots.d.ts +5 -5
  236. package/dist/ships/weapons.js +1 -1
  237. package/dist/suits-B37rAORs.d.ts +414 -0
  238. package/dist/{system-address-cyJaeZIS.d.ts → system-address-DmzXRD48.d.ts} +6 -4
  239. package/package.json +13 -1
  240. package/dist/chunk-77TT4K53.js +0 -1
  241. package/dist/chunk-DAQ3PJ4R.js +0 -1
  242. package/dist/chunk-DAQ3PJ4R.js.map +0 -1
  243. package/dist/chunk-DHACRCLI.js +0 -1
  244. package/dist/chunk-DHACRCLI.js.map +0 -1
  245. package/dist/chunk-FJIWJYKO.js.map +0 -1
  246. package/dist/chunk-IUSMAX5T.js +0 -1
  247. package/dist/chunk-IUSMAX5T.js.map +0 -1
  248. package/dist/chunk-LWNBWRKL.js +0 -1
  249. package/dist/chunk-LWNBWRKL.js.map +0 -1
  250. package/dist/chunk-MT5AHPNP.js +0 -1
  251. package/dist/chunk-MT5AHPNP.js.map +0 -1
  252. package/dist/chunk-QJECDMQQ.js +0 -1
  253. package/dist/chunk-YJAH6DFY.js.map +0 -1
  254. /package/dist/{chunk-XSLPWM5N.js.map → chunk-2J6NNI3Y.js.map} +0 -0
  255. /package/dist/{chunk-DWRNXUAX.js.map → chunk-2KIZN3BY.js.map} +0 -0
  256. /package/dist/{chunk-J7BM5NGK.js.map → chunk-2TY42PTF.js.map} +0 -0
  257. /package/dist/{chunk-KBCA4GEZ.js.map → chunk-FP2TQJZP.js.map} +0 -0
  258. /package/dist/{chunk-ETWMPMZP.js.map → chunk-K5JK3XQB.js.map} +0 -0
  259. /package/dist/{chunk-3WGXGBW5.js.map → chunk-R2AEZYX7.js.map} +0 -0
  260. /package/dist/{chunk-77TT4K53.js.map → chunk-SFEQXUIA.js.map} +0 -0
  261. /package/dist/{chunk-7TVFV3VO.js.map → chunk-U3IRMXMR.js.map} +0 -0
  262. /package/dist/{chunk-7ATBEOVC.js.map → chunk-WG4DPXJI.js.map} +0 -0
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Odyssey suit tools: the Energylink, Profile Analyser, Arc Cutter and Genetic Sampler,
3
+ * the suits that carry each one, and their battery and timing stats.
4
+ *
5
+ * @packageDocumentation
6
+ */
7
+ /**
8
+ * One tool a Commander carries on foot.
9
+ *
10
+ * @remarks
11
+ * A stat a tool does not have is absent rather than zero: only the Energylink
12
+ * discharges and overloads, and only the Profile Analyser scans and clones.
13
+ *
14
+ * Every power figure is in the same unit as {@link Suit.batteryCapacity}, so a suit's
15
+ * battery divided by a tool's per-second drain is the seconds of use it holds.
16
+ */
17
+ interface PersonalTool {
18
+ /**
19
+ * This library's own id, e.g. `"arc-cutter"`.
20
+ *
21
+ * @remarks
22
+ * Frontier publishes no item symbol for a tool: a journal `SuitLoadout` names the
23
+ * suit and its weapon mounts only. The id is therefore a library key, and joins to
24
+ * no journal field.
25
+ */
26
+ readonly id: string;
27
+ /**
28
+ * English display name, e.g. `"Arc Cutter"`.
29
+ *
30
+ * @remarks
31
+ * This is the canonical English. `getPersonalToolName` in `i18n/personal-tools`
32
+ * takes the same `id` and answers in all six stored locales.
33
+ */
34
+ readonly name: string;
35
+ /** Families of the suits that carry the tool, as {@link Suit.family} spells them. */
36
+ readonly suitFamilies: readonly string[];
37
+ /** Energylink: battery charge delivered to a target, in MW per second. */
38
+ readonly rechargeRate?: number;
39
+ /** Energylink: battery charge drawn from a target, in MW per second. */
40
+ readonly dischargeRate?: number;
41
+ /** Energylink: seconds one discharge lasts. */
42
+ readonly dischargeDuration?: number;
43
+ /**
44
+ * Energylink: battery charge one overload costs, in MW. The Reduced Tool Battery
45
+ * Consumption factor, named `toolEnergyDrain`, applies to this.
46
+ */
47
+ readonly overloadPowerUsage?: number;
48
+ /**
49
+ * Battery charge the tool draws while it works, in MW per second. The Reduced Tool
50
+ * Battery Consumption factor, named `toolEnergyDrain`, applies to this.
51
+ */
52
+ readonly powerUsage?: number;
53
+ /** Profile Analyser: seconds one profile scan takes. */
54
+ readonly scanDuration?: number;
55
+ /** Profile Analyser: seconds one profile clone takes. */
56
+ readonly cloneDuration?: number;
57
+ }
58
+ /**
59
+ * Every suit tool, in catalogue order.
60
+ *
61
+ * @remarks
62
+ * The Reduced Tool Battery Consumption suit modification halves the `toolEnergyDrain`
63
+ * stat, which is this catalogue's `powerUsage` and the Energylink's
64
+ * `overloadPowerUsage`. It leaves `dischargeRate` alone, which is why the two carry
65
+ * separate names: pass the base a factor applies to, and the discharge rate can never
66
+ * pick one up.
67
+ *
68
+ * @example
69
+ * ```ts
70
+ * import { PERSONAL_TOOLS } from '@elite-dangerous-almanac/core/equipment/tools';
71
+ * PERSONAL_TOOLS[0]?.name; // -> 'Energylink'
72
+ * ```
73
+ * @example
74
+ * ```ts
75
+ * import { applyPersonalModifiers } from '@elite-dangerous-almanac/core/equipment/engineering';
76
+ * import { getPersonalModification } from '@elite-dangerous-almanac/core/equipment/modifications';
77
+ * import { getPersonalToolById } from '@elite-dangerous-almanac/core/equipment/tools';
78
+ *
79
+ * const recipe = getPersonalModification('suit_reducedtoolbatteryconsumption');
80
+ * const cutter = getPersonalToolById('arc-cutter');
81
+ * applyPersonalModifiers('toolEnergyDrain', cutter?.powerUsage ?? 0, recipe?.modifiers ?? []);
82
+ * // -> 0.075
83
+ * ```
84
+ */
85
+ declare const PERSONAL_TOOLS: readonly PersonalTool[];
86
+ /**
87
+ * Look up a suit tool by its library id, case-insensitively.
88
+ *
89
+ * @param id - Library id such as `"energylink"`, matched case-insensitively after
90
+ * trimming surrounding whitespace.
91
+ * @returns The frozen tool record, or `null` when unknown.
92
+ * @throws {TypeError} If `id` is present and not a string. A nullish id is a miss,
93
+ * answered like an unrecognised one.
94
+ * @example
95
+ * ```ts
96
+ * import { getPersonalToolById } from '@elite-dangerous-almanac/core/equipment/tools';
97
+ * getPersonalToolById('arc-cutter')?.suitFamilies; // -> ['utilitysuit']
98
+ * ```
99
+ */
100
+ declare function getPersonalToolById(id: string): PersonalTool | null;
101
+
102
+ export { PERSONAL_TOOLS, type PersonalTool, getPersonalToolById };
@@ -0,0 +1 @@
1
+ export{PERSONAL_TOOLS,getPersonalToolById}from"../chunk-CEF7SMB2.js"; //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"O"}
@@ -1,6 +1,5 @@
1
- import { WeaponUpgradeGroup } from './weapons.js';
1
+ import { W as WeaponUpgradeGroup } from '../suits-B37rAORs.js';
2
2
  import { PersonalEngineeringIngredient } from './engineering.js';
3
- import './suits.js';
4
3
 
5
4
  /**
6
5
  * Material costs for Pioneer Supplies suit and handheld-weapon grade upgrades.
@@ -40,7 +39,7 @@ type PersonalUpgradeGradeCosts = Readonly<Record<'2' | '3' | '4' | '5', readonly
40
39
  * } from '@elite-dangerous-almanac/core/equipment/upgrade-costs';
41
40
  *
42
41
  * const costs: PersonalUpgradeCosts = PERSONAL_UPGRADE_COSTS;
43
- * Object.keys(costs.suits).length; // -> 3
42
+ * costs.suits['utilitysuit']?.['2']?.[0]?.symbol; // -> 'suitschematic'
44
43
  * ```
45
44
  */
46
45
  interface PersonalUpgradeCosts {
@@ -1 +1 @@
1
- import{getSuitByFamily}from"../chunk-LWNBWRKL.js";import{getPersonalWeaponBySymbol}from"../chunk-IUSMAX5T.js"; import{sumPersonalEngineeringIngredients}from"../chunk-WV7QCDL5.js"; import{deepFreeze}from"../chunk-DURKO7JU.js";var upgrade_costs_default={suits:{utilitysuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"carbonfibreplating",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"carbonfibreplating",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"carbonfibreplating",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"carbonfibreplating",count:12},{symbol:"graphene",count:12}]},tacticalsuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"titaniumplating",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"titaniumplating",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"titaniumplating",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"titaniumplating",count:12},{symbol:"graphene",count:12}]},explorationsuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"aerogel",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"aerogel",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"aerogel",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"aerogel",count:12},{symbol:"graphene",count:12}]}},weaponGroups:{takada:{2:[{symbol:"weaponschematic",count:1},{symbol:"ionisedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"microelectrode",count:2},{symbol:"opticalfibre",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"ionisedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"microelectrode",count:5},{symbol:"opticalfibre",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"ionisedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"microelectrode",count:9},{symbol:"opticalfibre",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"ionisedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"microelectrode",count:12},{symbol:"opticalfibre",count:12}]},manticore:{2:[{symbol:"weaponschematic",count:1},{symbol:"ionisedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"microelectrode",count:2},{symbol:"chemicalsuperbase",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"ionisedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"microelectrode",count:5},{symbol:"chemicalsuperbase",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"ionisedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"microelectrode",count:9},{symbol:"chemicalsuperbase",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"ionisedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"microelectrode",count:12},{symbol:"chemicalsuperbase",count:12}]},karma:{2:[{symbol:"weaponschematic",count:1},{symbol:"compressionliquefiedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"weaponcomponent",count:2},{symbol:"tungstencarbide",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"compressionliquefiedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"weaponcomponent",count:5},{symbol:"tungstencarbide",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"compressionliquefiedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"weaponcomponent",count:9},{symbol:"tungstencarbide",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"compressionliquefiedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"weaponcomponent",count:12},{symbol:"tungstencarbide",count:12}]}}};var PERSONAL_UPGRADE_COSTS=deepFreeze(upgrade_costs_default);function getSuitUpgradeStepCost(family,targetGrade){assertTargetGrade(targetGrade,"getSuitUpgradeStepCost");const costs=getSuitUpgradeCosts(family);return costs?.[String(targetGrade)]??null}function getSuitUpgradeCost(family,targetGrade,currentGrade=1){assertGrade(targetGrade,"getSuitUpgradeCost: targetGrade");assertGrade(currentGrade,"getSuitUpgradeCost: currentGrade");const costs=getSuitUpgradeCosts(family);if(!costs)return null;return totalCosts(costs,targetGrade,currentGrade)}function getPersonalWeaponUpgradeStepCost(symbol,targetGrade){assertTargetGrade(targetGrade,"getPersonalWeaponUpgradeStepCost");const weapon=getPersonalWeaponBySymbol(symbol);if(!weapon)return null;return PERSONAL_UPGRADE_COSTS.weaponGroups[weapon.upgradeGroup][String(targetGrade)]??null}function getPersonalWeaponUpgradeCost(symbol,targetGrade,currentGrade=1){assertGrade(targetGrade,"getPersonalWeaponUpgradeCost: targetGrade");assertGrade(currentGrade,"getPersonalWeaponUpgradeCost: currentGrade");const weapon=getPersonalWeaponBySymbol(symbol);if(!weapon)return null;return totalCosts(PERSONAL_UPGRADE_COSTS.weaponGroups[weapon.upgradeGroup],targetGrade,currentGrade)}function totalCosts(costs,targetGrade,currentGrade){const steps=[];for(let grade=currentGrade+1;grade<=targetGrade;grade++){steps.push(costs[String(grade)])}return sumPersonalEngineeringIngredients(...steps)}function getSuitUpgradeCosts(family){const suit=getSuitByFamily(family);if(!suit||!Object.hasOwn(PERSONAL_UPGRADE_COSTS.suits,suit.family))return null;return PERSONAL_UPGRADE_COSTS.suits[suit.family]}function assertTargetGrade(grade,functionName){if(!Number.isInteger(grade)||grade<2||grade>5){throw new RangeError(`${functionName}: targetGrade must be an integer in [2, 5]`)}}function assertGrade(grade,label){if(!Number.isInteger(grade)||grade<1||grade>5){throw new RangeError(`${label} must be an integer in [1, 5]`)}}export{PERSONAL_UPGRADE_COSTS,getPersonalWeaponUpgradeCost,getPersonalWeaponUpgradeStepCost,getSuitUpgradeCost,getSuitUpgradeStepCost};//# sourceMappingURL=upgrade-costs.js.map
1
+ import{getSuitByFamily}from"../chunk-UTWZZOSA.js";import{getPersonalWeaponBySymbol}from"../chunk-PIU24HRN.js"; import{sumPersonalEngineeringIngredients}from"../chunk-SIL356HB.js"; import{deepFreeze}from"../chunk-DURKO7JU.js";var upgrade_costs_default={suits:{utilitysuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"carbonfibreplating",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"carbonfibreplating",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"carbonfibreplating",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"carbonfibreplating",count:12},{symbol:"graphene",count:12}]},tacticalsuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"titaniumplating",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"titaniumplating",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"titaniumplating",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"titaniumplating",count:12},{symbol:"graphene",count:12}]},explorationsuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"aerogel",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"aerogel",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"aerogel",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"aerogel",count:12},{symbol:"graphene",count:12}]}},weaponGroups:{takada:{2:[{symbol:"weaponschematic",count:1},{symbol:"ionisedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"microelectrode",count:2},{symbol:"opticalfibre",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"ionisedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"microelectrode",count:5},{symbol:"opticalfibre",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"ionisedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"microelectrode",count:9},{symbol:"opticalfibre",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"ionisedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"microelectrode",count:12},{symbol:"opticalfibre",count:12}]},manticore:{2:[{symbol:"weaponschematic",count:1},{symbol:"ionisedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"microelectrode",count:2},{symbol:"chemicalsuperbase",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"ionisedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"microelectrode",count:5},{symbol:"chemicalsuperbase",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"ionisedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"microelectrode",count:9},{symbol:"chemicalsuperbase",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"ionisedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"microelectrode",count:12},{symbol:"chemicalsuperbase",count:12}]},karma:{2:[{symbol:"weaponschematic",count:1},{symbol:"compressionliquefiedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"weaponcomponent",count:2},{symbol:"tungstencarbide",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"compressionliquefiedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"weaponcomponent",count:5},{symbol:"tungstencarbide",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"compressionliquefiedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"weaponcomponent",count:9},{symbol:"tungstencarbide",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"compressionliquefiedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"weaponcomponent",count:12},{symbol:"tungstencarbide",count:12}]}}};var PERSONAL_UPGRADE_COSTS=deepFreeze(upgrade_costs_default);function getSuitUpgradeStepCost(family,targetGrade){assertTargetGrade(targetGrade,"getSuitUpgradeStepCost");const costs=getSuitUpgradeCosts(family);return costs?.[String(targetGrade)]??null}function getSuitUpgradeCost(family,targetGrade,currentGrade=1){assertGrade(targetGrade,"getSuitUpgradeCost: targetGrade");assertGrade(currentGrade,"getSuitUpgradeCost: currentGrade");const costs=getSuitUpgradeCosts(family);if(!costs)return null;return totalCosts(costs,targetGrade,currentGrade)}function getPersonalWeaponUpgradeStepCost(symbol,targetGrade){assertTargetGrade(targetGrade,"getPersonalWeaponUpgradeStepCost");const weapon=getPersonalWeaponBySymbol(symbol);if(!weapon)return null;return PERSONAL_UPGRADE_COSTS.weaponGroups[weapon.upgradeGroup][String(targetGrade)]??null}function getPersonalWeaponUpgradeCost(symbol,targetGrade,currentGrade=1){assertGrade(targetGrade,"getPersonalWeaponUpgradeCost: targetGrade");assertGrade(currentGrade,"getPersonalWeaponUpgradeCost: currentGrade");const weapon=getPersonalWeaponBySymbol(symbol);if(!weapon)return null;return totalCosts(PERSONAL_UPGRADE_COSTS.weaponGroups[weapon.upgradeGroup],targetGrade,currentGrade)}function totalCosts(costs,targetGrade,currentGrade){const steps=[];for(let grade=currentGrade+1;grade<=targetGrade;grade++){steps.push(costs[String(grade)])}return sumPersonalEngineeringIngredients(...steps)}function getSuitUpgradeCosts(family){const suit=getSuitByFamily(family);if(!suit||!Object.hasOwn(PERSONAL_UPGRADE_COSTS.suits,suit.family))return null;return PERSONAL_UPGRADE_COSTS.suits[suit.family]}function assertTargetGrade(grade,functionName){if(!Number.isInteger(grade)||grade<2||grade>5){throw new RangeError(`${functionName}: targetGrade must be an integer in [2, 5]`)}}function assertGrade(grade,label){if(!Number.isInteger(grade)||grade<1||grade>5){throw new RangeError(`${label} must be an integer in [1, 5]`)}}export{PERSONAL_UPGRADE_COSTS,getPersonalWeaponUpgradeCost,getPersonalWeaponUpgradeStepCost,getSuitUpgradeCost,getSuitUpgradeStepCost};//# sourceMappingURL=upgrade-costs.js.map
@@ -1,135 +1,2 @@
1
- import { EquipmentGrade } from './suits.js';
2
-
3
- /**
4
- * Odyssey handheld weapons: their journal identifiers, combat stats, sight
5
- * magnification and grade-dependent damage.
6
- *
7
- * @packageDocumentation
8
- */
9
-
10
- /** A weapon manufacturer's shared Pioneer grade-upgrade recipe. */
11
- type WeaponUpgradeGroup = 'karma' | 'takada' | 'manticore';
12
- /** Technology suffix used to disambiguate personal-weapon modification recipes. */
13
- type PersonalWeaponEngineeringType = 'kinetic' | 'laser' | 'plasma';
14
- /** A handheld weapon's form factor. */
15
- type PersonalWeaponClass = 'pistol' | 'carbine' | 'rifle' | 'shotgun' | 'sniper' | 'launcher';
16
- /** Which suit weapon slot accepts the weapon. */
17
- type PersonalWeaponSlot = 'primary' | 'secondary';
18
- /** The damage family relevant to resistances and some modification recipes. */
19
- type PersonalDamageType = 'kinetic' | 'thermal' | 'plasma' | 'explosive';
20
- /** A handheld weapon firing cycle. */
21
- type PersonalFireMode = 'automatic' | 'semi-automatic' | 'burst';
22
- /** A weapon's aim-down-sights magnification, before and after the Scope modification. */
23
- interface ScopeMagnification {
24
- /** Magnification of the sight the weapon ships with, e.g. `1.12` for 1.12x. */
25
- readonly default: number;
26
- /** Magnification of the sight the Scope modification fits, e.g. `1.41` for 1.41x. */
27
- readonly upgraded: number;
28
- }
29
- /** Grade-dependent stats for one handheld weapon. */
30
- interface PersonalWeaponGrade {
31
- /** Damage per projectile or pellet. */
32
- readonly damage: number;
33
- /** Permanent engineering-modification slots available, from `0` through `4`. */
34
- readonly modificationSlots: number;
35
- }
36
- /** One handheld weapon sold by Pioneer Supplies. */
37
- interface PersonalWeapon {
38
- /** Frontier item id reported by journal loadout events. */
39
- readonly symbol: string;
40
- /** English display name. */
41
- readonly name: string;
42
- /** Manufacturer recipe family used for grade upgrades. */
43
- readonly upgradeGroup: WeaponUpgradeGroup;
44
- /** Recipe suffix used when the journal omits a modification's weapon technology. */
45
- readonly engineeringType: PersonalWeaponEngineeringType;
46
- /** Weapon form factor. */
47
- readonly class: PersonalWeaponClass;
48
- /** Suit slot this weapon occupies. */
49
- readonly slot: PersonalWeaponSlot;
50
- /** Base damage family. */
51
- readonly damageType: PersonalDamageType;
52
- /** Firing cycle. */
53
- readonly fireMode: PersonalFireMode;
54
- /** Shots per second. */
55
- readonly rateOfFire: number;
56
- /** Rounds loaded in one magazine. */
57
- readonly magazineSize: number;
58
- /** Spare rounds carried before suit-capacity changes. */
59
- readonly reserveAmmo: number;
60
- /** Headshot damage multiplier (`2` means 200%). */
61
- readonly headshotMultiplier: number;
62
- /** Nominal effective range in metres. */
63
- readonly effectiveRange: number;
64
- /**
65
- * Aim-down-sights magnification with the stock sight and with the one the Scope
66
- * modification fits. Scope carries no modifier of its own: this pair is its whole
67
- * numeric effect, and it differs per weapon.
68
- */
69
- readonly scopeMagnification: ScopeMagnification;
70
- /**
71
- * Grade records keyed by `"1"` through `"5"` — every weapon carries all five,
72
- * unlike {@link Suit.grades}, and `equipment.test.ts` pins that. Read one through
73
- * {@link getPersonalWeaponGrade} to get the same nullable answer suits give.
74
- */
75
- readonly grades: Readonly<Record<`${EquipmentGrade}`, PersonalWeaponGrade>>;
76
- }
77
- /**
78
- * All eleven handheld weapons in catalogue order.
79
- *
80
- * @example
81
- * ```ts
82
- * import { PERSONAL_WEAPONS } from '@elite-dangerous-almanac/core/equipment/weapons';
83
- * PERSONAL_WEAPONS.length; // -> 11
84
- * ```
85
- */
86
- declare const PERSONAL_WEAPONS: readonly PersonalWeapon[];
87
- /**
88
- * Look up a handheld weapon by its Frontier journal symbol, case-insensitively.
89
- *
90
- * @param symbol - Journal item id such as `"wpn_m_assaultrifle_kinetic_fauto"`,
91
- * matched case-insensitively after trimming surrounding whitespace.
92
- * @returns The frozen weapon record, or `null` when unknown.
93
- * @throws {TypeError} If `symbol` is present and not a string. A nullish symbol is a
94
- * miss, answered like an unrecognised one.
95
- * @example
96
- * ```ts
97
- * import { getPersonalWeaponBySymbol } from '@elite-dangerous-almanac/core/equipment/weapons';
98
- * getPersonalWeaponBySymbol('wpn_m_assaultrifle_kinetic_fauto')?.name; // -> 'Karma AR-50'
99
- * ```
100
- */
101
- declare function getPersonalWeaponBySymbol(symbol: string): PersonalWeapon | null;
102
- /**
103
- * Look up a handheld weapon by display name, case-insensitively.
104
- *
105
- * @param name - English display name such as `"Karma AR-50"`; surrounding
106
- * whitespace is ignored.
107
- * @returns The frozen weapon record, or `null` when unknown.
108
- * @throws {TypeError} If `name` is present and not a string. A nullish name is a miss,
109
- * answered like an unrecognised one.
110
- * @example
111
- * ```ts
112
- * import { getPersonalWeaponByName } from '@elite-dangerous-almanac/core/equipment/weapons';
113
- * getPersonalWeaponByName('Karma AR-50')?.symbol; // -> 'wpn_m_assaultrifle_kinetic_fauto'
114
- * ```
115
- */
116
- declare function getPersonalWeaponByName(name: string): PersonalWeapon | null;
117
- /**
118
- * Read one handheld weapon's stats at a grade.
119
- *
120
- * @param weapon - A catalogue weapon record.
121
- * @param grade - Integer grade `1`–`5`.
122
- * @returns The frozen grade record, or `null` when the record carries no such grade.
123
- * Every catalogued weapon carries all five, so the `null` is the same promise
124
- * {@link getSuitGrade} makes rather than an outcome the shipped catalogue produces —
125
- * write the two the same way and neither can surprise you.
126
- * @throws {RangeError} If `grade` is not an integer from 1 through 5.
127
- * @example
128
- * ```ts
129
- * import { PERSONAL_WEAPONS, getPersonalWeaponGrade } from '@elite-dangerous-almanac/core/equipment/weapons';
130
- * getPersonalWeaponGrade(PERSONAL_WEAPONS[0]!, 5)?.modificationSlots; // -> 4
131
- * ```
132
- */
133
- declare function getPersonalWeaponGrade(weapon: PersonalWeapon, grade: number): PersonalWeaponGrade | null;
134
-
135
- export { PERSONAL_WEAPONS, type PersonalDamageType, type PersonalFireMode, type PersonalWeapon, type PersonalWeaponClass, type PersonalWeaponEngineeringType, type PersonalWeaponGrade, type PersonalWeaponSlot, type ScopeMagnification, type WeaponUpgradeGroup, getPersonalWeaponByName, getPersonalWeaponBySymbol, getPersonalWeaponGrade };
1
+ import './engineering.js';
2
+ export { P as PERSONAL_WEAPONS, a as PersonalDamageType, b as PersonalFireMode, e as PersonalWeapon, f as PersonalWeaponClass, g as PersonalWeaponEngineeringType, h as PersonalWeaponGrade, i as PersonalWeaponMetrics, j as PersonalWeaponSlot, R as ReloadTime, k as ScopeMagnification, W as WeaponUpgradeGroup, n as getPersonalWeaponByName, o as getPersonalWeaponBySymbol, p as getPersonalWeaponGrade, u as personalWeaponMetrics } from '../suits-B37rAORs.js';
@@ -1 +1 @@
1
- export{PERSONAL_WEAPONS,getPersonalWeaponByName,getPersonalWeaponBySymbol,getPersonalWeaponGrade}from"../chunk-IUSMAX5T.js"; //# sourceMappingURL=weapons.js.map
1
+ export{PERSONAL_WEAPONS,getPersonalWeaponByName,getPersonalWeaponBySymbol,getPersonalWeaponGrade,personalWeaponMetrics}from"../chunk-PIU24HRN.js"; //# sourceMappingURL=weapons.js.map
@@ -4,9 +4,8 @@
4
4
  *
5
5
  * @param blueprintSymbol - Frontier's blueprint id, such as `"FSD_LongRange"`. Matching ignores
6
6
  * case and surrounding whitespace.
7
- * @param locale - A BCP 47 language or regional tag, such as `"de"`, `"de-DE"` or
8
- * `"en-GB"`. Matching is case-insensitive; underscores are accepted in place of
9
- * hyphens. A regional tag falls back to its language after an exact-locale miss.
7
+ * @param locale - A BCP 47 language or regional tag, such as `"de"` or `"de-DE"`; see
8
+ * {@link GameLocale} for how a tag is matched.
10
9
  * @returns The localized blueprint name; the canonical `Blueprint.name` for any English
11
10
  * tag; or `null` when the id is unknown, the locale is
12
11
  * unsupported, or the pinned source carries no value for that blueprint and locale.
@@ -1 +1 @@
1
- export{getBlueprintName}from"../chunk-DBDCOHI4.js"; //# sourceMappingURL=blueprints.js.map
1
+ export{getBlueprintName}from"../chunk-UI5RROGI.js"; //# sourceMappingURL=blueprints.js.map
@@ -0,0 +1,36 @@
1
+ /** Localized market-commodity display names, isolated from commodity metadata. */
2
+ /**
3
+ * Look up a market commodity's source-backed display name for a locale.
4
+ *
5
+ * @param symbol - Frontier's commodity symbol, such as `"LavianBrandy"`. Matching
6
+ * ignores case and surrounding whitespace, so the lower-cased form a market or journal
7
+ * line reports resolves too.
8
+ * @param locale - A BCP 47 language or regional tag, such as `"de"` or `"de-DE"`; see
9
+ * {@link GameLocale} for how a tag is matched.
10
+ * @returns The localized commodity name; the canonical `Commodity.name` for any English
11
+ * tag; or `null` when the symbol is unknown or the locale is not one of the six this
12
+ * catalogue stores.
13
+ * @remarks
14
+ * Standard and rare commodities share this one lookup, as they share one symbol space.
15
+ * All six stored locales are complete for this dataset, so a supported locale always
16
+ * answers. This function bundles names only, not categories or the `rare` flag.
17
+ *
18
+ * **This is a heavy `i18n` dataset**: six locales for every good in both commodity
19
+ * catalogues is ~101 KiB minified (~27 KiB gzipped). It has its own module so an application that
20
+ * never shows a translated commodity name does not pay for it — import it from
21
+ * `core/i18n/commodities` rather than the `core/i18n` barrel if you want that boundary
22
+ * to be explicit.
23
+ * @throws {TypeError} If `symbol` is present and not a string, or `locale` is not a
24
+ * string. A nullish `symbol` is a lookup miss and returns `null`.
25
+ * @example
26
+ * ```ts
27
+ * import { getCommodityName } from '@elite-dangerous-almanac/core/i18n/commodities';
28
+ *
29
+ * getCommodityName('LavianBrandy', 'de-DE'); // -> 'Lave-Brandy'
30
+ * getCommodityName('platinum', 'ru'); // -> 'Платина'
31
+ * getCommodityName('platinum', 'it'); // -> null
32
+ * ```
33
+ */
34
+ declare function getCommodityName(symbol: string, locale: string): string | null;
35
+
36
+ export { getCommodityName };
@@ -0,0 +1 @@
1
+ export{getCommodityName}from"../chunk-TRGHPX2O.js"; //# sourceMappingURL=commodities.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"O"}
@@ -9,12 +9,11 @@
9
9
  * question — it names the damage split or behaviour the `modifiers` list cannot
10
10
  * express — and the two are deliberately not the same string.
11
11
  *
12
- * **This is the heaviest `i18n` dataset**: six locales of prose for all 86 effects is
13
- * ~129 KiB minified (~25 KiB gzipped), more than module names cost. Every other lookup
14
- * on this subpath carries short display names. It has its own module so an application
15
- * that never shows an effect description does not pay for it — import it from
16
- * `core/i18n/experimental-effect-descriptions` rather than the `core/i18n` barrel if
17
- * you want that boundary to be explicit.
12
+ * **This is a heavy `i18n` dataset**: six locales of prose for every effect is ~129 KiB
13
+ * minified (~25 KiB gzipped), more than module names cost. It has its own module so an
14
+ * application that never shows an effect description does not pay for it import it
15
+ * from `core/i18n/experimental-effect-descriptions` rather than the `core/i18n` barrel
16
+ * if you want that boundary to be explicit.
18
17
  *
19
18
  * @param experimentalEffectSymbol - Frontier's experimental-effect id. Matching ignores case and
20
19
  * surrounding whitespace.
@@ -1 +1 @@
1
- export{getExperimentalEffectDescription}from"../chunk-MRLUWHGI.js"; //# sourceMappingURL=experimental-effect-descriptions.js.map
1
+ export{getExperimentalEffectDescription}from"../chunk-RJ3ZLQRB.js"; //# sourceMappingURL=experimental-effect-descriptions.js.map
@@ -4,9 +4,8 @@
4
4
  *
5
5
  * @param experimentalEffectSymbol - Frontier's experimental-effect id, such as
6
6
  * `"special_concordant_sequence"`. Matching ignores case and surrounding whitespace.
7
- * @param locale - A BCP 47 language or regional tag, such as `"de"`, `"de-DE"` or
8
- * `"en-GB"`. Matching is case-insensitive; underscores are accepted in place of
9
- * hyphens. A regional tag falls back to its language after an exact-locale miss.
7
+ * @param locale - A BCP 47 language or regional tag, such as `"de"` or `"de-DE"`; see
8
+ * {@link GameLocale} for how a tag is matched.
10
9
  * @returns The localized effect name; the canonical `ExperimentalEffect.name` for any
11
10
  * English tag; or `null` when
12
11
  * the id is unknown, the locale is unsupported, or the pinned source carries no value
@@ -1 +1 @@
1
- export{getExperimentalEffectName}from"../chunk-BMQM4JBL.js"; //# sourceMappingURL=experimental-effects.js.map
1
+ export{getExperimentalEffectName}from"../chunk-QPT2WJYN.js"; //# sourceMappingURL=experimental-effects.js.map
@@ -1,8 +1,10 @@
1
1
  /**
2
2
  * Sparse, source-backed localized display names and descriptions for Elite Dangerous
3
- * outfitting, personal-equipment and engineering catalogues.
3
+ * outfitting, personal-equipment, engineering, material and market-commodity
4
+ * catalogues.
4
5
  *
5
- * Each lookup takes the same Frontier symbol as its owning catalogue and a BCP 47
6
+ * Each lookup takes the identifier its owning catalogue is keyed by — a Frontier symbol,
7
+ * or the library id where the game publishes none, as for a suit tool — and a BCP 47
6
8
  * locale. English is complete: for a name catalogue it is exactly the owning record's
7
9
  * `name`, and for a description catalogue it is the game's own display prose, which no
8
10
  * catalogue otherwise publishes.
@@ -17,8 +19,8 @@
17
19
  * **How sparse, dataset by dataset.** Each column below is the percentage of that
18
20
  * lookup's keys carrying a stored value for the locale, so a `0` would mean the dataset
19
21
  * holds nothing in that language at all and the lookup returns `null` for every key:
20
- * German module names are near-complete, while a quarter of the outfitting families
21
- * the ones the game does not name separately have no locale at all. Plan fallback per
22
+ * most datasets are complete in every locale, while the outfitting families the game
23
+ * does not name separately have no locale at all. Plan fallback per
22
24
  * lookup rather than per application. The table is generated from the
23
25
  * [`data/i18n/` catalogues](https://github.com/DarkSession/Elite-Dangerous-Almanac/tree/main/data/i18n),
24
26
  * so it moves when the data does.
@@ -27,13 +29,15 @@
27
29
  * | Lookup | Keys | en | de | es | fr | pt | ru |
28
30
  * | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
29
31
  * | `getBlueprintName` | 107 | 100 | 100 | 100 | 100 | 100 | 100 |
32
+ * | `getCommodityName` | 412 | 100 | 100 | 100 | 100 | 100 | 100 |
30
33
  * | `getExperimentalEffectDescription` | 86 | 100 | 100 | 100 | 100 | 100 | 100 |
31
34
  * | `getExperimentalEffectName` | 86 | 100 | 100 | 100 | 100 | 100 | 100 |
32
35
  * | `getMaterialName` | 146 | 100 | 100 | 100 | 100 | 100 | 100 |
33
36
  * | `getMicroResourceName` | 226 | 100 | 100 | 100 | 100 | 100 | 100 |
34
- * | `getModuleName` | 1194 | 100 | 100 | 100 | 100 | 100 | 100 |
37
+ * | `getModuleName` | 1203 | 100 | 100 | 100 | 100 | 100 | 100 |
35
38
  * | `getPersonalModificationDescription` | 31 | 100 | 100 | 100 | 100 | 100 | 100 |
36
39
  * | `getPersonalModificationName` | 31 | 100 | 100 | 100 | 100 | 100 | 100 |
40
+ * | `getPersonalToolName` | 4 | 100 | 100 | 100 | 100 | 100 | 100 |
37
41
  * | `getPersonalWeaponDescription` | 11 | 100 | 100 | 100 | 100 | 100 | 100 |
38
42
  * | `getSuitDescription` | 19 | 100 | 100 | 100 | 100 | 100 | 100 |
39
43
  * | `getSuitName` | 19 | 100 | 100 | 100 | 100 | 100 | 100 |
@@ -45,7 +49,7 @@
45
49
  * convenience or from the corresponding `i18n/*` subpath for an explicit bundle
46
50
  * boundary.
47
51
  *
48
- * Structured diagnostic helpers expose their current English fallback only for English
52
+ * Structured diagnostic helpers expose their English fallback only for English
49
53
  * locales and return `null` otherwise, so a UI never mistakes English prose for a
50
54
  * requested translation. Stable codes and `params` remain available for applications
51
55
  * that supply their own message catalogues.
@@ -63,7 +67,7 @@
63
67
  * getBlueprintName('FSD_LongRange', 'de-DE'); // -> 'Erhöhte FSA-Reichweite'
64
68
  * getMaterialName('GridResistors', 'de'); // -> 'Gitterwiderstände'
65
69
  *
66
- * // Sparseness is per dataset, not per locale: German module names are near-complete,
70
+ * // Sparseness is per dataset, not per locale: German module names are complete,
67
71
  * // while no outfitting family the game does not name separately has any.
68
72
  * getOutfittingFamilyName('shieldGenerators', 'de'); // -> 'Schildgeneratoren'
69
73
  * getOutfittingFamilyName('xenoScanners', 'de'); // -> null
@@ -76,14 +80,18 @@ export { getOutfittingFamilyName } from './module-families.js';
76
80
  export { getBlueprintName } from './blueprints.js';
77
81
  export { getExperimentalEffectName } from './experimental-effects.js';
78
82
  export { getExperimentalEffectDescription } from './experimental-effect-descriptions.js';
83
+ export { getCommodityName } from './commodities.js';
79
84
  export { getMaterialName } from './materials.js';
80
85
  export { getMicroResourceName } from './micro-resources.js';
81
- export { getSuitDescription, getSuitName } from './suits.js';
86
+ export { getPersonalMountName, getSuitDescription, getSuitName } from './suits.js';
87
+ export { getPersonalToolName } from './personal-tools.js';
82
88
  export { getPersonalWeaponDescription } from './personal-weapons.js';
83
89
  export { getPersonalModificationDescription, getPersonalModificationName } from './personal-modifications.js';
84
90
  export { getLoadoutSlotName, getSlotRestrictionLabel } from './slots.js';
85
91
  export { getCalculationIssueMessage, getLoadoutEditErrorMessage, getLoadoutIssueMessage, getSlefDiagnosticMessage } from './diagnostics.js';
86
92
  export { PreEngineeredVariantIdentity, getPreEngineeredVariantName } from './pre-engineered.js';
93
+ import '../suits-B37rAORs.js';
94
+ import '../equipment/engineering.js';
87
95
  import '../ships/slots.js';
88
96
  import '../ships/loadout-calculations.js';
89
97
  import '../ships/loadout-validation.js';
@@ -104,7 +112,9 @@ import '../ships/source-purchase.js';
104
112
  * Almanac. Every other locale is sparse and source-dependent. A lookup accepts any
105
113
  * string rather than only this union so callers can pass their application locale
106
114
  * directly: a regional tag such as `de-DE` falls back to `de`, while an unsupported tag
107
- * or a missing translation returns `null`.
115
+ * or a missing translation returns `null`. Matching is case-insensitive and accepts an
116
+ * underscore in place of a hyphen; a regional or script subtag is dropped rather than
117
+ * matched, since every stored locale is a bare language tag.
108
118
  * A source may explicitly publish a localized value whose spelling equals the canonical
109
119
  * English name. Lookups return that source value verbatim; they never generate an
110
120
  * English fallback for a missing locale.
@@ -1 +1 @@
1
- export{getPreEngineeredVariantName}from"../chunk-T7IQHFQ2.js";export{getLoadoutSlotName,getSlotRestrictionLabel}from"../chunk-ZRG35JSH.js"; export{getSuitDescription,getSuitName}from"../chunk-FJIWJYKO.js";export{getExperimentalEffectName}from"../chunk-BMQM4JBL.js";export{getMaterialName}from"../chunk-IZIIGK3W.js";export{getMicroResourceName}from"../chunk-XFDMCPDW.js";export{getOutfittingFamilyName}from"../chunk-SD6GNFDX.js";export{getModuleName}from"../chunk-QJECDMQQ.js";export{getPersonalModificationDescription,getPersonalModificationName}from"../chunk-OLKOWR7S.js";export{getPersonalWeaponDescription}from"../chunk-W5ULI75F.js";export{getBlueprintName}from"../chunk-DBDCOHI4.js";export{getCalculationIssueMessage,getLoadoutEditErrorMessage,getLoadoutIssueMessage,getSlefDiagnosticMessage}from"../chunk-6G6TYW2D.js";export{getExperimentalEffectDescription}from"../chunk-MRLUWHGI.js"; //# sourceMappingURL=index.js.map
1
+ export{getPersonalModificationDescription,getPersonalModificationName}from"../chunk-SS7HVNP5.js";export{getPersonalToolName}from"../chunk-E2HDF6PJ.js";export{getPersonalWeaponDescription}from"../chunk-7C7NJWCF.js";export{getPreEngineeredVariantName}from"../chunk-T7IQHFQ2.js";export{getLoadoutSlotName,getSlotRestrictionLabel}from"../chunk-ZRG35JSH.js"; export{getPersonalMountName,getSuitDescription,getSuitName}from"../chunk-RA4YJBU5.js";export{getCalculationIssueMessage,getLoadoutEditErrorMessage,getLoadoutIssueMessage,getSlefDiagnosticMessage}from"../chunk-6G6TYW2D.js";export{getExperimentalEffectDescription}from"../chunk-RJ3ZLQRB.js";export{getExperimentalEffectName}from"../chunk-QPT2WJYN.js";export{getMaterialName}from"../chunk-UE22QU7A.js";export{getMicroResourceName}from"../chunk-WZIBBJHA.js";export{getOutfittingFamilyName}from"../chunk-YBE5M27G.js";export{getModuleName}from"../chunk-URRPEUIK.js";export{getBlueprintName}from"../chunk-UI5RROGI.js";export{getCommodityName}from"../chunk-TRGHPX2O.js"; //# sourceMappingURL=index.js.map
@@ -4,10 +4,8 @@
4
4
  *
5
5
  * @param symbol - Frontier's material symbol, such as `"GridResistors"`. Matching
6
6
  * ignores case and surrounding whitespace.
7
- * @param locale - A BCP 47 language or regional tag, such as `"de"`, `"de-DE"` or
8
- * `"en-GB"`. Matching is case-insensitive; underscores are accepted in place of
9
- * hyphens. A regional or script subtag is dropped: every stored locale is a bare
10
- * language tag.
7
+ * @param locale - A BCP 47 language or regional tag, such as `"de"` or `"de-DE"`; see
8
+ * {@link GameLocale} for how a tag is matched.
11
9
  * @returns The localized material name; the canonical `Material.name` for any English
12
10
  * tag; or `null` when the symbol is unknown or the locale is not one of the six this
13
11
  * catalogue stores.
@@ -1 +1 @@
1
- export{getMaterialName}from"../chunk-IZIIGK3W.js"; //# sourceMappingURL=materials.js.map
1
+ export{getMaterialName}from"../chunk-UE22QU7A.js"; //# sourceMappingURL=materials.js.map
@@ -4,10 +4,8 @@
4
4
  *
5
5
  * @param symbol - Frontier's micro-resource symbol, such as `"graphene"`. Matching
6
6
  * ignores case and surrounding whitespace.
7
- * @param locale - A BCP 47 language or regional tag, such as `"de"`, `"de-DE"` or
8
- * `"en-GB"`. Matching is case-insensitive; underscores are accepted in place of
9
- * hyphens. A regional or script subtag is dropped: every stored locale is a bare
10
- * language tag.
7
+ * @param locale - A BCP 47 language or regional tag, such as `"de"` or `"de-DE"`; see
8
+ * {@link GameLocale} for how a tag is matched.
11
9
  * @returns The localized micro-resource name; the canonical `MicroResource.name` for
12
10
  * any English tag; or `null` when the symbol is unknown or the locale is not one of the
13
11
  * six this catalogue stores.
@@ -1 +1 @@
1
- export{getMicroResourceName}from"../chunk-XFDMCPDW.js"; //# sourceMappingURL=micro-resources.js.map
1
+ export{getMicroResourceName}from"../chunk-WZIBBJHA.js"; //# sourceMappingURL=micro-resources.js.map
@@ -4,17 +4,15 @@
4
4
  *
5
5
  * @param familyId - The stable family id carried by `OutfittingModuleIdentity.familyId`,
6
6
  * such as `"shieldGenerators"`. Matching ignores case and surrounding whitespace.
7
- * @param locale - A BCP 47 language or regional tag, such as `"de"`, `"de-DE"` or
8
- * `"en-GB"`. Matching is case-insensitive; underscores are accepted in place of
9
- * hyphens. A regional or script subtag is dropped: every stored locale is a bare
10
- * language tag.
7
+ * @param locale - A BCP 47 language or regional tag, such as `"de"` or `"de-DE"`; see
8
+ * {@link GameLocale} for how a tag is matched.
11
9
  * @returns The localized family name; the canonical `OUTFITTING_FAMILIES` name for any
12
10
  * English tag; or `null` when the family is unknown, the locale is unsupported, or the
13
11
  * pinned source carries no category label for that family and locale.
14
12
  * @remarks
15
13
  * Every module carries a family, so an outfitting list can group and label every choice
16
14
  * `ShipLoadout.modulesForSlot()` returns from this lookup alone. The table bundles no
17
- * module stats. Missing translations never silently fall back to English: 19 of the 77
15
+ * module stats. Missing translations never silently fall back to English: some
18
16
  * families have no source-backed label in any locale, tracked by
19
17
  * [#320](https://github.com/DarkSession/Elite-Dangerous-Almanac/issues/320).
20
18
  * @throws {TypeError} If `familyId` is present and not a string, or `locale` is not a
@@ -1 +1 @@
1
- export{getOutfittingFamilyName}from"../chunk-SD6GNFDX.js"; //# sourceMappingURL=module-families.js.map
1
+ export{getOutfittingFamilyName}from"../chunk-YBE5M27G.js"; //# sourceMappingURL=module-families.js.map
@@ -4,10 +4,8 @@
4
4
  *
5
5
  * @param symbol - Frontier's module symbol, such as `"Int_Hyperdrive_Size6_Class5"`.
6
6
  * Matching ignores case and surrounding whitespace.
7
- * @param locale - A BCP 47 language or regional tag, such as `"de"`, `"de-DE"` or
8
- * `"en-GB"`. Matching is case-insensitive; underscores are accepted in place of
9
- * hyphens. A regional or script subtag is dropped: every stored locale is a bare
10
- * language tag.
7
+ * @param locale - A BCP 47 language or regional tag, such as `"de"` or `"de-DE"`; see
8
+ * {@link GameLocale} for how a tag is matched.
11
9
  * @returns The localized outfitting name; the canonical `OutfittingModule.name` for any
12
10
  * English tag; or `null` when the symbol is unknown or the locale is not one of the six
13
11
  * this catalogue stores.
@@ -16,8 +14,7 @@
16
14
  * answers. The table deduplicates modules that share one name in every locale, which is
17
15
  * finer than sharing one canonical English name: the game distinguishes the singular and
18
16
  * plural hull alloys, for instance, where English spells both the same. It does not
19
- * bundle any module stats, so this lookup avoids the 1,194-record `ALL_MODULES`
20
- * catalogue.
17
+ * bundle any module stats, so this lookup avoids the `ALL_MODULES` catalogue.
21
18
  * @throws {TypeError} If `symbol` is present and not a string, or `locale` is not a
22
19
  * string. A nullish `symbol` is a lookup miss and returns `null`.
23
20
  * @example
@@ -1 +1 @@
1
- export{getModuleName}from"../chunk-QJECDMQQ.js"; //# sourceMappingURL=modules.js.map
1
+ export{getModuleName}from"../chunk-URRPEUIK.js"; //# sourceMappingURL=modules.js.map