@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
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/materials/micro-resources.ts"],"names":["ALL_MICRO_RESOURCES","findInKeyIndex","findByKey","filterByKey","createKeyIndex","MICRO_RESOURCES_BY_SYMBOL","MICRO_RESOURCES_BY_NAME","getMicroResourceBySymbol","symbol","microResources","getMicroResourceByName","name","microResourcesInCategory","category"],"mappings":"O,mIA+FA,IAAMK,yCAA4CD,eAAeJ,oBAAqB,UACtF,IAAMM,uCAA0CF,eAAeJ,oBAAqB,QA2B7E,SAASO,yBACZC,OACAC,eAA2CT,qBAE3C,OAAOS,iBAAmBT,oBACpBC,eAAeI,0BAA2BG,OAAQ,oCAClDN,UAAUO,eAAgB,SAAUD,OAAQ,mCACtD,CAmBO,SAASE,uBACZC,KACAF,eAA2CT,qBAE3C,OAAOS,iBAAmBT,oBACpBC,eAAeK,wBAAyBK,KAAM,gCAC9CT,UAAUO,eAAgB,OAAQE,KAAM,+BAClD,CAkBO,SAASC,yBAAyBC,UACrC,OAAOV,YACHH,oBACA,WACAa,SACA,qCAER,QAAAH,uBAAAH,yBAAAK"}
1
+ {"version":3,"sources":["../src/materials/micro-resources.ts"],"names":["ALL_MICRO_RESOURCES","findInKeyIndex","findByKey","filterByKey","createKeyIndex","MICRO_RESOURCES_BY_SYMBOL","MICRO_RESOURCES_BY_NAME","getMicroResourceBySymbol","symbol","microResources","getMicroResourceByName","name","microResourcesInCategory","category"],"mappings":"O,mIAkGA,IAAMK,yCAA4CD,eAAeJ,oBAAqB,UACtF,IAAMM,uCAA0CF,eAAeJ,oBAAqB,QA2B7E,SAASO,yBACZC,OACAC,eAA2CT,qBAE3C,OAAOS,iBAAmBT,oBACpBC,eAAeI,0BAA2BG,OAAQ,oCAClDN,UAAUO,eAAgB,SAAUD,OAAQ,mCACtD,CAmBO,SAASE,uBACZC,KACAF,eAA2CT,qBAE3C,OAAOS,iBAAmBT,oBACpBC,eAAeK,wBAAyBK,KAAM,gCAC9CT,UAAUO,eAAgB,OAAQE,KAAM,+BAClD,CAkBO,SAASC,yBAAyBC,UACrC,OAAOV,YACHH,oBACA,WACAa,SACA,qCAER,QAAAH,uBAAAH,yBAAAK"}
@@ -1 +1 @@
1
- import{systemsResistance,mapDamageTypes,effectiveHitPoints}from"./chunk-F44QX47A.js";import{capacitorRechargeAtPips}from"./chunk-JOTAOI5T.js";import{requirePips,requireFiniteNonNegative}from"./chunk-65FZECUX.js";var DAMAGE_TYPES=["kinetic","thermal","explosive","caustic"];function shieldCapacitorMetrics(input){const scope="shieldCapacitorMetrics";const systemsPips=input.systemsPips??4;requirePips(scope,"systemsPips",systemsPips);for(const field of["strength","systemsCapacity","systemsRecharge"]){requireFiniteNonNegative(scope,field,input[field])}const resistances=input.resistances;if(typeof resistances!=="object"||resistances===null){throw new TypeError(`${scope}: resistances must carry the four damage types`)}for(const type of DAMAGE_TYPES){if(!Number.isFinite(input.resistances[type])){throw new RangeError(`${scope}: resistances.${type} must be a finite number`)}}const sysResistance=systemsResistance(systemsPips);const effectiveResistances=Object.freeze(mapDamageTypes(type=>1-(1-input.resistances[type])*(1-sysResistance)));return Object.freeze({systemsPips:systemsPips,capacity:input.systemsCapacity,rechargeRate:capacitorRechargeAtPips(input.systemsRecharge,systemsPips),systemsResistance:sysResistance,effectiveResistances:effectiveResistances,effectiveHitPoints:Object.freeze(effectiveHitPoints(input.strength,effectiveResistances))})}export{shieldCapacitorMetrics};//# sourceMappingURL=chunk-JCYOE3C4.js.map
1
+ import{capacitorRechargeAtPips}from"./chunk-JOTAOI5T.js";import{systemsResistance,mapDamageTypes,effectiveHitPoints}from"./chunk-F44QX47A.js";import{requirePips,requireFiniteNonNegative}from"./chunk-65FZECUX.js";var DAMAGE_TYPES=["kinetic","thermal","explosive","caustic"];function shieldCapacitorMetrics(input){const scope="shieldCapacitorMetrics";const systemsPips=input.systemsPips??4;requirePips(scope,"systemsPips",systemsPips);for(const field of["strength","systemsCapacity","systemsRecharge"]){requireFiniteNonNegative(scope,field,input[field])}const resistances=input.resistances;if(typeof resistances!=="object"||resistances===null){throw new TypeError(`${scope}: resistances must carry the four damage types`)}for(const type of DAMAGE_TYPES){if(!Number.isFinite(input.resistances[type])){throw new RangeError(`${scope}: resistances.${type} must be a finite number`)}}const sysResistance=systemsResistance(systemsPips);const effectiveResistances=Object.freeze(mapDamageTypes(type=>1-(1-input.resistances[type])*(1-sysResistance)));return Object.freeze({systemsPips:systemsPips,capacity:input.systemsCapacity,rechargeRate:capacitorRechargeAtPips(input.systemsRecharge,systemsPips),systemsResistance:sysResistance,effectiveResistances:effectiveResistances,effectiveHitPoints:Object.freeze(effectiveHitPoints(input.strength,effectiveResistances))})}export{shieldCapacitorMetrics};//# sourceMappingURL=chunk-XQJERZUS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ships/shield-capacitor.ts"],"names":["systemsResistance","mapDamageTypes","effectiveHitPoints","capacitorRechargeAtPips","requirePips","requireFiniteNonNegative","DAMAGE_TYPES","shieldCapacitorMetrics","input","scope","systemsPips","field","resistances","TypeError","type","Number","isFinite","RangeError","sysResistance","effectiveResistances","Object","freeze","capacity","systemsCapacity","rechargeRate","systemsRecharge","strength"],"mappings":"O,6MAwGA,IAAMM,aAAsC,CAAC,UAAW,UAAW,YAAa,WAuCzE,SAASC,uBAAuBC,OACnC,MAAMC,MAAQ,yBACd,MAAMC,YAAcF,MAAME,aAAe,EAGzCN,YAAYK,MAAO,cAAeC,aAClC,IAAA,MAAWC,QAAS,CAAC,WAAY,kBAAmB,mBAA6B,CAC7EN,yBAAyBI,MAAOE,MAAOH,MAAMG,OACjD,CACA,MAAMC,YAAuBJ,MAAMI,YACnC,UAAWA,cAAgB,UAAYA,cAAgB,KAAM,CACzD,MAAM,IAAIC,UAAU,GAAGJ,sDAC3B,CACA,IAAA,MAAWK,QAAQR,aAAc,CAC7B,IAAKS,OAAOC,SAASR,MAAMI,YAAYE,OAAQ,CAC3C,MAAM,IAAIG,WAAW,GAAGR,sBAAsBK,+BAClD,CACJ,CAEA,MAAMI,cAAgBlB,kBAAkBU,aAExC,MAAMS,qBAA0CC,OAAOC,OACnDpB,eAAgBa,MAAS,GAAK,EAAIN,MAAMI,YAAYE,QAAU,EAAII,iBAEtE,OAAOE,OAAOC,OAAO,CACjBX,wBACAY,SAAUd,MAAMe,gBAChBC,aAAcrB,wBAAwBK,MAAMiB,gBAAiBf,aAC7DV,kBAAmBkB,cACnBC,0CACAjB,mBAAoBkB,OAAOC,OAAOnB,mBAAmBM,MAAMkB,SAAUP,wBAE7E,QAAAZ"}
1
+ {"version":3,"sources":["../src/ships/shield-capacitor.ts"],"names":["capacitorRechargeAtPips","systemsResistance","mapDamageTypes","effectiveHitPoints","requirePips","requireFiniteNonNegative","DAMAGE_TYPES","shieldCapacitorMetrics","input","scope","systemsPips","field","resistances","TypeError","type","Number","isFinite","RangeError","sysResistance","effectiveResistances","Object","freeze","capacity","systemsCapacity","rechargeRate","systemsRecharge","strength"],"mappings":"O,6MAwGA,IAAMM,aAAsC,CAAC,UAAW,UAAW,YAAa,WAuCzE,SAASC,uBAAuBC,OACnC,MAAMC,MAAQ,yBACd,MAAMC,YAAcF,MAAME,aAAe,EAGzCN,YAAYK,MAAO,cAAeC,aAClC,IAAA,MAAWC,QAAS,CAAC,WAAY,kBAAmB,mBAA6B,CAC7EN,yBAAyBI,MAAOE,MAAOH,MAAMG,OACjD,CACA,MAAMC,YAAuBJ,MAAMI,YACnC,UAAWA,cAAgB,UAAYA,cAAgB,KAAM,CACzD,MAAM,IAAIC,UAAU,GAAGJ,sDAC3B,CACA,IAAA,MAAWK,QAAQR,aAAc,CAC7B,IAAKS,OAAOC,SAASR,MAAMI,YAAYE,OAAQ,CAC3C,MAAM,IAAIG,WAAW,GAAGR,sBAAsBK,+BAClD,CACJ,CAEA,MAAMI,cAAgBjB,kBAAkBS,aAExC,MAAMS,qBAA0CC,OAAOC,OACnDnB,eAAgBY,MAAS,GAAK,EAAIN,MAAMI,YAAYE,QAAU,EAAII,iBAEtE,OAAOE,OAAOC,OAAO,CACjBX,wBACAY,SAAUd,MAAMe,gBAChBC,aAAcxB,wBAAwBQ,MAAMiB,gBAAiBf,aAC7DT,kBAAmBiB,cACnBC,0CACAhB,mBAAoBiB,OAAOC,OAAOlB,mBAAmBK,MAAMkB,SAAUP,wBAE7E,QAAAZ"}
@@ -1 +1 @@
1
- import{getLocalizedName,createLocalizedNameIndex}from"./chunk-RVIYOHYF.js";var module_family_names_default={armour:{en:"Armour",de:"Panzerung",es:"Blindaje",fr:"Blindage",pt:"Blindagem",ru:"Броня"},powerPlants:{en:"Power Plants",de:"Kraftwerke",es:"Núcleos de energía",fr:"Générateurs",pt:"Gerador de energia",ru:"Силовые установки"},engines:{en:"Engines",de:"Antriebe",es:"Motores",fr:"Moteurs",pt:"Motores",ru:"Двигатели"},fsd:{en:"FSD",de:"FSA",es:"MDD",fr:"FSD",pt:"MDD",ru:"FSD"},lifeSupport:{en:"Life Support",de:"Lebenserhaltung",es:"Soporte vital",fr:"Systèmes de survie",pt:"Suporte de vida",ru:"Сист. жизнеобеспеч."},powerDistributors:{en:"Power Distributors",de:"Energieverteiler",es:"Distribuidores de energía",fr:"Répartiteurs de puissance",pt:"Distribuidor de energia",ru:"Распределители питания"},sensors:{en:"Sensors",de:"Sensoren",es:"Sensores",fr:"Capteurs",pt:"Sensores",ru:"Сенсоры"},fuelTanks:{en:"Fuel Tanks",de:"Treibstofftanks",es:"Tanques de combustible",fr:"Réservoirs",pt:"Tanques de Combustível",ru:"Топливные баки"},dockingComputers:{en:"Docking Computers",de:"Andockcomputer",es:"Computadoras de aterrizaje",fr:"Ordinateurs d'appontage",pt:"Computador de docagem",ru:"Стыковочные компьютеры"},shieldGenerators:{en:"Shield Generators",de:"Schildgeneratoren",es:"Generadores de escudos",fr:"Générateurs de bouclier",pt:"Geradores de Escudo",ru:"Щитогенераторы"},shieldCellBanks:{en:"Shield Cell Banks",de:"Schildzellenbänke",es:"Acum. escudos",fr:"Réserves de cellules d'énergie",pt:"Bancos de célula de escudo",ru:"Щитонакопители"},cargoRacks:{en:"Cargo Racks",de:"Frachtgestelle",es:"Bodegas de carga",fr:"Compartiments de soute",pt:"Estantes de Carga",ru:"Грузовые стеллажи"},hatchBreakerLimpets:{en:"Hatch Breaker Limpets",de:"Ladelukenöffner",es:"Drones extractores",fr:"Drones perce-soute",pt:"Drones quebra-escotilha",ru:"Дроны-взломщики трюмов"},surfaceScanners:{en:"Surface Scanners",de:"Oberflächenscanner",es:"Escáneres de superficie",fr:"Détecteurs de surface",pt:"Scanners de superfície",ru:"Сканеры поверхностей"},fuelScoops:{en:"Fuel Scoops",de:"Treibstoffsammler",es:"Colectores de combustible",fr:"Récupérateurs de carburant",pt:"Coletores de Combustível",ru:"Топливозаборники"},refineries:{en:"Refineries",de:"Raffinerien",es:"Refinerías",fr:"Raffineries",pt:"Refinarias",ru:"Очистители"},fsdInterdictors:{en:"FSD Interdictors",de:"FSA-Unterbrecher",es:"Interdictores",fr:"Intercepteurs FSD",pt:"Interditores de MDD",ru:"Перехватчики FSD"},afms:{en:"AFMs",de:"AFW",es:"Unidades de automantenimiento",fr:"MAE",pt:"UMTs",ru:"АПР"},hullReinforcements:{en:"Hull Reinforcements",de:"Rumpfverstärkungen",es:"Refuerzos estructurales",fr:"Renforcements de coque",pt:"Reforços de Casco",ru:"Усилители корпуса"},collectorLimpets:{en:"Collector Limpets",de:"Sammeldrohnen",es:"Drones colectores",fr:"Drones collecteurs",pt:"Drones Coletores",ru:"Дроны-сборщики"},fuelTransferLimpets:{en:"Fuel Transfer Limpets",de:"Treibstofftransfer-Drohnen",es:"Drones de combustible",fr:"Drones ravitailleurs",pt:"Drones de combustível",ru:"Дроны-заправщики"},prospectingLimpets:{en:"Prospecting Limpets",de:"Abbaudrohnen",es:"Drones de prospección",fr:"Drones de prospection",pt:"Drones Prospectores",ru:"Дроны-геологоразведчики"},planetaryVehicleHangars:{en:"Planetary Vehicle Hangars",de:"Planetenfahrzeug-Hangars",es:"Hangares de vehículos planetarios",fr:"Hangars des véhicules planétaires",pt:"Hangar de veículo planetário",ru:"Гаражи планет. транспорта"},planetaryApproachSuites:{en:"Planetary Approach Suites",de:"Planetenanflug-Suiten",es:"Equipos de aproximación planetaria",fr:"Inst. approche planétaire",pt:"Instrumentos de aproximação planetária",ru:"Комплекты для сближения с планетой"},cargoHatches:{en:"Cargo Hatches"},passengerCabins:{en:"Passenger Cabins",de:"Passagierkabinen",es:"Cabinas de pasajeros",fr:"Cabine de passagers",pt:"Cabine de Passageiro",ru:"Пассажирские каюты"},vesselHangars:{en:"Vessel Hangars",de:"Schiff-Hangars",es:"Hangares de naves",fr:"Hangars à vaisseaux",pt:"Hangares de naves",ru:"Ангары для ЛА"},moduleReinforcements:{en:"Module Reinforcements",de:"Modulverstärkungen",es:"Refuerzos de módulo",fr:"Renforcements de modules",pt:"Reforços de módulo",ru:"Усилители для модулей"},repairLimpets:{en:"Repair Limpets",de:"Reparaturdrohnen",es:"Drones de reparaciones",fr:"Drones réparateurs",pt:"Drone de Reparo",ru:"Дроны-ремонтники"},researchLimpets:{en:"Research Limpets",de:"Forschungsdrohnen",es:"Drones de investigación",fr:"Drones de recherche",pt:"Drones de Pesquisa",ru:"Дроны-исследователи"},decontaminationLimpets:{en:"Decontamination Limpets",de:"Dekontaminations-drohnen",es:"Drones de descontaminación",fr:"Drones de décontamination",pt:"Drones de Descontaminação",ru:"Дроны-очистители"},guardianShieldReinforcementPackages:{en:"Guardian Shield Reinforcement Packages"},fsdBoosters:{en:"FSD Boosters",de:"FSA-Booster",es:"Potenciadores de MDD",fr:"Survolteurs FSD",pt:"Potenciadores de MDD",ru:"Ускорители FSD"},guardianHybridPowerDistributors:{en:"Guardian Hybrid Power Distributors"},guardianHybridPowerPlants:{en:"Guardian Hybrid Power Plants"},reconLimpets:{en:"Recon Limpets",de:"Aufklärungsdrohnen",es:"Drones de reconocimiento",fr:"Drones de reconnaissance",pt:"Drones de reconhecimento",ru:"Дроны-разведчики"},flightAssists:{en:"Flight Assists",de:"Flughilfen",es:"Asistentes de vuelo",fr:"Assistance de vol",pt:"Assistências de voo",ru:"Автопилот"},miningMultiLimpetControllers:{en:"Mining Multi-Limpet Controllers"},multiLimpetControllers:{en:"Multi-Limpet Controllers",de:"Multi-Drohnensteuerungen",es:"Multilanzadores dron",fr:"Contrôleurs multi-drones",pt:"Controladores multidrones",ru:"Мультиконтроллеры дронов"},experimentalWeaponStabilisers:{en:"Experimental Weapon Stabilisers",de:"Experimentelle Waffenstabilisatoren",es:"Estabilizadores de armas experimentales",fr:"Stabilisateurs d'armes expérimentales",pt:"Estabilizadores de arma experimental",ru:"Стабилизаторы экспериментального оружия"},pulseLasers:{en:"Pulse Lasers",de:"Impulslaser",es:"Láseres de pulso",fr:"Lasers à impulsion",pt:"Lasers de Pulso",ru:"Импульсные лазеры"},burstLasers:{en:"Burst Lasers",de:"Salvenlaser",es:"Láseres de ráfaga",fr:"Lasers à rafale",pt:"Lasers de Rajada",ru:"Пульсирующие лазеры"},beamLasers:{en:"Beam Lasers",de:"Strahlenlaser",es:"Láseres de rayo",fr:"Rayons laser",pt:"Lasers Contínuo",ru:"Пучковые лазеры"},cannons:{en:"Cannons",de:"Kanonen",es:"Cañones",fr:"Canons",pt:"Canhões",ru:"Орудия"},fragmentCannons:{en:"Fragment Cannons",de:"Splitterkanonen",es:"Cañones de fragmentación",fr:"Canons à fragmentation",pt:"Canhões de Fragmentos",ru:"Залповые орудия"},multiCannons:{en:"Multi-cannons",de:"Multikanonen",es:"Multicañones",fr:"Multi-canons",pt:"Canhões de repetição",ru:"Многоствольные орудия"},plasmaAccelerators:{en:"Plasma Accelerators",de:"Plasmabeschleuniger",es:"Aceleradores de plasma",fr:"Accélérateurs à plasma",pt:"Aceleradores de Plasma",ru:"Ускорители плазмы"},railGuns:{en:"Rail Guns",de:"Schienenkanonen",es:"Cañones de riel",fr:"Canons électriques",pt:"Canhões Elétricos",ru:"Рельсотрон"},missiles:{en:"Missiles",de:"Raketen",es:"Misiles",fr:"Missiles",pt:"Mísseis",ru:"Ракеты"},mines:{en:"Mines",de:"Minen",es:"Minas",fr:"Mines",pt:"Minas",ru:"Мины"},torpedoes:{en:"Torpedoes",de:"Torpedos",es:"Torpedos",fr:"Torpilles",pt:"Torpedos",ru:"Торпеды"},miningLasers:{en:"Mining Lasers",de:"Abbaulaser",es:"Láseres de minería",fr:"Lasers miniers",pt:"Lasers de mineração",ru:"Проходочные лазеры"},remoteReleaseFlakLaunchers:{en:"Remote Release Flak Launchers"},axMissileRacks:{en:"AX Missile Racks"},axMultiCannons:{en:"AX Multi-Cannons"},guardianGaussCannons:{en:"Guardian Gauss Cannons"},remoteReleaseFlechetteLaunchers:{en:"Remote Release Flechette Launchers"},guardianPlasmaChargers:{en:"Guardian Plasma Chargers"},guardianShardCannons:{en:"Guardian Shard Cannons"},shockCannons:{en:"Shock Cannons"},subSurfaceDisplacementMissiles:{en:"Sub-Surface Displacement Missiles"},abrasionBlasters:{en:"Abrasion Blasters",de:"Abrasionsblaster",es:"Destructores de abrasión",fr:"Surfaceurs abrasifs",pt:"Detonadores de abrasão",ru:"Абразивные бластеры"},miningTools:{en:"Mining Tools",de:"Abbauwerkzeuge",es:"Herramientas de minería",fr:"Outils miniers",pt:"Ferramentas de mineração",ru:"Инструменты для добычи ресурсов"},subSurfaceExtractionMissiles:{en:"Sub-Surface Extraction Missiles"},guardianNaniteTorpedoPylons:{en:"Guardian Nanite Torpedo Pylons"},chaffLaunchers:{en:"Chaff Launchers",de:"Düppel-Werfer",es:"Señuelos",fr:"Lanceurs de paillettes",pt:"Lançadores de Chaff",ru:"Разбрас-ли дип. отражателей"},ecms:{en:"ECMs",de:"EGM",es:"Contramedidas electrónicas",fr:"CMÉ",pt:"CMEs",ru:"ЭПД"},heatsinkLaunchers:{en:"Heatsink Launchers",de:"Kühlkörperwerfer",es:"Eyectores térmicos",fr:"Éjecteurs de dissipateur thermique",pt:"Lançadores de dissipador térmico",ru:"Теплоотводные катапульты"},pointDefence:{en:"Point Defence",de:"Punktverteidigung",es:"Defensas de punto",fr:"Défense ponctuelle",pt:"Defesa de Ponto",ru:"Точечная оборона"},manifestScanners:{en:"Manifest Scanners",de:"Verzeichnisscanner",es:"Escáneres de manifiesto",fr:"Détecteurs de manifeste",pt:"Scanners de Manifesto",ru:"Сканеры содержимого"},wakeScanners:{en:"Wake Scanners",de:"Sogwolkenscanner",es:"Escáneres de estela",fr:"Détecteurs de sillage",pt:"Scanners de Rastro",ru:"Следовые сканеры"},killWarrantScanners:{en:"Kill Warrant Scanners",de:"Tötungsbefehl-Scanner",es:"Escáneres de registro criminal",fr:"Détecteurs d'avis de rech.",pt:"Scanners de Registro Criminal",ru:"Сканеры преступников"},shieldBoosters:{en:"Shield Boosters",de:"Schild-Booster",es:"Potenciadores de escudos",fr:"Survolteurs de bouclier",pt:"Potenciadores de Escudo",ru:"Усилители щита"},shutdownFieldNeutralisers:{en:"Shutdown Field Neutralisers"},xenoScanners:{en:"Xeno Scanners"},pulseWaveAnalyser:{en:"Pulse Wave Analyser",de:"Impulswellen-Analysator",es:"Analizador de onda de pulsos",fr:"Analyseur à onde pulsée",pt:"Analisador de onda de pulso",ru:"Анализатор импульсных волн"},causticSinkLaunchers:{en:"Caustic Sink Launchers"}};var FAMILY_NAMES=/* @__PURE__ */createLocalizedNameIndex(module_family_names_default);function getOutfittingFamilyName(familyId,locale){return getLocalizedName(FAMILY_NAMES,familyId,locale,"getOutfittingFamilyName","familyId")}export{getOutfittingFamilyName};//# sourceMappingURL=chunk-SD6GNFDX.js.map
1
+ import{getLocalizedName,createLocalizedNameIndex}from"./chunk-RVIYOHYF.js";var module_family_names_default={armour:{en:"Armour",de:"Panzerung",es:"Blindaje",fr:"Blindage",pt:"Blindagem",ru:"Броня"},powerPlants:{en:"Power Plants",de:"Kraftwerke",es:"Núcleos de energía",fr:"Générateurs",pt:"Gerador de energia",ru:"Силовые установки"},engines:{en:"Engines",de:"Antriebe",es:"Motores",fr:"Moteurs",pt:"Motores",ru:"Двигатели"},fsd:{en:"FSD",de:"FSA",es:"MDD",fr:"FSD",pt:"MDD",ru:"FSD"},lifeSupport:{en:"Life Support",de:"Lebenserhaltung",es:"Soporte vital",fr:"Systèmes de survie",pt:"Suporte de vida",ru:"Сист. жизнеобеспеч."},powerDistributors:{en:"Power Distributors",de:"Energieverteiler",es:"Distribuidores de energía",fr:"Répartiteurs de puissance",pt:"Distribuidor de energia",ru:"Распределители питания"},sensors:{en:"Sensors",de:"Sensoren",es:"Sensores",fr:"Capteurs",pt:"Sensores",ru:"Сенсоры"},fuelTanks:{en:"Fuel Tanks",de:"Treibstofftanks",es:"Tanques de combustible",fr:"Réservoirs",pt:"Tanques de Combustível",ru:"Топливные баки"},dockingComputers:{en:"Docking Computers",de:"Andockcomputer",es:"Computadoras de aterrizaje",fr:"Ordinateurs d'appontage",pt:"Computador de docagem",ru:"Стыковочные компьютеры"},shieldGenerators:{en:"Shield Generators",de:"Schildgeneratoren",es:"Generadores de escudos",fr:"Générateurs de bouclier",pt:"Geradores de Escudo",ru:"Щитогенераторы"},shieldCellBanks:{en:"Shield Cell Banks",de:"Schildzellenbänke",es:"Acum. escudos",fr:"Réserves de cellules d'énergie",pt:"Bancos de célula de escudo",ru:"Щитонакопители"},cargoRacks:{en:"Cargo Racks",de:"Frachtgestelle",es:"Bodegas de carga",fr:"Compartiments de soute",pt:"Estantes de Carga",ru:"Грузовые стеллажи"},hatchBreakerLimpets:{en:"Hatch Breaker Limpets",de:"Ladelukenöffner",es:"Drones extractores",fr:"Drones perce-soute",pt:"Drones quebra-escotilha",ru:"Дроны-взломщики трюмов"},surfaceScanners:{en:"Surface Scanners",de:"Oberflächenscanner",es:"Escáneres de superficie",fr:"Détecteurs de surface",pt:"Scanners de superfície",ru:"Сканеры поверхностей"},fuelScoops:{en:"Fuel Scoops",de:"Treibstoffsammler",es:"Colectores de combustible",fr:"Récupérateurs de carburant",pt:"Coletores de Combustível",ru:"Топливозаборники"},refineries:{en:"Refineries",de:"Raffinerien",es:"Refinerías",fr:"Raffineries",pt:"Refinarias",ru:"Очистители"},fsdInterdictors:{en:"FSD Interdictors",de:"FSA-Unterbrecher",es:"Interdictores",fr:"Intercepteurs FSD",pt:"Interditores de MDD",ru:"Перехватчики FSD"},afms:{en:"AFMs",de:"AFW",es:"Unidades de automantenimiento",fr:"MAE",pt:"UMTs",ru:"АПР"},hullReinforcements:{en:"Hull Reinforcements",de:"Rumpfverstärkungen",es:"Refuerzos estructurales",fr:"Renforcements de coque",pt:"Reforços de Casco",ru:"Усилители корпуса"},collectorLimpets:{en:"Collector Limpets",de:"Sammeldrohnen",es:"Drones colectores",fr:"Drones collecteurs",pt:"Drones Coletores",ru:"Дроны-сборщики"},fuelTransferLimpets:{en:"Fuel Transfer Limpets",de:"Treibstofftransfer-Drohnen",es:"Drones de combustible",fr:"Drones ravitailleurs",pt:"Drones de combustível",ru:"Дроны-заправщики"},prospectingLimpets:{en:"Prospecting Limpets",de:"Abbaudrohnen",es:"Drones de prospección",fr:"Drones de prospection",pt:"Drones Prospectores",ru:"Дроны-геологоразведчики"},planetaryVehicleHangars:{en:"Planetary Vehicle Hangars",de:"Planetenfahrzeug-Hangars",es:"Hangares de vehículos planetarios",fr:"Hangars des véhicules planétaires",pt:"Hangar de veículo planetário",ru:"Гаражи планет. транспорта"},planetaryApproachSuites:{en:"Planetary Approach Suites",de:"Planetenanflug-Suiten",es:"Equipos de aproximación planetaria",fr:"Inst. approche planétaire",pt:"Instrumentos de aproximação planetária",ru:"Комплекты для сближения с планетой"},cargoHatches:{en:"Cargo Hatches"},passengerCabins:{en:"Passenger Cabins",de:"Passagierkabinen",es:"Cabinas de pasajeros",fr:"Cabine de passagers",pt:"Cabine de Passageiro",ru:"Пассажирские каюты"},vesselHangars:{en:"Vessel Hangars",de:"Schiff-Hangars",es:"Hangares de naves",fr:"Hangars à vaisseaux",pt:"Hangares de naves",ru:"Ангары для ЛА"},moduleReinforcements:{en:"Module Reinforcements",de:"Modulverstärkungen",es:"Refuerzos de módulo",fr:"Renforcements de modules",pt:"Reforços de módulo",ru:"Усилители для модулей"},repairLimpets:{en:"Repair Limpets",de:"Reparaturdrohnen",es:"Drones de reparaciones",fr:"Drones réparateurs",pt:"Drone de Reparo",ru:"Дроны-ремонтники"},researchLimpets:{en:"Research Limpets",de:"Forschungsdrohnen",es:"Drones de investigación",fr:"Drones de recherche",pt:"Drones de Pesquisa",ru:"Дроны-исследователи"},decontaminationLimpets:{en:"Decontamination Limpets",de:"Dekontaminations-drohnen",es:"Drones de descontaminación",fr:"Drones de décontamination",pt:"Drones de Descontaminação",ru:"Дроны-очистители"},guardianShieldReinforcementPackages:{en:"Guardian Shield Reinforcement Packages"},fsdBoosters:{en:"FSD Boosters",de:"FSA-Booster",es:"Potenciadores de MDD",fr:"Survolteurs FSD",pt:"Potenciadores de MDD",ru:"Ускорители FSD"},guardianHybridPowerDistributors:{en:"Guardian Hybrid Power Distributors"},guardianHybridPowerPlants:{en:"Guardian Hybrid Power Plants"},reconLimpets:{en:"Recon Limpets",de:"Aufklärungsdrohnen",es:"Drones de reconocimiento",fr:"Drones de reconnaissance",pt:"Drones de reconhecimento",ru:"Дроны-разведчики"},flightAssists:{en:"Flight Assists",de:"Flughilfen",es:"Asistentes de vuelo",fr:"Assistance de vol",pt:"Assistências de voo",ru:"Автопилот"},miningMultiLimpetControllers:{en:"Mining Multi-Limpet Controllers"},multiLimpetControllers:{en:"Multi-Limpet Controllers",de:"Multi-Drohnensteuerungen",es:"Multilanzadores dron",fr:"Contrôleurs multi-drones",pt:"Controladores multidrones",ru:"Мультиконтроллеры дронов"},experimentalWeaponStabilisers:{en:"Experimental Weapon Stabilisers",de:"Experimentelle Waffenstabilisatoren",es:"Estabilizadores de armas experimentales",fr:"Stabilisateurs d'armes expérimentales",pt:"Estabilizadores de arma experimental",ru:"Стабилизаторы экспериментального оружия"},pulseLasers:{en:"Pulse Lasers",de:"Impulslaser",es:"Láseres de pulso",fr:"Lasers à impulsion",pt:"Lasers de Pulso",ru:"Импульсные лазеры"},burstLasers:{en:"Burst Lasers",de:"Salvenlaser",es:"Láseres de ráfaga",fr:"Lasers à rafale",pt:"Lasers de Rajada",ru:"Пульсирующие лазеры"},beamLasers:{en:"Beam Lasers",de:"Strahlenlaser",es:"Láseres de rayo",fr:"Rayons laser",pt:"Lasers Contínuo",ru:"Пучковые лазеры"},cannons:{en:"Cannons",de:"Kanonen",es:"Cañones",fr:"Canons",pt:"Canhões",ru:"Орудия"},fragmentCannons:{en:"Fragment Cannons",de:"Splitterkanonen",es:"Cañones de fragmentación",fr:"Canons à fragmentation",pt:"Canhões de Fragmentos",ru:"Залповые орудия"},multiCannons:{en:"Multi-cannons",de:"Multikanonen",es:"Multicañones",fr:"Multi-canons",pt:"Canhões de repetição",ru:"Многоствольные орудия"},plasmaAccelerators:{en:"Plasma Accelerators",de:"Plasmabeschleuniger",es:"Aceleradores de plasma",fr:"Accélérateurs à plasma",pt:"Aceleradores de Plasma",ru:"Ускорители плазмы"},railGuns:{en:"Rail Guns",de:"Schienenkanonen",es:"Cañones de riel",fr:"Canons électriques",pt:"Canhões Elétricos",ru:"Рельсотрон"},missiles:{en:"Missiles",de:"Raketen",es:"Misiles",fr:"Missiles",pt:"Mísseis",ru:"Ракеты"},mines:{en:"Mines",de:"Minen",es:"Minas",fr:"Mines",pt:"Minas",ru:"Мины"},torpedoes:{en:"Torpedoes",de:"Torpedos",es:"Torpedos",fr:"Torpilles",pt:"Torpedos",ru:"Торпеды"},miningLasers:{en:"Mining Lasers",de:"Abbaulaser",es:"Láseres de minería",fr:"Lasers miniers",pt:"Lasers de mineração",ru:"Проходочные лазеры"},remoteReleaseFlakLaunchers:{en:"Remote Release Flak Launchers"},axMissileRacks:{en:"AX Missile Racks"},axMultiCannons:{en:"AX Multi-Cannons"},guardianGaussCannons:{en:"Guardian Gauss Cannons"},remoteReleaseFlechetteLaunchers:{en:"Remote Release Flechette Launchers"},guardianPlasmaChargers:{en:"Guardian Plasma Chargers"},guardianShardCannons:{en:"Guardian Shard Cannons"},shockCannons:{en:"Shock Cannons"},subSurfaceDisplacementMissiles:{en:"Sub-Surface Displacement Missiles"},abrasionBlasters:{en:"Abrasion Blasters",de:"Abrasionsblaster",es:"Destructores de abrasión",fr:"Surfaceurs abrasifs",pt:"Detonadores de abrasão",ru:"Абразивные бластеры"},miningTools:{en:"Mining Tools",de:"Abbauwerkzeuge",es:"Herramientas de minería",fr:"Outils miniers",pt:"Ferramentas de mineração",ru:"Инструменты для добычи ресурсов"},subSurfaceExtractionMissiles:{en:"Sub-Surface Extraction Missiles"},guardianNaniteTorpedoPylons:{en:"Guardian Nanite Torpedo Pylons"},chaffLaunchers:{en:"Chaff Launchers",de:"Düppel-Werfer",es:"Señuelos",fr:"Lanceurs de paillettes",pt:"Lançadores de Chaff",ru:"Разбрас-ли дип. отражателей"},ecms:{en:"ECMs",de:"EGM",es:"Contramedidas electrónicas",fr:"CMÉ",pt:"CMEs",ru:"ЭПД"},heatsinkLaunchers:{en:"Heatsink Launchers",de:"Kühlkörperwerfer",es:"Eyectores térmicos",fr:"Éjecteurs de dissipateur thermique",pt:"Lançadores de dissipador térmico",ru:"Теплоотводные катапульты"},pointDefence:{en:"Point Defence",de:"Punktverteidigung",es:"Defensas de punto",fr:"Défense ponctuelle",pt:"Defesa de Ponto",ru:"Точечная оборона"},manifestScanners:{en:"Manifest Scanners",de:"Verzeichnisscanner",es:"Escáneres de manifiesto",fr:"Détecteurs de manifeste",pt:"Scanners de Manifesto",ru:"Сканеры содержимого"},wakeScanners:{en:"Wake Scanners",de:"Sogwolkenscanner",es:"Escáneres de estela",fr:"Détecteurs de sillage",pt:"Scanners de Rastro",ru:"Следовые сканеры"},killWarrantScanners:{en:"Kill Warrant Scanners",de:"Tötungsbefehl-Scanner",es:"Escáneres de registro criminal",fr:"Détecteurs d'avis de rech.",pt:"Scanners de Registro Criminal",ru:"Сканеры преступников"},shieldBoosters:{en:"Shield Boosters",de:"Schild-Booster",es:"Potenciadores de escudos",fr:"Survolteurs de bouclier",pt:"Potenciadores de Escudo",ru:"Усилители щита"},shutdownFieldNeutralisers:{en:"Shutdown Field Neutralisers"},xenoScanners:{en:"Xeno Scanners"},pulseWaveAnalyser:{en:"Pulse Wave Analyser",de:"Impulswellen-Analysator",es:"Analizador de onda de pulsos",fr:"Analyseur à onde pulsée",pt:"Analisador de onda de pulso",ru:"Анализатор импульсных волн"},causticSinkLaunchers:{en:"Caustic Sink Launchers"}};var FAMILY_NAMES=/* @__PURE__ */createLocalizedNameIndex(module_family_names_default);function getOutfittingFamilyName(familyId,locale){return getLocalizedName(FAMILY_NAMES,familyId,locale,"getOutfittingFamilyName","familyId")}export{getOutfittingFamilyName};//# sourceMappingURL=chunk-YBE5M27G.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/i18n/module-families.ts"],"names":["getLocalizedName","createLocalizedNameIndex","module_family_names_default","FAMILY_NAMES","getOutfittingFamilyName","familyId","locale"],"mappings":"O,w2TASA,IAAMG,4BAAAF,yBAAwDC,6BA8BvD,SAASE,wBAAwBC,SAAkBC,QACtD,OAAON,iBAAiBG,aAAcE,SAAUC,OAAQ,0BAA2B,WACvF,QAAAF"}
1
+ {"version":3,"sources":["../src/i18n/module-families.ts"],"names":["getLocalizedName","createLocalizedNameIndex","module_family_names_default","FAMILY_NAMES","getOutfittingFamilyName","familyId","locale"],"mappings":"O,w2TASA,IAAMG,4BAAAF,yBAAwDC,6BA4BvD,SAASE,wBAAwBC,SAAkBC,QACtD,OAAON,iBAAiBG,aAAcE,SAAUC,OAAQ,0BAA2B,WACvF,QAAAF"}
@@ -0,0 +1 @@
1
+ import{findByRawKey}from"./chunk-BKWLI44T.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var modifications_default={suit_increasedmeleedamage:{name:"Added Melee Damage",target:"suit",engineers:["Jude Navarro","Kit Fowler","Eleanor Bresa"],modifiers:[{stat:"meleeDamage",multiplier:2.5}]},suit_adsmovementspeed:{name:"Combat Movement Speed",target:"suit",engineers:["Terra Velasquez","Yarden Bond","Baltanos"],modifiers:[]},suit_improvedarmourrating:{name:"Damage Resistance",target:"suit",engineers:["Jude Navarro","Uma Laszlo","Eleanor Bresa"],modifiers:[{stat:"armourKineticResistance",multiplier:.9},{stat:"armourThermalResistance",multiplier:.9},{stat:"armourPlasmaResistance",multiplier:.9},{stat:"armourExplosiveResistance",multiplier:.9}]},suit_improvedradar:{name:"Enhanced Tracking",target:"suit",engineers:["Domino Green","Oden Geiger","Rosa Dayette"],modifiers:[{stat:"losAnalysisRange",multiplier:2},{stat:"losAnalysisTime",multiplier:.001}]},suit_increasedammoreserves:{name:"Extra Ammo Capacity",target:"suit",engineers:["Jude Navarro","Kit Fowler","Eleanor Bresa"],modifiers:[{stat:"reserveAmmo",multiplier:1.5}]},suit_backpackcapacity:{name:"Extra Backpack Capacity",target:"suit",engineers:["Domino Green","Wellington Beck","Rosa Dayette"],modifiers:[{stat:"goodsCapacity",multiplier:2},{stat:"assetsCapacity",multiplier:2},{stat:"dataCapacity",multiplier:2}]},suit_increasedshieldregen:{name:"Faster Shield Regen",target:"suit",engineers:["Kit Fowler","Uma Laszlo","Eleanor Bresa"],modifiers:[{stat:"shieldRegeneration",multiplier:1.25}]},suit_increasedbatterycapacity:{name:"Improved Battery Capacity",target:"suit",engineers:["Oden Geiger","Wellington Beck","Rosa Dayette"],modifiers:[{stat:"batteryCapacity",multiplier:1.5}]},suit_improvedjumpassist:{name:"Improved Jump Assist",target:"suit",engineers:["Hero Ferrari","Yarden Bond","Baltanos"],modifiers:[]},suit_increasedo2capacity:{name:"Increased Air Reserves",target:"suit",engineers:["Hero Ferrari","Terra Velasquez","Baltanos"],modifiers:[{stat:"oxygenTime",multiplier:5}]},suit_increasedsprintduration:{name:"Increased Sprint Duration",target:"suit",engineers:["Hero Ferrari","Terra Velasquez","Baltanos"],modifiers:[{stat:"sprintDuration",multiplier:2}]},suit_nightvision:{name:"Night Vision",target:"suit",engineers:["Oden Geiger","Yi Shen"],modifiers:[]},suit_quieterfootsteps:{name:"Quieter Footsteps",target:"suit",engineers:["Yarden Bond","Yi Shen"],modifiers:[{stat:"footstepAudibleRange",multiplier:.5}]},suit_reducedtoolbatteryconsumption:{name:"Reduced Tool Battery Consumption",target:"suit",engineers:["Domino Green","Wellington Beck","Rosa Dayette"],modifiers:[{stat:"toolEnergyDrain",multiplier:.5}]},weapon_suppression_unpressurised:{name:"Audio Masking",target:"weapon",engineers:["Yarden Bond","Yi Shen"],modifiers:[{stat:"unpressurisedFiringAudibleRange",multiplier:.05}]},weapon_handling:{name:"Faster Handling",target:"weapon",engineers:["Hero Ferrari","Yarden Bond","Baltanos"],modifiers:[]},weapon_range_kinetic:{name:"Greater Range",target:"weapon",engineers:["Domino Green","Wellington Beck","Rosa Dayette"],modifiers:[{stat:"effectiveRange",multiplier:1.5}]},weapon_range_laser:{name:"Greater Range",target:"weapon",engineers:["Domino Green","Wellington Beck","Rosa Dayette"],modifiers:[{stat:"effectiveRange",multiplier:1.5}]},weapon_range_plasma:{name:"Greater Range",target:"weapon",engineers:["Domino Green","Wellington Beck","Rosa Dayette"],modifiers:[{stat:"effectiveRange",multiplier:1.5}]},weapon_headshotdamage_kinetic:{name:"Headshot Damage",target:"weapon",engineers:["Uma Laszlo","Yi Shen"],modifiers:[{stat:"headshotMultiplier",multiplier:1.5}]},weapon_headshotdamage_laser:{name:"Headshot Damage",target:"weapon",engineers:["Uma Laszlo","Yi Shen"],modifiers:[{stat:"headshotMultiplier",multiplier:1.5}]},weapon_headshotdamage_plasma:{name:"Headshot Damage",target:"weapon",engineers:["Uma Laszlo","Yi Shen"],modifiers:[{stat:"headshotMultiplier",multiplier:1.5}]},weapon_accuracy_kinetic:{name:"Improved Hip Fire Accuracy",target:"weapon",engineers:["Yarden Bond","Terra Velasquez","Baltanos"],modifiers:[]},weapon_accuracy_laser:{name:"Improved Hip Fire Accuracy",target:"weapon",engineers:["Yarden Bond","Terra Velasquez","Baltanos"],modifiers:[]},weapon_accuracy_plasma:{name:"Improved Hip Fire Accuracy",target:"weapon",engineers:["Yarden Bond","Terra Velasquez","Baltanos"],modifiers:[]},weapon_clipsize:{name:"Magazine Size",target:"weapon",engineers:["Jude Navarro","Kit Fowler","Eleanor Bresa"],modifiers:[{stat:"magazineSize",multiplier:1.5,roundUp:true}]},weapon_suppression_pressurised:{name:"Noise Suppressor",target:"weapon",engineers:["Hero Ferrari","Terra Velasquez","Baltanos"],modifiers:[{stat:"pressurisedFiringAudibleRange",multiplier:.05}]},weapon_reloadspeed:{name:"Reload Speed",target:"weapon",engineers:["Jude Navarro","Uma Laszlo","Eleanor Bresa"],modifiers:[]},weapon_scope:{name:"Scope",target:"weapon",engineers:["Oden Geiger","Wellington Beck","Rosa Dayette"],modifiers:[]},weapon_stability:{name:"Stability",target:"weapon",engineers:["Domino Green","Oden Geiger","Rosa Dayette"],modifiers:[]},weapon_backpackreloading:{name:"Stowed reloading",target:"weapon",engineers:["Kit Fowler","Uma Laszlo","Eleanor Bresa"],modifiers:[]}};var PERSONAL_MODIFICATIONS=deepFreeze(modifications_default);function getPersonalModification(symbol){return findByRawKey(PERSONAL_MODIFICATIONS,symbol,"getPersonalModification: symbol")}export{PERSONAL_MODIFICATIONS,getPersonalModification};//# sourceMappingURL=chunk-YI5XKWW2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/equipment/modifications.ts"],"names":["findByRawKey","deepFreeze","modifications_default","PERSONAL_MODIFICATIONS","getPersonalModification","symbol"],"mappings":"O,mqKAqEO,IAAMG,uBAAyEF,WAClFC,uBAkBG,SAASE,wBAAwBC,QACpC,OAAOL,aAAaG,uBAAwBE,OAAQ,kCACxD,QAAAF,uBAAAC"}
1
+ {"version":3,"sources":["../src/equipment/modifications.ts"],"names":["findByRawKey","deepFreeze","modifications_default","PERSONAL_MODIFICATIONS","getPersonalModification","symbol"],"mappings":"O,upKA8EO,IAAMG,uBAAyEF,WAClFC,uBAkBG,SAASE,wBAAwBC,QACpC,OAAOL,aAAaG,uBAAwBE,OAAQ,kCACxD,QAAAF,uBAAAC"}
@@ -0,0 +1 @@
1
+ import{getLoadoutModifier}from"./chunk-T4MKUKYS.js";import{sourcePurchaseFromLoadout}from"./chunk-NIURLW2F.js";import{weaponMetrics}from"./chunk-AAU7OM47.js";import{isBuiltInHullSymbol,identifyPreEngineeredVariant,unrollableFixedArticle,cloneLoadoutModule,isNonOutfittingSlot,isBuiltInHullModule,matchingKeyIn,ownKeyIn,getPreEngineeredStats,getPreEngineeredModifiers,cloneModuleStats,isFinalGuardianWeaponEngineering,scaleDamageComponents}from"./chunk-C3YZ5KTA.js";import{getPreEngineeredVariants}from"./chunk-AUBV6S7V.js";import{shieldMetrics}from"./chunk-5VWACBTN.js";import{getShipBySymbol,getShipByName,getShipSlots}from"./chunk-C4FUV6GF.js";import{builtInModuleBySymbol,getBulkheadsForShip}from"./chunk-OSMBAFRW.js";import{CORE_MODULES}from"./chunk-ZZTDEDXJ.js";import{stockedMountKind}from"./chunk-M6J7KP7G.js";import{getDefaultLoadout}from"./chunk-KY7KSPU6.js";import{getExperimentalEffect}from"./chunk-77I24V6B.js";import{ammunitionCapacity}from"./chunk-AA3K5XUE.js";import{fieldForLabel,scaleForLabel,labelsForField,capabilityValueForLabel,damageTypeForLabel}from"./chunk-U73MBQ45.js";import{BURST_PATTERN_LABELS,journalRateOfFire,preciseValueFor}from"./chunk-EFQOUATZ.js";import{parseSlotName,SLOT_RESTRICTION_LABELS,enumerateSlots}from"./chunk-RAO35XDF.js";import{normalizeKey}from"./chunk-BKWLI44T.js";import{truncate,requireString,describeValue,requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var MILITARY_PREFIXES=["int_hullreinforcement","int_metaalloyhullreinforcement","int_modulereinforcement","int_shieldcellbank","int_guardianhullreinforcement","int_guardianmodulereinforcement","int_guardianshieldreinforcement"];var MINING_PREFIXES=["hpt_mininglaser","hpt_mining_abrblstr","hpt_mining_seismchrgwarhd","hpt_mining_subsurfdispmisle","hpt_human_extraction","hpt_miningtoolv2"];var CARGO_PREFIXES=["int_cargorack","int_largecargorack","int_corrosionproofcargorack","int_fueltank"];var RESTRICTED_SLOT_PREFIXES={mining:MINING_PREFIXES,military:MILITARY_PREFIXES,cargo:CARGO_PREFIXES,limpetController:["int_dronecontrol","int_multidronecontrol"],vesselHangar:["int_fighterbay","int_largebuggybay","int_mkiilargebuggybay"],passenger:["int_passengercabin","int_mkii_passengercabin"],planetaryApproachSuite:["int_planetapproachsuite"]};var problem=(constraint,message,params)=>({constraint:constraint,message:message,...params===void 0?{}:{params:params}});function restrictionProblem(slot,symbol){const restriction=slot.restriction;if(!restriction)return null;if(RESTRICTED_SLOT_PREFIXES[restriction].some(prefix=>symbol.startsWith(prefix))){return null}return problem("restrictedMount",`slot only takes ${SLOT_RESTRICTION_LABELS[restriction]}`,{restriction:restriction})}function moduleSlotProblem(slot,module){const required=module.restrictedToSlot;if(!required||slot.restriction===required)return null;return problem("restrictedMount",`module only fits a mount that takes ${SLOT_RESTRICTION_LABELS[required]}`,{restriction:required})}function moduleFitProblem(shipSymbol,slot,module){if(slot.kind==="cargoHatch"){return problem("immutableSlot","the cargoHatch slot cannot be changed")}if(isBuiltInHullSymbol(module.symbol)){return problem("builtInHullModule","the cargo hatch is part of the hull, not an outfitting module")}if(slot.kind==="armour"){const hull=getShipBySymbol(shipSymbol);if(module.slot!=="armour"||module.ship===void 0){return problem("armourRequired","not a ship armour module")}if(!hull||module.ship.toLowerCase()!==hull.name.toLowerCase()){const armourHull=getShipByName(module.ship);return problem("wrongHullArmour",`armour belongs to ${truncate(module.ship)}, not ${truncate(hull?.name??shipSymbol)}`,{armourShipName:module.ship,...armourHull===null?{}:{armourShipSymbol:armourHull.symbol},shipSymbol:shipSymbol,...hull===null?{}:{shipName:hull.name}})}return null}const restricted=module.restrictedToShips;if(restricted&&!restricted.some(symbol2=>symbol2.toLowerCase()===shipSymbol.toLowerCase())){const allowedShipNames=restricted.map(symbol2=>{const hull=getShipBySymbol(symbol2);return hull?.name??symbol2});const labels=restricted.map((symbol2,index)=>{const name=allowedShipNames[index];return name===symbol2?symbol2:`${name} (${symbol2})`});return problem("restrictedHull",`module is restricted to ${truncate(labels.join(", "))}`,{allowedShipNames:allowedShipNames,allowedShipSymbols:[...restricted],shipSymbol:shipSymbol})}const wrongMount=moduleSlotProblem(slot,module);if(wrongMount)return wrongMount;const symbol=module.symbol.toLowerCase();const moduleSlot=module.slot;switch(slot.kind){case"core":if(moduleSlot!==slot.core){return problem("wrongCoreType",`not a ${slot.core} module`,{requiredCore:slot.core,moduleSlot:moduleSlot??"none"})}break;case"hardpoint":{if(module.category!=="hardpoint"){return problem("hardpointRequired","not a hardpoint weapon")}const restricted2=restrictionProblem(slot,symbol);if(restricted2)return restricted2;break}case"utility":if(module.category!=="utility"){return problem("utilityRequired","not a utility module")}return null;case"optional":{const isFuelTank=moduleSlot==="fuelTank";if(module.category!=="internal"&&!isFuelTank){return problem("optionalInternalRequired","not an optional-internal module")}if(moduleSlot&&!isFuelTank){return problem("coreModuleInOptionalSlot","a core module only fits its core slot")}const restricted2=restrictionProblem(slot,symbol);if(restricted2)return restricted2;break}}return module.class>slot.size?problem("oversized",`module size ${truncate(module.class)} exceeds slot size ${slot.size}`,{moduleClass:module.class,slotSize:slot.size}):null}function moduleFitError(shipSymbol,slot,module){return moduleFitProblem(shipSymbol,slot,module)?.message??null}function preEngineeredVariantFor(module){return identifyPreEngineeredVariant(module)??(module.Engineering?unrollableFixedArticle(module.Item,module.Engineering):null)}function captureLoadoutEvent(event){const modules=event.Modules;const shipName=event.ShipName;const shipIdent=event.ShipIdent;const hullValue=event.HullValue;const modulesValue=event.ModulesValue;const rebuy=event.Rebuy;const unladenMass=event.UnladenMass;const cargoCapacity=event.CargoCapacity;const fuelCapacity=event.FuelCapacity;return{Ship:event.Ship,Modules:Array.isArray(modules)?captureEach(modules,captureModule):modules,...shipName===void 0?{}:{ShipName:shipName},...shipIdent===void 0?{}:{ShipIdent:shipIdent},...hullValue===void 0?{}:{HullValue:hullValue},...modulesValue===void 0?{}:{ModulesValue:modulesValue},...rebuy===void 0?{}:{Rebuy:rebuy},...unladenMass===void 0?{}:{UnladenMass:unladenMass},...cargoCapacity===void 0?{}:{CargoCapacity:cargoCapacity},...fuelCapacity===void 0?{}:{FuelCapacity:{...fuelCapacity}}}}function captureEach(values,capture){const captured=[];const{length:length}=values;for(let index=0;index<length;index++)captured.push(capture(values[index]));return captured}function captureModule(module){if(module===null||typeof module!=="object")return module;const on=module.On;const priority=module.Priority;const health=module.Health;const value=module.Value;const engineering=module.Engineering;return{Slot:module.Slot,Item:module.Item,...on===void 0?{}:{On:on},...priority===void 0?{}:{Priority:priority},...health===void 0?{}:{Health:health},...value===void 0?{}:{Value:value},...engineering===void 0?{}:{Engineering:captureEngineering(engineering)}}}function captureEngineering(engineering){if(engineering===null||typeof engineering!=="object")return engineering;const experimental=engineering.ExperimentalEffect;const experimentalLocalised=engineering.ExperimentalEffect_Localised;const modifiers=engineering.Modifiers;return{BlueprintName:engineering.BlueprintName,Level:engineering.Level,Quality:engineering.Quality,...experimental===void 0?{}:{ExperimentalEffect:experimental},...experimentalLocalised===void 0?{}:{ExperimentalEffect_Localised:experimentalLocalised},...modifiers===void 0?{}:{Modifiers:Array.isArray(modifiers)?captureEach(modifiers,modifier=>modifier!==null&&typeof modifier==="object"?{...modifier}:modifier):modifiers}}}function hullLayout(shipSymbol){const slots=getShipSlots(shipSymbol);return slots?enumerateSlots(slots):[]}function stockedMountRejects(shipSymbol,layout,slot,stats){const mount=layout.find(candidate=>candidate.key.toLowerCase()===slot.toLowerCase());return mount!==void 0&&moduleFitProblem(shipSymbol,mount,stats)!==null}function normalizeLoadoutEvent(rawEvent){const event=captureLoadoutEvent(rawEvent);requireString(event.Ship,"ShipLoadout.fromLoadout: event.Ship");if(!Array.isArray(event.Modules)){throw new TypeError(`ShipLoadout.fromLoadout: event.Modules must be an array, received ${describeValue(event.Modules)}`)}const modules=/* @__PURE__ */new Map;const slots=/* @__PURE__ */new Set;for(const module of event.Modules){if(module===null||typeof module!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: event.Modules[] must hold module objects, received ${describeValue(module)}`)}requireString(module.Slot,"ShipLoadout.fromLoadout: module.Slot");requireString(module.Item,"ShipLoadout.fromLoadout: module.Item");if(module.Engineering!==void 0){if(module.Engineering===null||typeof module.Engineering!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: module.Engineering must be an object, received ${describeValue(module.Engineering)}`)}requireStringIfPresent(module.Engineering.BlueprintName,"ShipLoadout.fromLoadout: module.Engineering.BlueprintName");requireStringIfPresent(module.Engineering.ExperimentalEffect,"ShipLoadout.fromLoadout: module.Engineering.ExperimentalEffect");if(module.Engineering.Modifiers!==void 0&&!Array.isArray(module.Engineering.Modifiers)){throw new TypeError(`ShipLoadout.fromLoadout: module.Engineering.Modifiers must be an array, received ${describeValue(module.Engineering.Modifiers)}`)}for(const[index,modifier]of(module.Engineering.Modifiers??[]).entries()){if(modifier===null||typeof modifier!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: module.Engineering.Modifiers[${index}] must be an object, received ${describeValue(modifier)}`)}requireString(modifier.Label,`ShipLoadout.fromLoadout: module.Engineering.Modifiers[${index}].Label`)}}const normalizedSlot=module.Slot.toLowerCase();if(slots.has(normalizedSlot)){throw new TypeError(`ShipLoadout.fromLoadout: duplicate slot "${truncate(module.Slot)}"`)}slots.add(normalizedSlot);modules.set(module.Slot,cloneLoadoutModule(module))}const top={};if(event.ShipName!==void 0)top.ShipName=event.ShipName;if(event.ShipIdent!==void 0)top.ShipIdent=event.ShipIdent;if(event.HullValue!==void 0)top.HullValue=event.HullValue;if(event.ModulesValue!==void 0)top.ModulesValue=event.ModulesValue;if(event.Rebuy!==void 0)top.Rebuy=event.Rebuy;if(event.UnladenMass!==void 0)top.UnladenMass=event.UnladenMass;if(event.CargoCapacity!==void 0)top.CargoCapacity=event.CargoCapacity;if(event.FuelCapacity!==void 0)top.FuelCapacity={...event.FuelCapacity};let invalidatesAggregates=false;const outcomes=[];const defaults=getDefaultLoadout(event.Ship)?.modules??[];let layout;for(const[slot,module]of modules){if(isNonOutfittingSlot(slot)||isBuiltInHullModule(module))continue;const stats=builtInModuleBySymbol(module.Item,"ShipLoadout.fromLoadout: module.Item");const parsed=parseSlotName(slot);const stocked=parsed===null?null:stockedMountKind(parsed);const fallback=stocked===null?void 0:defaults.find(candidate=>candidate.slot.toLowerCase()===slot.toLowerCase());const rejected=fallback!==void 0&&(stats===null||stocked==="cargoHatch"||stockedMountRejects(event.Ship,layout??=hullLayout(event.Ship),slot,stats));if(stats!==null&&!rejected)continue;if(fallback){modules.set(slot,{Slot:slot,Item:fallback.symbol,...module.On===void 0?{}:{On:module.On},...module.Priority===void 0?{}:{Priority:module.Priority},...module.Health===void 0?{}:{Health:module.Health}});outcomes.push({action:"defaulted",slot:slot,sourceSymbol:module.Item,replacementSymbol:fallback.symbol})}else{modules.delete(slot);outcomes.push({action:"emptied",slot:slot,sourceSymbol:module.Item})}invalidatesAggregates=true}for(const fallback of defaults){const parsed=parseSlotName(fallback.slot);const stocked=parsed===null?null:stockedMountKind(parsed);if(stocked===null||matchingKeyIn(modules,fallback.slot)!==null)continue;const slot=ownKeyIn(modules,fallback.slot);modules.set(slot,{Slot:slot,Item:fallback.symbol});outcomes.push({action:"defaulted",slot:slot,sourceSymbol:null,replacementSymbol:fallback.symbol});if(stocked==="core")invalidatesAggregates=true}if(invalidatesAggregates){delete top.ModulesValue;delete top.Rebuy;delete top.UnladenMass;delete top.CargoCapacity;delete top.FuelCapacity}const moduleStats=/* @__PURE__ */new Map;const primitiveModifiers=/* @__PURE__ */new Map;for(const module of modules.values()){const engineering=module.Engineering;const variant=preEngineeredVariantFor(module);const catalogueVariantStats=variant?getPreEngineeredStats(variant):null;let variantStats=catalogueVariantStats;const retainsBakedExperimental=variant?.experimentalEffectSymbol!==void 0&&typeof engineering?.ExperimentalEffect==="string"&&variant.experimentalEffectSymbol.trim().toLowerCase()===engineering.ExperimentalEffect.trim().toLowerCase();if(variant&&catalogueVariantStats&&!catalogueVariantStats.engineeringLocked&&!retainsBakedExperimental){const{experimentalEffectSymbol:originalExperimental,...withoutExperimental}=variant;const currentExperimental=engineering?.ExperimentalEffect;const currentVariant=typeof currentExperimental==="string"?{...withoutExperimental,experimentalEffectSymbol:currentExperimental}:withoutExperimental;variantStats=getPreEngineeredStats(withoutExperimental);primitiveModifiers.set(module.Slot,[...engineering?.Modifiers??[],...getPreEngineeredModifiers(currentVariant)])}if(variantStats)moduleStats.set(module.Slot,cloneModuleStats(variantStats));const guardianFinal=typeof engineering?.BlueprintName==="string"&&isFinalGuardianWeaponEngineering(module.Item,engineering.BlueprintName);if(variantStats?.engineeringLocked||typeof engineering?.BlueprintName!=="string"||!guardianFinal){continue}const normalizedBlueprint=normalizeKey(engineering.BlueprintName,"ShipLoadout.fromLoadout: module.Engineering.BlueprintName");const normalizedExperimental=normalizeKey(engineering.ExperimentalEffect,"ShipLoadout.fromLoadout: module.Engineering.ExperimentalEffect");const variants=getPreEngineeredVariants(module.Item);const exact=variants.find(candidate=>candidate.engineeringLocked===true&&candidate.blueprintSymbol.toLowerCase()===normalizedBlueprint&&candidate.grade===engineering.Level&&candidate.experimentalEffectSymbol?.toLowerCase()===normalizedExperimental);const guardianBase=variants.find(candidate=>candidate.engineeringLocked===true&&candidate.blueprintSymbol.toLowerCase()===normalizedBlueprint&&candidate.grade===engineering.Level&&candidate.experimentalEffectSymbol===void 0);const stats=exact?getPreEngineeredStats(exact):guardianBase&&engineering.ExperimentalEffect!==void 0?getPreEngineeredStats({...guardianBase,experimentalEffectSymbol:engineering.ExperimentalEffect}):builtInModuleBySymbol(module.Item,"ShipLoadout.fromLoadout: module.Item");if(stats){moduleStats.set(module.Slot,cloneModuleStats({...stats,engineeringLocked:true}))}}return{shipSymbol:event.Ship,modules:modules,moduleStats:moduleStats,primitiveModifiers:primitiveModifiers,top:top,sourcePurchase:sourcePurchaseFromLoadout(event),outcomes:deepFreeze(outcomes)}}var NO_ISSUES=Object.freeze([]);function completeResult(value){return Object.freeze({value:value,complete:true,issues:NO_ISSUES})}function incompleteResult(issues){return Object.freeze({value:null,complete:false,issues:Object.freeze(issues.map(issue=>Object.freeze({...issue,...issue.params?{params:Object.freeze({...issue.params})}:{}})))})}var PREFIX={powerPlant:["int_powerplant","int_guardianpowerplant"],thrusters:["int_engine","int_mkiiagileboost_engine"],frameShiftDrive:["int_hyperdrive"],powerDistributor:["int_powerdistributor","int_guardianpowerdistributor"],shieldGenerator:["int_shieldgenerator"],shieldCellBank:["int_shieldcellbank"],shieldBooster:["hpt_shieldbooster"],shieldReinforcement:["int_guardianshieldreinforcement"],hullReinforcement:["int_hullreinforcement","int_guardianhullreinforcement","int_metaalloyhullreinforcement"],moduleReinforcement:["int_modulereinforcement","int_guardianmodulereinforcement"]};var startsWithAny=(symbol,prefixes)=>prefixes.some(prefix=>symbol.toLowerCase().startsWith(prefix));function isPowerDistributor(module,stats){return stats?.slot?stats.slot==="powerDistributor":startsWithAny(module.Item,PREFIX.powerDistributor)}function isPowerPlant(module,stats){const parsed=parseSlotName(module.Slot);if(parsed?.kind==="core"&&parsed.core==="powerPlant")return true;return stats?.slot?stats.slot==="powerPlant":startsWithAny(module.Item,PREFIX.powerPlant)}function isThruster(module,stats){const parsed=parseSlotName(module.Slot);if(parsed?.kind==="core"&&parsed.core==="thrusters")return true;return stats?.slot?stats.slot==="thrusters":startsWithAny(module.Item,PREFIX.thrusters)}function isFrameShiftDrive(module,stats){const parsed=parseSlotName(module.Slot);if(parsed?.kind==="core"&&parsed.core==="frameShiftDrive")return true;return stats?.slot?stats.slot==="frameShiftDrive":startsWithAny(module.Item,PREFIX.frameShiftDrive)}function isEnabled(module){return module.On!==false}function priorityOf(module){return(module.Priority??0)+1}function effectiveStat(module,field,stats){const stated=statedModifier(module,field);if(stated!==void 0)return stated;const base=stats?.[field];return typeof base==="number"?base:void 0}function statedModifier(module,field){for(const label of labelsForField(field)){if(capabilityValueForLabel(label)!==null)continue;const modified=getLoadoutModifier(module,label);if(modified!==null)return modified/scaleForLabel(label)}return void 0}function effectiveCapability(module,field,stats){for(const label of labelsForField(field)){if(capabilityValueForLabel(label)===null)continue;if(module.Engineering?.Modifiers?.some(modifier=>modifier.Label.toLowerCase()===label.toLowerCase())){return true}}const base=stats[field];return typeof base==="boolean"?base:void 0}function effectiveDamageDistribution(module,stats){const fromEffect=module.Engineering?.ExperimentalEffect?getExperimentalEffect(module.Engineering.ExperimentalEffect)?.damageDistribution:void 0;const distribution={...fromEffect??stats.damageDistribution};let resolved=fromEffect!==void 0||stats.damageDistribution!==void 0;const seen=/* @__PURE__ */new Set;for(const modifier of module.Engineering?.Modifiers??[]){const type=damageTypeForLabel(modifier.Label);if(type===null||seen.has(type))continue;seen.add(type);if(modifier.Value===void 0)continue;distribution[type]=modifier.Value/scaleForLabel(modifier.Label);resolved=true}return resolved?distribution:void 0}function convertsDamage(module){if(module.Engineering?.ExperimentalEffect&&getExperimentalEffect(module.Engineering.ExperimentalEffect)?.damageDistribution){return true}return(module.Engineering?.Modifiers??[]).some(modifier=>damageTypeForLabel(modifier.Label)!==null)}function modifierRatio(module,stats,field){const base=stats?.[field];if(typeof base!=="number"||base===0)return 1;const effective=effectiveStat(module,field,stats);return effective===void 0?1:effective/base}function relatedStat(module,stats,field,ratio){const stated=statedModifier(module,field);if(stated!==void 0)return stated;const base=stats?.[field];return typeof base==="number"?base*ratio:void 0}function effectiveModule(module,stats){if(!stats||!module.Engineering)return stats;const merged={...stats};const fields=new Set(Object.keys(stats));for(const modifier of module.Engineering.Modifiers??[]){const field=fieldForLabel(modifier.Label,stats);if(field)fields.add(field)}for(const key of fields){const capability=effectiveCapability(module,key,stats);if(capability!==void 0){merged[key]=capability;continue}const value=effectiveStat(module,key,stats);if(value!==void 0)merged[key]=value}if(stats.engineeringGroup==="thrusters"){const massRatio=modifierRatio(module,stats,"optMass");const minMass=relatedStat(module,stats,"minMass",massRatio);const maxMass=relatedStat(module,stats,"maxMass",massRatio);if(minMass!==void 0)merged.minMass=minMass;if(maxMass!==void 0)merged.maxMass=maxMass}if(stats.engineeringGroup==="thrusters"||stats.engineeringGroup==="shieldGenerators"){const performanceRatio=modifierRatio(module,stats,"optMultiplier");const minMultiplier=relatedStat(module,stats,"minMultiplier",performanceRatio);const maxMultiplier=relatedStat(module,stats,"maxMultiplier",performanceRatio);if(minMultiplier!==void 0)merged.minMultiplier=minMultiplier;if(maxMultiplier!==void 0)merged.maxMultiplier=maxMultiplier;if(stats.engineeringGroup==="thrusters"){for(const field of["minSpeedMultiplier","optSpeedMultiplier","maxSpeedMultiplier","minRotationMultiplier","optRotationMultiplier","maxRotationMultiplier"]){const value=stats[field];if(value!==void 0)merged[field]=value*performanceRatio}}}const damageDistribution=effectiveDamageDistribution(module,stats);if(damageDistribution)merged.damageDistribution=damageDistribution;if(stats.category==="hardpoint")normalizeEffectiveWeapon(module,merged);if(convertsDamage(module)){delete merged.damageComponents}else if(stats.damageComponents){merged.damageComponents=scaleDamageComponents(stats.damageComponents,stats.damage,typeof merged.damage==="number"?merged.damage:void 0)}return merged}function powerConsumerFor(module,stats){const draw=effectiveStat(module,"powerDraw",stats);if(draw===void 0||draw===0)return null;const mounted=stats?.category==="hardpoint"||stats?.category==="utility";return{draw:draw,priority:priorityOf(module),enabled:isEnabled(module),deployedOnly:mounted&&stats?.alwaysPowered!==true,label:module.Slot,symbol:module.Item}}function powerAvailable(modules,statsFor){for(const module of modules){const stats=statsFor(module);if(!isPowerPlant(module,stats))continue;if(!isEnabled(module))return 0;return effectiveStat(module,"powerCapacity",stats)??0}return 0}var DEFAULT_SLOT={powerCapacity:"PowerPlant",heatEfficiency:"PowerPlant",thrusters:"MainEngines",powerDistributor:"PowerDistributor"};var UNRESOLVED_FACT={thrusters:"thruster stats",shieldGenerator:"shield-generator stats",powerCapacity:"power capacity",heatEfficiency:"heat efficiency",powerDistributor:"power-distributor stats"};var NOTHING_FITTED={powerCapacity:"PowerPlant: no power plant is fitted",heatEfficiency:"PowerPlant: no power plant is fitted",thrusters:"MainEngines: no thrusters are fitted",powerDistributor:"PowerDistributor: no power distributor is fitted"};function metricIssue(field,reason,module){const defaultSlot=DEFAULT_SLOT[field];const slot=module?.Slot??defaultSlot;const symbol=module?.Item;const params={field:field,reason:reason,...slot===void 0?{}:{slot:slot},...symbol===void 0?{}:{symbol:symbol}};let message;if(reason==="missing"){message=NOTHING_FITTED[field]??"no shield generator is fitted"}else if(reason==="unresolved"){const unavailable=UNRESOLVED_FACT[field]??field;message=`${truncate(slot??field)}: ${unavailable} unavailable for ${truncate(symbol??field)}`}else if(reason==="disabled"){message=`${truncate(slot??field)}: ${truncate(symbol??field)} is switched off`}else if(reason==="invalid"){message=`${truncate(slot??field)}: ${truncate(symbol??field)} has invalid ${field}`}else{message=`${truncate(slot??field)}: ${truncate(symbol??field)} is not powered with hardpoints retracted`}return{field:field,reason:reason,...slot===void 0?{}:{slot:slot},...symbol===void 0?{}:{symbol:symbol},message:message,params:params}}function powerPlantIssueFor(modules,statsFor){for(const module of modules){const stats=statsFor(module);if(!isPowerPlant(module,stats))continue;if(!isEnabled(module))return metricIssue("powerCapacity","disabled",module);const capacity=effectiveStat(module,"powerCapacity",stats);if(capacity===void 0)return metricIssue("powerCapacity","unresolved",module);return!Number.isFinite(capacity)||capacity<=0?metricIssue("powerCapacity","invalid",module):null}return metricIssue("powerCapacity","missing")}function powerDrawIssueFor(modules,statsFor){for(const module of modules){const consumer=powerConsumerFor(module,statsFor(module));if(consumer&&(!Number.isFinite(consumer.draw)||consumer.draw<0)){return metricIssue("powerDraw","invalid",module)}}return null}function poweredMetricBudgetFor(field,module,stats,modules,getBudget,statsFor){if(!isEnabled(module))return incompleteResult([metricIssue(field,"disabled",module)]);const plantIssue=powerPlantIssueFor(modules,statsFor);if(plantIssue)return incompleteResult([plantIssue]);const drawIssue=powerDrawIssueFor(modules,statsFor);if(drawIssue)return incompleteResult([drawIssue]);const budget=getBudget();return budget.available>0&&poweredStates(module,stats,budget).retracted?completeResult(budget):incompleteResult([metricIssue(field,"shed",module)])}function poweredShieldGeneratorResultFor(modules,getBudget,statsFor){for(const module of modules){if(!startsWithAny(module.Item,PREFIX.shieldGenerator))continue;const stats=statsFor(module);const powered=poweredMetricBudgetFor("shieldGenerator",module,stats,modules,getBudget,statsFor);if(!powered.complete)return powered;return stats===null?incompleteResult([metricIssue("shieldGenerator","unresolved",module)]):completeResult({module:module,budget:powered.value})}return incompleteResult([metricIssue("shieldGenerator","missing")])}function mapResistanceFields(read){return{kineticResistance:read("kineticResistance")??0,thermalResistance:read("thermalResistance")??0,explosiveResistance:read("explosiveResistance")??0,causticResistance:read("causticResistance")??0}}function resistancesOf(module,stats){return mapResistanceFields(field=>effectiveStat(module,field,stats))}function shieldInputFor(ship,modules,budget,statsFor){let generator=null;const boosters=[];let reinforcement=0;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(!(budget.available>0&&poweredStates(module,stats,budget).retracted))continue;if(!generator&&startsWithAny(module.Item,PREFIX.shieldGenerator)){const massRatio=modifierRatio(module,stats,"optMass");const strengthRatio=modifierRatio(module,stats,"optMultiplier");const optMass=effectiveStat(module,"optMass",stats);const minMass=relatedStat(module,stats,"minMass",massRatio);const maxMass=relatedStat(module,stats,"maxMass",Math.max(1,massRatio));const optMultiplier=effectiveStat(module,"optMultiplier",stats);const minMultiplier=relatedStat(module,stats,"minMultiplier",strengthRatio);const maxMultiplier=relatedStat(module,stats,"maxMultiplier",strengthRatio);generator={...optMass===void 0?{}:{optMass:optMass},...minMass===void 0?{}:{minMass:minMass},...maxMass===void 0?{}:{maxMass:maxMass},...optMultiplier===void 0?{}:{optMultiplier:optMultiplier},...minMultiplier===void 0?{}:{minMultiplier:minMultiplier},...maxMultiplier===void 0?{}:{maxMultiplier:maxMultiplier},...resistancesOf(module,stats)}}else if(startsWithAny(module.Item,PREFIX.shieldBooster)){boosters.push({shieldBoost:effectiveStat(module,"shieldBoost",stats)??0,...resistancesOf(module,stats)})}else if(startsWithAny(module.Item,PREFIX.shieldReinforcement)){reinforcement+=effectiveStat(module,"shieldAddition",stats)??0}}return{hullMass:ship.hullMass,baseShieldStrength:ship.baseShieldStrength,generator:generator,boosters:boosters,reinforcement:reinforcement}}function shieldInputResultFor(ship,modules,getBudget,statsFor){const fitted=poweredShieldGeneratorResultFor(modules,getBudget,statsFor);if(!fitted.complete)return fitted;return completeResult(shieldInputFor(ship,modules,fitted.value.budget,statsFor))}function shieldCapacitorInputResultFor(ship,modules,getBudget,systemsPips,statsFor){const fitted=poweredShieldGeneratorResultFor(modules,getBudget,statsFor);if(!fitted.complete)return fitted;const budget=fitted.value.budget;const capacitor=systemsCapacitorResultFor(modules,budget,statsFor);if(!capacitor.complete)return capacitor;const shields=shieldMetrics(shieldInputFor(ship,modules,budget,statsFor));return completeResult({strength:shields.strength,resistances:shields.resistances,systemsCapacity:capacitor.value.systemsCapacity,systemsRecharge:capacitor.value.systemsRecharge,systemsPips:systemsPips})}function systemsCapacitorResultFor(modules,budget,statsFor){let distributor=null;for(const module of modules){const stats2=statsFor(module);if(isPowerDistributor(module,stats2)&&isEnabled(module)&&budget.available>0&&poweredStates(module,stats2,budget).retracted)distributor=module}if(!distributor)return completeResult({systemsCapacity:0,systemsRecharge:0});const stats=statsFor(distributor);const systemsCapacity=effectiveStat(distributor,"systemsCapacity",stats);const systemsRecharge=effectiveStat(distributor,"systemsRecharge",stats);return systemsCapacity===void 0||systemsRecharge===void 0?incompleteResult([metricIssue("powerDistributor","unresolved",distributor)]):completeResult({systemsCapacity:systemsCapacity,systemsRecharge:systemsRecharge})}function thrusterCurveFor(module,stats){const effective=effectiveModule(module,stats);const minMass=effective?.minMass;const optMass=effective?.optMass;const maxMass=effective?.maxMass;const minMultiplier=effective?.minMultiplier;const optMultiplier=effective?.optMultiplier;const maxMultiplier=effective?.maxMultiplier;if(minMass===void 0||optMass===void 0||maxMass===void 0||minMultiplier===void 0||optMultiplier===void 0||maxMultiplier===void 0){return null}return{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:minMultiplier,optMultiplier:optMultiplier,maxMultiplier:maxMultiplier,...effective?.optSpeedMultiplier===void 0?{}:{speedCurve:{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:effective.minSpeedMultiplier??minMultiplier,optMultiplier:effective.optSpeedMultiplier,maxMultiplier:effective.maxSpeedMultiplier??maxMultiplier}},...effective?.optRotationMultiplier===void 0?{}:{rotationCurve:{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:effective.minRotationMultiplier??minMultiplier,optMultiplier:effective.optRotationMultiplier,maxMultiplier:effective.maxRotationMultiplier??maxMultiplier}}}}function fittedThrusterParamsFor(modules,statsFor){for(const module of modules){const stats=statsFor(module);if(isThruster(module,stats))return thrusterCurveFor(module,stats)}return null}function mobilityInputResultFor(ship,modules,getBudget,mass,statsFor){let thrusters=null;for(const module of modules){const stats=statsFor(module);if(!isThruster(module,stats))continue;const powered=poweredMetricBudgetFor("thrusters",module,stats,modules,getBudget,statsFor);if(!powered.complete)return powered;thrusters=thrusterCurveFor(module,stats);if(!thrusters)return incompleteResult([metricIssue("thrusters","unresolved",module)]);break}if(!thrusters)return incompleteResult([metricIssue("thrusters","missing")]);return completeResult({minimumSpeed:ship.minimumSpeed,maximumSpeed:ship.maximumSpeed,boost:ship.boost,minPitch:ship.minPitch,pitch:ship.pitch,minRoll:ship.minRoll,roll:ship.roll,minYaw:ship.minYaw,yaw:ship.yaw,mass:typeof mass==="function"?mass():mass,thrusters:thrusters})}function shieldRecoveryInputResultFor(ship,modules,getBudget,systemsPips,statsFor){const generator=poweredShieldGeneratorResultFor(modules,getBudget,statsFor);if(!generator.complete)return generator;const{module:generatorModule,budget:budget}=generator.value;const generatorStats=statsFor(generatorModule);const distributorDraw=effectiveStat(generatorModule,"distributorDraw",generatorStats);const regenRate=effectiveStat(generatorModule,"shieldRegenRate",generatorStats);const brokenRegenRate=effectiveStat(generatorModule,"shieldBrokenRegenRate",generatorStats);if(distributorDraw===void 0||regenRate===void 0||brokenRegenRate===void 0){return incompleteResult([metricIssue("shieldGenerator","unresolved",generatorModule)])}const capacitor=systemsCapacitorResultFor(modules,budget,statsFor);if(!capacitor.complete)return capacitor;const strength=shieldMetrics(shieldInputFor(ship,modules,budget,statsFor)).strength;return completeResult({strength:strength,regenRate:regenRate,brokenRegenRate:brokenRegenRate,distributorDraw:distributorDraw,systemsCapacity:capacitor.value.systemsCapacity,systemsRecharge:capacitor.value.systemsRecharge,systemsPips:systemsPips})}function weaponsCapacitorInputFor(modules,weaponsPips,budget,statsFor){let weaponsCapacity=0;let weaponsRecharge=0;let sustainedEnergyPerSecond=0;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(!poweredStates(module,stats,budget).deployed)continue;if(isPowerDistributor(module,stats)){weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats)??0;weaponsRecharge=effectiveStat(module,"weaponsRecharge",stats)??0}const weapon=weaponStatsFor(module,stats);if(weapon){sustainedEnergyPerSecond+=weaponMetrics(weapon).sustainedEnergyPerSecond}}return{weaponsCapacity:weaponsCapacity,weaponsRecharge:weaponsRecharge,sustainedEnergyPerSecond:sustainedEnergyPerSecond,weaponsPips:weaponsPips}}function distributorInputResultFor(modules,pips,budget,statsFor){let disabled=null;for(const module of modules){const stats=statsFor(module);if(!isPowerDistributor(module,stats))continue;if(!isEnabled(module)){disabled??=module;continue}if(!poweredStates(module,stats,budget).retracted){return incompleteResult([metricIssue("powerDistributor","shed",module)])}const systemsCapacity=effectiveStat(module,"systemsCapacity",stats);const systemsRecharge=effectiveStat(module,"systemsRecharge",stats);const enginesCapacity=effectiveStat(module,"enginesCapacity",stats);const enginesRecharge=effectiveStat(module,"enginesRecharge",stats);const weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats);const weaponsRecharge=effectiveStat(module,"weaponsRecharge",stats);if(systemsCapacity===void 0||systemsRecharge===void 0||enginesCapacity===void 0||enginesRecharge===void 0||weaponsCapacity===void 0||weaponsRecharge===void 0){return incompleteResult([metricIssue("powerDistributor","unresolved",module)])}return completeResult({systemsCapacity:systemsCapacity,systemsRecharge:systemsRecharge,enginesCapacity:enginesCapacity,enginesRecharge:enginesRecharge,weaponsCapacity:weaponsCapacity,weaponsRecharge:weaponsRecharge,...pips})}return incompleteResult([disabled===null?metricIssue("powerDistributor","missing"):metricIssue("powerDistributor","disabled",disabled)])}function heatInputResultFor(ship,modules,budget,statsFor){let plant=null;let heatEfficiency;let thrusterHeatRate=0;let deployedThrusterHeatRate=0;let fsdHeatRate=0;let weaponsCapacity=0;const weapons=[];for(const module of modules){const stats=statsFor(module);if(isPowerPlant(module,stats)){if(!isEnabled(module)){return incompleteResult([metricIssue("powerCapacity","disabled",module)])}plant=module;heatEfficiency=effectiveStat(module,"heatEfficiency",stats);continue}if(!isEnabled(module))continue;const running=poweredStates(module,stats,budget);if(isThruster(module,stats)){const heat=effectiveStat(module,"engineHeatRate",stats)??0;if(running.retracted)thrusterHeatRate+=heat;if(running.deployed)deployedThrusterHeatRate+=heat}else if(isFrameShiftDrive(module,stats)){if(running.retracted)fsdHeatRate+=effectiveStat(module,"fsdHeatRate",stats)??0}else if(isPowerDistributor(module,stats)){if(running.deployed){weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats)??0}}const weapon=weaponStatsFor(module,stats);if(!running.deployed)continue;if(!weapon)continue;weapons.push({heatPerSecond:weaponMetrics(weapon).sustainedHeatPerSecond,distributorDraw:weapon.distributorDraw??0})}if(heatEfficiency===void 0){return incompleteResult([plant===null?metricIssue("powerCapacity","missing"):metricIssue("heatEfficiency","unresolved",plant)])}return completeResult({heatCapacity:ship.heatCapacity,heatDissipation:ship.heatDissipation,heatEfficiency:heatEfficiency,retractedPowerDraw:poweredDraw(budget,"retracted"),deployedPowerDraw:poweredDraw(budget,"deployed"),thrusterHeatRate:thrusterHeatRate,deployedThrusterHeatRate:deployedThrusterHeatRate,fsdHeatRate:fsdHeatRate,weaponsCapacity:weaponsCapacity,weapons:weapons})}function poweredDraw(budget,state){const powered=state==="retracted"?"poweredRetracted":"poweredDeployed";return budget.bands.reduce((total,band)=>band[powered]?total+band[state]:total,0)}function poweredStates(module,stats,budget){const draw=effectiveStat(module,"powerDraw",stats);if(draw===void 0||draw===0)return{retracted:true,deployed:true};const band=budget.bands[Math.min(budget.bands.length,Math.max(1,priorityOf(module)))-1];if(!band)return{retracted:true,deployed:true};return{retracted:band.poweredRetracted,deployed:band.poweredDeployed}}function cellBankInputsFor(modules,budget,statsFor){const banks=[];for(const module of modules){if(!startsWithAny(module.Item,PREFIX.shieldCellBank))continue;const stats=statsFor(module);const effective=effectiveModule(module,stats);const ammunition=effective?ammunitionCapacity(effective):null;banks.push({slot:module.Slot,symbol:module.Item,reinforcementRate:effective?.shieldBankReinforcement??0,cells:ammunition?.total??0,spinUp:effective?.shieldBankSpinUp??0,duration:effective?.shieldBankDuration??0,heat:effective?.shieldBankHeat??0,powered:budget.available>0&&isEnabled(module)&&poweredStates(module,stats,budget).deployed})}return banks}function stockBulkhead(ship){const variants=getBulkheadsForShip(ship.name,CORE_MODULES);return variants.find(v=>v.symbol.toLowerCase().endsWith("_default"))??variants.find(v=>v.mass===0)??variants[0]??null}function armourInputFor(ship,modules,statsFor){const reinforcements=[];const moduleReinforcements=[];let bulkhead=null;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(module.Slot.toLowerCase()==="armour"){bulkhead={hullBoost:effectiveStat(module,"hullBoost",stats)??0,...resistancesOf(module,stats)}}else if(startsWithAny(module.Item,PREFIX.hullReinforcement)){const boost=getLoadoutModifier(module,"DefenceModifierHealthMultiplier");reinforcements.push({hullReinforcement:effectiveStat(module,"hullReinforcement",stats)??0,hullBoost:boost===null?0:boost/scaleForLabel("DefenceModifierHealthMultiplier"),...resistancesOf(module,stats)})}else if(startsWithAny(module.Item,PREFIX.moduleReinforcement)){moduleReinforcements.push({moduleProtection:effectiveStat(module,"moduleProtection",stats)??0,integrity:effectiveStat(module,"integrity",stats)??0})}}if(!bulkhead){const stock=stockBulkhead(ship);bulkhead=stock?{hullBoost:stock.hullBoost??0,...mapResistanceFields(field=>stock[field])}:null}return{baseArmour:ship.baseArmour,bulkhead:bulkhead,reinforcements:reinforcements,moduleReinforcements:moduleReinforcements}}var WEAPON_FIELDS=["damage","roundsPerShot","rateOfFire","burstInterval","burstRounds","burstRateOfFire","chargeTime","clipSize","ammoMaximum","reloadTime","distributorDraw","thermalLoad","powerDraw","maximumRange","falloffRange","armourPiercing"];function weaponStatsFor(module,stats){if(!stats||stats.category!=="hardpoint")return null;const weapon={};for(const field of WEAPON_FIELDS){const value=effectiveStat(module,field,stats);if(value!==void 0)weapon[field]=value}normalizeEffectiveWeapon(module,weapon);const damageDistribution=effectiveDamageDistribution(module,stats);if(damageDistribution)weapon.damageDistribution=damageDistribution;if(stats.damageComponents&&!convertsDamage(module)){weapon.damageComponents=scaleDamageComponents(stats.damageComponents,stats.damage,typeof weapon.damage==="number"?weapon.damage:void 0)}if(stats.projectileRange)weapon.projectileRange={...stats.projectileRange};return weapon}function burstAdjustedRateOfFire(module,weapon){if(getLoadoutModifier(module,"RateOfFire")!==null)return void 0;const modifiers=module.Engineering?.Modifiers;const touched=BURST_PATTERN_LABELS.some(label=>getLoadoutModifier(module,label)!==null);if(!touched)return void 0;const stated=(label,field)=>preciseValueFor(modifiers,label)??weapon[field];return journalRateOfFire(stated("BurstInterval","burstInterval"),stated("BurstSize","burstRounds"),stated("BurstRateOfFire","burstRateOfFire"))}var FIRING_RATE_LABELS=["RateOfFire","BurstRateOfFire","BurstSize","BurstInterval","RoundsPerShot","Rounds"];function readsDamageFromPerSecond(module){return getLoadoutModifier(module,"Damage")===null&&FIRING_RATE_LABELS.every(label=>getLoadoutModifier(module,label)===null)}function normalizeEffectiveWeapon(module,weapon){const rate=burstAdjustedRateOfFire(module,weapon);if(rate!==void 0)weapon.rateOfFire=rate;if(readsDamageFromPerSecond(module)){const statedDamagePerSecond=getLoadoutModifier(module,"DamagePerSecond");const firingFactor=Number(weapon.roundsPerShot??1)*Number(weapon.rateOfFire??1);if(statedDamagePerSecond!==null&&firingFactor>0){weapon.damage=statedDamagePerSecond/firingFactor}}const{maximumRange:maximumRange,falloffRange:falloffRange}=weapon;if(maximumRange!==void 0&&falloffRange!==void 0&&falloffRange>maximumRange){weapon.falloffRange=maximumRange}}var INTERNALS=/* @__PURE__ */new WeakMap;function publishLoadoutInternals(build,internals){INTERNALS.set(build,internals)}function loadoutInternals(build,label){const internals=typeof build==="object"&&build!==null?INTERNALS.get(build):void 0;if(internals===void 0){throw new TypeError(`${label} must be a ShipLoadout, received ${describeValue(build)}`)}return internals}export{armourInputFor,cellBankInputsFor,completeResult,distributorInputResultFor,effectiveModule,fittedThrusterParamsFor,heatInputResultFor,incompleteResult,loadoutInternals,mobilityInputResultFor,moduleFitError,moduleFitProblem,normalizeLoadoutEvent,powerAvailable,powerConsumerFor,preEngineeredVariantFor,publishLoadoutInternals,shieldCapacitorInputResultFor,shieldInputResultFor,shieldRecoveryInputResultFor,weaponStatsFor,weaponsCapacitorInputFor};//# sourceMappingURL=chunk-ZBUTGTZ3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/loadout-fitting.ts","../src/ships/internal/loadout-import.ts","../src/ships/internal/calculation-result.ts","../src/ships/internal/loadout-metrics.ts","../src/ships/internal/loadout-internals.ts"],"names":["getLoadoutModifier","sourcePurchaseFromLoadout","weaponMetrics","isBuiltInHullSymbol","identifyPreEngineeredVariant","unrollableFixedArticle","cloneLoadoutModule","isNonOutfittingSlot","isBuiltInHullModule","matchingKeyIn","ownKeyIn","getPreEngineeredStats","getPreEngineeredModifiers","cloneModuleStats","isFinalGuardianWeaponEngineering","scaleDamageComponents","getPreEngineeredVariants","shieldMetrics","getShipBySymbol","getShipByName","getShipSlots","builtInModuleBySymbol","getBulkheadsForShip","CORE_MODULES","stockedMountKind","getDefaultLoadout","getExperimentalEffect","ammunitionCapacity","fieldForLabel","scaleForLabel","labelsForField","capabilityValueForLabel","damageTypeForLabel","BURST_PATTERN_LABELS","journalRateOfFire","preciseValueFor","parseSlotName","SLOT_RESTRICTION_LABELS","enumerateSlots","normalizeKey","truncate","requireString","describeValue","requireStringIfPresent","deepFreeze","MILITARY_PREFIXES","MINING_PREFIXES","CARGO_PREFIXES","RESTRICTED_SLOT_PREFIXES","mining","military","cargo","limpetController","vesselHangar","passenger","planetaryApproachSuite","problem","constraint","message","params","restrictionProblem","slot","symbol","restriction","some","prefix","startsWith","moduleSlotProblem","module","required","restrictedToSlot","moduleFitProblem","shipSymbol","kind","hull","ship","toLowerCase","name","armourHull","armourShipName","armourShipSymbol","shipName","restricted","restrictedToShips","allowedShipNames","map","labels","index","join","allowedShipSymbols","wrongMount","moduleSlot","core","requiredCore","category","isFuelTank","class","size","moduleClass","slotSize","moduleFitError","preEngineeredVariantFor","Engineering","Item","captureLoadoutEvent","event","modules","Modules","ShipName","shipIdent","ShipIdent","hullValue","HullValue","modulesValue","ModulesValue","rebuy","Rebuy","unladenMass","UnladenMass","cargoCapacity","CargoCapacity","fuelCapacity","FuelCapacity","Ship","Array","isArray","captureEach","captureModule","values","capture","captured","length","push","on","On","priority","Priority","health","Health","value","Value","engineering","Slot","captureEngineering","experimental","ExperimentalEffect","experimentalLocalised","ExperimentalEffect_Localised","modifiers","Modifiers","BlueprintName","Level","Quality","modifier","hullLayout","slots","stockedMountRejects","layout","stats","mount","find","candidate","key","normalizeLoadoutEvent","rawEvent","TypeError","Map","Set","entries","Label","normalizedSlot","has","add","set","top","invalidatesAggregates","outcomes","defaults","parsed","stocked","fallback","rejected","action","sourceSymbol","replacementSymbol","delete","moduleStats","primitiveModifiers","variant","catalogueVariantStats","variantStats","retainsBakedExperimental","experimentalEffectSymbol","trim","engineeringLocked","originalExperimental","withoutExperimental","currentExperimental","currentVariant","guardianFinal","normalizedBlueprint","normalizedExperimental","variants","exact","blueprintSymbol","grade","guardianBase","sourcePurchase","NO_ISSUES","Object","freeze","completeResult","complete","issues","incompleteResult","issue","PREFIX","powerPlant","thrusters","frameShiftDrive","powerDistributor","shieldGenerator","shieldCellBank","shieldBooster","shieldReinforcement","hullReinforcement","moduleReinforcement","startsWithAny","prefixes","isPowerDistributor","isPowerPlant","isThruster","isFrameShiftDrive","isEnabled","priorityOf","effectiveStat","field","stated","statedModifier","base","label","modified","effectiveCapability","effectiveDamageDistribution","fromEffect","damageDistribution","distribution","resolved","seen","type","convertsDamage","modifierRatio","effective","relatedStat","ratio","effectiveModule","merged","fields","keys","capability","engineeringGroup","massRatio","minMass","maxMass","performanceRatio","minMultiplier","maxMultiplier","normalizeEffectiveWeapon","damageComponents","damage","powerConsumerFor","draw","mounted","enabled","deployedOnly","alwaysPowered","powerAvailable","statsFor","DEFAULT_SLOT","powerCapacity","heatEfficiency","UNRESOLVED_FACT","NOTHING_FITTED","metricIssue","reason","defaultSlot","unavailable","powerPlantIssueFor","capacity","Number","isFinite","powerDrawIssueFor","consumer","poweredMetricBudgetFor","getBudget","plantIssue","drawIssue","budget","available","poweredStates","retracted","poweredShieldGeneratorResultFor","powered","mapResistanceFields","read","kineticResistance","thermalResistance","explosiveResistance","causticResistance","resistancesOf","shieldInputFor","generator","boosters","reinforcement","strengthRatio","optMass","Math","max","optMultiplier","shieldBoost","hullMass","baseShieldStrength","shieldInputResultFor","fitted","shieldCapacitorInputResultFor","systemsPips","capacitor","systemsCapacitorResultFor","shields","strength","resistances","systemsCapacity","systemsRecharge","distributor","thrusterCurveFor","optSpeedMultiplier","speedCurve","minSpeedMultiplier","maxSpeedMultiplier","optRotationMultiplier","rotationCurve","minRotationMultiplier","maxRotationMultiplier","fittedThrusterParamsFor","mobilityInputResultFor","mass","minimumSpeed","maximumSpeed","boost","minPitch","pitch","minRoll","roll","minYaw","yaw","shieldRecoveryInputResultFor","generatorModule","generatorStats","distributorDraw","regenRate","brokenRegenRate","weaponsCapacitorInputFor","weaponsPips","weaponsCapacity","weaponsRecharge","sustainedEnergyPerSecond","deployed","weapon","weaponStatsFor","distributorInputResultFor","pips","disabled","enginesCapacity","enginesRecharge","heatInputResultFor","plant","thrusterHeatRate","deployedThrusterHeatRate","fsdHeatRate","weapons","running","heat","heatPerSecond","sustainedHeatPerSecond","heatCapacity","heatDissipation","retractedPowerDraw","poweredDraw","deployedPowerDraw","state","bands","reduce","total","band","min","poweredRetracted","poweredDeployed","cellBankInputsFor","banks","ammunition","reinforcementRate","shieldBankReinforcement","cells","spinUp","shieldBankSpinUp","duration","shieldBankDuration","shieldBankHeat","stockBulkhead","v","endsWith","armourInputFor","reinforcements","moduleReinforcements","bulkhead","hullBoost","moduleProtection","integrity","stock","baseArmour","WEAPON_FIELDS","projectileRange","burstAdjustedRateOfFire","touched","FIRING_RATE_LABELS","readsDamageFromPerSecond","every","rate","rateOfFire","statedDamagePerSecond","firingFactor","roundsPerShot","maximumRange","falloffRange","INTERNALS","WeakMap","publishLoadoutInternals","build","internals","loadoutInternals","get"],"mappings":"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"}
@@ -11,13 +11,13 @@ import { Commodity } from './commodities.js';
11
11
  */
12
12
 
13
13
  /**
14
- * All 399 commodities, standard first then rare.
14
+ * Every commodity, standard first then rare.
15
15
  *
16
16
  * @example
17
17
  * ```ts
18
18
  * import { ALL_COMMODITIES } from '@elite-dangerous-almanac/core/commodities/commodities-all';
19
19
  *
20
- * ALL_COMMODITIES.length; // -> 399
20
+ * ALL_COMMODITIES.find((commodity) => commodity.symbol === 'LavianBrandy')?.rare; // -> true
21
21
  * ```
22
22
  */
23
23
  declare const ALL_COMMODITIES: readonly Commodity[];
@@ -1 +1 @@
1
- export{ALL_COMMODITIES}from"../chunk-77TT4K53.js"; //# sourceMappingURL=commodities-all.js.map
1
+ export{ALL_COMMODITIES}from"../chunk-SFEQXUIA.js"; //# sourceMappingURL=commodities-all.js.map
@@ -1,8 +1,8 @@
1
1
  import { Commodity } from './commodities.js';
2
2
 
3
3
  /**
4
- * The catalogue of **rare** market commodities — the 142 location-specific luxury
5
- * goods, each produced at a single station and worth more the further it is carried.
4
+ * The catalogue of **rare** market commodities — the location-specific luxury goods,
5
+ * each produced at a single station and worth more the further it is carried.
6
6
  *
7
7
  * Every record here is a rare commodity (`rare: true`); the standard market goods
8
8
  * live in `./commodities-standard`. Search it with the query functions in
@@ -14,7 +14,7 @@ import { Commodity } from './commodities.js';
14
14
  */
15
15
 
16
16
  /**
17
- * All 142 rare commodities, in Frontier's registry order.
17
+ * Every rare commodity, in Frontier's registry order.
18
18
  *
19
19
  * @remarks
20
20
  * Every record has `rare: true`. The array and its records are frozen. A rare's
@@ -25,7 +25,6 @@ import { Commodity } from './commodities.js';
25
25
  * ```ts
26
26
  * import { RARE_COMMODITIES } from '@elite-dangerous-almanac/core/commodities/commodities-rare';
27
27
  *
28
- * RARE_COMMODITIES.length; // -> 142
29
28
  * RARE_COMMODITIES.find((c) => c.symbol === 'LavianBrandy')?.name; // -> 'Lavian Brandy'
30
29
  * ```
31
30
  */
@@ -1 +1 @@
1
- export{RARE_COMMODITIES}from"../chunk-GMTAFUAG.js"; //# sourceMappingURL=commodities-rare.js.map
1
+ export{RARE_COMMODITIES}from"../chunk-TYRH73MO.js"; //# sourceMappingURL=commodities-rare.js.map
@@ -1,22 +1,23 @@
1
1
  import { Commodity } from './commodities.js';
2
2
 
3
3
  /**
4
- * The catalogue of **standard** market commodities — the 257 goods traded at
5
- * station commodity markets, across all sixteen market groups.
4
+ * The catalogue of **standard** market commodities — the goods traded at station
5
+ * commodity markets, across every market group.
6
6
  *
7
7
  * Every record here is a standard commodity (`rare: false`); the rare goods live in
8
8
  * `./commodities-rare`. Search it with the query functions in `./commodities`.
9
9
  *
10
- * Data from EDCD FDevIDs (`commodity.csv`), plus one record absent from the pinned
11
- * FDevIDs snapshot whose symbol and name were observed in a player journal and whose
12
- * market category was verified in-game; see
10
+ * Data from EDCD FDevIDs (`commodity.csv`), from a player-journal observation with an
11
+ * in-game category check, and from two readings of the running game's own commodity
12
+ * registry, whose difference is a batch of mineral and chemical goods the FDevIDs
13
+ * snapshot does not carry; see
13
14
  * [`data/commodities/SOURCES.md`](https://github.com/DarkSession/Elite-Dangerous-Almanac/blob/main/data/commodities/SOURCES.md).
14
15
  *
15
16
  * @packageDocumentation
16
17
  */
17
18
 
18
19
  /**
19
- * All 257 standard commodities, in Frontier's registry order.
20
+ * Every standard commodity, in Frontier's registry order.
20
21
  *
21
22
  * @remarks
22
23
  * Every record has `rare: false`. The array and its records are frozen.
@@ -25,7 +26,6 @@ import { Commodity } from './commodities.js';
25
26
  * ```ts
26
27
  * import { COMMODITIES } from '@elite-dangerous-almanac/core/commodities/commodities-standard';
27
28
  *
28
- * COMMODITIES.length; // -> 257
29
29
  * COMMODITIES.find((c) => c.symbol === 'Gold')?.category; // -> 'Metals'
30
30
  * ```
31
31
  */
@@ -1 +1 @@
1
- export{COMMODITIES}from"../chunk-6HMIF2RJ.js"; //# sourceMappingURL=commodities-standard.js.map
1
+ export{COMMODITIES}from"../chunk-Q647OXON.js"; //# sourceMappingURL=commodities-standard.js.map
@@ -2,13 +2,13 @@
2
2
  * Market-commodity types and lookups.
3
3
  *
4
4
  * Elite Dangerous trades goods at station commodity markets. Frontier splits them
5
- * into two registries: the ~257 **standard** commodities on every market, and the
6
- * ~142 **rare** commodities each produced at a single station. This module holds the
5
+ * into two registries: the **standard** commodities on every market, and the
6
+ * **rare** commodities each produced at a single station. This module holds the
7
7
  * {@link Commodity} record shape and the functions that find one
8
8
  * ({@link getCommodityBySymbol}, {@link getCommodityByName},
9
9
  * {@link commoditiesInCategory}).
10
10
  *
11
- * **Every lookup searches all 399 commodities by default** — standard and rare — so
11
+ * **Every lookup searches every commodity by default** — standard and rare — so
12
12
  * you do not have to know which registry a good belongs to before you can find it:
13
13
  *
14
14
  * ```ts
@@ -18,20 +18,20 @@
18
18
  * The two **by-key** lookups take an optional second argument to **narrow** the search
19
19
  * to a subset — one registry's catalogue, or any array you have filtered yourself:
20
20
  *
21
- * | Module | Export | Entries |
21
+ * | Module | Export | Holds |
22
22
  * | --- | --- | --- |
23
- * | `./commodities-standard` | `COMMODITIES` | 257 |
24
- * | `./commodities-rare` | `RARE_COMMODITIES` | 142 |
25
- * | `./commodities-all` | `ALL_COMMODITIES` | 399 (the default) |
23
+ * | `./commodities-standard` | `COMMODITIES` | standard only |
24
+ * | `./commodities-rare` | `RARE_COMMODITIES` | rares only |
25
+ * | `./commodities-all` | `ALL_COMMODITIES` | both (the default) |
26
26
  *
27
27
  * It narrows *results*, not bundle size: importing a lookup pulls both catalogues,
28
- * since that is what it falls back to — ~30 KiB minified for all 399. Every record
28
+ * since that is what it falls back to — ~30 KiB minified for the pair. Every record
29
29
  * carries a {@link Commodity.rare} flag, so a subset is one `.filter()` away.
30
30
  *
31
31
  * **Only `ALL_COMMODITIES` itself is indexed.** A by-key lookup answers from an O(1)
32
32
  * index when the catalogue you pass *is* `ALL_COMMODITIES` — the same object, not a
33
33
  * copy — and scans linearly otherwise, including for `[...ALL_COMMODITIES]`, which
34
- * holds the same 399 records. Omitting the argument always takes the indexed path, so
34
+ * holds the same records. Omitting the argument always takes the indexed path, so
35
35
  * pass one only when you mean to exclude the other registry.
36
36
  *
37
37
  * {@link commoditiesInCategory} takes no catalogue: it returns an array, so narrowing
@@ -53,8 +53,8 @@
53
53
  * These are Frontier's own category strings (spelled with spaces where the game
54
54
  * spells them so, e.g. `"Consumer Items"`). Both standard and rare commodities draw
55
55
  * from the same set; the rare registry uses only a subset of these groups.
56
- * `"NonMarketable"` is Frontier's group for goods that are not freely traded (its one
57
- * member is Limpets).
56
+ * `"NonMarketable"` is Frontier's group for goods that are not freely traded, such as
57
+ * Limpets.
58
58
  */
59
59
  type CommodityCategory = 'Chemicals' | 'Consumer Items' | 'Foods' | 'Industrial Materials' | 'Legal Drugs' | 'Machinery' | 'Medicines' | 'Metals' | 'Minerals' | 'NonMarketable' | 'Salvage' | 'Slavery' | 'Technology' | 'Textiles' | 'Waste' | 'Weapons';
60
60
  /**
@@ -95,7 +95,7 @@ interface Commodity {
95
95
  *
96
96
  * @param symbol - The internal symbol, e.g. `"Platinum"`, or the lower-cased form the
97
97
  * market/journal reports (`"platinum"`). Leading/trailing whitespace is ignored.
98
- * @param commodities - Optional subset to search instead of all 399 commodities
98
+ * @param commodities - Optional subset to search instead of every commodity
99
99
  * `COMMODITIES` (standard only), `RARE_COMMODITIES`, or any array you have filtered
100
100
  * yourself. Omit it unless you specifically want to exclude the other registry: the
101
101
  * indexed O(1) path is taken only when the argument is omitted or is `ALL_COMMODITIES`
@@ -1 +1 @@
1
- export{commoditiesInCategory,getCommodityByName,getCommodityBySymbol}from"../chunk-J7BM5NGK.js"; //# sourceMappingURL=commodities.js.map
1
+ export{commoditiesInCategory,getCommodityByName,getCommodityBySymbol}from"../chunk-2TY42PTF.js"; //# sourceMappingURL=commodities.js.map
@@ -1 +1 @@
1
- export{commoditiesInCategory,getCommodityByName,getCommodityBySymbol}from"../chunk-J7BM5NGK.js";export{ALL_COMMODITIES}from"../chunk-77TT4K53.js";export{RARE_COMMODITIES}from"../chunk-GMTAFUAG.js";export{COMMODITIES}from"../chunk-6HMIF2RJ.js"; //# sourceMappingURL=index.js.map
1
+ export{commoditiesInCategory,getCommodityByName,getCommodityBySymbol}from"../chunk-2TY42PTF.js";export{ALL_COMMODITIES}from"../chunk-SFEQXUIA.js";export{RARE_COMMODITIES}from"../chunk-TYRH73MO.js";export{COMMODITIES}from"../chunk-Q647OXON.js"; //# sourceMappingURL=index.js.map
@@ -26,8 +26,8 @@ interface PersonalEngineeringIngredient {
26
26
  */
27
27
  declare function sumPersonalEngineeringIngredients(...recipes: readonly (readonly PersonalEngineeringIngredient[])[]): PersonalEngineeringIngredient[];
28
28
  /**
29
- * One stat multiplier an engineer-applied modification puts on a suit or a handheld
30
- * weapon.
29
+ * One stat multiplier an engineer-applied modification puts on a suit, a handheld
30
+ * weapon or a suit tool.
31
31
  *
32
32
  * @remarks
33
33
  * A personal modification is applied in one step: it has no grade and no quality roll,
@@ -41,10 +41,15 @@ interface PersonalModifier {
41
41
  * `"magazineSize"`, `"effectiveRange"`, `"batteryCapacity"`, `"goodsCapacity"`.
42
42
  *
43
43
  * @remarks
44
- * Six stats the game shows on foot have no catalogue field, because the panel shows
45
- * no base for them, and are named for what they are: `"meleeDamage"`,
46
- * `"sprintDuration"`, `"toolEnergyDrain"`, `"reloadSpeed"`, and the pressurised and
47
- * unpressurised firing audible ranges.
44
+ * Some stats the game shows on foot have no catalogue field, because the panel
45
+ * shows no base for them. They are named for what they are: `"meleeDamage"`,
46
+ * `"sprintDuration"`, and the pressurised and unpressurised firing audible ranges.
47
+ *
48
+ * `"toolEnergyDrain"` names no field either, but its bases are catalogued: it is a
49
+ * tool's `powerUsage` and the Energylink's `overloadPowerUsage` in
50
+ * `equipment/tools`. The Energylink's `dischargeRate` carries its own name because
51
+ * the game leaves it alone, so hand `applyPersonalModifiers` the base the factor
52
+ * applies to.
48
53
  */
49
54
  readonly stat: string;
50
55
  /** The factor the stat is multiplied by, e.g. `1.5` for a 50% increase. */
@@ -1 +1 @@
1
- export{applyPersonalModifiers,sumPersonalEngineeringIngredients}from"../chunk-WV7QCDL5.js"; //# sourceMappingURL=engineering.js.map
1
+ export{applyPersonalModifiers,sumPersonalEngineeringIngredients}from"../chunk-SIL356HB.js"; //# sourceMappingURL=engineering.js.map
@@ -1,6 +1,6 @@
1
1
  /**
2
- * Elite Dangerous personal equipment: Odyssey suits, handheld weapons, Pioneer Supplies
3
- * grade progression and engineer-applied modifications.
2
+ * Elite Dangerous personal equipment: Odyssey suits, handheld weapons, suit tools,
3
+ * Pioneer Supplies grade progression and engineer-applied modifications.
4
4
  *
5
5
  * Material shopping lists are deliberately leaf-only: import grade-upgrade costs from
6
6
  * `equipment/upgrade-costs` and modification costs from
@@ -9,8 +9,8 @@
9
9
  *
10
10
  * @packageDocumentation
11
11
  */
12
- export { EquipmentGrade, SUITS, Suit, SuitGrade, getSuitByFamily, getSuitByName, getSuitBySymbol, getSuitGrade } from './suits.js';
13
- export { PERSONAL_WEAPONS, PersonalDamageType, PersonalFireMode, PersonalWeapon, PersonalWeaponClass, PersonalWeaponEngineeringType, PersonalWeaponGrade, PersonalWeaponSlot, ScopeMagnification, WeaponUpgradeGroup, getPersonalWeaponByName, getPersonalWeaponBySymbol, getPersonalWeaponGrade } from './weapons.js';
12
+ export { E as EquipmentGrade, P as PERSONAL_WEAPONS, a as PersonalDamageType, b as PersonalFireMode, c as PersonalMount, d as PersonalMountKey, e as PersonalWeapon, f as PersonalWeaponClass, g as PersonalWeaponEngineeringType, h as PersonalWeaponGrade, i as PersonalWeaponMetrics, j as PersonalWeaponSlot, R as ReloadTime, S as SUITS, k as ScopeMagnification, l as Suit, m as SuitGrade, W as WeaponUpgradeGroup, n as getPersonalWeaponByName, o as getPersonalWeaponBySymbol, p as getPersonalWeaponGrade, q as getSuitByFamily, r as getSuitByName, s as getSuitBySymbol, t as getSuitGrade, u as personalWeaponMetrics } from '../suits-B4sQMLFe.js';
13
+ export { PERSONAL_TOOLS, PersonalTool, getPersonalToolById } from './tools.js';
14
14
  export { PersonalEngineeringIngredient, PersonalModifier, applyPersonalModifiers, sumPersonalEngineeringIngredients } from './engineering.js';
15
15
  export { PERSONAL_MODIFICATIONS, PersonalModification, PersonalModificationTarget, getPersonalModification } from './modifications.js';
16
16
  export { resolvePersonalModificationForWeapon } from './modification-journal.js';
@@ -1 +1 @@
1
- export{resolvePersonalModificationForWeapon}from"../chunk-3WGXGBW5.js";export{PERSONAL_MODIFICATIONS,getPersonalModification}from"../chunk-GIGRBFIJ.js";export{SUITS,getSuitByFamily,getSuitByName,getSuitBySymbol,getSuitGrade}from"../chunk-LWNBWRKL.js";export{PERSONAL_WEAPONS,getPersonalWeaponByName,getPersonalWeaponBySymbol,getPersonalWeaponGrade}from"../chunk-IUSMAX5T.js"; export{applyPersonalModifiers,sumPersonalEngineeringIngredients}from"../chunk-WV7QCDL5.js"; //# sourceMappingURL=index.js.map
1
+ export{resolvePersonalModificationForWeapon}from"../chunk-R2AEZYX7.js";export{PERSONAL_MODIFICATIONS,getPersonalModification}from"../chunk-YI5XKWW2.js";export{PERSONAL_TOOLS,getPersonalToolById}from"../chunk-CEF7SMB2.js";export{SUITS,getSuitByFamily,getSuitByName,getSuitBySymbol,getSuitGrade}from"../chunk-C6G7IN74.js";export{PERSONAL_WEAPONS,getPersonalWeaponByName,getPersonalWeaponBySymbol,getPersonalWeaponGrade,personalWeaponMetrics}from"../chunk-PIU24HRN.js"; export{applyPersonalModifiers,sumPersonalEngineeringIngredients}from"../chunk-SIL356HB.js"; //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- export{resolvePersonalModificationForWeapon}from"../chunk-3WGXGBW5.js"; //# sourceMappingURL=modification-journal.js.map
1
+ export{resolvePersonalModificationForWeapon}from"../chunk-R2AEZYX7.js"; //# sourceMappingURL=modification-journal.js.map