@elite-dangerous-almanac/core 0.2.8 → 0.2.10

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 (263) hide show
  1. package/PROVENANCE/astro/SOURCES.md +13 -12
  2. package/PROVENANCE/commodities/SOURCES.md +50 -6
  3. package/PROVENANCE/equipment/SOURCES.md +137 -45
  4. package/PROVENANCE/i18n/SOURCES.md +187 -81
  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-BJU27V6C.js → chunk-AUBV6S7V.js} +1 -1
  44. package/dist/{chunk-BJU27V6C.js.map → chunk-AUBV6S7V.js.map} +1 -1
  45. package/dist/{chunk-DI5RXSJR.js → chunk-BVLBS2QY.js} +1 -1
  46. package/dist/{chunk-DI5RXSJR.js.map → chunk-BVLBS2QY.js.map} +1 -1
  47. package/dist/{chunk-IN36YSS4.js → chunk-C3YZ5KTA.js} +1 -1
  48. package/dist/{chunk-IN36YSS4.js.map → chunk-C3YZ5KTA.js.map} +1 -1
  49. package/dist/{chunk-6UNAD74Z.js → chunk-C4FUV6GF.js} +1 -1
  50. package/dist/{chunk-6UNAD74Z.js.map → chunk-C4FUV6GF.js.map} +1 -1
  51. package/dist/chunk-C6G7IN74.js +1 -0
  52. package/dist/chunk-C6G7IN74.js.map +1 -0
  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-UVX7RCMP.js +1 -0
  109. package/dist/chunk-UVX7RCMP.js.map +1 -0
  110. package/dist/{chunk-7ATBEOVC.js → chunk-WG4DPXJI.js} +1 -1
  111. package/dist/{chunk-XFDMCPDW.js → chunk-WZIBBJHA.js} +1 -1
  112. package/dist/{chunk-XFDMCPDW.js.map → chunk-WZIBBJHA.js.map} +1 -1
  113. package/dist/{chunk-7EWZGDWY.js → chunk-X3MXPE7G.js} +1 -1
  114. package/dist/{chunk-7EWZGDWY.js.map → chunk-X3MXPE7G.js.map} +1 -1
  115. package/dist/{chunk-JCYOE3C4.js → chunk-XQJERZUS.js} +1 -1
  116. package/dist/{chunk-JCYOE3C4.js.map → chunk-XQJERZUS.js.map} +1 -1
  117. package/dist/{chunk-SD6GNFDX.js → chunk-YBE5M27G.js} +1 -1
  118. package/dist/{chunk-SD6GNFDX.js.map → chunk-YBE5M27G.js.map} +1 -1
  119. package/dist/chunk-YI5XKWW2.js +1 -0
  120. package/dist/{chunk-GIGRBFIJ.js.map → chunk-YI5XKWW2.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-B4sQMLFe.d.ts +450 -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-GIGRBFIJ.js +0 -1
  247. package/dist/chunk-IUSMAX5T.js +0 -1
  248. package/dist/chunk-IUSMAX5T.js.map +0 -1
  249. package/dist/chunk-LWNBWRKL.js +0 -1
  250. package/dist/chunk-LWNBWRKL.js.map +0 -1
  251. package/dist/chunk-MT5AHPNP.js +0 -1
  252. package/dist/chunk-MT5AHPNP.js.map +0 -1
  253. package/dist/chunk-QJECDMQQ.js +0 -1
  254. package/dist/chunk-YJAH6DFY.js.map +0 -1
  255. /package/dist/{chunk-XSLPWM5N.js.map → chunk-2J6NNI3Y.js.map} +0 -0
  256. /package/dist/{chunk-DWRNXUAX.js.map → chunk-2KIZN3BY.js.map} +0 -0
  257. /package/dist/{chunk-J7BM5NGK.js.map → chunk-2TY42PTF.js.map} +0 -0
  258. /package/dist/{chunk-KBCA4GEZ.js.map → chunk-FP2TQJZP.js.map} +0 -0
  259. /package/dist/{chunk-ETWMPMZP.js.map → chunk-K5JK3XQB.js.map} +0 -0
  260. /package/dist/{chunk-3WGXGBW5.js.map → chunk-R2AEZYX7.js.map} +0 -0
  261. /package/dist/{chunk-77TT4K53.js.map → chunk-SFEQXUIA.js.map} +0 -0
  262. /package/dist/{chunk-7TVFV3VO.js.map → chunk-U3IRMXMR.js.map} +0 -0
  263. /package/dist/{chunk-7ATBEOVC.js.map → chunk-WG4DPXJI.js.map} +0 -0
@@ -15,7 +15,13 @@ import { PersonalModifier } from './engineering.js';
15
15
  * @packageDocumentation
16
16
  */
17
17
 
18
- /** Equipment kind a personal modification can be installed on. */
18
+ /**
19
+ * Equipment kind a personal modification can be installed on.
20
+ *
21
+ * @remarks
22
+ * A suit tool is not one of them. The one recipe that changes a tool, Reduced Tool
23
+ * Battery Consumption, is installed on the suit and carries `"suit"`.
24
+ */
19
25
  type PersonalModificationTarget = 'suit' | 'weapon';
20
26
  /** One permanent personal-equipment engineering recipe. */
21
27
  interface PersonalModification {
@@ -31,29 +37,32 @@ interface PersonalModification {
31
37
  * `equipment/engineering`.
32
38
  *
33
39
  * A modifier names a stat of whatever it modifies, which is usually the equipment
34
- * the recipe is installed on. Extra Ammo Capacity is the exception a consumer has
35
- * to know about: it is a suit modification and it multiplies a *weapon's*
36
- * `reserveAmmo`.
40
+ * the recipe is installed on. Two suit modifications move something else, and a
41
+ * consumer has to know about both: Extra Ammo Capacity multiplies a *weapon's*
42
+ * `reserveAmmo`, and Reduced Tool Battery Consumption halves a *tool's*
43
+ * `powerUsage` and the Energylink's `overloadPowerUsage` under the name
44
+ * `toolEnergyDrain`.
37
45
  *
38
46
  * @remarks
39
47
  * **Empty** where the recipe changes nothing this catalogue names. Night Vision,
40
- * Scope, Stowed reloading and Combat Movement Speed have no numeric magnitude at
41
- * all — Scope swaps the sight, and each weapon's two magnifications are on its own
42
- * `scopeMagnification`. Faster Handling, Improved Hip Fire
43
- * Accuracy, Stability and Improved Jump Assist do change stats, ones the personal
44
- * stats panel does not put a number on; see
48
+ * Scope, Reload Speed, Stowed reloading and Combat Movement Speed have no numeric
49
+ * magnitude at all — Scope swaps the sight, and each weapon's two magnifications
50
+ * are on its own `scopeMagnification`; Reload Speed shortens the reload, and each
51
+ * weapon's two reload times are on its own `reloadTime`. Faster Handling, Improved
52
+ * Hip Fire Accuracy, Stability and Improved Jump Assist do change stats, ones the
53
+ * personal stats panel does not put a number on; see
45
54
  * [`data/equipment/SOURCES.md`](https://github.com/DarkSession/Elite-Dangerous-Almanac/blob/main/data/equipment/SOURCES.md).
46
55
  */
47
56
  readonly modifiers: readonly PersonalModifier[];
48
57
  }
49
58
  /**
50
- * All 31 suit and weapon engineering recipes, keyed by recipe symbol.
59
+ * Every suit and weapon engineering recipe, keyed by recipe symbol.
51
60
  *
52
61
  * @remarks
53
- * There are 25 distinct display names. Greater Range, Headshot Damage and Improved
54
- * Hip Fire Accuracy each have separate Kinetic, Laser and Plasma recipes because their
55
- * material costs differ. Their keys end in `_kinetic`, `_laser` or `_plasma`; the
56
- * journal omits that suffix, so resolve its value with
62
+ * A recipe symbol is finer-grained than a display name: Greater Range, Headshot Damage
63
+ * and Improved Hip Fire Accuracy each have separate Kinetic, Laser and Plasma recipes
64
+ * because their material costs differ. Their keys end in `_kinetic`, `_laser` or
65
+ * `_plasma`; the journal omits that suffix, so resolve its value with
57
66
  * `resolvePersonalModificationForWeapon` from `equipment/modification-journal`.
58
67
  *
59
68
  * @example
@@ -1 +1 @@
1
- export{PERSONAL_MODIFICATIONS,getPersonalModification}from"../chunk-GIGRBFIJ.js"; //# sourceMappingURL=modifications.js.map
1
+ export{PERSONAL_MODIFICATIONS,getPersonalModification}from"../chunk-YI5XKWW2.js"; //# sourceMappingURL=modifications.js.map
@@ -1,145 +1,2 @@
1
- /**
2
- * Odyssey personal suits: their journal identifiers, the suit-wide component stats every
3
- * grade shares, and the grade-dependent defensive stats.
4
- *
5
- * @packageDocumentation
6
- */
7
- /** A Pioneer Supplies equipment grade, from the stock grade 1 through grade 5. */
8
- type EquipmentGrade = 1 | 2 | 3 | 4 | 5;
9
- /** The stats of one suit at one equipment grade. */
10
- interface SuitGrade {
11
- /** Frontier item symbol for this exact suit and grade. */
12
- readonly symbol: string;
13
- /** Permanent engineering-modification slots available, from `0` through `4`. */
14
- readonly modificationSlots: number;
15
- /** Base shield strength in shield points. */
16
- readonly shieldStrength: number;
17
- /** Shield points regenerated per second. */
18
- readonly shieldRegeneration: number;
19
- /** Kinetic damage resistance as a fraction; negative values increase damage. */
20
- readonly kineticResistance: number;
21
- /** Thermal damage resistance as a fraction. */
22
- readonly thermalResistance: number;
23
- /** Plasma damage resistance as a fraction; negative values increase damage. */
24
- readonly plasmaResistance: number;
25
- /** Explosive damage resistance as a fraction. */
26
- readonly explosiveResistance: number;
27
- }
28
- /** One personal suit model sold by Pioneer Supplies. */
29
- interface Suit {
30
- /** Suit family without a grade suffix, e.g. `"utilitysuit"`. */
31
- readonly family: string;
32
- /** English display name, e.g. `"Maverick Suit"`. */
33
- readonly name: string;
34
- /** Number of primary-weapon slots. */
35
- readonly primarySlots: number;
36
- /** Number of secondary-weapon slots. */
37
- readonly secondarySlots: number;
38
- /** Suit health in health points, the pool the shield protects. */
39
- readonly health: number;
40
- /** Suit mass in kilograms. */
41
- readonly mass: number;
42
- /** Battery capacity in energy units, the pool the suit's tools draw from. */
43
- readonly batteryCapacity: number;
44
- /** Emergency air, in seconds of life support. */
45
- readonly oxygenTime: number;
46
- /** Jump-assist boost acceleration, the bare figure the panel shows, which has no unit. */
47
- readonly boostAcceleration: number;
48
- /** Backpack goods capacity in items. */
49
- readonly goodsCapacity: number;
50
- /** Backpack assets capacity in components. */
51
- readonly assetsCapacity: number;
52
- /** Backpack data capacity in items. */
53
- readonly dataCapacity: number;
54
- /** How far footsteps carry, as a multiplier of the base audible range. */
55
- readonly footstepAudibleRange: number;
56
- /** Line-of-sight analysis range in metres. */
57
- readonly losAnalysisRange: number;
58
- /** Seconds of line of sight the suit needs to complete an analysis. */
59
- readonly losAnalysisTime: number;
60
- /**
61
- * Available grade records, keyed by `"1"` through `"5"`.
62
- *
63
- * @remarks
64
- * A grade changes exactly what {@link SuitGrade} carries — the four resistances,
65
- * shield strength, shield regeneration, the modification slots and the item symbol.
66
- * Every stat above is a property of the suit family and is the same at all five.
67
- */
68
- readonly grades: Readonly<Partial<Record<`${EquipmentGrade}`, SuitGrade>>>;
69
- }
70
- /**
71
- * All four personal suits, including the non-upgradeable Flight Suit.
72
- *
73
- * @example
74
- * ```ts
75
- * import { SUITS } from '@elite-dangerous-almanac/core/equipment/suits';
76
- * SUITS.length; // -> 4
77
- * ```
78
- */
79
- declare const SUITS: readonly Suit[];
80
- /**
81
- * Look up a suit model by its grade-independent family, case-insensitively.
82
- *
83
- * @param family - Family such as `"utilitysuit"`, matched case-insensitively after
84
- * trimming surrounding whitespace.
85
- * @returns The frozen suit record, or `null` when unknown.
86
- * @throws {TypeError} If `family` is present and not a string. A nullish family is a
87
- * miss, answered like an unrecognised one.
88
- * @example
89
- * ```ts
90
- * import { getSuitByFamily } from '@elite-dangerous-almanac/core/equipment/suits';
91
- * getSuitByFamily('utilitysuit')?.name; // -> 'Maverick Suit'
92
- * ```
93
- */
94
- declare function getSuitByFamily(family: string): Suit | null;
95
- /**
96
- * Look up a suit by its display name, case-insensitively.
97
- *
98
- * @param name - Display name such as `"Maverick Suit"`, matched case-insensitively
99
- * after trimming surrounding whitespace.
100
- * @returns The frozen suit record, or `null` when unknown.
101
- * @throws {TypeError} If `name` is present and not a string. A nullish name is a miss,
102
- * answered like an unrecognised one.
103
- * @example
104
- * ```ts
105
- * import { getSuitByName } from '@elite-dangerous-almanac/core/equipment/suits';
106
- * getSuitByName('Maverick Suit')?.family; // -> 'utilitysuit'
107
- * ```
108
- */
109
- declare function getSuitByName(name: string): Suit | null;
110
- /**
111
- * Resolve the grade-specific Frontier item symbol reported by journal suit events.
112
- *
113
- * @param symbol - Item symbol such as `"utilitysuit_class3"`, matched
114
- * case-insensitively after trimming surrounding whitespace.
115
- * @returns The owning suit and its numeric grade, or `null` when unknown.
116
- * @throws {TypeError} If `symbol` is present and not a string. A nullish symbol is a
117
- * miss, answered like an unrecognised one.
118
- * @example
119
- * ```ts
120
- * import { getSuitBySymbol } from '@elite-dangerous-almanac/core/equipment/suits';
121
- * getSuitBySymbol('utilitysuit_class3')?.grade; // -> 3
122
- * ```
123
- */
124
- declare function getSuitBySymbol(symbol: string): Readonly<{
125
- suit: Suit;
126
- grade: EquipmentGrade;
127
- }> | null;
128
- /**
129
- * Read a suit's stats at one grade.
130
- *
131
- * @param suit - A catalogue suit record.
132
- * @param grade - Integer grade `1`–`5`.
133
- * @returns The frozen grade record, or `null` when that suit has no such grade.
134
- * @throws {RangeError} If `grade` is not an integer from 1 through 5.
135
- * @example
136
- * ```ts
137
- * import { getSuitByFamily, getSuitGrade } from '@elite-dangerous-almanac/core/equipment/suits';
138
- * const suit = getSuitByFamily('utilitysuit');
139
- * if (!suit) throw new Error('Maverick Suit is missing');
140
- * getSuitGrade(suit, 5)?.modificationSlots; // -> 4
141
- * ```
142
- */
143
- declare function getSuitGrade(suit: Suit, grade: number): SuitGrade | null;
144
-
145
- export { type EquipmentGrade, SUITS, type Suit, type SuitGrade, getSuitByFamily, getSuitByName, getSuitBySymbol, getSuitGrade };
1
+ export { E as EquipmentGrade, c as PersonalMount, d as PersonalMountKey, S as SUITS, l as Suit, m as SuitGrade, q as getSuitByFamily, r as getSuitByName, s as getSuitBySymbol, t as getSuitGrade } from '../suits-B4sQMLFe.js';
2
+ import './engineering.js';
@@ -1 +1 @@
1
- export{SUITS,getSuitByFamily,getSuitByName,getSuitBySymbol,getSuitGrade}from"../chunk-LWNBWRKL.js"; //# sourceMappingURL=suits.js.map
1
+ export{SUITS,getSuitByFamily,getSuitByName,getSuitBySymbol,getSuitGrade}from"../chunk-C6G7IN74.js"; //# sourceMappingURL=suits.js.map
@@ -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-B4sQMLFe.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-C6G7IN74.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-B4sQMLFe.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