@elite-dangerous-almanac/core 0.1.8 → 0.2.1

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 (316) hide show
  1. package/PROVENANCE/i18n/SOURCES.md +2 -2
  2. package/PROVENANCE/ships/SOURCES.md +34 -9
  3. package/README.md +54 -40
  4. package/dist/astro/galaxy-grid.js +1 -1
  5. package/dist/astro/index.d.ts +1 -1
  6. package/dist/astro/index.js +1 -1
  7. package/dist/astro/naming-region-origins.d.ts +1 -1
  8. package/dist/astro/naming-region-origins.js +1 -1
  9. package/dist/astro/nebulae.d.ts +2 -2
  10. package/dist/astro/permit-locks.d.ts +2 -1
  11. package/dist/astro/permit-locks.js +1 -1
  12. package/dist/astro/procedural-system.d.ts +2 -1
  13. package/dist/astro/procedural-system.js +1 -1
  14. package/dist/astro/sector-name.d.ts +2 -1
  15. package/dist/astro/sector-name.js +1 -1
  16. package/dist/astro/system-address.d.ts +1 -1
  17. package/dist/astro/system-name.d.ts +14 -9
  18. package/dist/astro/system-name.js +1 -1
  19. package/dist/chunk-2W5MW376.js +1 -0
  20. package/dist/chunk-2W5MW376.js.map +1 -0
  21. package/dist/chunk-37JIMWLK.js +1 -0
  22. package/dist/chunk-37JIMWLK.js.map +1 -0
  23. package/dist/chunk-4CBMQULR.js +1 -0
  24. package/dist/{chunk-4ZGUSHTP.js.map → chunk-4CBMQULR.js.map} +1 -1
  25. package/dist/{chunk-6EUVIZAS.js → chunk-4QYTVSNR.js} +1 -1
  26. package/dist/chunk-5VWACBTN.js +1 -0
  27. package/dist/chunk-5VWACBTN.js.map +1 -0
  28. package/dist/{chunk-EKQCVCMK.js → chunk-5ZVYRX6Z.js} +1 -1
  29. package/dist/{chunk-EKQCVCMK.js.map → chunk-5ZVYRX6Z.js.map} +1 -1
  30. package/dist/chunk-65FZECUX.js +1 -0
  31. package/dist/chunk-65FZECUX.js.map +1 -0
  32. package/dist/chunk-6BFQIYGZ.js +1 -0
  33. package/dist/chunk-6BFQIYGZ.js.map +1 -0
  34. package/dist/chunk-6GJHUWMO.js +1 -0
  35. package/dist/chunk-6GJHUWMO.js.map +1 -0
  36. package/dist/chunk-6HA2YIKW.js +1 -0
  37. package/dist/chunk-6HA2YIKW.js.map +1 -0
  38. package/dist/{chunk-7EE5VIHR.js → chunk-6HMIF2RJ.js} +1 -1
  39. package/dist/chunk-6S36AVA4.js +1 -0
  40. package/dist/chunk-6S36AVA4.js.map +1 -0
  41. package/dist/{chunk-WNGQ3IAM.js → chunk-6UNAD74Z.js} +1 -1
  42. package/dist/{chunk-WNGQ3IAM.js.map → chunk-6UNAD74Z.js.map} +1 -1
  43. package/dist/chunk-6WTUY6ZX.js +1 -0
  44. package/dist/chunk-6WTUY6ZX.js.map +1 -0
  45. package/dist/{chunk-JPBMRJFC.js → chunk-77I24V6B.js} +1 -1
  46. package/dist/chunk-77I24V6B.js.map +1 -0
  47. package/dist/chunk-77TT4K53.js +1 -0
  48. package/dist/chunk-7ATBEOVC.js +1 -0
  49. package/dist/chunk-7ATBEOVC.js.map +1 -0
  50. package/dist/chunk-A4QKXXZD.js +1 -0
  51. package/dist/chunk-A4QKXXZD.js.map +1 -0
  52. package/dist/{chunk-6EPYVBAX.js → chunk-A6OINYNP.js} +1 -1
  53. package/dist/chunk-AAE4KZ2V.js +1 -0
  54. package/dist/chunk-AAE4KZ2V.js.map +1 -0
  55. package/dist/{chunk-Q5XOGATC.js → chunk-AIEC3LBT.js} +1 -1
  56. package/dist/{chunk-QY3L5BKN.js → chunk-APEG4ZER.js} +1 -1
  57. package/dist/{chunk-Q3QCLNVG.js → chunk-AYAKU4YA.js} +1 -1
  58. package/dist/chunk-AYAKU4YA.js.map +1 -0
  59. package/dist/chunk-B7EYTZRK.js +1 -0
  60. package/dist/chunk-B7EYTZRK.js.map +1 -0
  61. package/dist/{chunk-EBAHNZ36.js → chunk-CIULJH3G.js} +1 -1
  62. package/dist/{chunk-EBAHNZ36.js.map → chunk-CIULJH3G.js.map} +1 -1
  63. package/dist/{chunk-SNADUQSJ.js → chunk-CJK2IBI2.js} +1 -1
  64. package/dist/{chunk-SNADUQSJ.js.map → chunk-CJK2IBI2.js.map} +1 -1
  65. package/dist/{chunk-DYPOL3CI.js → chunk-CJQ37JII.js} +1 -1
  66. package/dist/chunk-CJQ37JII.js.map +1 -0
  67. package/dist/{chunk-Z6XMXMVI.js → chunk-DBDCOHI4.js} +1 -1
  68. package/dist/chunk-DBDCOHI4.js.map +1 -0
  69. package/dist/{chunk-AFVYCQWL.js → chunk-DCB4COCL.js} +1 -1
  70. package/dist/{chunk-AFVYCQWL.js.map → chunk-DCB4COCL.js.map} +1 -1
  71. package/dist/{chunk-CJWFY6OX.js → chunk-DSMLYA2M.js} +1 -1
  72. package/dist/{chunk-CJWFY6OX.js.map → chunk-DSMLYA2M.js.map} +1 -1
  73. package/dist/{chunk-UXBCLFGU.js → chunk-DWRNXUAX.js} +1 -1
  74. package/dist/{chunk-UXBCLFGU.js.map → chunk-DWRNXUAX.js.map} +1 -1
  75. package/dist/chunk-F44QX47A.js +1 -0
  76. package/dist/chunk-F44QX47A.js.map +1 -0
  77. package/dist/{chunk-EVJ32UF3.js → chunk-FA5JVXVG.js} +1 -1
  78. package/dist/{chunk-EVJ32UF3.js.map → chunk-FA5JVXVG.js.map} +1 -1
  79. package/dist/{chunk-4S6WB7QR.js → chunk-FF2X4K5P.js} +1 -1
  80. package/dist/chunk-FF2X4K5P.js.map +1 -0
  81. package/dist/chunk-GGQMIQPC.js +1 -0
  82. package/dist/chunk-GGQMIQPC.js.map +1 -0
  83. package/dist/{chunk-QTZPA2FR.js → chunk-GLWPSVFV.js} +1 -1
  84. package/dist/chunk-GLWPSVFV.js.map +1 -0
  85. package/dist/{chunk-EYGVDJ2I.js → chunk-GMTAFUAG.js} +1 -1
  86. package/dist/{chunk-Z43DN4PY.js → chunk-GTEHRZPN.js} +1 -1
  87. package/dist/{chunk-Z43DN4PY.js.map → chunk-GTEHRZPN.js.map} +1 -1
  88. package/dist/chunk-H47K3UWG.js +1 -0
  89. package/dist/chunk-H47K3UWG.js.map +1 -0
  90. package/dist/{chunk-PA5EITW5.js → chunk-HUYYGTRM.js} +1 -1
  91. package/dist/{chunk-PA5EITW5.js.map → chunk-HUYYGTRM.js.map} +1 -1
  92. package/dist/{chunk-HKXXFIRI.js → chunk-ITKZKREP.js} +1 -1
  93. package/dist/chunk-IWFQ4ZKF.js +1 -0
  94. package/dist/chunk-IWFQ4ZKF.js.map +1 -0
  95. package/dist/{chunk-Y6UZWNP4.js → chunk-J7BM5NGK.js} +1 -1
  96. package/dist/{chunk-Y6UZWNP4.js.map → chunk-J7BM5NGK.js.map} +1 -1
  97. package/dist/chunk-JET673E5.js +1 -0
  98. package/dist/chunk-JET673E5.js.map +1 -0
  99. package/dist/chunk-JMAXSXXQ.js +1 -0
  100. package/dist/chunk-JMAXSXXQ.js.map +1 -0
  101. package/dist/chunk-JO52LYO3.js +1 -0
  102. package/dist/chunk-M2TCZKRT.js +1 -0
  103. package/dist/chunk-M2TCZKRT.js.map +1 -0
  104. package/dist/chunk-M4FZRDAH.js +1 -0
  105. package/dist/chunk-M4FZRDAH.js.map +1 -0
  106. package/dist/{chunk-JWWYAMGD.js → chunk-MGRDB2BZ.js} +1 -1
  107. package/dist/{chunk-JWWYAMGD.js.map → chunk-MGRDB2BZ.js.map} +1 -1
  108. package/dist/{chunk-MKGJPVPS.js → chunk-MRTTQYT5.js} +1 -1
  109. package/dist/{chunk-MKGJPVPS.js.map → chunk-MRTTQYT5.js.map} +1 -1
  110. package/dist/chunk-MTJ4MS7W.js +1 -0
  111. package/dist/chunk-MTJ4MS7W.js.map +1 -0
  112. package/dist/chunk-NIURLW2F.js +1 -0
  113. package/dist/chunk-NIURLW2F.js.map +1 -0
  114. package/dist/chunk-OJC6AUL7.js +1 -0
  115. package/dist/chunk-OJC6AUL7.js.map +1 -0
  116. package/dist/chunk-OLKNYGGT.js +1 -0
  117. package/dist/chunk-OLKNYGGT.js.map +1 -0
  118. package/dist/chunk-PL75RTA2.js +1 -0
  119. package/dist/{chunk-2VPVZELZ.js.map → chunk-PL75RTA2.js.map} +1 -1
  120. package/dist/chunk-Q5ALV3DI.js +1 -0
  121. package/dist/chunk-Q5ALV3DI.js.map +1 -0
  122. package/dist/{chunk-SQS7672E.js → chunk-Q6YDPREF.js} +1 -1
  123. package/dist/chunk-SG6YLUQ4.js +1 -0
  124. package/dist/chunk-SG6YLUQ4.js.map +1 -0
  125. package/dist/{chunk-OVUHQEH5.js → chunk-T4MKUKYS.js} +1 -1
  126. package/dist/{chunk-OVUHQEH5.js.map → chunk-T4MKUKYS.js.map} +1 -1
  127. package/dist/{chunk-J42ZXLBL.js → chunk-T62GO4AA.js} +1 -1
  128. package/dist/chunk-T62GO4AA.js.map +1 -0
  129. package/dist/{chunk-E3BRVGJJ.js → chunk-TBZJIQ5P.js} +1 -1
  130. package/dist/{chunk-E3BRVGJJ.js.map → chunk-TBZJIQ5P.js.map} +1 -1
  131. package/dist/chunk-VEEBJFJ7.js +1 -0
  132. package/dist/chunk-VEEBJFJ7.js.map +1 -0
  133. package/dist/{chunk-L747RVPO.js → chunk-VQJXRPYI.js} +1 -1
  134. package/dist/{chunk-L747RVPO.js.map → chunk-VQJXRPYI.js.map} +1 -1
  135. package/dist/chunk-VTMCSCXV.js +1 -0
  136. package/dist/chunk-VTMCSCXV.js.map +1 -0
  137. package/dist/chunk-XQJERZUS.js +1 -0
  138. package/dist/chunk-XQJERZUS.js.map +1 -0
  139. package/dist/commodities/commodities-all.js +1 -1
  140. package/dist/commodities/commodities-rare.js +1 -1
  141. package/dist/commodities/commodities-standard.js +1 -1
  142. package/dist/commodities/commodities.d.ts +20 -10
  143. package/dist/commodities/commodities.js +1 -1
  144. package/dist/commodities/index.d.ts +15 -4
  145. package/dist/commodities/index.js +1 -1
  146. package/dist/equipment/index.js +1 -1
  147. package/dist/equipment/modification-costs.d.ts +2 -1
  148. package/dist/equipment/modification-costs.js.map +1 -1
  149. package/dist/equipment/modification-journal.js +1 -1
  150. package/dist/equipment/modifications.d.ts +2 -1
  151. package/dist/equipment/modifications.js +1 -1
  152. package/dist/equipment/suits.d.ts +6 -3
  153. package/dist/equipment/suits.js +1 -1
  154. package/dist/equipment/upgrade-costs.d.ts +8 -4
  155. package/dist/equipment/upgrade-costs.js +1 -1
  156. package/dist/equipment/upgrade-costs.js.map +1 -1
  157. package/dist/equipment/weapons.d.ts +13 -5
  158. package/dist/equipment/weapons.js +1 -1
  159. package/dist/i18n/blueprints.d.ts +6 -6
  160. package/dist/i18n/blueprints.js +1 -1
  161. package/dist/i18n/diagnostics.d.ts +1 -13
  162. package/dist/i18n/engineering-groups.d.ts +1 -0
  163. package/dist/i18n/engineering-groups.js +1 -1
  164. package/dist/i18n/experimental-effect-descriptions.d.ts +4 -3
  165. package/dist/i18n/experimental-effect-descriptions.js +1 -1
  166. package/dist/i18n/experimental-effects.d.ts +5 -4
  167. package/dist/i18n/experimental-effects.js +1 -1
  168. package/dist/i18n/index.d.ts +1 -13
  169. package/dist/i18n/index.js +1 -1
  170. package/dist/i18n/pre-engineered.d.ts +7 -6
  171. package/dist/i18n/pre-engineered.js +1 -1
  172. package/dist/materials/index.d.ts +16 -4
  173. package/dist/materials/index.js +1 -1
  174. package/dist/materials/materials-all.js +1 -1
  175. package/dist/materials/materials-encoded.js +1 -1
  176. package/dist/materials/materials-manufactured.js +1 -1
  177. package/dist/materials/materials-raw.js +1 -1
  178. package/dist/materials/materials.d.ts +36 -19
  179. package/dist/materials/materials.js +1 -1
  180. package/dist/materials/micro-resources.d.ts +18 -7
  181. package/dist/materials/micro-resources.js +1 -1
  182. package/dist/ships/armour.d.ts +20 -4
  183. package/dist/ships/armour.js +1 -1
  184. package/dist/ships/blueprint-costs.d.ts +20 -17
  185. package/dist/ships/blueprint-costs.js +1 -1
  186. package/dist/ships/blueprint-journal.d.ts +9 -8
  187. package/dist/ships/blueprint-journal.js +1 -1
  188. package/dist/ships/blueprints.d.ts +14 -12
  189. package/dist/ships/blueprints.js +1 -1
  190. package/dist/ships/build-metrics.d.ts +1061 -0
  191. package/dist/ships/build-metrics.js +1 -0
  192. package/dist/ships/build-metrics.js.map +1 -0
  193. package/dist/ships/distributor.d.ts +10 -3
  194. package/dist/ships/distributor.js +1 -1
  195. package/dist/ships/engineering-options.d.ts +8 -6
  196. package/dist/ships/engineering-options.js +1 -1
  197. package/dist/ships/engineering.d.ts +2 -16
  198. package/dist/ships/engineering.js +1 -1
  199. package/dist/ships/experimental-effect-costs.d.ts +5 -5
  200. package/dist/ships/experimental-effect-costs.js +1 -1
  201. package/dist/ships/experimental-effects.d.ts +9 -8
  202. package/dist/ships/experimental-effects.js +1 -1
  203. package/dist/ships/heat.d.ts +7 -2
  204. package/dist/ships/heat.js +1 -1
  205. package/dist/ships/index.d.ts +35 -23
  206. package/dist/ships/index.js +1 -1
  207. package/dist/ships/jump-range.d.ts +10 -3
  208. package/dist/ships/jump-range.js +1 -1
  209. package/dist/ships/loadout-calculations.d.ts +1 -1
  210. package/dist/ships/loadout-calculations.js +1 -1
  211. package/dist/ships/loadout-validation.d.ts +111 -5
  212. package/dist/ships/loadout-validation.js +1 -1
  213. package/dist/ships/mobility-capacitor.d.ts +90 -0
  214. package/dist/ships/mobility-capacitor.js +1 -0
  215. package/dist/ships/mobility-capacitor.js.map +1 -0
  216. package/dist/ships/mobility.d.ts +29 -17
  217. package/dist/ships/mobility.js +1 -1
  218. package/dist/ships/modules-all.js +1 -1
  219. package/dist/ships/modules-core.js +1 -1
  220. package/dist/ships/modules-internal.js +1 -1
  221. package/dist/ships/modules.d.ts +21 -1
  222. package/dist/ships/modules.js +1 -1
  223. package/dist/ships/power.d.ts +12 -5
  224. package/dist/ships/power.js +1 -1
  225. package/dist/ships/pre-engineered-stats.d.ts +20 -13
  226. package/dist/ships/pre-engineered-stats.js +1 -1
  227. package/dist/ships/pre-engineered.d.ts +6 -6
  228. package/dist/ships/pre-engineered.js +1 -1
  229. package/dist/ships/resistances.d.ts +2 -2
  230. package/dist/ships/resistances.js +1 -1
  231. package/dist/ships/shield-capacitor.d.ts +133 -0
  232. package/dist/ships/shield-capacitor.js +1 -0
  233. package/dist/ships/shield-capacitor.js.map +1 -0
  234. package/dist/ships/shield-recovery.d.ts +16 -2
  235. package/dist/ships/shield-recovery.js +1 -1
  236. package/dist/ships/shields.d.ts +86 -28
  237. package/dist/ships/shields.js +1 -1
  238. package/dist/ships/ship-loadout.d.ts +176 -815
  239. package/dist/ships/ship-loadout.js +1 -1
  240. package/dist/ships/ships.d.ts +7 -6
  241. package/dist/ships/ships.js +1 -1
  242. package/dist/ships/slef.d.ts +5 -2
  243. package/dist/ships/slef.js +1 -1
  244. package/dist/ships/source-purchase.d.ts +2 -1
  245. package/dist/ships/source-purchase.js +1 -1
  246. package/dist/ships/weapons-capacitor.d.ts +10 -3
  247. package/dist/ships/weapons-capacitor.js +1 -1
  248. package/dist/ships/weapons.d.ts +22 -6
  249. package/dist/ships/weapons.js +1 -1
  250. package/dist/{system-address-DYsN1qOT.d.ts → system-address-cyJaeZIS.d.ts} +2 -1
  251. package/package.json +17 -2
  252. package/dist/chunk-2FHHMYDC.js +0 -1
  253. package/dist/chunk-2FHHMYDC.js.map +0 -1
  254. package/dist/chunk-2TW4ZBI3.js +0 -1
  255. package/dist/chunk-2TW4ZBI3.js.map +0 -1
  256. package/dist/chunk-2VPVZELZ.js +0 -1
  257. package/dist/chunk-3BM5BHI3.js +0 -1
  258. package/dist/chunk-3BM5BHI3.js.map +0 -1
  259. package/dist/chunk-4S6WB7QR.js.map +0 -1
  260. package/dist/chunk-4ZGUSHTP.js +0 -1
  261. package/dist/chunk-6BO5JJNI.js +0 -1
  262. package/dist/chunk-6BO5JJNI.js.map +0 -1
  263. package/dist/chunk-B4ZSTOM4.js +0 -1
  264. package/dist/chunk-B4ZSTOM4.js.map +0 -1
  265. package/dist/chunk-CX7B67OI.js +0 -1
  266. package/dist/chunk-CX7B67OI.js.map +0 -1
  267. package/dist/chunk-DVL5RBKX.js +0 -1
  268. package/dist/chunk-DVL5RBKX.js.map +0 -1
  269. package/dist/chunk-DYPOL3CI.js.map +0 -1
  270. package/dist/chunk-FGXWVFN6.js +0 -1
  271. package/dist/chunk-FGXWVFN6.js.map +0 -1
  272. package/dist/chunk-FMPRCYKY.js +0 -1
  273. package/dist/chunk-FMPRCYKY.js.map +0 -1
  274. package/dist/chunk-G3265B27.js +0 -1
  275. package/dist/chunk-G3265B27.js.map +0 -1
  276. package/dist/chunk-GQ5GX5TB.js +0 -1
  277. package/dist/chunk-GQ5GX5TB.js.map +0 -1
  278. package/dist/chunk-IOJXLDJN.js +0 -1
  279. package/dist/chunk-IOJXLDJN.js.map +0 -1
  280. package/dist/chunk-IYU4WLFM.js +0 -1
  281. package/dist/chunk-IYU4WLFM.js.map +0 -1
  282. package/dist/chunk-J42ZXLBL.js.map +0 -1
  283. package/dist/chunk-JPBMRJFC.js.map +0 -1
  284. package/dist/chunk-JQG4C67D.js +0 -1
  285. package/dist/chunk-LJI7VXJD.js +0 -1
  286. package/dist/chunk-LJI7VXJD.js.map +0 -1
  287. package/dist/chunk-OCND33TO.js +0 -1
  288. package/dist/chunk-OCND33TO.js.map +0 -1
  289. package/dist/chunk-P2QOL63K.js +0 -1
  290. package/dist/chunk-P2QOL63K.js.map +0 -1
  291. package/dist/chunk-Q3QCLNVG.js.map +0 -1
  292. package/dist/chunk-QTZPA2FR.js.map +0 -1
  293. package/dist/chunk-RLUS76LZ.js +0 -1
  294. package/dist/chunk-RLUS76LZ.js.map +0 -1
  295. package/dist/chunk-TEOJCBSG.js +0 -1
  296. package/dist/chunk-TEOJCBSG.js.map +0 -1
  297. package/dist/chunk-TMMGS6TC.js +0 -1
  298. package/dist/chunk-TMMGS6TC.js.map +0 -1
  299. package/dist/chunk-V4C6FIE2.js +0 -1
  300. package/dist/chunk-VZZUNSDF.js +0 -1
  301. package/dist/chunk-VZZUNSDF.js.map +0 -1
  302. package/dist/chunk-W6EPHHTS.js +0 -1
  303. package/dist/chunk-W6EPHHTS.js.map +0 -1
  304. package/dist/chunk-Z6XMXMVI.js.map +0 -1
  305. package/dist/chunk-ZNCXENNB.js +0 -1
  306. package/dist/chunk-ZNCXENNB.js.map +0 -1
  307. /package/dist/{chunk-6EUVIZAS.js.map → chunk-4QYTVSNR.js.map} +0 -0
  308. /package/dist/{chunk-7EE5VIHR.js.map → chunk-6HMIF2RJ.js.map} +0 -0
  309. /package/dist/{chunk-JQG4C67D.js.map → chunk-77TT4K53.js.map} +0 -0
  310. /package/dist/{chunk-6EPYVBAX.js.map → chunk-A6OINYNP.js.map} +0 -0
  311. /package/dist/{chunk-Q5XOGATC.js.map → chunk-AIEC3LBT.js.map} +0 -0
  312. /package/dist/{chunk-QY3L5BKN.js.map → chunk-APEG4ZER.js.map} +0 -0
  313. /package/dist/{chunk-EYGVDJ2I.js.map → chunk-GMTAFUAG.js.map} +0 -0
  314. /package/dist/{chunk-HKXXFIRI.js.map → chunk-ITKZKREP.js.map} +0 -0
  315. /package/dist/{chunk-V4C6FIE2.js.map → chunk-JO52LYO3.js.map} +0 -0
  316. /package/dist/{chunk-SQS7672E.js.map → chunk-Q6YDPREF.js.map} +0 -0
@@ -0,0 +1 @@
1
+ import{calculateModuleLimits}from"./chunk-KPETDYQX.js";import{describeValue,truncate}from"./chunk-PKWVG2JY.js";function isRequiredSlot(slot){return slot.kind==="core"||slot.kind==="armour"}function fixedSlotReason(slot){if(slot.kind==="cargoHatch")return"cargoHatch";return isRequiredSlot(slot)?"requiredSlot":null}function tenths(tonnes){return Math.round(tonnes*10)/10}var LOAD_PHRASE=Object.freeze({dry:"before fuel",unladen:"with a full tank",laden:"fully laden"});function thrusterLoads(mass){if(mass===void 0)return[];const loads=[{load:"dry",mass:mass.dry}];if(mass.fuel===void 0)return loads;loads.push({load:"unladen",mass:mass.dry+mass.fuel});if(mass.cargo===void 0)return loads;loads.push({load:"laden",mass:mass.dry+mass.fuel+mass.cargo});return loads}function requireTonnes(name,value){if(value===void 0)return;if(!Number.isFinite(value)||value<0){throw new RangeError(`validateLoadout: ${name} must be a finite non-negative number of tonnes, received ${describeValue(value)}`)}}function validateLoadout(input){if(!Array.isArray(input.slots)){throw new TypeError(`validateLoadout: input.slots must be an array, received ${describeValue(input.slots)}`)}requireTonnes("input.mass.dry",input.mass?.dry);requireTonnes("input.mass.fuel",input.mass?.fuel);requireTonnes("input.mass.cargo",input.mass?.cargo);for(const module of input.modules){requireTonnes(`${truncate(module.slot)} thrusterMaxMass`,module.thrusterMaxMass)}const issues=[];const seen=/* @__PURE__ */new Map;for(const module of input.modules){const normalized=module.slot.toLowerCase();const previous=seen.get(normalized);if(previous!==void 0){issues.push({code:"duplicateSlot",severity:"error",slot:module.slot,symbol:module.symbol,params:{slot:module.slot,previousSlot:previous,symbol:module.symbol},message:`Slot ${truncate(module.slot)} occurs more than once (also ${truncate(previous)})`})}else{seen.set(normalized,module.slot)}}const exclusive=/* @__PURE__ */new Map;for(const module of input.modules){if(!module.exclusionGroup)continue;const previous=exclusive.get(module.exclusionGroup);if(previous){issues.push({code:"duplicateExclusiveModule",severity:"error",slot:module.slot,symbol:module.symbol,params:{exclusionGroup:module.exclusionGroup,slot:module.slot,symbol:module.symbol,previousSlot:previous.slot,previousSymbol:previous.symbol},message:`${truncate(module.slot)}: ${truncate(module.symbol)} conflicts with ${truncate(previous.symbol)} in ${truncate(previous.slot)} (${module.exclusionGroup} is limited to one per ship)`})}else{exclusive.set(module.exclusionGroup,module)}}for(const usage of calculateModuleLimits(input.modules)){if(usage.excess===0)continue;issues.push({code:"moduleLimitExceeded",severity:"error",params:{group:usage.group,count:usage.count,limit:usage.limit},message:`${usage.group} has ${usage.count} fitted modules but the ship allows ${usage.limit}`})}const knownSlots=new Map(input.slots.map(slot=>[slot.key.toLowerCase(),slot]));for(const module of input.modules){if(module.requiresKnownSlot!==false&&!knownSlots.has(module.slot.toLowerCase())){issues.push({code:"unknownSlot",severity:"error",slot:module.slot,symbol:module.symbol,message:`${truncate(module.slot)} is not a slot on ${truncate(input.shipSymbol)}`,params:{shipSymbol:input.shipSymbol,slot:module.slot,symbol:module.symbol}})}}for(const slot of input.slots){if(isRequiredSlot(slot)&&!seen.has(slot.key.toLowerCase())){issues.push({code:"missingRequiredSlot",severity:"incomplete",slot:slot.key,message:`${truncate(slot.key)} is required for an operational build`,params:{slot:slot.key}})}}for(const module of input.modules){if(module.fitError!==null){issues.push({code:"incompatibleModule",severity:"error",slot:module.slot,symbol:module.symbol,message:`${truncate(module.slot)}: ${truncate(module.symbol)} ${truncate(module.fitError)}`,params:{...module.fitParams,slot:module.slot,symbol:module.symbol,constraint:module.fitConstraint??"unknownConstraint"}})}}for(const load of thrusterLoads(input.mass)){for(const module of input.modules){if(module.thrusterMaxMass===void 0||load.mass<=module.thrusterMaxMass){continue}issues.push({code:"thrusterMassExceeded",severity:load.load==="laden"?"warning":"error",slot:module.slot,symbol:module.symbol,message:`${truncate(module.slot)}: ${truncate(module.symbol)} is rated to ${tenths(module.thrusterMaxMass)} t but the ship weighs ${tenths(load.mass)} t ${LOAD_PHRASE[load.load]}`,params:{slot:module.slot,symbol:module.symbol,load:load.load,mass:load.mass,maxMass:module.thrusterMaxMass}})}if(issues.some(issue=>issue.code==="thrusterMassExceeded"))break}const frozen=Object.freeze(issues.map(issue=>Object.freeze({...issue,...issue.params?{params:Object.freeze(Object.fromEntries(Object.entries(issue.params).map(([key,value])=>[key,Array.isArray(value)?Object.freeze([...value]):value])))}:{}})));return Object.freeze({valid:!issues.some(issue=>issue.severity==="error"),complete:!issues.some(issue=>issue.severity!=="warning"),issues:frozen})}export{fixedSlotReason,validateLoadout};//# sourceMappingURL=chunk-OJC6AUL7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/loadout-slot-rules.ts","../src/ships/loadout-validation.ts"],"names":["calculateModuleLimits","describeValue","truncate","isRequiredSlot","slot","kind","fixedSlotReason","tenths","tonnes","Math","round","LOAD_PHRASE","Object","freeze","dry","unladen","laden","thrusterLoads","mass","loads","load","fuel","push","cargo","requireTonnes","name","value","Number","isFinite","RangeError","validateLoadout","input","Array","isArray","slots","TypeError","module","modules","thrusterMaxMass","issues","seen","Map","normalized","toLowerCase","previous","get","code","severity","symbol","params","previousSlot","message","set","exclusive","exclusionGroup","previousSymbol","usage","excess","group","count","limit","knownSlots","map","key","requiresKnownSlot","has","shipSymbol","fitError","fitParams","constraint","fitConstraint","maxMass","some","issue","frozen","fromEntries","entries","valid","complete"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import{getBlueprintsForModule}from"./chunk-GLWPSVFV.js";import{normalizeKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent,requireString}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var blueprint_journal_names_default={MC_Overcharged:"Weapon_Overcharged",Scanner_LongRange:"Sensor_LongRange",Scanner_WideAngle:"Sensor_WideAngle"};var BLUEPRINT_JOURNAL_NAMES=deepFreeze(blueprint_journal_names_default);function resolveBlueprintForModule(moduleSymbol,blueprintSymbol){requireStringIfPresent(moduleSymbol,"resolveBlueprintForModule: moduleSymbol");const wanted=normalizeKey(requireString(blueprintSymbol,"resolveBlueprintForModule: blueprintSymbol"),"resolveBlueprintForModule: blueprintSymbol");const offered=getBlueprintsForModule(moduleSymbol);if(offered.some(id=>id.toLowerCase()===wanted))return blueprintSymbol;for(const id of offered){const journalName=BLUEPRINT_JOURNAL_NAMES[id];if(journalName!==void 0&&journalName.toLowerCase()===wanted)return id}return blueprintSymbol}export{resolveBlueprintForModule};//# sourceMappingURL=chunk-OLKNYGGT.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/blueprint-journal-names.ts","../src/ships/blueprint-journal.ts"],"names":["getBlueprintsForModule","normalizeKey","requireStringIfPresent","requireString","deepFreeze","blueprint_journal_names_default","BLUEPRINT_JOURNAL_NAMES","resolveBlueprintForModule","moduleSymbol","blueprintSymbol","wanted","offered","some","id","toLowerCase","journalName"],"mappings":"O,qWAKO,IAAMM,wBAA4DF,WACrEC,iCCwEG,SAASE,0BAA0BC,aAAsBC,iBAC5DP,uBAAuBM,aAAc,2CAIrC,MAAME,OAAST,aACXE,cAAcM,gBAAiB,8CAC/B,8CAEJ,MAAME,QAAUX,uBAAuBQ,cAGvC,GAAIG,QAAQC,KAAMC,IAAOA,GAAGC,gBAAkBJ,QAAS,OAAOD,gBAC9D,IAAA,MAAWI,MAAMF,QAAS,CACtB,MAAMI,YAAcT,wBAAwBO,IAC5C,GAAIE,mBAAgB,GAAaA,YAAYD,gBAAkBJ,OAAQ,OAAOG,EAClF,CACA,OAAOJ,eACX,QAAAF"}
@@ -0,0 +1 @@
1
+ import{filterByKey}from"./chunk-BKWLI44T.js";import{requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var pre_engineered_default=[{symbol:"Hpt_Mining_AbrBlstr_Fixed_Small",name:"Far-Reaching Abrasion Blaster",blueprintSymbol:"AbrasionBlaster_FarReaching",grade:1,acquisition:"mercenary",mercCoinCost:400},{symbol:"Hpt_CausticMissile_Fixed_Medium",name:"High-Yield Enzyme Missile Rack",blueprintSymbol:"EnzymeMissileRack_HighYield",grade:1,acquisition:"mercenary",mercCoinCost:850},{symbol:"Hpt_Slugshot_Gimbal_Small",name:"Double Screaming Fragment Cannon",blueprintSymbol:"FragmentCannonSmall_DoubleScreaming",grade:1,acquisition:"mercenary",mercCoinCost:800},{symbol:"Hpt_Slugshot_Gimbal_Large",name:"Double Screaming Fragment Cannon",blueprintSymbol:"FragmentCannonLarge_DoubleScreaming",grade:1,acquisition:"mercenary",mercCoinCost:950},{symbol:"Hpt_MiningLaser_Fixed_Small",name:"Long Range Mining Laser",blueprintSymbol:"MiningLaser_LongRange",grade:1,acquisition:"mercenary",mercCoinCost:450},{symbol:"Hpt_MultiCannon_Fixed_Medium",name:"Rapid Phase Multi-Cannon",blueprintSymbol:"MultiCannon_Rapid",grade:1,acquisition:"mercenary",mercCoinCost:850},{symbol:"Hpt_Railgun_Fixed_Medium",name:"Enduring Feedback Rail Gun",blueprintSymbol:"RailGun_LongShot",grade:1,acquisition:"mercenary",mercCoinCost:950},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Drag Seeker Missile Rack",blueprintSymbol:"SeekerMissileRack_Drag",grade:1,acquisition:"mercenary",mercCoinCost:800},{symbol:"Hpt_BasicMissileRack_Fixed_Large",name:"Drag Seeker Missile Rack",blueprintSymbol:"SeekerMissileRack_Drag",grade:1,acquisition:"mercenary",mercCoinCost:900},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Lightweight Thermal Seeker Missile Rack",blueprintSymbol:"SeekerMissileRack_LightWeightThermal",grade:1,acquisition:"mercenary",mercCoinCost:800},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Lockdown Seeker Missile Rack",blueprintSymbol:"SeekerMissileRackMedium_Lockdown",grade:1,acquisition:"mercenary",mercCoinCost:800},{symbol:"Hpt_BasicMissileRack_Fixed_Large",name:"Lockdown Seeker Missile Rack",blueprintSymbol:"SeekerMissileRackLarge_Lockdown",grade:1,acquisition:"mercenary",mercCoinCost:900},{symbol:"Int_CargoRack_Size5_Class1",name:"Extended Cargo Rack",blueprintSymbol:"CargoRackS5C1_Extended",grade:1,acquisition:"mercenary",mercCoinCost:550},{symbol:"Int_CargoRack_Size6_Class1",name:"Extended Cargo Rack",blueprintSymbol:"CargoRackS6C1_Extended",grade:1,acquisition:"mercenary",mercCoinCost:550},{symbol:"Int_DetailedSurfaceScanner_Tiny",name:"Long Range Detailed Surface Scanner",blueprintSymbol:"DetailedSurfaceScanner_LongRange",grade:1,acquisition:"mercenary",mercCoinCost:350},{symbol:"Int_ModuleReinforcement_Size5_Class2",name:"Heavy Duty Module Reinforcement Package",blueprintSymbol:"ModuleReinforcement_HeavyDuty",grade:1,acquisition:"mercenary",mercCoinCost:450},{symbol:"Int_PowerDistributor_Size3_Class2",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS3C2_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:300},{symbol:"Int_PowerDistributor_Size3_Class5",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS3C5_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:350},{symbol:"Int_PowerDistributor_Size4_Class2",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS4C2_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:400},{symbol:"Int_PowerDistributor_Size4_Class5",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS4C5_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:450},{symbol:"Int_PowerDistributor_Size5_Class5",name:"Balanced Power Distributor",blueprintSymbol:"PowerDistributor_Balanced",grade:1,acquisition:"mercenary",mercCoinCost:500},{symbol:"Int_PowerDistributor_Size6_Class5",name:"Support Focused Power Distributor",blueprintSymbol:"PowerDistributorS6C5_SupportFocused",grade:1,acquisition:"mercenary",mercCoinCost:550},{symbol:"Hpt_Mining_AbrBlstr_Fixed_Small",name:"Abrasion Blaster",blueprintSymbol:"Weapon_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"DistributorDraw",method:"multiplicative",value:-.5},{label:"FalloffRange",method:"multiplicative",value:4},{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaximumRange",method:"multiplicative",value:4},{label:"PowerDraw",method:"multiplicative",value:-.5},{label:"ThermalLoad",method:"multiplicative",value:-.5}]},{symbol:"Hpt_CausticMissile_Fixed_Medium",name:"Enzyme Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:.75},{label:"AmmoMaximum",method:"multiplicative",value:.25},{label:"Damage",method:"multiplicative",value:.5},{label:"Mass",method:"multiplicative",value:.6},{label:"PowerDraw",method:"multiplicative",value:.2}]},{symbol:"Hpt_Slugshot_Gimbal_Small",name:"Fragment Cannon",blueprintSymbol:"Weapon_DoubleShot",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_screening_shell",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1.6667},{label:"AmmoMaximum",method:"multiplicative",value:.67776},{label:"BurstInterval",method:"multiplicative",value:-.06},{label:"BurstSize",method:"overwrite",value:2},{label:"Mass",method:"multiplicative",value:.6},{label:"MaximumRange",method:"multiplicative",value:-.1},{label:"PowerDraw",method:"multiplicative",value:.2}]},{symbol:"Hpt_Slugshot_Gimbal_Large",name:"Fragment Cannon",blueprintSymbol:"Weapon_DoubleShot",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_screening_shell",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1.6667},{label:"AmmoMaximum",method:"multiplicative",value:.67776},{label:"BurstInterval",method:"multiplicative",value:-.06},{label:"BurstSize",method:"overwrite",value:2},{label:"Mass",method:"multiplicative",value:.6},{label:"MaximumRange",method:"multiplicative",value:-.1},{label:"PowerDraw",method:"multiplicative",value:.2}]},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Medium",name:"Guardian Shard Cannon",blueprintSymbol:"Weapon_LongRange",grade:5,acquisition:"communityGoal",engineeringLocked:true,modifiers:[{label:"ArmourPenetration",method:"multiplicative",value:1.02},{label:"DistributorDraw",method:"multiplicative",value:5.05},{label:"Jitter",method:"additive",value:-3.5},{label:"Mass",method:"multiplicative",value:.5},{label:"MaximumRange",method:"multiplicative",value:4},{label:"PowerDraw",method:"multiplicative",value:1.3},{label:"ShotSpeed",method:"overwrite",value:1258.89},{label:"ThermalLoad",method:"multiplicative",value:15.5}]},{symbol:"Hpt_MultiCannon_Fixed_Medium",name:"Multi-Cannon",blueprintSymbol:"Weapon_RapidFire",grade:1,acquisition:"communityGoal",experimentalEffectSymbol:"special_phasing_sequence",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:3},{label:"AmmoMaximum",method:"overwrite",value:6400},{label:"BurstInterval",method:"overwrite",value:.1},{label:"FalloffRange",method:"multiplicative",value:-.1},{label:"Jitter",method:"additive",value:3},{label:"MaximumRange",method:"multiplicative",value:-.5},{label:"RoundsPerShot",method:"additive",value:2}]},{symbol:"Hpt_Railgun_Fixed_Medium",name:"Rail Gun",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_feedback_cascade_cooled",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.61145},{label:"FalloffRange",method:"multiplicative",value:5},{label:"Mass",method:"multiplicative",value:.9},{label:"MaximumRange",method:"multiplicative",value:1},{label:"PowerDraw",method:"multiplicative",value:.65},{label:"ReloadTime",method:"multiplicative",value:.25}]},{symbol:"Hpt_Railgun_Fixed_Medium_Burst",name:"Imperial Hammer Rail Gun",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_super_penetrator",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.2635},{label:"Damage",method:"multiplicative",value:-.2},{label:"Mass",method:"multiplicative",value:.7},{label:"PowerDraw",method:"multiplicative",value:.25}]},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:1,acquisition:"communityGoal",experimentalEffectSymbol:"special_drag_munitions",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:2},{label:"AmmoMaximum",method:"multiplicative",value:2},{label:"BurstInterval",method:"multiplicative",value:-.2},{label:"DistributorDraw",method:"overwrite",value:.34},{label:"Mass",method:"multiplicative",value:1.5},{label:"PowerDraw",method:"multiplicative",value:.25}]},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_fsd_interrupt",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"ArmourPenetration",method:"multiplicative",value:.4},{label:"BurstInterval",method:"multiplicative",value:-.1},{label:"Damage",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:1},{label:"Mass",method:"multiplicative",value:1.2},{label:"PowerDraw",method:"multiplicative",value:.3},{label:"ThermalLoad",method:"multiplicative",value:-.1}]},{symbol:"Hpt_BasicMissileRack_Fixed_Large",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"communityGoal",experimentalEffectSymbol:"special_fsd_interrupt",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"ArmourPenetration",method:"multiplicative",value:.4},{label:"BurstInterval",method:"multiplicative",value:-.1},{label:"Damage",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:1},{label:"Mass",method:"multiplicative",value:1.2},{label:"PowerDraw",method:"multiplicative",value:.3},{label:"ThermalLoad",method:"multiplicative",value:-.1}]},{symbol:"Hpt_ElectronicCountermeasure_Tiny",name:"Electronic Countermeasure",blueprintSymbol:"Misc_LightWeight",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:1},{label:"Mass",method:"multiplicative",value:-.85},{label:"PowerDraw",method:"multiplicative",value:1}]},{symbol:"Hpt_CrimeScanner_Size0_Class5",name:"Kill Warrant Scanner",blueprintSymbol:"Sensor_FastScan",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaxAngle",method:"multiplicative",value:-.3},{label:"PowerDraw",method:"multiplicative",value:.5},{label:"ScannerRange",method:"multiplicative",value:.65},{label:"ScannerTimeToScan",method:"multiplicative",value:-.8}]},{symbol:"Hpt_CrimeScanner_Size0_Class3",name:"Kill Warrant Scanner",blueprintSymbol:"Sensor_FastScan",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaxAngle",method:"multiplicative",value:-.3},{label:"PowerDraw",method:"multiplicative",value:.5},{label:"ScannerRange",method:"multiplicative",value:.65},{label:"ScannerTimeToScan",method:"multiplicative",value:-.8}]},{symbol:"Hpt_PlasmaPointDefence_Turret_Tiny",name:"Point Defence",blueprintSymbol:"Misc_LightWeight",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:-.5},{label:"Mass",method:"multiplicative",value:-.85},{label:"MaximumRange",method:"multiplicative",value:1},{label:"ThermalLoad",method:"multiplicative",value:.05}]},{symbol:"Int_PowerDistributor_Size3_Class5",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size3_Class2",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size4_Class5",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size4_Class2",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_PowerDistributor_Size6_Class5",name:"Power Distributor",blueprintSymbol:"PowerDistributor_PrioritySystems",grade:5,acquisition:"communityGoal",modifiers:[{label:"EnginesCapacity",method:"multiplicative",value:.45},{label:"EnginesRecharge",method:"multiplicative",value:.4},{label:"SystemsCapacity",method:"multiplicative",value:.45},{label:"SystemsRecharge",method:"multiplicative",value:.4},{label:"WeaponsCapacity",method:"multiplicative",value:-.25},{label:"WeaponsRecharge",method:"multiplicative",value:-.2}]},{symbol:"Int_Powerplant_Size3_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Armoured",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.13},{label:"Integrity",method:"multiplicative",value:.95},{label:"Mass",method:"multiplicative",value:.2},{label:"PowerCapacity",method:"multiplicative",value:.52}]},{symbol:"Int_Powerplant_Size3_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Boosted",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:-.3},{label:"PowerCapacity",method:"multiplicative",value:.6}]},{symbol:"Int_Powerplant_Size4_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Boosted",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.35},{label:"Integrity",method:"multiplicative",value:-.3},{label:"PowerCapacity",method:"multiplicative",value:.6}]},{symbol:"Int_Powerplant_Size5_Class5",name:"Power Plant",blueprintSymbol:"PowerPlant_Boosted",grade:5,acquisition:"communityGoal",modifiers:[{label:"HeatEfficiency",method:"multiplicative",value:.35},{label:"Integrity",method:"overwrite",value:74},{label:"PowerCapacity",method:"multiplicative",value:.6}]},{symbol:"Int_Hyperdrive_Size3_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Size4_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Size6_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"communityGoal",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_CargoRack_Size5_Class1",name:"Cargo Rack",blueprintSymbol:"CargoRack_IncreasedCapacity",grade:5,acquisition:"communityGoal",modifiers:[{label:"CargoCapacity",method:"multiplicative",value:.34375}]},{symbol:"Int_CargoRack_Size6_Class1",name:"Cargo Rack",blueprintSymbol:"CargoRack_IncreasedCapacity",grade:5,acquisition:"communityGoal",modifiers:[{label:"CargoCapacity",method:"multiplicative",value:.34375}]},{symbol:"Int_ShieldGenerator_Size3_Class5",name:"Shield Generator",blueprintSymbol:"ShieldGenerator_Kinetic",grade:5,acquisition:"communityGoal",modifiers:[{label:"Integrity",method:"multiplicative",value:.2},{label:"KineticResistance",method:"additive",value:.18},{label:"PowerDraw",method:"multiplicative",value:.4},{label:"ThermicResistance",method:"additive",value:.42}]},{symbol:"Hpt_ATDumbfireMissile_Fixed_Medium",name:"AX Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.3},{label:"Damage",method:"multiplicative",value:-.03},{label:"DistributorDraw",method:"multiplicative",value:-.2},{label:"Jitter",method:"additive",value:.5},{label:"Mass",method:"multiplicative",value:.7},{label:"PowerDraw",method:"multiplicative",value:.2},{label:"ReloadTime",method:"multiplicative",value:-.45}]},{symbol:"Hpt_ATDumbfireMissile_Fixed_Large",name:"AX Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.3},{label:"Damage",method:"multiplicative",value:-.03},{label:"DistributorDraw",method:"multiplicative",value:-.2},{label:"Jitter",method:"additive",value:.5},{label:"Mass",method:"multiplicative",value:.7},{label:"PowerDraw",method:"multiplicative",value:.2},{label:"ReloadTime",method:"multiplicative",value:-.45}]},{symbol:"Hpt_ATMultiCannon_Gimbal_Medium",name:"Enhanced AX Multi-Cannon",blueprintSymbol:"Weapon_Overcharged",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_auto_loader",engineeringLocked:true,modifiers:[{label:"Damage",method:"multiplicative",value:.1},{label:"PowerDraw",method:"multiplicative",value:.75},{label:"ThermalLoad",method:"multiplicative",value:3}]},{symbol:"Hpt_ATMultiCannon_Gimbal_Large",name:"Enhanced AX Multi-Cannon",blueprintSymbol:"Weapon_Overcharged",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_auto_loader",engineeringLocked:true,modifiers:[{label:"Damage",method:"multiplicative",value:.1},{label:"PowerDraw",method:"multiplicative",value:.75},{label:"ThermalLoad",method:"multiplicative",value:3}]},{symbol:"Hpt_Guardian_GaussCannon_Fixed_Small",name:"Guardian Gauss Cannon",blueprintSymbol:"Weapon_RapidFire",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:3},{label:"AmmoMaximum",method:"multiplicative",value:4},{label:"BurstInterval",method:"multiplicative",value:-.38237},{label:"BurstRateOfFire",method:"overwrite",value:10},{label:"BurstSize",method:"overwrite",value:4},{label:"Damage",method:"multiplicative",value:-.75214},{label:"DistributorDraw",method:"multiplicative",value:-.75},{label:"FalloffRange",method:"multiplicative",value:-.2},{label:"ThermalLoad",method:"multiplicative",value:-.75}]},{symbol:"Hpt_Guardian_GaussCannon_Fixed_Medium",name:"Guardian Gauss Cannon",blueprintSymbol:"Weapon_RapidFire",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:3},{label:"AmmoMaximum",method:"multiplicative",value:4},{label:"BurstInterval",method:"multiplicative",value:-.38237},{label:"BurstRateOfFire",method:"overwrite",value:10},{label:"BurstSize",method:"overwrite",value:4},{label:"Damage",method:"multiplicative",value:-.75214},{label:"DistributorDraw",method:"multiplicative",value:-.75},{label:"FalloffRange",method:"multiplicative",value:-.2},{label:"ThermalLoad",method:"multiplicative",value:-.75}]},{symbol:"Hpt_Guardian_PlasmaLauncher_Fixed_Small",name:"Guardian Plasma Charger",blueprintSymbol:"Weapon_Overcharged",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"overwrite",value:20},{label:"ArmourPenetration",method:"multiplicative",value:.375},{label:"Damage",method:"multiplicative",value:.66},{label:"PowerDraw",method:"multiplicative",value:.3239},{label:"ShotSpeed",method:"multiplicative",value:4},{label:"ThermalLoad",method:"multiplicative",value:.5}]},{symbol:"Hpt_Guardian_PlasmaLauncher_Fixed_Medium",name:"Guardian Plasma Charger",blueprintSymbol:"Weapon_Overcharged",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"AmmoClipSize",method:"overwrite",value:20},{label:"ArmourPenetration",method:"multiplicative",value:.375},{label:"Damage",method:"multiplicative",value:.66},{label:"PowerDraw",method:"multiplicative",value:.3239},{label:"ShotSpeed",method:"multiplicative",value:4},{label:"ThermalLoad",method:"multiplicative",value:.5}]},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Small",name:"Guardian Shard Cannon",blueprintSymbol:"Weapon_LongRange",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"ArmourPenetration",method:"multiplicative",value:1.02},{label:"DistributorDraw",method:"multiplicative",value:4.2769},{label:"FalloffRange",method:"overwrite",value:1500},{label:"Jitter",method:"additive",value:-3.5},{label:"Mass",method:"multiplicative",value:.5},{label:"MaximumRange",method:"overwrite",value:3e3},{label:"PowerDraw",method:"multiplicative",value:1.3},{label:"ShotSpeed",method:"overwrite",value:3568.6},{label:"ThermalLoad",method:"multiplicative",value:15.5}]},{symbol:"Hpt_Guardian_ShardCannon_Fixed_Medium",name:"Guardian Shard Cannon",blueprintSymbol:"Weapon_LongRange",grade:1,acquisition:"techBroker",engineeringLocked:true,modifiers:[{label:"ArmourPenetration",method:"multiplicative",value:1.02},{label:"DistributorDraw",method:"overwrite",value:3.43},{label:"FalloffRange",method:"overwrite",value:1500},{label:"Jitter",method:"additive",value:-3.5},{label:"Mass",method:"multiplicative",value:.5},{label:"MaximumRange",method:"overwrite",value:3e3},{label:"PowerDraw",method:"multiplicative",value:1.3},{label:"ShotSpeed",method:"overwrite",value:6299.209},{label:"ThermalLoad",method:"multiplicative",value:15.5}]},{symbol:"Hpt_MiningLaser_Fixed_Small",name:"Mining Laser",blueprintSymbol:"Weapon_LongRange",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_incendiary_rounds",modifiers:[{label:"Damage",method:"multiplicative",value:-.05},{label:"DistributorDraw",method:"multiplicative",value:-.5},{label:"FalloffRange",method:"multiplicative",value:7.3333},{label:"Integrity",method:"multiplicative",value:-.5},{label:"MaximumRange",method:"multiplicative",value:4},{label:"PowerDraw",method:"multiplicative",value:-.5},{label:"ThermalLoad",method:"multiplicative",value:-.83}]},{symbol:"Hpt_BasicMissileRack_Fixed_Medium",name:"Seeker Missile Rack",blueprintSymbol:"Weapon_HighCapacity",grade:5,acquisition:"techBroker",experimentalEffectSymbol:"special_thermal_cascade",modifiers:[{label:"AmmoClipSize",method:"multiplicative",value:1},{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"BurstInterval",method:"multiplicative",value:-.1},{label:"DistributorDraw",method:"multiplicative",value:-.4},{label:"Integrity",method:"multiplicative",value:-.6},{label:"Mass",method:"multiplicative",value:-.9},{label:"PowerDraw",method:"multiplicative",value:-.2}]},{symbol:"Hpt_HeatSinkLauncher_Turret_Tiny",name:"Heat Sink Launcher",blueprintSymbol:"Misc_HeatSinkCapacity",grade:1,acquisition:"techBroker",modifiers:[{label:"AmmoMaximum",method:"multiplicative",value:1},{label:"ReloadTime",method:"multiplicative",value:.75}]},{symbol:"Int_Hyperdrive_Size5_Class5",name:"Frame Shift Drive",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size2_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size3_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size4_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size5_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size6_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_Hyperdrive_Overcharge_Size7_Class5",name:"Frame Shift Drive (SCO)",blueprintSymbol:"FSD_LongRange",grade:5,acquisition:"techBroker",modifiers:[{label:"BootTime",method:"multiplicative",value:-.8},{label:"FSDHeatRate",method:"multiplicative",value:.2},{label:"FSDOptimalMass",method:"multiplicative",value:.7},{label:"Integrity",method:"multiplicative",value:-.3},{label:"Mass",method:"multiplicative",value:.3},{label:"PowerDraw",method:"multiplicative",value:.15}]},{symbol:"Int_DetailedSurfaceScanner_Tiny",name:"Detailed Surface Scanner",blueprintSymbol:"Sensor_Expanded",grade:5,acquisition:"techBroker",modifiers:[{label:"DSS_PatchRadius",method:"multiplicative",value:1}]},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Festive Green Remote Release Flak Launcher",blueprintSymbol:"Decorative_Green",grade:5,acquisition:"eventReward",modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Festive Red Remote Release Flak Launcher",blueprintSymbol:"Decorative_Red",grade:5,acquisition:"eventReward",modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]},{symbol:"Hpt_FlakMortar_Turret_Medium",name:"Festive Yellow Remote Release Flak Launcher",blueprintSymbol:"Decorative_Yellow",grade:5,acquisition:"eventReward",modifiers:[{label:"Damage",method:"multiplicative",value:-.99}]}];var PRE_ENGINEERED_MODULES=deepFreeze(pre_engineered_default);function getPreEngineeredVariants(symbol){return filterByKey(PRE_ENGINEERED_MODULES,"symbol",symbol,"getPreEngineeredVariants: symbol")}function isPreEngineered(symbol){requireStringIfPresent(symbol,"isPreEngineered: symbol");return getPreEngineeredVariants(symbol).length>0}export{PRE_ENGINEERED_MODULES,getPreEngineeredVariants,isPreEngineered};//# sourceMappingURL=chunk-PL75RTA2.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ships/pre-engineered.ts"],"names":["filterByKey","requireStringIfPresent","deepFreeze","pre_engineered_default","symbol","PRE_ENGINEERED_MODULES","getPreEngineeredVariants","isPreEngineered","length"],"mappings":"O,2w4BAuKO,IAAMK,uBAA0DH,WACnEC,wBA4BG,SAASG,yBAAyBF,QACrC,OAAOJ,YACHK,uBACA,SACAD,OACA,mCAER,CAkBO,SAASG,gBAAgBH,QAC5BH,uBAAuBG,OAAQ,2BAC/B,OAAOE,yBAAyBF,QAAQI,OAAS,CACrD,QAAAH,uBAAAC,yBAAAC"}
1
+ {"version":3,"sources":["../src/ships/pre-engineered.ts"],"names":["filterByKey","requireStringIfPresent","deepFreeze","pre_engineered_default","symbol","PRE_ENGINEERED_MODULES","getPreEngineeredVariants","isPreEngineered","length"],"mappings":"O,m25BAuKO,IAAMK,uBAA0DH,WACnEC,wBA4BG,SAASG,yBAAyBF,QACrC,OAAOJ,YACHK,uBACA,SACAD,OACA,mCAER,CAkBO,SAASG,gBAAgBH,QAC5BH,uBAAuBG,OAAQ,2BAC/B,OAAOE,yBAAyBF,QAAQI,OAAS,CACrD,QAAAH,uBAAAC,yBAAAC"}
@@ -0,0 +1 @@
1
+ import{mapDamageTypes,stackArmourResistance,effectiveHitPoints}from"./chunk-F44QX47A.js";var reinforcementResistances=(sources,type)=>sources.map(source=>source[`${type}Resistance`]??0);function armourMetrics(input){const bulkhead=input.bulkhead??{};const reinforcements=input.reinforcements??[];const moduleReinforcements=input.moduleReinforcements??[];const bulkheads=input.baseArmour*(1+(bulkhead.hullBoost??0));const reinforcement=reinforcements.reduce((sum,pack)=>sum+(pack.hullReinforcement??0)+input.baseArmour*(pack.hullBoost??0),0);const hitPoints=bulkheads+reinforcement;const resistances=Object.freeze(mapDamageTypes(type=>stackArmourResistance(bulkhead[`${type}Resistance`]??0,reinforcementResistances(reinforcements,type))));return Object.freeze({hitPoints:hitPoints,bulkheads:bulkheads,reinforcement:reinforcement,resistances:resistances,effectiveHitPoints:Object.freeze(effectiveHitPoints(hitPoints,resistances)),moduleArmour:moduleReinforcements.reduce((sum,pack)=>sum+(pack.integrity??0),0),moduleProtection:1-moduleReinforcements.reduce((product,pack)=>product*(1-(pack.moduleProtection??0)),1)})}export{armourMetrics};//# sourceMappingURL=chunk-Q5ALV3DI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/armour.ts"],"names":["mapDamageTypes","stackArmourResistance","effectiveHitPoints","reinforcementResistances","sources","type","map","source","armourMetrics","input","bulkhead","reinforcements","moduleReinforcements","bulkheads","baseArmour","hullBoost","reinforcement","reduce","sum","pack","hullReinforcement","hitPoints","resistances","Object","freeze","moduleArmour","integrity","moduleProtection","product"],"mappings":"O,kFA8IA,IAAMG,yBAA2B,CAC7BC,QACAC,OACWD,QAAQE,IAAKC,QAAWA,OAAO,GAAGF,mBAAqB,GAqB/D,SAASG,cAAcC,OAC1B,MAAMC,SAA2BD,MAAMC,UAAY,CAAA,EACnD,MAAMC,eAAiBF,MAAME,gBAAkB,GAC/C,MAAMC,qBAAuBH,MAAMG,sBAAwB,GAE3D,MAAMC,UAAYJ,MAAMK,YAAc,GAAKJ,SAASK,WAAa,IACjE,MAAMC,cAAgBL,eAAeM,OACjC,CAACC,IAAKC,OACFD,KAAOC,KAAKC,mBAAqB,GAAKX,MAAMK,YAAcK,KAAKJ,WAAa,GAChF,GAEJ,MAAMM,UAAYR,UAAYG,cAE9B,MAAMM,YAAiCC,OAAOC,OAC1CxB,eAAgBK,MACZJ,sBACIS,SAAS,GAAGL,mBAAqB,EACjCF,yBAAyBQ,eAAgBN,SAKrD,OAAOkB,OAAOC,OAAO,CACjBH,oBACAR,oBACAG,4BACAM,wBACApB,mBAAoBqB,OAAOC,OAAOtB,mBAAmBmB,UAAWC,cAChEG,aAAcb,qBAAqBK,OAAO,CAACC,IAAKC,OAASD,KAAOC,KAAKO,WAAa,GAAI,GACtFC,iBACI,EACAf,qBAAqBK,OACjB,CAACW,QAAST,OAASS,SAAW,GAAKT,KAAKQ,kBAAoB,IAC5D,IAGhB,QAAAnB"}
@@ -1 +1 @@
1
- import{buildMaterialCatalogue}from"./chunk-Z43DN4PY.js";var materials_raw_default=[{symbol:"Carbon",name:"Carbon",elementSymbol:"C",grade:1,line:"Carbon"},{symbol:"Vanadium",name:"Vanadium",elementSymbol:"V",grade:2,line:"Carbon"},{symbol:"Niobium",name:"Niobium",elementSymbol:"Nb",grade:3,line:"Carbon"},{symbol:"Yttrium",name:"Yttrium",elementSymbol:"Y",grade:4,line:"Carbon"},{symbol:"Iron",name:"Iron",elementSymbol:"Fe",grade:1,line:"Iron"},{symbol:"Zinc",name:"Zinc",elementSymbol:"Zn",grade:2,line:"Iron"},{symbol:"Tin",name:"Tin",elementSymbol:"Sn",grade:3,line:"Iron"},{symbol:"Selenium",name:"Selenium",elementSymbol:"Se",grade:4,line:"Iron"},{symbol:"Lead",name:"Lead",elementSymbol:"Pb",grade:1,line:"Lead"},{symbol:"Zirconium",name:"Zirconium",elementSymbol:"Zr",grade:2,line:"Lead"},{symbol:"Boron",name:"Boron",elementSymbol:"B",grade:3,line:"Lead"},{symbol:"Antimony",name:"Antimony",elementSymbol:"Sb",grade:4,line:"Lead"},{symbol:"Nickel",name:"Nickel",elementSymbol:"Ni",grade:1,line:"Nickel"},{symbol:"Germanium",name:"Germanium",elementSymbol:"Ge",grade:2,line:"Nickel"},{symbol:"Tungsten",name:"Tungsten",elementSymbol:"W",grade:3,line:"Nickel"},{symbol:"Tellurium",name:"Tellurium",elementSymbol:"Te",grade:4,line:"Nickel"},{symbol:"Phosphorus",name:"Phosphorus",elementSymbol:"P",grade:1,line:"Phosphorus"},{symbol:"Chromium",name:"Chromium",elementSymbol:"Cr",grade:2,line:"Phosphorus"},{symbol:"Molybdenum",name:"Molybdenum",elementSymbol:"Mo",grade:3,line:"Phosphorus"},{symbol:"Technetium",name:"Technetium",elementSymbol:"Tc",grade:4,line:"Phosphorus"},{symbol:"Rhenium",name:"Rhenium",elementSymbol:"Re",grade:1,line:"Rhenium"},{symbol:"Arsenic",name:"Arsenic",elementSymbol:"As",grade:2,line:"Rhenium"},{symbol:"Mercury",name:"Mercury",elementSymbol:"Hg",grade:3,line:"Rhenium"},{symbol:"Polonium",name:"Polonium",elementSymbol:"Po",grade:4,line:"Rhenium"},{symbol:"Sulphur",name:"Sulphur",elementSymbol:"S",grade:1,line:"Sulphur"},{symbol:"Manganese",name:"Manganese",elementSymbol:"Mn",grade:2,line:"Sulphur"},{symbol:"Cadmium",name:"Cadmium",elementSymbol:"Cd",grade:3,line:"Sulphur"},{symbol:"Ruthenium",name:"Ruthenium",elementSymbol:"Ru",grade:4,line:"Sulphur"}];var RAW_MATERIALS=buildMaterialCatalogue(materials_raw_default,"raw");export{RAW_MATERIALS};//# sourceMappingURL=chunk-SQS7672E.js.map
1
+ import{buildMaterialCatalogue}from"./chunk-GTEHRZPN.js";var materials_raw_default=[{symbol:"Carbon",name:"Carbon",elementSymbol:"C",grade:1,line:"Carbon"},{symbol:"Vanadium",name:"Vanadium",elementSymbol:"V",grade:2,line:"Carbon"},{symbol:"Niobium",name:"Niobium",elementSymbol:"Nb",grade:3,line:"Carbon"},{symbol:"Yttrium",name:"Yttrium",elementSymbol:"Y",grade:4,line:"Carbon"},{symbol:"Iron",name:"Iron",elementSymbol:"Fe",grade:1,line:"Iron"},{symbol:"Zinc",name:"Zinc",elementSymbol:"Zn",grade:2,line:"Iron"},{symbol:"Tin",name:"Tin",elementSymbol:"Sn",grade:3,line:"Iron"},{symbol:"Selenium",name:"Selenium",elementSymbol:"Se",grade:4,line:"Iron"},{symbol:"Lead",name:"Lead",elementSymbol:"Pb",grade:1,line:"Lead"},{symbol:"Zirconium",name:"Zirconium",elementSymbol:"Zr",grade:2,line:"Lead"},{symbol:"Boron",name:"Boron",elementSymbol:"B",grade:3,line:"Lead"},{symbol:"Antimony",name:"Antimony",elementSymbol:"Sb",grade:4,line:"Lead"},{symbol:"Nickel",name:"Nickel",elementSymbol:"Ni",grade:1,line:"Nickel"},{symbol:"Germanium",name:"Germanium",elementSymbol:"Ge",grade:2,line:"Nickel"},{symbol:"Tungsten",name:"Tungsten",elementSymbol:"W",grade:3,line:"Nickel"},{symbol:"Tellurium",name:"Tellurium",elementSymbol:"Te",grade:4,line:"Nickel"},{symbol:"Phosphorus",name:"Phosphorus",elementSymbol:"P",grade:1,line:"Phosphorus"},{symbol:"Chromium",name:"Chromium",elementSymbol:"Cr",grade:2,line:"Phosphorus"},{symbol:"Molybdenum",name:"Molybdenum",elementSymbol:"Mo",grade:3,line:"Phosphorus"},{symbol:"Technetium",name:"Technetium",elementSymbol:"Tc",grade:4,line:"Phosphorus"},{symbol:"Rhenium",name:"Rhenium",elementSymbol:"Re",grade:1,line:"Rhenium"},{symbol:"Arsenic",name:"Arsenic",elementSymbol:"As",grade:2,line:"Rhenium"},{symbol:"Mercury",name:"Mercury",elementSymbol:"Hg",grade:3,line:"Rhenium"},{symbol:"Polonium",name:"Polonium",elementSymbol:"Po",grade:4,line:"Rhenium"},{symbol:"Sulphur",name:"Sulphur",elementSymbol:"S",grade:1,line:"Sulphur"},{symbol:"Manganese",name:"Manganese",elementSymbol:"Mn",grade:2,line:"Sulphur"},{symbol:"Cadmium",name:"Cadmium",elementSymbol:"Cd",grade:3,line:"Sulphur"},{symbol:"Ruthenium",name:"Ruthenium",elementSymbol:"Ru",grade:4,line:"Sulphur"}];var RAW_MATERIALS=buildMaterialCatalogue(materials_raw_default,"raw");export{RAW_MATERIALS};//# sourceMappingURL=chunk-Q6YDPREF.js.map
@@ -0,0 +1 @@
1
+ import{fixedSlotReason,validateLoadout}from"./chunk-OJC6AUL7.js";import{calculateModuleLimits}from"./chunk-KPETDYQX.js";import{publishLoadoutInternals,normalizeLoadoutEvent,preEngineeredVariantFor,moduleFitProblem,effectiveModule,moduleFitError}from"./chunk-AAE4KZ2V.js";import{parseSlef,toSlef,stringifySlef,getLoadoutModifier}from"./chunk-T4MKUKYS.js";import{getSourceModuleValue}from"./chunk-NIURLW2F.js";import{isNonOutfittingSlot,isBuiltInHullModule,cloneLoadoutModule,cloneModuleStats,availableBlueprintsFor,availableExperimentalsFor,ownKeyIn,FITTED_ITEM,blueprintAvailableFor,blueprintRoutesFor,experimentalAvailableFor,primitiveEngineeringInputsFor,missingBaseLabels,journalModifiersFor,getPreEngineeredStats,getPreEngineeredJournalModifiers,getPreEngineeredModifiers,ordinaryEngineeringProof,unresolvedModifiers,matchingKeyIn,isCargoHatchSlot,orderBySlotLayout}from"./chunk-JET673E5.js";import{getPreEngineeredVariants}from"./chunk-PL75RTA2.js";import{getShipBySymbol}from"./chunk-6UNAD74Z.js";import{builtInModuleBySymbol}from"./chunk-HUYYGTRM.js";import{ALL_MODULES}from"./chunk-APEG4ZER.js";import{singleJumpRange}from"./chunk-VTMCSCXV.js";import{calculateUnladenMass,calculateCargoCapacity,calculateFuelCapacity}from"./chunk-DCB4COCL.js";import{getDefaultLoadout}from"./chunk-GRIK3EDH.js";import{getExperimentalEffect}from"./chunk-77I24V6B.js";import{ammunitionCapacity}from"./chunk-AA3K5XUE.js";import{baseStats,computeModifiers,labelsForDamageType,scaleForLabel}from"./chunk-CJQ37JII.js";import{resolveBlueprintForModule}from"./chunk-OLKNYGGT.js";import{getExperimentalsForModule}from"./chunk-GLWPSVFV.js";import{getBlueprintGrade}from"./chunk-AYAKU4YA.js";import{loadoutSlotName}from"./chunk-KAA4VOOB.js";import{parseSlotName,enumerateSlots}from"./chunk-RAO35XDF.js";import{normalizeKey,CATALOGUE_KEY}from"./chunk-BKWLI44T.js";import{truncate,describeValue,requireString,requireStringIfPresent}from"./chunk-PKWVG2JY.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var REBUY_FRACTION=.05;function exportLoadoutEvent(input,options){const fromSource=options.credits==="source";const source=fromSource?input.sourcePurchase:null;const totals=source!==null&&!input.sourceTotalsVoided&&sourceTotalsHold(input.modules,source)?source:null;const hullValue=fromSource?source?.hullValue??null:input.retailHullValue;const modulesValue=fromSource?totals?.modulesValue??null:computedModulesValue(input.modules,input.statsFor);const rebuy=fromSource?totals?.rebuy??null:hullValue===null||modulesValue===null?null:Math.trunc((hullValue+modulesValue)*REBUY_FRACTION);return{Ship:input.shipSymbol.toLowerCase(),...input.shipName===void 0?{}:{ShipName:input.shipName},...input.shipIdent===void 0?{}:{ShipIdent:input.shipIdent},...hullValue===null?{}:{HullValue:hullValue},...modulesValue===null?{}:{ModulesValue:modulesValue},UnladenMass:input.unladenMass,CargoCapacity:input.cargoCapacity,...input.maxJumpRange===null?{}:{MaxJumpRange:input.maxJumpRange},FuelCapacity:{Main:input.fuelCapacity.main,Reserve:input.fuelCapacity.reserve},...rebuy===null?{}:{Rebuy:rebuy},Modules:exportModules(input,options,fromSource)}}function exportModules(input,options,fromSource){const ordered=options.moduleOrder==="slots"?slotOrderedModules(input.modules,input.layout):[...input.modules.values()];return ordered.map(module=>{const on=module.On??(options.explicitPower?true:void 0);const priority=module.Priority??(options.explicitPower?0:void 0);const value=fromSource?sourceModuleValue(module,input.sourcePurchase):moduleValue(module,input.statsFor);return{Slot:module.Slot,Item:module.Item.toLowerCase(),...on===void 0?{}:{On:on},...priority===void 0?{}:{Priority:priority},...module.Health===void 0?{}:{Health:module.Health},...typeof value==="number"?{Value:value}:{},...module.Engineering===void 0?{}:{Engineering:cloneLoadoutModule(module).Engineering}}})}function slotOrderedModules(modules,layout){return orderBySlotLayout([...modules.values()],layout,module=>module.Slot)}function computedModulesValue(modules,statsFor){let sum=0;for(const module of modules.values()){const value=moduleValue(module,statsFor);if(value==="unknown")return null;if(value!=="free")sum+=value}return sum}function moduleValue(module,statsFor){const stats=statsFor(module);if(stats!==null)return stats.cost??"unknown";return isNonOutfittingSlot(module.Slot)||isBuiltInHullModule(module)?"free":"unknown"}var SOURCE_ITEM="ShipLoadout: sourcePurchase moduleValues[].item";function sourceModuleValue(module,source){const entry=source===null?null:getSourceModuleValue(source,module.Slot);if(entry===null)return"unknown";return normalizeKey(entry.item,SOURCE_ITEM)===normalizeKey(module.Item,FITTED_ITEM)?entry.value:"unknown"}function sourceTotalsHold(modules,source){for(const entry of source.moduleValues){const key=matchingKeyIn(modules,entry.slot);const fitted=key===null?void 0:modules.get(key);if(!fitted)return false;if(isCargoHatchSlot(entry.slot)&&entry.value===0)continue;if(normalizeKey(fitted.Item,FITTED_ITEM)!==normalizeKey(entry.item,SOURCE_ITEM)){return false}}return true}var SLOT_KEY="ShipLoadout: slotKey";var FITTED_SLOT="ShipLoadout: fitted module Slot";var LoadoutEditError=class extends TypeError{code;constraint;params;constructor(message,code,params,constraint){super(message);this.code=code;this.params=deepFreeze(structuredClone(params));if(constraint!==void 0)this.constraint=constraint}};var experimentalEffectUnsupported=(code,params)=>deepFreeze({kind:"unsupported",code:code,params:params});var engineeringNormalizationUnsupported=(code,params)=>deepFreeze({kind:"unsupported",code:code,params:params});function weighable(tonnes){return tonnes!==void 0&&Number.isFinite(tonnes)&&tonnes>=0?tonnes:void 0}var AGGREGATE_STATS=["mass","cargoCapacity","fuelCapacity"];var ShipLoadout=class _ShipLoadout{#ship;#shipSymbol;#modules;#moduleStats;#primitiveModifiers;#top;#sourcePurchase;#importOutcomes;#slotCache=/* @__PURE__ */new Map;#layoutCache;constructor(ship,shipSymbol,modules,top,sourcePurchase=null,moduleStats=/* @__PURE__ */new Map,primitiveModifiers=/* @__PURE__ */new Map,importOutcomes=deepFreeze([])){this.#ship=ship;this.#shipSymbol=shipSymbol;this.#modules=modules;this.#top=top;this.#sourcePurchase=sourcePurchase;this.#moduleStats=moduleStats;this.#primitiveModifiers=primitiveModifiers;this.#importOutcomes=importOutcomes;publishLoadoutInternals(this,{ship:ship,modules:()=>[...this.#modules.values()],effectiveModules:()=>this.#modulesForEffectiveStats(),effectiveModule:module=>this.#moduleForEffectiveStats(module),statsFor:module=>this.#statsFor(module),layout:()=>this.#layout(),resolveDrive:()=>this.#resolveDrive(),frameShiftDriveModule:()=>this.#frameShiftDrive()?.module,calculationModules:()=>this.#calculationModules(),statedMainFuel:()=>this.#top.FuelCapacity?.Main})}static fromSlef(input,index=0){const entries=parseSlef(input);const entry=entries[index];if(!entry){throw new TypeError(`ShipLoadout.fromSlef: no entry at index ${truncate(index)} (have ${entries.length})`)}const imported=normalizeLoadoutEvent(entry.data);const ship=getShipBySymbol(imported.shipSymbol);if(!ship){throw new TypeError(`ShipLoadout.fromSlef: unknown hull "${truncate(imported.shipSymbol)}"`)}return _ShipLoadout.#fromImported(imported,ship)}static fromLoadout(event){if(event===null||typeof event!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: event must be a Loadout event, received ${describeValue(event)}`)}const imported=normalizeLoadoutEvent(event);const ship=getShipBySymbol(imported.shipSymbol);if(!ship){throw new TypeError(`ShipLoadout.fromLoadout: unknown hull "${truncate(imported.shipSymbol)}"`)}return _ShipLoadout.#fromImported(imported,ship)}static#fromImported(imported,ship){const outcomes=[...imported.outcomes];const loadout=new _ShipLoadout(ship,imported.shipSymbol,imported.modules,imported.top,imported.sourcePurchase,imported.moduleStats,imported.primitiveModifiers,outcomes);const{UnladenMass:UnladenMass,CargoCapacity:CargoCapacity,FuelCapacity:FuelCapacity}=imported.top;for(const module of[...imported.modules.values()]){const unresolved=loadout.#rollStatedRecipe(module);if(unresolved!==null)outcomes.push(unresolved)}if(UnladenMass!==void 0)loadout.#top.UnladenMass=UnladenMass;if(CargoCapacity!==void 0)loadout.#top.CargoCapacity=CargoCapacity;if(FuelCapacity!==void 0)loadout.#top.FuelCapacity=FuelCapacity;deepFreeze(outcomes);return loadout}#rollStatedRecipe(module){const engineering=module.Engineering;if(!engineering||engineering.Modifiers!==void 0||typeof engineering.BlueprintName!=="string"){return null}if(this.#moduleStats.has(module.Slot)){const variant=preEngineeredVariantFor(module);if(variant?.acquisition!=="mercenary"||engineering.Level<=variant.grade){return null}}try{this.applyBlueprint(module.Slot,engineering.BlueprintName,{grade:engineering.Level,quality:engineering.Quality??1,...typeof engineering.ExperimentalEffect==="string"?{experimentalEffectSymbol:engineering.ExperimentalEffect}:{}});return null}catch(error){if(!(error instanceof TypeError)&&!(error instanceof RangeError))throw error;return{action:"unresolvedEngineering",slot:module.Slot,sourceSymbol:module.Item,blueprintSymbol:engineering.BlueprintName}}}static empty(shipSymbol){const requested=requireString(shipSymbol,"ShipLoadout.empty: shipSymbol");const ship=getShipBySymbol(requested);if(!ship){throw new TypeError(`ShipLoadout.empty: no slot layout for hull "${truncate(shipSymbol)}"`)}const fitted=(getDefaultLoadout(ship.symbol)?.modules??[]).filter(module=>{const parsed=parseSlotName(module.slot);return parsed!==null&&fixedSlotReason(parsed)!==null});return new _ShipLoadout(ship,ship.symbol,new Map(fitted.map(module=>[module.slot,{Slot:module.slot,Item:module.symbol}])),{})}static default(shipSymbol){const requested=requireString(shipSymbol,"ShipLoadout.default: shipSymbol");const ship=getShipBySymbol(requested);if(!ship){throw new TypeError(`ShipLoadout.default: no default loadout for hull "${truncate(shipSymbol)}"`)}const loadout=getDefaultLoadout(ship.symbol);return new _ShipLoadout(ship,loadout.symbol,new Map(loadout.modules.map(module=>[module.slot,{Slot:module.slot,Item:module.symbol}])),{})}get shipSymbol(){return this.#shipSymbol}get shipName(){return this.#top.ShipName??null}get shipIdent(){return this.#top.ShipIdent??null}get unladenMass(){return this.#top.UnladenMass??this.#computedUnladenMass()}#computedUnladenMass(){return calculateUnladenMass(this.#ship.hullMass,this.#calculationModules())}get fuelCapacity(){const cap=this.#top.FuelCapacity;if(cap?.Main!==void 0&&cap.Reserve!==void 0){return Object.freeze({main:cap.Main,reserve:cap.Reserve})}const computed=this.#computedFuelCapacity();return Object.freeze({main:cap?.Main??computed.main,reserve:cap?.Reserve??computed.reserve})}get cargoCapacity(){return this.#top.CargoCapacity??this.#computedCargoCapacity()}#computedCargoCapacity(){return calculateCargoCapacity(this.#calculationModules())}#computedFuelCapacity(){return calculateFuelCapacity(this.#ship.reserveFuelCapacity,this.#calculationModules())}get hullValue(){return this.#top.HullValue??null}get modulesValue(){return this.#top.ModulesValue??null}get rebuy(){return this.#top.Rebuy??null}get sourcePurchase(){return this.#sourcePurchase}get importOutcomes(){return this.#importOutcomes}validation(){const slots=this.#layout();const byKey=new Map(slots.map(slot=>[normalizeKey(slot.key,CATALOGUE_KEY),slot]));const modules=[...this.#modules.values()].map(module=>{const stats=this.#statsFor(module);const slot=byKey.get(normalizeKey(module.Slot,FITTED_SLOT));const builtIn=stats===null&&isNonOutfittingSlot(module.Slot)||isBuiltInHullModule(module);const fitProblem=stats&&slot&&!builtIn?moduleFitProblem(this.#shipSymbol,slot,stats):null;const thrusterMaxMass=weighable(stats?.slot==="thrusters"?effectiveModule(this.#moduleForEffectiveStats(module),stats)?.maxMass:void 0);return{slot:module.Slot,symbol:module.Item,requiresKnownSlot:!builtIn,fitError:fitProblem?.message??null,...fitProblem===null?{}:{fitConstraint:fitProblem.constraint},...fitProblem?.params===void 0?{}:{fitParams:fitProblem.params},...stats?.exclusionGroup===void 0?{}:{exclusionGroup:stats.exclusionGroup},...stats?.limitGroup===void 0?{}:{limitGroup:stats.limitGroup},...stats?.limitIncrease===void 0?{}:{limitIncrease:stats.limitIncrease},...thrusterMaxMass===void 0?{}:{thrusterMaxMass:thrusterMaxMass}}});const dry=weighable(this.unladenMass);const fuel=weighable(this.fuelCapacity.main);const cargo=weighable(this.cargoCapacity);const mass=dry===void 0?void 0:{dry:dry,...fuel===void 0?{}:{fuel:fuel},...fuel===void 0||cargo===void 0?{}:{cargo:cargo}};return validateLoadout({shipSymbol:this.#shipSymbol,slots:slots,modules:modules,...mass===void 0?{}:{mass:mass}})}slots(kind){const cached=this.#slotCache.get(kind);if(cached!==void 0)return cached;const slots=kind===void 0?this.#layout():this.#layout().filter(slot=>slot.kind===kind);const currentLimits=this.#moduleLimits();const value=deepFreeze(slots.map(slot=>{const stats=this.#moduleStatsAt(slot.key);const fixedReason=fixedSlotReason(slot);const immovableReason=fixedReason!==null?fixedReason:stats?.limitIncrease!==void 0&&this.#moduleLimitRegression(slot.key,null,currentLimits,stats)!==null?"moduleLimit":null;return{...slot,name:loadoutSlotName(slot),module:this.fittedModuleAt(slot.key),removable:immovableReason===null,...immovableReason===null?{}:{immovableReason:immovableReason}}}));this.#slotCache.set(kind,value);return value}fittedModuleAt(slotKey){const module=this.#fittedModuleFor(slotKey);if(!module)return null;const raw=cloneLoadoutModule(module);const stats=this.#statsFor(module);const effective=effectiveModule(this.#moduleForEffectiveStats(module),stats);return deepFreeze({slot:module.Slot,symbol:raw.Item,on:raw.On,priority:raw.Priority,health:raw.Health,value:raw.Value,engineering:raw.Engineering,raw:raw,stats:stats===null?null:cloneModuleStats(stats),effectiveStats:effective===null?null:cloneModuleStats(effective),ammunition:ammunitionCapacity(effective),preEngineeredVariant:preEngineeredVariantFor(raw)})}fittedModules(){return deepFreeze([...this.#modules.keys()].flatMap(key=>{const fitted=this.fittedModuleAt(key);return fitted===null?[]:[fitted]}))}availableBlueprints(slotKey){const module=this.#fittedModuleFor(slotKey);return deepFreeze(module?availableBlueprintsFor(module.Item,this.#statsFor(module)):[])}availableExperimentalEffects(slotKey){const module=this.#fittedModuleFor(slotKey);return deepFreeze(module?availableExperimentalsFor(module.Item,this.#statsFor(module)):[])}modulesForSlot(slotKey){const slot=this.#requireSlot(slotKey);const occupied=new Set([...this.#modules.values()].flatMap(fitted=>{if(normalizeKey(fitted.Slot,FITTED_SLOT)===normalizeKey(slot.key,CATALOGUE_KEY))return[];const group=this.#statsFor(fitted)?.exclusionGroup;return group===void 0?[]:[group]}));const currentLimits=this.#moduleLimits();const currentStats=this.#moduleStatsAt(slot.key);return ALL_MODULES.filter(module=>module.grantOnly===void 0&&moduleFitError(this.#shipSymbol,slot,module)===null&&(module.exclusionGroup===void 0||!occupied.has(module.exclusionGroup))&&this.#moduleLimitRegression(slot.key,module,currentLimits,currentStats)===null)}repairFixedMount(slotKey){const requested=requireString(slotKey,SLOT_KEY);const wanted=normalizeKey(requested,SLOT_KEY);const slot=this.#requireSlot(requested);const fittedKey=this.#fittedKey(requested);const resultSlot=fittedKey??requested;const canonicalKey=slot.key;if(fixedSlotReason(slot)===null){return deepFreeze({status:"refused",slot:resultSlot,reason:"notFixedMount"})}const current=this.#fittedModuleFor(requested);const currentStats=current?this.#statsFor(current):null;const valid=current!==void 0&&currentStats!==null&&(slot.kind==="cargoHatch"?isBuiltInHullModule(current):moduleFitProblem(this.#shipSymbol,slot,currentStats)===null);if(valid){return deepFreeze({status:"unchanged",slot:current.Slot,symbol:current.Item})}const defaultModule=getDefaultLoadout(this.#shipSymbol)?.modules.find(module=>normalizeKey(module.slot,CATALOGUE_KEY)===wanted);if(!defaultModule){return deepFreeze({status:"defaultUnavailable",slot:resultSlot})}const ownKey=ownKeyIn(this.#modules,canonicalKey);const replacement={Slot:ownKey,Item:defaultModule.symbol,...current?.On===void 0?{}:{On:current.On},...current?.Priority===void 0?{}:{Priority:current.Priority},...current?.Health===void 0?{}:{Health:current.Health}};const replacementStats=builtInModuleBySymbol(defaultModule.symbol,"ShipLoadout.repairFixedMount")??(isBuiltInHullModule(replacement)?builtInModuleBySymbol("ModularCargoBayDoor","ShipLoadout.repairFixedMount"):null);if(!replacementStats){return deepFreeze({status:"defaultUnavailable",slot:resultSlot,symbol:defaultModule.symbol})}this.#replaceModule(ownKey,replacement,replacementStats);return deepFreeze({status:"repaired",slot:ownKey,symbol:defaultModule.symbol})}setModule(slotKey,module){const slot=this.#requireSlot(slotKey);if(module===null||module===void 0){throw new TypeError(`ShipLoadout.setModule: no module supplied for "${truncate(slotKey)}" (did the module lookup return undefined?)`)}if(typeof module.symbol!=="string"){throw new TypeError(`ShipLoadout.setModule: module for "${truncate(slotKey)}" must be an outfitting module, received ${describeValue(module)}`)}module=cloneModuleStats(module);const catalogued=builtInModuleBySymbol(module.symbol,FITTED_ITEM);if(catalogued===null){throw new TypeError(`ShipLoadout.setModule: no module is catalogued as "${truncate(module.symbol)}"`)}for(const field of AGGREGATE_STATS){const stated=module[field];if(stated===void 0){if(catalogued[field]===void 0)continue;throw new TypeError(`ShipLoadout.setModule: the supplied record for "${truncate(module.symbol)}" has no ${field}`)}if(typeof stated!=="number"||!Number.isFinite(stated)){throw new TypeError(`ShipLoadout.setModule: the supplied record for "${truncate(module.symbol)}" states a ${field} of ${describeValue(stated)}`)}}const problem=moduleFitProblem(this.#shipSymbol,slot,module);if(problem){if(problem.constraint==="immutableSlot"){throw new LoadoutEditError(`ShipLoadout.setModule: ${truncate(module.symbol)} → ${truncate(slotKey)}: ${problem.message}`,"immutableSlot",{slot:slot.key})}throw new LoadoutEditError(`ShipLoadout.setModule: ${truncate(module.symbol)} → ${truncate(slotKey)}: ${problem.message}`,"incompatibleModule",{...problem.params,slot:slot.key,symbol:module.symbol,constraint:problem.constraint},problem.constraint)}if(module.exclusionGroup!==void 0){const conflict=[...this.#modules.values()].find(fitted=>normalizeKey(fitted.Slot,FITTED_SLOT)!==normalizeKey(slot.key,CATALOGUE_KEY)&&this.#statsFor(fitted)?.exclusionGroup===module.exclusionGroup);if(conflict){throw new LoadoutEditError(`ShipLoadout.setModule: ${truncate(module.symbol)} → ${truncate(slotKey)}: ${module.exclusionGroup} is limited to one per ship (already fitted in ${truncate(conflict.Slot)})`,"duplicateExclusiveModule",{exclusionGroup:module.exclusionGroup,slot:slot.key,symbol:module.symbol,previousSlot:conflict.Slot,previousSymbol:conflict.Item})}}const limitProblem=this.#moduleLimitRegression(slot.key,module);if(limitProblem!==null){throw new LoadoutEditError(`ShipLoadout.setModule: ${truncate(module.symbol)} → ${truncate(slotKey)}: ${limitProblem.group} would have ${limitProblem.count} modules but the ship allows ${limitProblem.limit}`,"moduleLimitExceeded",{group:limitProblem.group,count:limitProblem.count,limit:limitProblem.limit,slot:slot.key,symbol:module.symbol})}const key=this.#fittedKey(slotKey)??slot.key;this.#replaceModule(key,{Slot:key,Item:module.symbol},module);return this}removeModule(slotKey){const wanted=normalizeKey(slotKey,SLOT_KEY);if(wanted==="cargohatch"){throw new LoadoutEditError("ShipLoadout.removeModule: the cargoHatch slot cannot be changed","immutableSlot",{slot:"CargoHatch"})}const parsed=parseSlotName(slotKey);const slot=this.#layout().find(candidate=>normalizeKey(candidate.key,CATALOGUE_KEY)===wanted);if(parsed!==null&&fixedSlotReason(parsed)==="requiredSlot"){const fittedKey=this.#fittedKey(slotKey);const key2=slot?.key??fittedKey??slotKey;throw new LoadoutEditError(`ShipLoadout.removeModule: the ${truncate(key2)} slot is required and cannot be emptied`,"requiredSlot",{slot:key2})}const key=this.#fittedKey(slotKey);if(key!==null){const limitProblem=this.#moduleLimitRegression(key,null);if(limitProblem!==null){const fitted=this.#modules.get(key);throw new LoadoutEditError(`ShipLoadout.removeModule: ${truncate(slotKey)}: ${limitProblem.group} would have ${limitProblem.count} modules but the ship allows ${limitProblem.limit}`,"moduleLimitExceeded",{group:limitProblem.group,count:limitProblem.count,limit:limitProblem.limit,slot:key,...fitted===void 0?{}:{symbol:fitted.Item}})}this.#replaceModule(key,null)}return this}applyBlueprint(slotKey,blueprintSymbol,options){requireString(blueprintSymbol,"ShipLoadout.applyBlueprint: blueprintSymbol");if(options===null||typeof options!=="object"){throw new TypeError(`ShipLoadout.applyBlueprint: options must be an object with a grade, received ${describeValue(options)}`)}const wantedGrade=options.grade;const wantedQuality=options.quality;const wantedExperimental=options.experimentalEffectSymbol??void 0;requireStringIfPresent(wantedExperimental,"ShipLoadout.applyBlueprint: options.experimentalEffectSymbol");const module=this.#fittedModuleFor(slotKey);if(!module){throw new RangeError(`ShipLoadout.applyBlueprint: slot "${truncate(slotKey)}" is empty`)}const fittedStats=this.#statsFor(module);if(!fittedStats){throw new TypeError(`ShipLoadout.applyBlueprint: no stats for module "${truncate(module.Item)}"`)}const recipe=resolveBlueprintForModule(module.Item,blueprintSymbol);const named=recipe===blueprintSymbol?`"${truncate(blueprintSymbol)}"`:`"${truncate(blueprintSymbol)}" (${truncate(recipe)} on this module)`;const written=blueprintSymbol.trim().toLowerCase();const resolved=recipe.trim().toLowerCase();if(getPreEngineeredVariants(module.Item).some(variant=>variant.acquisition==="eventReward"&&(variant.blueprintSymbol.toLowerCase()===written||variant.blueprintSymbol.toLowerCase()===resolved))){throw new TypeError(`ShipLoadout.applyBlueprint: ${named} is a fixed pre-engineered identity, not a craftable blueprint; use setPreEngineeredVariant to fit its fixed article`)}if(!Number.isInteger(wantedGrade)||wantedGrade<1||wantedGrade>5){throw new RangeError(`ShipLoadout.applyBlueprint: no blueprint ${named} grade ${truncate(wantedGrade)}`)}const grade=getBlueprintGrade(recipe,wantedGrade);if(!grade){throw new RangeError(`ShipLoadout.applyBlueprint: no blueprint ${named} grade ${truncate(wantedGrade)}`)}let experimental;if(wantedExperimental!==void 0){experimental=getExperimentalEffect(wantedExperimental);if(!experimental){throw new RangeError(`ShipLoadout.applyBlueprint: unknown experimental effect "${truncate(wantedExperimental)}"`)}}const quality=wantedQuality??1;if(!Number.isFinite(quality)||quality<0||quality>1){throw new RangeError(`ShipLoadout.applyBlueprint: quality must be a finite number in [0, 1]`)}if(fittedStats.engineeringLocked){throw new TypeError(`ShipLoadout.applyBlueprint: module "${truncate(module.Item)}" is a final pre-engineered article and accepts no further engineering`)}if(!blueprintAvailableFor(module.Item,blueprintSymbol)){const offered=[...blueprintRoutesFor(module.Item)].map(([blueprint,route])=>`${blueprint} (${route})`);throw new TypeError(offered.length>0?`ShipLoadout.applyBlueprint: module "${truncate(module.Item)}" is not offered blueprint ${named}; available candidates are ${offered.join(", ")}`:`ShipLoadout.applyBlueprint: no registry lists an engineering menu for module "${truncate(module.Item)}"`)}if(wantedExperimental!==void 0&&!experimentalAvailableFor(module.Item,wantedExperimental)){const offered=getExperimentalsForModule(module.Item);throw new TypeError(`ShipLoadout.applyBlueprint: module "${truncate(module.Item)}" is not offered experimental effect "${truncate(wantedExperimental)}"; it takes ${offered.length>0?offered.join(", "):"no experimental effect"}`)}const stats=this.#engineeringBaseStats(module)??fittedStats;const base=baseStats(stats);const canonical=primitiveEngineeringInputsFor(stats,grade,experimental);const missing=missingBaseLabels(stats,base,canonical.grade.features,canonical.experimental?.modifiers);if(missing.length>0){throw new TypeError(`ShipLoadout.applyBlueprint: cannot compute ${named} for module "${truncate(module.Item)}"; missing base stats for ${missing.join(", ")}`)}const damageDistribution=experimental?.damageDistribution??grade.damageDistribution;const primitiveModifiers=computeModifiers(base,canonical.grade,quality,canonical.experimental);const modifiers=journalModifiersFor(stats,primitiveModifiers);if(damageDistribution){for(const type of["kinetic","thermal","explosive","absolute"]){const value=damageDistribution[type];if(value===void 0)continue;const label=labelsForDamageType(type)[0];if(label===void 0)continue;const damageModifier={Label:label,Value:value*scaleForLabel(label),OriginalValue:(stats.damageDistribution?.[type]??0)*scaleForLabel(label)};modifiers.push(damageModifier);primitiveModifiers.push(damageModifier)}}const engineering={BlueprintName:blueprintSymbol,Level:wantedGrade,Quality:quality,...wantedExperimental!==void 0?{ExperimentalEffect:wantedExperimental}:{},Modifiers:modifiers};this.#replaceModule(module.Slot,{...module,Engineering:engineering},stats,primitiveModifiers);return this}setExperimentalEffect(slotKey,experimental){if(experimental!==null){requireString(experimental,"ShipLoadout.setExperimentalEffect: experimental")}const wanted=experimental;const module=this.#fittedModuleFor(slotKey);if(!module)return experimentalEffectUnsupported("emptySlot",{slot:slotKey});const stats=this.#statsFor(module);if(!stats){return experimentalEffectUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const engineering=module.Engineering;if(!engineering){return experimentalEffectUnsupported("notEngineered",{slot:module.Slot,symbol:module.Item})}if(stats.engineeringLocked){return experimentalEffectUnsupported("finalArticle",{slot:module.Slot,symbol:module.Item})}const previous=engineering.ExperimentalEffect??null;if(previous===null&&wanted===null||previous!==null&&wanted!==null&&previous.trim().toLowerCase()===wanted.trim().toLowerCase()){return deepFreeze({kind:"unchanged",experimentalEffectSymbol:previous})}const variant=preEngineeredVariantFor(module);let effect;if(wanted!==null){effect=getExperimentalEffect(wanted);if(!effect){return experimentalEffectUnsupported("unknownExperimentalEffect",{slot:module.Slot,symbol:module.Item,experimental:wanted})}const restoresBakedEffect=variant?.experimentalEffectSymbol!==void 0&&variant.experimentalEffectSymbol.trim().toLowerCase()===wanted.trim().toLowerCase();if(!experimentalAvailableFor(module.Item,wanted)&&!restoresBakedEffect){return experimentalEffectUnsupported("unsupportedExperimentalEffect",{slot:module.Slot,symbol:module.Item,experimental:wanted})}}if(variant&&variant.acquisition!=="mercenary"){const stock=this.#engineeringBaseStats(module);if(!stock){return experimentalEffectUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const missing=missingBaseLabels(stock,baseStats(stock),[],effect?.modifiers);if(missing.length>0){return experimentalEffectUnsupported("unresolvedModifiers",{slot:module.Slot,symbol:module.Item,labels:missing})}const{experimentalEffectSymbol:originalEffect,...withoutEffect}=variant;const adjusted=wanted===null?withoutEffect:{...withoutEffect,experimentalEffectSymbol:wanted};const resolved=getPreEngineeredStats(withoutEffect);if(!resolved){return experimentalEffectUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const replacement={BlueprintName:engineering.BlueprintName,Level:engineering.Level,Quality:engineering.Quality,...wanted===null?{}:{ExperimentalEffect:wanted},Modifiers:getPreEngineeredJournalModifiers(adjusted)};this.#replaceModule(module.Slot,{...module,Engineering:replacement},cloneModuleStats(resolved),getPreEngineeredModifiers(adjusted))}else{const blueprint=engineering.BlueprintName;const grade=engineering.Level;const quality=engineering.Quality;if(typeof blueprint!=="string"||!Number.isInteger(grade)||grade<1||grade>5){return experimentalEffectUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const currentEffect=previous===null?void 0:getExperimentalEffect(previous)??null;if(ordinaryEngineeringProof(module.Item,engineering,currentEffect)==="unproven"){return experimentalEffectUnsupported("unidentifiedPreEngineeredVariant",{slot:module.Slot,symbol:module.Item,blueprint:blueprint})}const recipe=resolveBlueprintForModule(module.Item,blueprint);const blueprintGrade=getBlueprintGrade(recipe,grade);if(!blueprintGrade||!blueprintAvailableFor(module.Item,blueprint)||!Number.isFinite(quality)||quality<0||quality>1){return experimentalEffectUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item,blueprint:blueprint,grade:grade})}const base=this.#engineeringBaseStats(module)??stats;const canonical=primitiveEngineeringInputsFor(base,blueprintGrade,effect);const missing=missingBaseLabels(base,baseStats(base),canonical.grade.features,canonical.experimental?.modifiers);if(missing.length>0){return experimentalEffectUnsupported("unresolvedModifiers",{slot:module.Slot,symbol:module.Item,labels:missing})}this.applyBlueprint(module.Slot,blueprint,{grade:grade,quality:quality,...wanted===null?{}:{experimentalEffectSymbol:wanted}})}return deepFreeze({kind:"updated",previousExperimentalEffectSymbol:previous,experimentalEffectSymbol:wanted})}completeEngineeringGrade(slotKey){const module=this.#fittedModuleFor(slotKey);if(!module)return engineeringNormalizationUnsupported("emptySlot",{slot:slotKey});const stats=this.#statsFor(module);if(!stats){return engineeringNormalizationUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const engineering=module.Engineering;if(!engineering){return engineeringNormalizationUnsupported("notEngineered",{slot:module.Slot,symbol:module.Item})}if(stats.engineeringLocked){return engineeringNormalizationUnsupported("finalArticle",{slot:module.Slot,symbol:module.Item})}if(engineering.Quality===1&&engineering.Modifiers!==void 0){return deepFreeze({kind:"unchanged"})}const previousQuality=engineering.Quality;if(!Number.isFinite(previousQuality)||previousQuality<0||previousQuality>1){return engineeringNormalizationUnsupported("invalidQuality",{slot:module.Slot,symbol:module.Item})}const experimental=engineering.ExperimentalEffect??null;const effect=experimental===null?void 0:getExperimentalEffect(experimental)??void 0;if(experimental!==null&&!effect){return engineeringNormalizationUnsupported("unknownExperimentalEffect",{slot:module.Slot,symbol:module.Item,experimental:experimental})}const blueprint=engineering.BlueprintName;const grade=engineering.Level;if(typeof blueprint!=="string"||!Number.isInteger(grade)||grade<1||grade>5){return engineeringNormalizationUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const variant=preEngineeredVariantFor(module);const restoresBakedEffect=variant?.experimentalEffectSymbol!==void 0&&variant.experimentalEffectSymbol.trim().toLowerCase()===experimental?.trim().toLowerCase();if(experimental!==null&&!experimentalAvailableFor(module.Item,experimental)&&!restoresBakedEffect){return engineeringNormalizationUnsupported("unsupportedExperimentalEffect",{slot:module.Slot,symbol:module.Item,experimental:experimental})}if(variant&&variant.acquisition!=="mercenary"){const stock=this.#engineeringBaseStats(module);if(!stock){return engineeringNormalizationUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const missing=missingBaseLabels(stock,baseStats(stock),[],effect?.modifiers);if(missing.length>0){return engineeringNormalizationUnsupported("unresolvedModifiers",{slot:module.Slot,symbol:module.Item,labels:missing})}const{experimentalEffectSymbol:originalEffect,...withoutEffect}=variant;const adjusted=experimental===null?withoutEffect:{...withoutEffect,experimentalEffectSymbol:experimental};const resolved=getPreEngineeredStats(withoutEffect);if(!resolved){return engineeringNormalizationUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item})}const replacement={BlueprintName:engineering.BlueprintName,Level:engineering.Level,Quality:1,...experimental===null?{}:{ExperimentalEffect:experimental},Modifiers:getPreEngineeredJournalModifiers(adjusted)};this.#replaceModule(module.Slot,{...module,Engineering:replacement},cloneModuleStats(resolved),getPreEngineeredModifiers(adjusted))}else{const proof=ordinaryEngineeringProof(module.Item,engineering,effect);if(proof==="unproven"||proof==="proven"&&!blueprintAvailableFor(module.Item,blueprint)){return engineeringNormalizationUnsupported("unidentifiedPreEngineeredVariant",{slot:module.Slot,symbol:module.Item,blueprint:blueprint})}const recipe=resolveBlueprintForModule(module.Item,blueprint);const blueprintGrade=getBlueprintGrade(recipe,grade);if(!blueprintGrade||!blueprintAvailableFor(module.Item,blueprint)){return engineeringNormalizationUnsupported("unsupportedEngineering",{slot:module.Slot,symbol:module.Item,blueprint:blueprint,grade:grade})}const base=this.#engineeringBaseStats(module)??stats;const canonical=primitiveEngineeringInputsFor(base,blueprintGrade,effect);const missing=missingBaseLabels(base,baseStats(base),canonical.grade.features,canonical.experimental?.modifiers);if(missing.length>0){return engineeringNormalizationUnsupported("unresolvedModifiers",{slot:module.Slot,symbol:module.Item,labels:missing})}this.applyBlueprint(module.Slot,blueprint,{grade:grade,quality:1,...experimental===null?{}:{experimentalEffectSymbol:experimental}})}return deepFreeze({kind:"normalized",previousQuality:previousQuality,quality:1})}setPreEngineeredVariant(slotKey,variant){if(variant===null||typeof variant!=="object"){throw new TypeError(`ShipLoadout.setPreEngineeredVariant: variant must be a pre-engineered variant, received ${describeValue(variant)}`)}requireString(variant.symbol,"ShipLoadout.setPreEngineeredVariant: variant.symbol");requireString(variant.blueprintSymbol,"ShipLoadout.setPreEngineeredVariant: variant.blueprintSymbol");requireString(variant.acquisition,"ShipLoadout.setPreEngineeredVariant: variant.acquisition");requireStringIfPresent(variant.experimentalEffectSymbol,"ShipLoadout.setPreEngineeredVariant: variant.experimentalEffectSymbol");const known=getPreEngineeredVariants(variant.symbol).find(candidate=>candidate.blueprintSymbol.toLowerCase()===variant.blueprintSymbol.toLowerCase()&&candidate.grade===variant.grade&&(candidate.experimentalEffectSymbol?.toLowerCase()??"")===(variant.experimentalEffectSymbol?.toLowerCase()??"")&&candidate.acquisition===variant.acquisition);if(!known){throw new RangeError(`ShipLoadout.setPreEngineeredVariant: no catalogued variant "${truncate(variant.blueprintSymbol)}" for module "${truncate(variant.symbol)}"`)}const stats=getPreEngineeredStats(known);const unresolved=unresolvedModifiers(known);if(unresolved.length>0){throw new TypeError(`ShipLoadout.setPreEngineeredVariant: cannot resolve "${truncate(variant.blueprintSymbol)}" for module "${truncate(variant.symbol)}"; missing base stats for ${unresolved.join(", ")}`)}this.setModule(slotKey,stats);const module=this.#fittedModuleFor(slotKey);const engineering={BlueprintName:known.blueprintSymbol,Level:known.grade,Quality:1,...known.experimentalEffectSymbol===void 0?{}:{ExperimentalEffect:known.experimentalEffectSymbol},...known.modifiers?.length?{Modifiers:getPreEngineeredJournalModifiers(known)}:{}};this.#replaceModule(module.Slot,{...module,Engineering:engineering},cloneModuleStats(stats),getPreEngineeredModifiers(known));return this}clearEngineering(slotKey){const module=this.#fittedModuleFor(slotKey);if(module&&this.#statsFor(module)?.engineeringLocked){throw new TypeError(`ShipLoadout.clearEngineering: module "${truncate(module.Item)}" is a final pre-engineered article and its engineering cannot be removed`)}if(module?.Engineering){const baseStats2=this.#engineeringBaseStats(module);const bare={Slot:module.Slot,Item:module.Item};if(module.On!==void 0)bare.On=module.On;if(module.Priority!==void 0){bare.Priority=module.Priority}if(module.Health!==void 0)bare.Health=module.Health;if(module.Value!==void 0)bare.Value=module.Value;this.#replaceModule(module.Slot,bare,baseStats2??void 0)}return this}setModuleEnabled(slotKey,on){this.#patchModule(slotKey,{On:on});return this}setModulePriority(slotKey,priority){if(!Number.isInteger(priority)||priority<0||priority>4){throw new RangeError(`ShipLoadout: power priority must be an integer 0-4, got ${truncate(priority)}`)}this.#patchModule(slotKey,{Priority:priority});return this}#patchModule(slotKey,patch){const module=this.#fittedModuleFor(slotKey);if(!module){throw new RangeError(`ShipLoadout: slot "${truncate(slotKey)}" is empty`)}this.#modules.set(module.Slot,cloneLoadoutModule({...module,...patch}));this.#slotCache.clear()}toLoadoutEvent(options={}){const unladenMass=this.#computedUnladenMass();const cargoCapacity=this.#computedCargoCapacity();const fuel=this.#computedFuelCapacity();const maxJumpRange=this.#exportableJumpRange(unladenMass);return exportLoadoutEvent({shipSymbol:this.#shipSymbol,...this.#top.ShipName===void 0?{}:{shipName:this.#top.ShipName},...this.#top.ShipIdent===void 0?{}:{shipIdent:this.#top.ShipIdent},modules:this.#modules,layout:this.#layout(),sourcePurchase:this.#sourcePurchase,retailHullValue:this.#ship.hullCost,unladenMass:unladenMass,cargoCapacity:cargoCapacity,fuelCapacity:fuel,maxJumpRange:maxJumpRange,sourceTotalsVoided:this.#importOutcomes.some(outcome=>outcome.sourceSymbol===null&&parseSlotName(outcome.slot)?.kind==="core"),statsFor:module=>this.#statsFor(module)},options)}toSlef(options){return toSlef(this.toLoadoutEvent(options),options.header)}toSlefString(options){return stringifySlef(this.toSlef(options),{indent:options.indent??0})}#exportableJumpRange(unladenMass){let drive;try{drive=this.#resolveDrive()}catch{return null}if(drive===null)return null;const tank=this.#computedFuelCapacity();return singleJumpRange(unladenMass,Math.min(tank.main,drive.maxFuel),drive)}#layout(){if(this.#layoutCache===void 0){this.#layoutCache=Object.freeze(enumerateSlots(this.#ship))}return this.#layoutCache}#requireSlot(slotKey){const wanted=normalizeKey(slotKey,SLOT_KEY);const slot=this.#layout().find(s=>normalizeKey(s.key,CATALOGUE_KEY)===wanted);if(!slot){throw new RangeError(`ShipLoadout: hull "${truncate(this.#shipSymbol)}" has no slot "${truncate(slotKey)}"`)}return slot}#fittedKey(slotKey){return matchingKeyIn(this.#modules,normalizeKey(slotKey,SLOT_KEY))}#fittedModuleFor(slotKey){const key=this.#fittedKey(slotKey);return key===null?void 0:this.#modules.get(key)}#calculationModules(){return[...this.#modules.values()].map(module=>({mass:this.#moduleMass(module),cargoCapacity:this.#moduleCapacity(module,"CargoCapacity","cargoCapacity"),fuelCapacity:this.#moduleCapacity(module,"FuelCapacity","fuelCapacity")}))}#moduleLimits(){const entries=[...this.#modules.values()].flatMap(module=>{const stats=this.#statsFor(module);return stats===null?[]:[stats]});return calculateModuleLimits(entries)}#moduleStatsAt(slotKey){const fitted=this.#fittedModuleFor(slotKey);return fitted===void 0?null:this.#statsFor(fitted)}#engineeringBaseStats(module){const fitted=this.#statsFor(module);if(!module.Engineering||preEngineeredVariantFor(module)===null)return fitted;const stock=builtInModuleBySymbol(module.Item,FITTED_ITEM);if(!stock)return fitted;return fitted?.engineeringLocked?cloneModuleStats({...stock,engineeringLocked:true}):stock}#moduleForEffectiveStats(module){const modifiers=this.#primitiveModifiers.get(module.Slot);if(modifiers===void 0||module.Engineering===void 0)return module;return{...module,Engineering:{...module.Engineering,Modifiers:modifiers}}}#modulesForEffectiveStats(){return[...this.#modules.values()].map(module=>this.#moduleForEffectiveStats(module))}#moduleLimitRegression(slotKey,replacement,current=this.#moduleLimits(),previous=this.#moduleStatsAt(slotKey)){if(previous?.limitGroup===void 0&&previous?.limitIncrease===void 0&&replacement?.limitGroup===void 0&&replacement?.limitIncrease===void 0){return null}for(const usage of current){const count=usage.count-Number(previous?.limitGroup===usage.group)+Number(replacement?.limitGroup===usage.group);const increase=usage.increase-(previous?.limitIncrease?.group===usage.group?previous.limitIncrease.amount:0)+(replacement?.limitIncrease?.group===usage.group?replacement.limitIncrease.amount:0);const limit=usage.baseLimit+increase;const excess=Math.max(0,count-limit);if(excess>usage.excess){return{...usage,increase:increase,limit:limit,count:count,excess:excess}}}return null}#replaceModule(slotKey,replacement,replacementStats,primitiveModifiers){const previous=this.#modules.get(slotKey)??null;this.#adjustImportedFigures(previous,replacement,replacementStats);if(replacement===null){this.#modules.delete(slotKey);this.#moduleStats.delete(slotKey);this.#primitiveModifiers.delete(slotKey)}else{this.#modules.set(slotKey,cloneLoadoutModule(replacement));if(replacementStats!==void 0)this.#moduleStats.set(slotKey,replacementStats);if(primitiveModifiers===void 0)this.#primitiveModifiers.delete(slotKey);else this.#primitiveModifiers.set(slotKey,primitiveModifiers)}this.#slotCache.clear()}#adjustImportedFigures(previous,next,nextStats){if(this.#top.UnladenMass!==void 0){this.#top.UnladenMass+=this.#moduleMass(next,nextStats)-this.#moduleMass(previous)}if(this.#top.CargoCapacity!==void 0){this.#top.CargoCapacity+=this.#moduleCapacity(next,"CargoCapacity","cargoCapacity",nextStats)-this.#moduleCapacity(previous,"CargoCapacity","cargoCapacity")}if(this.#top.FuelCapacity?.Main!==void 0){const reserve=this.#top.FuelCapacity.Reserve;this.#top.FuelCapacity={Main:this.#top.FuelCapacity.Main+this.#moduleCapacity(next,"FuelCapacity","fuelCapacity",nextStats)-this.#moduleCapacity(previous,"FuelCapacity","fuelCapacity"),...reserve===void 0?{}:{Reserve:reserve}}}if(normalizeKey(previous?.Item,FITTED_ITEM)===normalizeKey(next?.Item,FITTED_ITEM)){return}if(previous!==null&&isCargoHatchSlot(previous.Slot)||next!==null&&isCargoHatchSlot(next.Slot)){return}delete this.#top.ModulesValue;delete this.#top.Rebuy}#moduleMass(module,statsOverride){if(module===null)return 0;if(isCargoHatchSlot(module.Slot))return 0;const modified=getLoadoutModifier(module,"Mass");if(modified!==null)return modified;return(statsOverride??this.#statsFor(module))?.mass??0}#moduleCapacity(module,modifierLabel,field,statsOverride){if(module===null)return 0;if(isCargoHatchSlot(module.Slot))return 0;const modified=getLoadoutModifier(module,modifierLabel);if(modified!==null)return modified;return(statsOverride??this.#statsFor(module))?.[field]??0}#frameShiftDrive(){for(const m of this.#modules.values()){const stats=this.#statsFor(m);if(stats?.slot==="frameShiftDrive")return{module:m,stats:stats}}return void 0}#resolveDrive(){const fsd=this.#frameShiftDrive();if(!fsd)return null;const{module:fsdModule,stats:base}=fsd;if(base.fuelMul===void 0||base.fuelPower===void 0){throw new TypeError(`ShipLoadout: the fitted record for frame shift drive "${truncate(fsdModule.Item)}" has no jump constants`)}const optMass=getLoadoutModifier(fsdModule,"FSDOptimalMass")??base.optMass;const maxFuel=getLoadoutModifier(fsdModule,"MaxFuelPerJump")??base.maxFuel;if(optMass===void 0||maxFuel===void 0){const missing=[...optMass===void 0?["optMass"]:[],...maxFuel===void 0?["maxFuel"]:[]];throw new TypeError(`ShipLoadout: the fitted record for frame shift drive "${truncate(fsdModule.Item)}" has no ${missing.join(" or ")}`)}return{optMass:optMass,maxFuel:maxFuel,fuelMul:base.fuelMul,fuelPower:base.fuelPower,jumpBoost:this.#resolveJumpBoost()}}#resolveJumpBoost(){for(const m of this.#modules.values()){const stats=this.#statsFor(m);if(stats?.engineeringGroup!=="fsdBoosters"&&(stats?.jumpBoost===void 0||stats.jumpBoost===0)){continue}if(m.On===false)continue;if(stats?.jumpBoost===void 0){throw new TypeError(`ShipLoadout: the fitted record for FSD booster "${truncate(m.Item)}" has no jumpBoost`)}return stats.jumpBoost}return 0}#statsFor(module){if(module===null)return null;const stats=this.#moduleStats.get(module.Slot)??builtInModuleBySymbol(module.Item,FITTED_ITEM);if(stats)return stats;return isBuiltInHullModule(module)?builtInModuleBySymbol("ModularCargoBayDoor","ShipLoadout: built-in module"):null}};export{LoadoutEditError,ShipLoadout};//# sourceMappingURL=chunk-SG6YLUQ4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/loadout-export.ts","../src/ships/ship-loadout.ts"],"names":["fixedSlotReason","validateLoadout","calculateModuleLimits","publishLoadoutInternals","normalizeLoadoutEvent","preEngineeredVariantFor","moduleFitProblem","effectiveModule","moduleFitError","parseSlef","toSlef","stringifySlef","getLoadoutModifier","getSourceModuleValue","isNonOutfittingSlot","isBuiltInHullModule","cloneLoadoutModule","cloneModuleStats","availableBlueprintsFor","availableExperimentalsFor","ownKeyIn","FITTED_ITEM","blueprintAvailableFor","blueprintRoutesFor","experimentalAvailableFor","primitiveEngineeringInputsFor","missingBaseLabels","journalModifiersFor","getPreEngineeredStats","getPreEngineeredJournalModifiers","getPreEngineeredModifiers","ordinaryEngineeringProof","unresolvedModifiers","matchingKeyIn","isCargoHatchSlot","orderBySlotLayout","getPreEngineeredVariants","getShipBySymbol","builtInModuleBySymbol","ALL_MODULES","singleJumpRange","calculateUnladenMass","calculateCargoCapacity","calculateFuelCapacity","getDefaultLoadout","getExperimentalEffect","ammunitionCapacity","baseStats","computeModifiers","labelsForDamageType","scaleForLabel","resolveBlueprintForModule","getExperimentalsForModule","getBlueprintGrade","loadoutSlotName","parseSlotName","enumerateSlots","normalizeKey","CATALOGUE_KEY","truncate","describeValue","requireString","requireStringIfPresent","deepFreeze","REBUY_FRACTION","exportLoadoutEvent","input","options","fromSource","credits","source","sourcePurchase","totals","sourceTotalsVoided","sourceTotalsHold","modules","hullValue","retailHullValue","modulesValue","computedModulesValue","statsFor","rebuy","Math","trunc","Ship","shipSymbol","toLowerCase","shipName","ShipName","shipIdent","ShipIdent","HullValue","ModulesValue","UnladenMass","unladenMass","CargoCapacity","cargoCapacity","maxJumpRange","MaxJumpRange","FuelCapacity","Main","fuelCapacity","main","Reserve","reserve","Rebuy","Modules","exportModules","ordered","moduleOrder","slotOrderedModules","layout","values","map","module","on","On","explicitPower","priority","Priority","value","sourceModuleValue","moduleValue","Slot","Item","Health","Value","Engineering","sum","stats","cost","SOURCE_ITEM","entry","item","moduleValues","key","slot","fitted","get","SLOT_KEY","FITTED_SLOT","LoadoutEditError","TypeError","code","constraint","params","constructor","message","super","this","structuredClone","experimentalEffectUnsupported","kind","engineeringNormalizationUnsupported","weighable","tonnes","Number","isFinite","AGGREGATE_STATS","ShipLoadout","_ShipLoadout","ship","moduleStats","primitiveModifiers","top","importOutcomes","slotCache","Map","layoutCache","effectiveModules","modulesForEffectiveStats","moduleForEffectiveStats","resolveDrive","frameShiftDriveModule","frameShiftDrive","calculationModules","statedMainFuel","fromSlef","index","entries","length","imported","data","fromImported","fromLoadout","event","outcomes","loadout","unresolved","rollStatedRecipe","push","engineering","Modifiers","BlueprintName","has","variant","acquisition","Level","grade","applyBlueprint","quality","Quality","ExperimentalEffect","experimentalEffectSymbol","error","RangeError","action","sourceSymbol","blueprintSymbol","empty","requested","symbol","filter","parsed","computedUnladenMass","hullMass","cap","Object","freeze","computed","computedFuelCapacity","computedCargoCapacity","reserveFuelCapacity","validation","slots","byKey","builtIn","fitProblem","thrusterMaxMass","maxMass","requiresKnownSlot","fitError","fitConstraint","fitParams","exclusionGroup","limitGroup","limitIncrease","dry","fuel","cargo","mass","cached","currentLimits","moduleLimits","moduleStatsAt","fixedReason","immovableReason","moduleLimitRegression","name","fittedModuleAt","removable","set","slotKey","fittedModuleFor","raw","effective","health","effectiveStats","ammunition","preEngineeredVariant","fittedModules","keys","flatMap","availableBlueprints","availableExperimentalEffects","modulesForSlot","requireSlot","occupied","Set","group","currentStats","grantOnly","repairFixedMount","wanted","fittedKey","resultSlot","canonicalKey","status","reason","current","valid","defaultModule","find","ownKey","replacement","replacementStats","replaceModule","setModule","catalogued","field","stated","problem","conflict","previousSlot","previousSymbol","limitProblem","count","limit","removeModule","candidate","wantedGrade","wantedQuality","wantedExperimental","fittedStats","recipe","named","written","trim","resolved","some","isInteger","experimental","engineeringLocked","offered","blueprint","route","join","engineeringBaseStats","base","canonical","missing","features","modifiers","damageDistribution","type","label","damageModifier","Label","OriginalValue","setExperimentalEffect","previous","effect","restoresBakedEffect","stock","labels","originalEffect","withoutEffect","adjusted","currentEffect","blueprintGrade","previousExperimentalEffectSymbol","completeEngineeringGrade","previousQuality","proof","setPreEngineeredVariant","known","clearEngineering","bare","setModuleEnabled","patchModule","setModulePriority","patch","clear","toLoadoutEvent","exportableJumpRange","hullCost","outcome","header","toSlefString","indent","drive","tank","min","maxFuel","s","moduleMass","moduleCapacity","usage","increase","amount","baseLimit","excess","max","adjustImportedFigures","delete","next","nextStats","statsOverride","modified","modifierLabel","m","fsd","fsdModule","fuelMul","fuelPower","optMass","jumpBoost","resolveJumpBoost","engineeringGroup"],"mappings":"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"}
@@ -1 +1 @@
1
- import{normalizeKey}from"./chunk-BKWLI44T.js";import{truncate}from"./chunk-PKWVG2JY.js";var SYNTHETIC_HEADER=Object.freeze({appName:"",appVersion:""});var isRecord=value=>typeof value==="object"&&value!==null&&!Array.isArray(value);var isOptionalString=value=>value===void 0||typeof value==="string";var isOptionalFiniteNumber=value=>value===void 0||typeof value==="number"&&Number.isFinite(value);var isOptionalNumberInRange=(value,minimum,maximum=Number.POSITIVE_INFINITY)=>value===void 0||typeof value==="number"&&Number.isFinite(value)&&value>=minimum&&value<=maximum;var isOptionalIntegerInRange=(value,minimum,maximum)=>{if(value===void 0)return true;return typeof value==="number"&&Number.isInteger(value)&&value>=minimum&&value<=maximum};var CONSTRAINT_MESSAGES={objectRequired:"must be an object",stringRequired:"must be a string",booleanRequired:"must be a boolean",arrayRequired:"must be an array",finiteNumberRequired:"must be a finite number",nonNegativeNumberRequired:"must be a non-negative number",priorityRange:"must be an integer from 0 to 4",engineeringLevelRange:"must be an integer from 1 to 5",unitInterval:"must be a number from 0 to 1",binaryInteger:"must be 0 or 1",versionRequired:"must be a string or finite number",loadoutEventRequired:'must be "Loadout"',validLoadoutRequired:"is not a valid Loadout event"};var invalid=(code,path,constraint)=>({code:code,path:path,constraint:constraint,reason:CONSTRAINT_MESSAGES[constraint]});function diagnoseEngineering(value,path){if(!isRecord(value))return invalid("invalidEngineering",path,"objectRequired");if(typeof value.BlueprintName!=="string")return invalid("invalidEngineering",`${path}.BlueprintName`,"stringRequired");if(!isOptionalIntegerInRange(value.Level,1,5)||value.Level===void 0)return invalid("invalidEngineering",`${path}.Level`,"engineeringLevelRange");if(!isOptionalNumberInRange(value.Quality,0,1)||value.Quality===void 0)return invalid("invalidEngineering",`${path}.Quality`,"unitInterval");if(!isOptionalString(value.ExperimentalEffect))return invalid("invalidEngineering",`${path}.ExperimentalEffect`,"stringRequired");if(!isOptionalString(value.ExperimentalEffect_Localised))return invalid("invalidEngineering",`${path}.ExperimentalEffect_Localised`,"stringRequired");if(value.Modifiers!==void 0){if(!Array.isArray(value.Modifiers))return invalid("invalidEngineering",`${path}.Modifiers`,"arrayRequired");for(let index=0;index<value.Modifiers.length;index+=1){const modifier=value.Modifiers[index];const modifierPath=`${path}.Modifiers[${index}]`;if(!isRecord(modifier))return invalid("invalidEngineering",modifierPath,"objectRequired");if(typeof modifier.Label!=="string")return invalid("invalidEngineering",`${modifierPath}.Label`,"stringRequired");if(!isOptionalFiniteNumber(modifier.Value))return invalid("invalidEngineering",`${modifierPath}.Value`,"finiteNumberRequired");if(!isOptionalFiniteNumber(modifier.OriginalValue))return invalid("invalidEngineering",`${modifierPath}.OriginalValue`,"finiteNumberRequired");if(!isOptionalString(modifier.ValueStr))return invalid("invalidEngineering",`${modifierPath}.ValueStr`,"stringRequired");if(!isOptionalIntegerInRange(modifier.LessIsGood,0,1))return invalid("invalidEngineering",`${modifierPath}.LessIsGood`,"binaryInteger")}}return null}function diagnoseModule(value,path){if(!isRecord(value))return invalid("invalidModule",path,"objectRequired");if(typeof value.Slot!=="string")return invalid("invalidModule",`${path}.Slot`,"stringRequired");if(typeof value.Item!=="string")return invalid("invalidModule",`${path}.Item`,"stringRequired");if(value.On!==void 0&&typeof value.On!=="boolean")return invalid("invalidModule",`${path}.On`,"booleanRequired");if(!isOptionalIntegerInRange(value.Priority,0,4))return invalid("invalidModule",`${path}.Priority`,"priorityRange");if(!isOptionalNumberInRange(value.Health,0,1))return invalid("invalidModule",`${path}.Health`,"unitInterval");if(!isOptionalNumberInRange(value.Value,0))return invalid("invalidModule",`${path}.Value`,"nonNegativeNumberRequired");if(value.Engineering!==void 0)return diagnoseEngineering(value.Engineering,`${path}.Engineering`);return null}function diagnoseHeader(value,path){if(!isRecord(value))return invalid("invalidHeader",path,"objectRequired");if(typeof value.appName!=="string")return invalid("invalidHeader",`${path}.appName`,"stringRequired");if(typeof value.appVersion!=="string"&&!(typeof value.appVersion==="number"&&Number.isFinite(value.appVersion)))return invalid("invalidHeader",`${path}.appVersion`,"versionRequired");if(!isOptionalString(value.appURL))return invalid("invalidHeader",`${path}.appURL`,"stringRequired");if(value.appCustomProperties!==void 0&&!isRecord(value.appCustomProperties))return invalid("invalidHeader",`${path}.appCustomProperties`,"objectRequired");return null}function diagnoseLoadout(value,path){if(!isRecord(value))return invalid("invalidLoadout",path,"objectRequired");if(typeof value.Ship!=="string")return invalid("invalidLoadout",`${path}.Ship`,"stringRequired");if(!Array.isArray(value.Modules))return invalid("invalidLoadout",`${path}.Modules`,"arrayRequired");if(value.event!==void 0&&value.event!=="Loadout")return invalid("invalidLoadout",`${path}.event`,"loadoutEventRequired");for(const field of["ShipName","ShipIdent"]){if(!isOptionalString(value[field]))return invalid("invalidLoadout",`${path}.${field}`,"stringRequired")}for(const field of["HullValue","ModulesValue","UnladenMass","CargoCapacity","MaxJumpRange","Rebuy"]){if(!isOptionalNumberInRange(value[field],0))return invalid("invalidLoadout",`${path}.${field}`,"nonNegativeNumberRequired")}if(value.FuelCapacity!==void 0){if(!isRecord(value.FuelCapacity))return invalid("invalidLoadout",`${path}.FuelCapacity`,"objectRequired");for(const field of["Main","Reserve"]){if(!isOptionalNumberInRange(value.FuelCapacity[field],0)||value.FuelCapacity[field]===void 0)return invalid("invalidLoadout",`${path}.FuelCapacity.${field}`,"nonNegativeNumberRequired")}}for(let index=0;index<value.Modules.length;index+=1){const moduleDiagnostic=diagnoseModule(value.Modules[index],`${path}.Modules[${index}]`);if(moduleDiagnostic!==null)return moduleDiagnostic}return null}function isSlefHeader(value){return diagnoseHeader(value,"header")===null}function isLoadout(value){return diagnoseLoadout(value,"loadout")===null}function duplicateSlot(loadout){const seen=/* @__PURE__ */new Set;for(let moduleIndex=0;moduleIndex<loadout.Modules.length;moduleIndex+=1){const module=loadout.Modules[moduleIndex];const slot=module.Slot.toLowerCase();if(seen.has(slot))return{slot:module.Slot,moduleIndex:moduleIndex};seen.add(slot)}return null}function inspectSlef(input){const root=typeof input==="string"?JSON.parse(input):input;const rawEntries=Array.isArray(root)?root:[root];const entries=[];const diagnostics=[];rawEntries.forEach((raw,index)=>{const entryPath=`entries[${index}]`;let header=null;let loadout=null;if(isLoadout(raw)){header=SYNTHETIC_HEADER;loadout=raw}else if(isRecord(raw)&&isLoadout(raw.data)){if(isSlefHeader(raw.header)){header=raw.header;loadout=raw.data}}if(header===null||loadout===null){const envelope=isRecord(raw)&&("header"in raw||"data"in raw);const detail=envelope?diagnoseHeader(isRecord(raw)?raw.header:null,`${entryPath}.header`)??diagnoseLoadout(isRecord(raw)?raw.data:null,`${entryPath}.data`):diagnoseLoadout(raw,entryPath);diagnostics.push({index:index,code:detail?.code??"invalidLoadout",path:detail?.path??entryPath,constraint:detail?.constraint??"validLoadoutRequired",message:`${detail?.path??entryPath} ${detail?.reason??"is not a valid Loadout event"}`,params:{path:detail?.path??entryPath,constraint:detail?.constraint??"validLoadoutRequired"}});return}const duplicate=duplicateSlot(loadout);if(duplicate!==null){diagnostics.push({index:index,code:"duplicateSlot",path:`${entryPath}${isLoadout(raw)?"":".data"}.Modules[${duplicate.moduleIndex}].Slot`,constraint:"uniqueSlot",message:`Entry ${index} contains duplicate slot "${truncate(duplicate.slot)}"`,params:{index:index,slot:duplicate.slot}});return}entries.push({header:header,data:loadout})});return Object.freeze({entries:Object.freeze(entries),diagnostics:Object.freeze(diagnostics.map(diagnostic=>Object.freeze({...diagnostic,...diagnostic.params?{params:Object.freeze({...diagnostic.params})}:{}})))})}function parseSlef(input){const inspected=inspectSlef(input);if(inspected.diagnostics.length>0){throw new TypeError(`parseSlef: ${inspected.diagnostics[0].message}`)}if(inspected.entries.length===0){throw new TypeError("parseSlef: input holds no entries")}return[...inspected.entries]}function toSlef(data,header){if(!isSlefHeader(header)){throw new TypeError("toSlef: header needs a string `appName` and an `appVersion`")}const events=Array.isArray(data)?data:[data];if(events.length===0){throw new TypeError("toSlef: needs at least one Loadout")}return events.map((event,index)=>{if(!isLoadout(event)){throw new TypeError(`toSlef: entry ${index} is not a valid Loadout (needs a \`Ship\` and \`Modules\`)`)}const duplicate=duplicateSlot(event);if(duplicate!==null){throw new TypeError(`toSlef: entry ${index} contains duplicate slot "${truncate(duplicate.slot)}"`)}return{header:header,data:event}})}function stringifySlef(slef,options={}){return JSON.stringify(slef,null,options.indent??0)}function getLoadoutModifier(module,label){const wanted=normalizeKey(label,"getLoadoutModifier: label");const mod=module.Engineering?.Modifiers?.find(m=>m.Label.toLowerCase()===wanted);return typeof mod?.Value==="number"?mod.Value:null}export{getLoadoutModifier,inspectSlef,parseSlef,stringifySlef,toSlef};//# sourceMappingURL=chunk-OVUHQEH5.js.map
1
+ import{normalizeKey}from"./chunk-BKWLI44T.js";import{truncate}from"./chunk-PKWVG2JY.js";var SYNTHETIC_HEADER=Object.freeze({appName:"",appVersion:""});var isRecord=value=>typeof value==="object"&&value!==null&&!Array.isArray(value);var isOptionalString=value=>value===void 0||typeof value==="string";var isOptionalFiniteNumber=value=>value===void 0||typeof value==="number"&&Number.isFinite(value);var isOptionalNumberInRange=(value,minimum,maximum=Number.POSITIVE_INFINITY)=>value===void 0||typeof value==="number"&&Number.isFinite(value)&&value>=minimum&&value<=maximum;var isOptionalIntegerInRange=(value,minimum,maximum)=>{if(value===void 0)return true;return typeof value==="number"&&Number.isInteger(value)&&value>=minimum&&value<=maximum};var CONSTRAINT_MESSAGES={objectRequired:"must be an object",stringRequired:"must be a string",booleanRequired:"must be a boolean",arrayRequired:"must be an array",finiteNumberRequired:"must be a finite number",nonNegativeNumberRequired:"must be a non-negative number",priorityRange:"must be an integer from 0 to 4",engineeringLevelRange:"must be an integer from 1 to 5",unitInterval:"must be a number from 0 to 1",binaryInteger:"must be 0 or 1",versionRequired:"must be a string or finite number",loadoutEventRequired:'must be "Loadout"',validLoadoutRequired:"is not a valid Loadout event"};var invalid=(code,path,constraint)=>({code:code,path:path,constraint:constraint,reason:CONSTRAINT_MESSAGES[constraint]});function diagnoseEngineering(value,path){if(!isRecord(value))return invalid("invalidEngineering",path,"objectRequired");if(typeof value.BlueprintName!=="string")return invalid("invalidEngineering",`${path}.BlueprintName`,"stringRequired");if(!isOptionalIntegerInRange(value.Level,1,5)||value.Level===void 0)return invalid("invalidEngineering",`${path}.Level`,"engineeringLevelRange");if(!isOptionalNumberInRange(value.Quality,0,1)||value.Quality===void 0)return invalid("invalidEngineering",`${path}.Quality`,"unitInterval");if(!isOptionalString(value.ExperimentalEffect))return invalid("invalidEngineering",`${path}.ExperimentalEffect`,"stringRequired");if(!isOptionalString(value.ExperimentalEffect_Localised))return invalid("invalidEngineering",`${path}.ExperimentalEffect_Localised`,"stringRequired");if(value.Modifiers!==void 0){if(!Array.isArray(value.Modifiers))return invalid("invalidEngineering",`${path}.Modifiers`,"arrayRequired");for(let index=0;index<value.Modifiers.length;index+=1){const modifier=value.Modifiers[index];const modifierPath=`${path}.Modifiers[${index}]`;if(!isRecord(modifier))return invalid("invalidEngineering",modifierPath,"objectRequired");if(typeof modifier.Label!=="string")return invalid("invalidEngineering",`${modifierPath}.Label`,"stringRequired");if(!isOptionalFiniteNumber(modifier.Value))return invalid("invalidEngineering",`${modifierPath}.Value`,"finiteNumberRequired");if(!isOptionalFiniteNumber(modifier.OriginalValue))return invalid("invalidEngineering",`${modifierPath}.OriginalValue`,"finiteNumberRequired");if(!isOptionalString(modifier.ValueStr))return invalid("invalidEngineering",`${modifierPath}.ValueStr`,"stringRequired");if(!isOptionalIntegerInRange(modifier.LessIsGood,0,1))return invalid("invalidEngineering",`${modifierPath}.LessIsGood`,"binaryInteger")}}return null}function diagnoseModule(value,path){if(!isRecord(value))return invalid("invalidModule",path,"objectRequired");if(typeof value.Slot!=="string")return invalid("invalidModule",`${path}.Slot`,"stringRequired");if(typeof value.Item!=="string")return invalid("invalidModule",`${path}.Item`,"stringRequired");if(value.On!==void 0&&typeof value.On!=="boolean")return invalid("invalidModule",`${path}.On`,"booleanRequired");if(!isOptionalIntegerInRange(value.Priority,0,4))return invalid("invalidModule",`${path}.Priority`,"priorityRange");if(!isOptionalNumberInRange(value.Health,0,1))return invalid("invalidModule",`${path}.Health`,"unitInterval");if(!isOptionalNumberInRange(value.Value,0))return invalid("invalidModule",`${path}.Value`,"nonNegativeNumberRequired");if(value.Engineering!==void 0)return diagnoseEngineering(value.Engineering,`${path}.Engineering`);return null}function diagnoseHeader(value,path){if(!isRecord(value))return invalid("invalidHeader",path,"objectRequired");if(typeof value.appName!=="string")return invalid("invalidHeader",`${path}.appName`,"stringRequired");if(typeof value.appVersion!=="string"&&!(typeof value.appVersion==="number"&&Number.isFinite(value.appVersion)))return invalid("invalidHeader",`${path}.appVersion`,"versionRequired");if(!isOptionalString(value.appURL))return invalid("invalidHeader",`${path}.appURL`,"stringRequired");if(value.appCustomProperties!==void 0&&!isRecord(value.appCustomProperties))return invalid("invalidHeader",`${path}.appCustomProperties`,"objectRequired");return null}function diagnoseLoadout(value,path){if(!isRecord(value))return invalid("invalidLoadout",path,"objectRequired");if(typeof value.Ship!=="string")return invalid("invalidLoadout",`${path}.Ship`,"stringRequired");if(!Array.isArray(value.Modules))return invalid("invalidLoadout",`${path}.Modules`,"arrayRequired");if(value.event!==void 0&&value.event!=="Loadout")return invalid("invalidLoadout",`${path}.event`,"loadoutEventRequired");for(const field of["ShipName","ShipIdent"]){if(!isOptionalString(value[field]))return invalid("invalidLoadout",`${path}.${field}`,"stringRequired")}for(const field of["HullValue","ModulesValue","UnladenMass","CargoCapacity","MaxJumpRange","Rebuy"]){if(!isOptionalNumberInRange(value[field],0))return invalid("invalidLoadout",`${path}.${field}`,"nonNegativeNumberRequired")}if(value.FuelCapacity!==void 0){if(!isRecord(value.FuelCapacity))return invalid("invalidLoadout",`${path}.FuelCapacity`,"objectRequired");for(const field of["Main","Reserve"]){if(!isOptionalNumberInRange(value.FuelCapacity[field],0)||value.FuelCapacity[field]===void 0)return invalid("invalidLoadout",`${path}.FuelCapacity.${field}`,"nonNegativeNumberRequired")}}for(let index=0;index<value.Modules.length;index+=1){const moduleDiagnostic=diagnoseModule(value.Modules[index],`${path}.Modules[${index}]`);if(moduleDiagnostic!==null)return moduleDiagnostic}return null}function isSlefHeader(value){return diagnoseHeader(value,"header")===null}function isLoadout(value){return diagnoseLoadout(value,"loadout")===null}function duplicateSlot(loadout){const seen=/* @__PURE__ */new Set;for(let moduleIndex=0;moduleIndex<loadout.Modules.length;moduleIndex+=1){const module=loadout.Modules[moduleIndex];const slot=module.Slot.toLowerCase();if(seen.has(slot))return{slot:module.Slot,moduleIndex:moduleIndex};seen.add(slot)}return null}function inspectSlef(input){const root=typeof input==="string"?JSON.parse(input):input;const rawEntries=Array.isArray(root)?root:[root];const entries=[];const diagnostics=[];rawEntries.forEach((raw,index)=>{const entryPath=`entries[${index}]`;let header=null;let loadout=null;if(isLoadout(raw)){header=SYNTHETIC_HEADER;loadout=raw}else if(isRecord(raw)&&isLoadout(raw.data)){if(isSlefHeader(raw.header)){header=raw.header;loadout=raw.data}}if(header===null||loadout===null){const envelope=isRecord(raw)&&("header"in raw||"data"in raw);const detail=envelope?diagnoseHeader(isRecord(raw)?raw.header:null,`${entryPath}.header`)??diagnoseLoadout(isRecord(raw)?raw.data:null,`${entryPath}.data`):diagnoseLoadout(raw,entryPath);diagnostics.push({index:index,code:detail?.code??"invalidLoadout",path:detail?.path??entryPath,constraint:detail?.constraint??"validLoadoutRequired",message:`${detail?.path??entryPath} ${detail?.reason??"is not a valid Loadout event"}`,params:{path:detail?.path??entryPath,constraint:detail?.constraint??"validLoadoutRequired"}});return}const duplicate=duplicateSlot(loadout);if(duplicate!==null){diagnostics.push({index:index,code:"duplicateSlot",path:`${entryPath}${isLoadout(raw)?"":".data"}.Modules[${duplicate.moduleIndex}].Slot`,constraint:"uniqueSlot",message:`Entry ${index} contains duplicate slot "${truncate(duplicate.slot)}"`,params:{index:index,slot:duplicate.slot}});return}entries.push({header:header,data:loadout})});return Object.freeze({entries:Object.freeze(entries),diagnostics:Object.freeze(diagnostics.map(diagnostic=>Object.freeze({...diagnostic,...diagnostic.params?{params:Object.freeze({...diagnostic.params})}:{}})))})}function parseSlef(input){const inspected=inspectSlef(input);if(inspected.diagnostics.length>0){throw new TypeError(`parseSlef: ${inspected.diagnostics[0].message}`)}if(inspected.entries.length===0){throw new TypeError("parseSlef: input holds no entries")}return[...inspected.entries]}function toSlef(data,header){if(!isSlefHeader(header)){throw new TypeError("toSlef: header needs a string `appName` and an `appVersion`")}const events=Array.isArray(data)?data:[data];if(events.length===0){throw new TypeError("toSlef: needs at least one Loadout")}return events.map((event,index)=>{if(!isLoadout(event)){throw new TypeError(`toSlef: entry ${index} is not a valid Loadout (needs a \`Ship\` and \`Modules\`)`)}const duplicate=duplicateSlot(event);if(duplicate!==null){throw new TypeError(`toSlef: entry ${index} contains duplicate slot "${truncate(duplicate.slot)}"`)}return{header:header,data:event}})}function stringifySlef(slef,options={}){return JSON.stringify(slef,null,options.indent??0)}function getLoadoutModifier(module,label){const wanted=normalizeKey(label,"getLoadoutModifier: label");const mod=module.Engineering?.Modifiers?.find(m=>m.Label.toLowerCase()===wanted);return typeof mod?.Value==="number"?mod.Value:null}export{getLoadoutModifier,inspectSlef,parseSlef,stringifySlef,toSlef};//# sourceMappingURL=chunk-T4MKUKYS.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/ships/slef.ts"],"names":["normalizeKey","truncate","SYNTHETIC_HEADER","Object","freeze","appName","appVersion","isRecord","value","Array","isArray","isOptionalString","isOptionalFiniteNumber","Number","isFinite","isOptionalNumberInRange","minimum","maximum","POSITIVE_INFINITY","isOptionalIntegerInRange","isInteger","CONSTRAINT_MESSAGES","objectRequired","stringRequired","booleanRequired","arrayRequired","finiteNumberRequired","nonNegativeNumberRequired","priorityRange","engineeringLevelRange","unitInterval","binaryInteger","versionRequired","loadoutEventRequired","validLoadoutRequired","invalid","code","path","constraint","reason","diagnoseEngineering","BlueprintName","Level","Quality","ExperimentalEffect","ExperimentalEffect_Localised","Modifiers","index","length","modifier","modifierPath","Label","Value","OriginalValue","ValueStr","LessIsGood","diagnoseModule","Slot","Item","On","Priority","Health","Engineering","diagnoseHeader","appURL","appCustomProperties","diagnoseLoadout","Ship","Modules","event","field","FuelCapacity","moduleDiagnostic","isSlefHeader","isLoadout","duplicateSlot","loadout","seen","Set","moduleIndex","module","slot","toLowerCase","has","add","inspectSlef","input","root","JSON","parse","rawEntries","entries","diagnostics","forEach","raw","entryPath","header","data","envelope","detail","push","message","params","duplicate","map","diagnostic","parseSlef","inspected","TypeError","toSlef","events","stringifySlef","slef","options","stringify","indent","getLoadoutModifier","label","wanted","mod","find","m"],"mappings":"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"}
1
+ {"version":3,"sources":["../src/ships/slef.ts"],"names":["normalizeKey","truncate","SYNTHETIC_HEADER","Object","freeze","appName","appVersion","isRecord","value","Array","isArray","isOptionalString","isOptionalFiniteNumber","Number","isFinite","isOptionalNumberInRange","minimum","maximum","POSITIVE_INFINITY","isOptionalIntegerInRange","isInteger","CONSTRAINT_MESSAGES","objectRequired","stringRequired","booleanRequired","arrayRequired","finiteNumberRequired","nonNegativeNumberRequired","priorityRange","engineeringLevelRange","unitInterval","binaryInteger","versionRequired","loadoutEventRequired","validLoadoutRequired","invalid","code","path","constraint","reason","diagnoseEngineering","BlueprintName","Level","Quality","ExperimentalEffect","ExperimentalEffect_Localised","Modifiers","index","length","modifier","modifierPath","Label","Value","OriginalValue","ValueStr","LessIsGood","diagnoseModule","Slot","Item","On","Priority","Health","Engineering","diagnoseHeader","appURL","appCustomProperties","diagnoseLoadout","Ship","Modules","event","field","FuelCapacity","moduleDiagnostic","isSlefHeader","isLoadout","duplicateSlot","loadout","seen","Set","moduleIndex","module","slot","toLowerCase","has","add","inspectSlef","input","root","JSON","parse","rawEntries","entries","diagnostics","forEach","raw","entryPath","header","data","envelope","detail","push","message","params","duplicate","map","diagnostic","parseSlef","inspected","TypeError","toSlef","events","stringifySlef","slef","options","stringify","indent","getLoadoutModifier","label","wanted","mod","find","m"],"mappings":"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"}
@@ -1 +1 @@
1
- import{getLocalizedName,createDeduplicatedLocalizedNameIndex}from"./chunk-RVIYOHYF.js";import{requireObject,requireString,requireStringIfPresent}from"./chunk-PKWVG2JY.js";var pre_engineered_variant_names_default={nameKeys:{"Hpt_Mining_AbrBlstr_Fixed_Small|AbrasionBlaster_FarReaching||mercenary":"Far-Reaching Abrasion Blaster","Hpt_CausticMissile_Fixed_Medium|EnzymeMissileRack_HighYield||mercenary":"High-Yield Enzyme Missile Rack","Hpt_Slugshot_Gimbal_Small|FragmentCannonSmall_DoubleScreaming||mercenary":"Double Screaming Fragment Cannon","Hpt_Slugshot_Gimbal_Large|FragmentCannonLarge_DoubleScreaming||mercenary":"Double Screaming Fragment Cannon","Hpt_MiningLaser_Fixed_Small|MiningLaser_LongRange||mercenary":"Long Range Mining Laser","Hpt_MultiCannon_Fixed_Medium|MultiCannon_Rapid||mercenary":"Rapid Phase Multi-Cannon","Hpt_Railgun_Fixed_Medium|RailGun_LongShot||mercenary":"Enduring Feedback Rail Gun","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRack_Drag||mercenary":"Drag Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|SeekerMissileRack_Drag||mercenary":"Drag Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRack_LightWeightThermal||mercenary":"Lightweight Thermal Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRackMedium_Lockdown||mercenary":"Lockdown Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|SeekerMissileRackLarge_Lockdown||mercenary":"Lockdown Seeker Missile Rack","Int_CargoRack_Size5_Class1|CargoRackS5C1_Extended||mercenary":"Extended Cargo Rack","Int_CargoRack_Size6_Class1|CargoRackS6C1_Extended||mercenary":"Extended Cargo Rack","Int_DetailedSurfaceScanner_Tiny|DetailedSurfaceScanner_LongRange||mercenary":"Long Range Detailed Surface Scanner","Int_ModuleReinforcement_Size5_Class2|ModuleReinforcement_HeavyDuty||mercenary":"Heavy Duty Module Reinforcement Package","Int_PowerDistributor_Size3_Class2|PowerDistributorS3C2_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size3_Class5|PowerDistributorS3C5_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size4_Class2|PowerDistributorS4C2_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size4_Class5|PowerDistributorS4C5_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size5_Class5|PowerDistributor_Balanced||mercenary":"Balanced Power Distributor","Int_PowerDistributor_Size6_Class5|PowerDistributorS6C5_SupportFocused||mercenary":"Support Focused Power Distributor","Hpt_Mining_AbrBlstr_Fixed_Small|Weapon_LongRange||communityGoal":"Abrasion Blaster","Hpt_CausticMissile_Fixed_Medium|Weapon_HighCapacity||communityGoal":"Enzyme Missile Rack","Hpt_Slugshot_Gimbal_Small|Weapon_DoubleShot|special_screening_shell|communityGoal":"Fragment Cannon","Hpt_Slugshot_Gimbal_Large|Weapon_DoubleShot|special_screening_shell|communityGoal":"Fragment Cannon","Hpt_Guardian_ShardCannon_Fixed_Medium|Weapon_LongRange||communityGoal":"Guardian Shard Cannon","Hpt_MultiCannon_Fixed_Medium|Weapon_RapidFire|special_phasing_sequence|communityGoal":"Multi-Cannon","Hpt_Railgun_Fixed_Medium|Weapon_HighCapacity|special_feedback_cascade_cooled|communityGoal":"Rail Gun","Hpt_Railgun_Fixed_Medium_Burst|Weapon_HighCapacity|special_super_penetrator|communityGoal":"Imperial Hammer Rail Gun","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_drag_munitions|communityGoal":"Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_fsd_interrupt|communityGoal":"Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|Weapon_HighCapacity|special_fsd_interrupt|communityGoal":"Seeker Missile Rack","Hpt_ElectronicCountermeasure_Tiny|Misc_LightWeight||communityGoal":"Electronic Countermeasure","Hpt_CrimeScanner_Size0_Class5|Sensor_FastScan||communityGoal":"Kill Warrant Scanner","Hpt_CrimeScanner_Size0_Class3|Sensor_FastScan||communityGoal":"Kill Warrant Scanner","Hpt_PlasmaPointDefence_Turret_Tiny|Misc_LightWeight||communityGoal":"Point Defence","Int_PowerDistributor_Size3_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size3_Class2|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size4_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size4_Class2|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size6_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_Powerplant_Size3_Class5|PowerPlant_Armoured||communityGoal":"Power Plant","Int_Powerplant_Size3_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Powerplant_Size4_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Powerplant_Size5_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Hyperdrive_Size3_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_Hyperdrive_Size4_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_Hyperdrive_Size6_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_CargoRack_Size5_Class1|CargoRack_IncreasedCapacity||communityGoal":"Cargo Rack","Int_CargoRack_Size6_Class1|CargoRack_IncreasedCapacity||communityGoal":"Cargo Rack","Int_ShieldGenerator_Size3_Class5|ShieldGenerator_Kinetic||communityGoal":"Shield Generator","Hpt_ATDumbfireMissile_Fixed_Medium|Weapon_HighCapacity||techBroker":"AX Missile Rack","Hpt_ATDumbfireMissile_Fixed_Large|Weapon_HighCapacity||techBroker":"AX Missile Rack","Hpt_ATMultiCannon_Gimbal_Medium|Weapon_Overcharged|special_auto_loader|techBroker":"Enhanced AX Multi-Cannon","Hpt_ATMultiCannon_Gimbal_Large|Weapon_Overcharged|special_auto_loader|techBroker":"Enhanced AX Multi-Cannon","Hpt_Guardian_GaussCannon_Fixed_Small|Weapon_RapidFire||techBroker":"Guardian Gauss Cannon","Hpt_Guardian_GaussCannon_Fixed_Medium|Weapon_RapidFire||techBroker":"Guardian Gauss Cannon","Hpt_Guardian_PlasmaLauncher_Fixed_Small|Weapon_Overcharged||techBroker":"Guardian Plasma Charger","Hpt_Guardian_PlasmaLauncher_Fixed_Medium|Weapon_Overcharged||techBroker":"Guardian Plasma Charger","Hpt_Guardian_ShardCannon_Fixed_Small|Weapon_LongRange||techBroker":"Guardian Shard Cannon","Hpt_Guardian_ShardCannon_Fixed_Medium|Weapon_LongRange||techBroker":"Guardian Shard Cannon","Hpt_MiningLaser_Fixed_Small|Weapon_LongRange|special_incendiary_rounds|techBroker":"Mining Laser","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_thermal_cascade|techBroker":"Seeker Missile Rack","Hpt_HeatSinkLauncher_Turret_Tiny|Misc_HeatSinkCapacity||techBroker":"Heat Sink Launcher","Int_Hyperdrive_Size5_Class5|FSD_LongRange||techBroker":"Frame Shift Drive","Int_Hyperdrive_Overcharge_Size2_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size3_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size4_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size5_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size6_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size7_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_DetailedSurfaceScanner_Tiny|Sensor_Expanded||techBroker":"Detailed Surface Scanner","Hpt_FlakMortar_Turret_Medium|Decorative_Green||eventReward":"Festive Green Remote Release Flak Launcher","Hpt_FlakMortar_Turret_Medium|Decorative_Red||eventReward":"Festive Red Remote Release Flak Launcher","Hpt_FlakMortar_Turret_Medium|Decorative_Yellow||eventReward":"Festive Yellow Remote Release Flak Launcher"},names:{"Far-Reaching Abrasion Blaster":{en:"Far-Reaching Abrasion Blaster",de:"Abrasionsblaster mit großer Reichweite",es:"Destructor de abrasión de largo alcance",fr:"Surfaceur abrasif longue portée",ru:"Абразивный бластер с увеличенной дальностью"},"High-Yield Enzyme Missile Rack":{en:"High-Yield Enzyme Missile Rack",de:"Enzymraketenrampe mit hohen Erträgen",es:"Lanzamisiles de enzimas de alto rendimiento",fr:"Batterie de missiles enzymatiques à hauts rendements",ru:"Блок энзимных ракет высокой мощности"},"Double Screaming Fragment Cannon":{en:"Double Screaming Fragment Cannon",de:"Doppelschrei-Splitterkanone",es:"Cañón de fragmentación doble con proyectil de pantalla",fr:"Double canon à fragmentation Screaming",ru:"Залповое орудие «Двойной вой»"},"Long Range Mining Laser":{en:"Long Range Mining Laser",de:"Ferndistanz-Abbaulaser",es:"Láser de minería de largo alcance",fr:"Laser minier longue portée",ru:"Проходочный лазер с увеличенной дальностью"},"Rapid Phase Multi-Cannon":{en:"Rapid Phase Multi-Cannon",de:"Schnellfeuer-Mehrfachgeschütz",es:"Multicañón de fase con disparo rápido",fr:"Multi-canon à phase rapide",ru:"Скорострельное фазовое многоствольное орудие"},"Enduring Feedback Rail Gun":{en:"Enduring Feedback Rail Gun",de:"Robuste Feedback-Schienenkanone",es:"Cañón de riel Retroalimentación Soportable",fr:"Canon électrique énergétique résistant",ru:"Электромагнитная пушка с постоянным откликом"},"Drag Seeker Missile Rack":{en:"Drag Seeker Missile Rack",de:"Suchraketenrampe ziehen",es:"Lanzamisiles guiado con lastre",fr:"Batterie de missiles TC à inertie",ru:"Блок ракет с самонаведением и замедляющими боеприпасами"},"Lightweight Thermal Seeker Missile Rack":{en:"Lightweight Thermal Seeker Missile Rack",de:"Leichte thermische Suchraketenrampe",es:"Lanzamisiles guiado térmico ligero",fr:"Batterie de missiles TC thermiques légers",ru:"Легкий блок тепловых ракет с самонаведением"},"Lockdown Seeker Missile Rack":{en:"Lockdown Seeker Missile Rack",de:"Abriegelung-Suchraketenrampe",es:"Lanzamisiles guiado con bloqueo",fr:"Batterie de missiles TC à verrouillage",ru:"Блок ракет с самонаведением и блокировкой"},"Extended Cargo Rack":{en:"Extended Cargo Rack",de:"Erweitertes Frachtgestell",es:"Bodega de carga extendida",fr:"Compartiment soute agrandi",ru:"Увеличенный грузовой стеллаж"},"Long Range Detailed Surface Scanner":{en:"Long Range Detailed Surface Scanner",de:"Ferndistanz-Detail-Oberflächenscanner",es:"Escáner de análisis de superficie detallado de largo alcance",fr:"Détecteur de surface détaillé longue portée",ru:"Подробный сканер поверхностей с увеличенной дальностью"},"Heavy Duty Module Reinforcement Package":{en:"Heavy Duty Module Reinforcement Package",de:"Schwere Modulverstärkung (Paket)",es:"Paquete de refuerzo de módulo de alta resistencia",fr:"Pack de renforcement de modules lourds",ru:"Укрепленный набор для усиления модуля"},"Support Focused Power Distributor":{en:"Support Focused Power Distributor",de:"Unterstützungsfokussierter Energieverteiler",es:"Distribuidor de energía orientado al apoyo",fr:"Répartiteur de puissance optimisé Survie",ru:"Вспомогательный распределитель питания"},"Balanced Power Distributor":{en:"Balanced Power Distributor",de:"Abgeglichener Energieverteiler",es:"Distribuidor de energía equilibrado",fr:"Répartiteur de puissance équilibré",ru:"Сбалансированный распределитель энергии"},"Abrasion Blaster":{en:"Abrasion Blaster",de:"Abrasionsblaster",es:"Destructor de abrasión",fr:"Surfaceur abrasif",pt:"Detonador de Abrasão",ru:"Шлифовальный бластер"},"Enzyme Missile Rack":{en:"Enzyme Missile Rack",de:"Enzymraketenwerfer",es:"Lanzamisiles de Enzimas",fr:"Batterie de missile enzymatique",pt:"Estante de Míssel Enzimático",ru:"Пусковая энзимных ракет"},"Fragment Cannon":{en:"Fragment Cannon",de:"Splitterkanone",es:"Cañón de fragmentación",fr:"Canon à fragmentation",pt:"Canhão de Fragmentação",ru:"Залповое орудие"},"Mining Laser":{en:"Mining Laser",de:"Abbaulaser",es:"Láser de minería",fr:"Laser Minier",pt:"Laser de Mineração",ru:"Проходочный лазер"},"Multi-Cannon":{en:"Multi-Cannon",de:"Mehrfachgeschütz",es:"Multicañón",fr:"Multi-canon",pt:"Canhão de Repetição",ru:"Многоствольное орудие"},"Rail Gun":{en:"Rail Gun",de:"Schienenkanone",es:"Cañón de riel",fr:"Canon électrique",pt:"Canhão Elétrico",ru:"Электромагнитная пушка"},"Seeker Missile Rack":{en:"Seeker Missile Rack",de:"Suchraketenrampe",es:"Lanzamisiles guiados",fr:"Missiles TC",pt:"Estante de Míssil Guiado",ru:"Блок ракет с самонаведением"},"Cargo Rack":{en:"Cargo Rack",de:"Frachtgestell",es:"Bodega de carga",fr:"Compartiment de soute",pt:"Estante de Carga",ru:"Грузовой стеллаж"},"Detailed Surface Scanner":{en:"Detailed Surface Scanner",de:"Detail-Oberflächenscanner",es:"Escáner de superficie detallado",fr:"Détecteur de surface détaillé",pt:"Scanner de Superfície",ru:"Сканер поверхностей"},"Power Distributor":{en:"Power Distributor",de:"Energieverteiler",es:"Distribuidor de energía",fr:"Répartiteur de puissance",pt:"Distribuidor de Energia",ru:"Распределитель питания"},"Guardian Shard Cannon":{en:"Guardian Shard Cannon",de:"Fragmentkanone",es:"Cañón de esquirlas",fr:"Canon à éclats",pt:"Canhão de fragmentos",ru:"Осколочное орудие"},"Imperial Hammer Rail Gun":{en:"Imperial Hammer Rail Gun",de:"Hammer",es:"Martillo",fr:"Marteleur",pt:"Martelo",ru:"«Молот»"},"Electronic Countermeasure":{en:"Electronic Countermeasure",de:"Elektronische Gegenmaßnahme",es:"Contramedidas electrónicas",fr:"Contre-mesures électroniques",pt:"Contramedida Eletrônica",ru:"Электр. противодействие"},"Kill Warrant Scanner":{en:"Kill Warrant Scanner",de:"Tötungsbefehl-Scanner",es:"Escáner de recompensas",fr:"Détecteur d'avis de recherche",pt:"Scanner de Registro Criminal",ru:"Сканер преступников"},"Point Defence":{en:"Point Defence",de:"Punktverteidigung",es:"Defensa de punto",fr:"Défense ponctuelle",pt:"Defesa de Ponto",ru:"Точечная оборона"},"Power Plant":{en:"Power Plant",de:"Kraftwerk",es:"Núcleo de energía",fr:"Générateur",pt:"Gerador de Energia",ru:"Силовая установка"},"Frame Shift Drive":{en:"Frame Shift Drive",de:"Frameshiftantrieb",es:"Motor de salto",fr:"Réacteur FSD",pt:"Motor de Distorção de Fase",ru:"Рамочно Сместительный двигатель"},"Shield Generator":{en:"Shield Generator",de:"Schildgenerator",es:"Generador de escudos",fr:"Générateur de bouclier",pt:"Gerador de Escudo",ru:"Щитогенератор"},"AX Missile Rack":{en:"AX Missile Rack",de:"AX-Raketenrampe",es:"Lanzamisiles AX",fr:"Batterie de missiles AX",pt:"Estante de Mísseis AX",ru:"Блок ракет АИ"},"Enhanced AX Multi-Cannon":{en:"Enhanced AX Multi-Cannon",de:"Fortschrittliches AX Mehrfachgeschütz",pt:"Canhão de Repetição AX Melhorado",ru:"Улучш. многоствольное орудие АИ"},"Guardian Gauss Cannon":{en:"Guardian Gauss Cannon",de:"Guardian-Gausskanone",es:"Cañón Gauss Guardián",fr:"Canon de Gauss - Guardians",pt:"Canhão Gauss Guardian",ru:"Пушка Гаусса"},"Guardian Plasma Charger":{en:"Guardian Plasma Charger",de:"Guardian-Plasmalader",es:"Cargador de Plasma Guardián",fr:"Chargeur à Plasma - Guardians",pt:"Carregador de Plasma Guardian",ru:"Плазменная пушка"},"Heat Sink Launcher":{en:"Heat Sink Launcher",de:"Kühlkörperabwurf",es:"Eyector térmico",fr:"Éjecteur de dissipateur thermique",pt:"Lançador de Dissipador Térmico",ru:"Теплоотводная катапульта"},"Frame Shift Drive (SCO)":{en:"Frame Shift Drive (SCO)",pt:"Motor de Distorção de Fase (SSV)",ru:"Двигатель FSD (ПГР)"},"Festive Green Remote Release Flak Launcher":{en:"Festive Green Remote Release Flak Launcher"},"Festive Red Remote Release Flak Launcher":{en:"Festive Red Remote Release Flak Launcher"},"Festive Yellow Remote Release Flak Launcher":{en:"Festive Yellow Remote Release Flak Launcher"}}};var NAMES=/* @__PURE__ */createDeduplicatedLocalizedNameIndex(pre_engineered_variant_names_default);function identityKey(identity){const prefix="getPreEngineeredVariantName: variant";requireObject(identity,prefix);const symbol=requireString(identity.symbol,`${prefix}.symbol`).trim();const blueprint=requireString(identity.blueprint,`${prefix}.blueprint`).trim();requireStringIfPresent(identity.experimental,`${prefix}.experimental`);const experimental=identity.experimental?.trim()??"";const acquisition=requireString(identity.acquisition,`${prefix}.acquisition`).trim();return`${symbol}|${blueprint}|${experimental}|${acquisition}`}function getPreEngineeredVariantName(variant,locale){return getLocalizedName(NAMES,identityKey(variant),locale,"getPreEngineeredVariantName","variant")}export{getPreEngineeredVariantName};//# sourceMappingURL=chunk-J42ZXLBL.js.map
1
+ import{getLocalizedName,createDeduplicatedLocalizedNameIndex}from"./chunk-RVIYOHYF.js";import{requireObject,requireString,requireStringIfPresent}from"./chunk-PKWVG2JY.js";var pre_engineered_variant_names_default={nameKeys:{"Hpt_Mining_AbrBlstr_Fixed_Small|AbrasionBlaster_FarReaching||mercenary":"Far-Reaching Abrasion Blaster","Hpt_CausticMissile_Fixed_Medium|EnzymeMissileRack_HighYield||mercenary":"High-Yield Enzyme Missile Rack","Hpt_Slugshot_Gimbal_Small|FragmentCannonSmall_DoubleScreaming||mercenary":"Double Screaming Fragment Cannon","Hpt_Slugshot_Gimbal_Large|FragmentCannonLarge_DoubleScreaming||mercenary":"Double Screaming Fragment Cannon","Hpt_MiningLaser_Fixed_Small|MiningLaser_LongRange||mercenary":"Long Range Mining Laser","Hpt_MultiCannon_Fixed_Medium|MultiCannon_Rapid||mercenary":"Rapid Phase Multi-Cannon","Hpt_Railgun_Fixed_Medium|RailGun_LongShot||mercenary":"Enduring Feedback Rail Gun","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRack_Drag||mercenary":"Drag Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|SeekerMissileRack_Drag||mercenary":"Drag Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRack_LightWeightThermal||mercenary":"Lightweight Thermal Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|SeekerMissileRackMedium_Lockdown||mercenary":"Lockdown Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|SeekerMissileRackLarge_Lockdown||mercenary":"Lockdown Seeker Missile Rack","Int_CargoRack_Size5_Class1|CargoRackS5C1_Extended||mercenary":"Extended Cargo Rack","Int_CargoRack_Size6_Class1|CargoRackS6C1_Extended||mercenary":"Extended Cargo Rack","Int_DetailedSurfaceScanner_Tiny|DetailedSurfaceScanner_LongRange||mercenary":"Long Range Detailed Surface Scanner","Int_ModuleReinforcement_Size5_Class2|ModuleReinforcement_HeavyDuty||mercenary":"Heavy Duty Module Reinforcement Package","Int_PowerDistributor_Size3_Class2|PowerDistributorS3C2_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size3_Class5|PowerDistributorS3C5_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size4_Class2|PowerDistributorS4C2_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size4_Class5|PowerDistributorS4C5_SupportFocused||mercenary":"Support Focused Power Distributor","Int_PowerDistributor_Size5_Class5|PowerDistributor_Balanced||mercenary":"Balanced Power Distributor","Int_PowerDistributor_Size6_Class5|PowerDistributorS6C5_SupportFocused||mercenary":"Support Focused Power Distributor","Hpt_Mining_AbrBlstr_Fixed_Small|Weapon_LongRange||communityGoal":"Abrasion Blaster","Hpt_CausticMissile_Fixed_Medium|Weapon_HighCapacity||communityGoal":"Enzyme Missile Rack","Hpt_Slugshot_Gimbal_Small|Weapon_DoubleShot|special_screening_shell|communityGoal":"Fragment Cannon","Hpt_Slugshot_Gimbal_Large|Weapon_DoubleShot|special_screening_shell|communityGoal":"Fragment Cannon","Hpt_Guardian_ShardCannon_Fixed_Medium|Weapon_LongRange||communityGoal":"Guardian Shard Cannon","Hpt_MultiCannon_Fixed_Medium|Weapon_RapidFire|special_phasing_sequence|communityGoal":"Multi-Cannon","Hpt_Railgun_Fixed_Medium|Weapon_HighCapacity|special_feedback_cascade_cooled|communityGoal":"Rail Gun","Hpt_Railgun_Fixed_Medium_Burst|Weapon_HighCapacity|special_super_penetrator|communityGoal":"Imperial Hammer Rail Gun","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_drag_munitions|communityGoal":"Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_fsd_interrupt|communityGoal":"Seeker Missile Rack","Hpt_BasicMissileRack_Fixed_Large|Weapon_HighCapacity|special_fsd_interrupt|communityGoal":"Seeker Missile Rack","Hpt_ElectronicCountermeasure_Tiny|Misc_LightWeight||communityGoal":"Electronic Countermeasure","Hpt_CrimeScanner_Size0_Class5|Sensor_FastScan||communityGoal":"Kill Warrant Scanner","Hpt_CrimeScanner_Size0_Class3|Sensor_FastScan||communityGoal":"Kill Warrant Scanner","Hpt_PlasmaPointDefence_Turret_Tiny|Misc_LightWeight||communityGoal":"Point Defence","Int_PowerDistributor_Size3_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size3_Class2|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size4_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size4_Class2|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_PowerDistributor_Size6_Class5|PowerDistributor_PrioritySystems||communityGoal":"Power Distributor","Int_Powerplant_Size3_Class5|PowerPlant_Armoured||communityGoal":"Power Plant","Int_Powerplant_Size3_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Powerplant_Size4_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Powerplant_Size5_Class5|PowerPlant_Boosted||communityGoal":"Power Plant","Int_Hyperdrive_Size3_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_Hyperdrive_Size4_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_Hyperdrive_Size6_Class5|FSD_LongRange||communityGoal":"Frame Shift Drive","Int_CargoRack_Size5_Class1|CargoRack_IncreasedCapacity||communityGoal":"Cargo Rack","Int_CargoRack_Size6_Class1|CargoRack_IncreasedCapacity||communityGoal":"Cargo Rack","Int_ShieldGenerator_Size3_Class5|ShieldGenerator_Kinetic||communityGoal":"Shield Generator","Hpt_ATDumbfireMissile_Fixed_Medium|Weapon_HighCapacity||techBroker":"AX Missile Rack","Hpt_ATDumbfireMissile_Fixed_Large|Weapon_HighCapacity||techBroker":"AX Missile Rack","Hpt_ATMultiCannon_Gimbal_Medium|Weapon_Overcharged|special_auto_loader|techBroker":"Enhanced AX Multi-Cannon","Hpt_ATMultiCannon_Gimbal_Large|Weapon_Overcharged|special_auto_loader|techBroker":"Enhanced AX Multi-Cannon","Hpt_Guardian_GaussCannon_Fixed_Small|Weapon_RapidFire||techBroker":"Guardian Gauss Cannon","Hpt_Guardian_GaussCannon_Fixed_Medium|Weapon_RapidFire||techBroker":"Guardian Gauss Cannon","Hpt_Guardian_PlasmaLauncher_Fixed_Small|Weapon_Overcharged||techBroker":"Guardian Plasma Charger","Hpt_Guardian_PlasmaLauncher_Fixed_Medium|Weapon_Overcharged||techBroker":"Guardian Plasma Charger","Hpt_Guardian_ShardCannon_Fixed_Small|Weapon_LongRange||techBroker":"Guardian Shard Cannon","Hpt_Guardian_ShardCannon_Fixed_Medium|Weapon_LongRange||techBroker":"Guardian Shard Cannon","Hpt_MiningLaser_Fixed_Small|Weapon_LongRange|special_incendiary_rounds|techBroker":"Mining Laser","Hpt_BasicMissileRack_Fixed_Medium|Weapon_HighCapacity|special_thermal_cascade|techBroker":"Seeker Missile Rack","Hpt_HeatSinkLauncher_Turret_Tiny|Misc_HeatSinkCapacity||techBroker":"Heat Sink Launcher","Int_Hyperdrive_Size5_Class5|FSD_LongRange||techBroker":"Frame Shift Drive","Int_Hyperdrive_Overcharge_Size2_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size3_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size4_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size5_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size6_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_Hyperdrive_Overcharge_Size7_Class5|FSD_LongRange||techBroker":"Frame Shift Drive (SCO)","Int_DetailedSurfaceScanner_Tiny|Sensor_Expanded||techBroker":"Detailed Surface Scanner","Hpt_FlakMortar_Turret_Medium|Decorative_Green||eventReward":"Festive Green Remote Release Flak Launcher","Hpt_FlakMortar_Turret_Medium|Decorative_Red||eventReward":"Festive Red Remote Release Flak Launcher","Hpt_FlakMortar_Turret_Medium|Decorative_Yellow||eventReward":"Festive Yellow Remote Release Flak Launcher"},names:{"Far-Reaching Abrasion Blaster":{en:"Far-Reaching Abrasion Blaster",de:"Abrasionsblaster mit großer Reichweite",es:"Destructor de abrasión de largo alcance",fr:"Surfaceur abrasif longue portée",ru:"Абразивный бластер с увеличенной дальностью"},"High-Yield Enzyme Missile Rack":{en:"High-Yield Enzyme Missile Rack",de:"Enzymraketenrampe mit hohen Erträgen",es:"Lanzamisiles de enzimas de alto rendimiento",fr:"Batterie de missiles enzymatiques à hauts rendements",ru:"Блок энзимных ракет высокой мощности"},"Double Screaming Fragment Cannon":{en:"Double Screaming Fragment Cannon",de:"Doppelschrei-Splitterkanone",es:"Cañón de fragmentación doble con proyectil de pantalla",fr:"Double canon à fragmentation Screaming",ru:"Залповое орудие «Двойной вой»"},"Long Range Mining Laser":{en:"Long Range Mining Laser",de:"Ferndistanz-Abbaulaser",es:"Láser de minería de largo alcance",fr:"Laser minier longue portée",ru:"Проходочный лазер с увеличенной дальностью"},"Rapid Phase Multi-Cannon":{en:"Rapid Phase Multi-Cannon",de:"Schnellfeuer-Mehrfachgeschütz",es:"Multicañón de fase con disparo rápido",fr:"Multi-canon à phase rapide",ru:"Скорострельное фазовое многоствольное орудие"},"Enduring Feedback Rail Gun":{en:"Enduring Feedback Rail Gun",de:"Robuste Feedback-Schienenkanone",es:"Cañón de riel Retroalimentación Soportable",fr:"Canon électrique énergétique résistant",ru:"Электромагнитная пушка с постоянным откликом"},"Drag Seeker Missile Rack":{en:"Drag Seeker Missile Rack",de:"Suchraketenrampe ziehen",es:"Lanzamisiles guiado con lastre",fr:"Batterie de missiles TC à inertie",ru:"Блок ракет с самонаведением и замедляющими боеприпасами"},"Lightweight Thermal Seeker Missile Rack":{en:"Lightweight Thermal Seeker Missile Rack",de:"Leichte thermische Suchraketenrampe",es:"Lanzamisiles guiado térmico ligero",fr:"Batterie de missiles TC thermiques légers",ru:"Легкий блок тепловых ракет с самонаведением"},"Lockdown Seeker Missile Rack":{en:"Lockdown Seeker Missile Rack",de:"Abriegelung-Suchraketenrampe",es:"Lanzamisiles guiado con bloqueo",fr:"Batterie de missiles TC à verrouillage",ru:"Блок ракет с самонаведением и блокировкой"},"Extended Cargo Rack":{en:"Extended Cargo Rack",de:"Erweitertes Frachtgestell",es:"Bodega de carga extendida",fr:"Compartiment soute agrandi",ru:"Увеличенный грузовой стеллаж"},"Long Range Detailed Surface Scanner":{en:"Long Range Detailed Surface Scanner",de:"Ferndistanz-Detail-Oberflächenscanner",es:"Escáner de análisis de superficie detallado de largo alcance",fr:"Détecteur de surface détaillé longue portée",ru:"Подробный сканер поверхностей с увеличенной дальностью"},"Heavy Duty Module Reinforcement Package":{en:"Heavy Duty Module Reinforcement Package",de:"Schwere Modulverstärkung (Paket)",es:"Paquete de refuerzo de módulo de alta resistencia",fr:"Pack de renforcement de modules lourds",ru:"Укрепленный набор для усиления модуля"},"Support Focused Power Distributor":{en:"Support Focused Power Distributor",de:"Unterstützungsfokussierter Energieverteiler",es:"Distribuidor de energía orientado al apoyo",fr:"Répartiteur de puissance optimisé Survie",ru:"Вспомогательный распределитель питания"},"Balanced Power Distributor":{en:"Balanced Power Distributor",de:"Abgeglichener Energieverteiler",es:"Distribuidor de energía equilibrado",fr:"Répartiteur de puissance équilibré",ru:"Сбалансированный распределитель энергии"},"Abrasion Blaster":{en:"Abrasion Blaster",de:"Abrasionsblaster",es:"Destructor de abrasión",fr:"Surfaceur abrasif",pt:"Detonador de Abrasão",ru:"Шлифовальный бластер"},"Enzyme Missile Rack":{en:"Enzyme Missile Rack",de:"Enzymraketenwerfer",es:"Lanzamisiles de Enzimas",fr:"Batterie de missile enzymatique",pt:"Estante de Míssel Enzimático",ru:"Пусковая энзимных ракет"},"Fragment Cannon":{en:"Fragment Cannon",de:"Splitterkanone",es:"Cañón de fragmentación",fr:"Canon à fragmentation",pt:"Canhão de Fragmentação",ru:"Залповое орудие"},"Mining Laser":{en:"Mining Laser",de:"Abbaulaser",es:"Láser de minería",fr:"Laser Minier",pt:"Laser de Mineração",ru:"Проходочный лазер"},"Multi-Cannon":{en:"Multi-Cannon",de:"Mehrfachgeschütz",es:"Multicañón",fr:"Multi-canon",pt:"Canhão de Repetição",ru:"Многоствольное орудие"},"Rail Gun":{en:"Rail Gun",de:"Schienenkanone",es:"Cañón de riel",fr:"Canon électrique",pt:"Canhão Elétrico",ru:"Электромагнитная пушка"},"Seeker Missile Rack":{en:"Seeker Missile Rack",de:"Suchraketenrampe",es:"Lanzamisiles guiados",fr:"Missiles TC",pt:"Estante de Míssil Guiado",ru:"Блок ракет с самонаведением"},"Cargo Rack":{en:"Cargo Rack",de:"Frachtgestell",es:"Bodega de carga",fr:"Compartiment de soute",pt:"Estante de Carga",ru:"Грузовой стеллаж"},"Detailed Surface Scanner":{en:"Detailed Surface Scanner",de:"Detail-Oberflächenscanner",es:"Escáner de superficie detallado",fr:"Détecteur de surface détaillé",pt:"Scanner de Superfície",ru:"Сканер поверхностей"},"Power Distributor":{en:"Power Distributor",de:"Energieverteiler",es:"Distribuidor de energía",fr:"Répartiteur de puissance",pt:"Distribuidor de Energia",ru:"Распределитель питания"},"Guardian Shard Cannon":{en:"Guardian Shard Cannon",de:"Fragmentkanone",es:"Cañón de esquirlas",fr:"Canon à éclats",pt:"Canhão de fragmentos",ru:"Осколочное орудие"},"Imperial Hammer Rail Gun":{en:"Imperial Hammer Rail Gun",de:"Hammer",es:"Martillo",fr:"Marteleur",pt:"Martelo",ru:"«Молот»"},"Electronic Countermeasure":{en:"Electronic Countermeasure",de:"Elektronische Gegenmaßnahme",es:"Contramedidas electrónicas",fr:"Contre-mesures électroniques",pt:"Contramedida Eletrônica",ru:"Электр. противодействие"},"Kill Warrant Scanner":{en:"Kill Warrant Scanner",de:"Tötungsbefehl-Scanner",es:"Escáner de recompensas",fr:"Détecteur d'avis de recherche",pt:"Scanner de Registro Criminal",ru:"Сканер преступников"},"Point Defence":{en:"Point Defence",de:"Punktverteidigung",es:"Defensa de punto",fr:"Défense ponctuelle",pt:"Defesa de Ponto",ru:"Точечная оборона"},"Power Plant":{en:"Power Plant",de:"Kraftwerk",es:"Núcleo de energía",fr:"Générateur",pt:"Gerador de Energia",ru:"Силовая установка"},"Frame Shift Drive":{en:"Frame Shift Drive",de:"Frameshiftantrieb",es:"Motor de salto",fr:"Réacteur FSD",pt:"Motor de Distorção de Fase",ru:"Рамочно Сместительный двигатель"},"Shield Generator":{en:"Shield Generator",de:"Schildgenerator",es:"Generador de escudos",fr:"Générateur de bouclier",pt:"Gerador de Escudo",ru:"Щитогенератор"},"AX Missile Rack":{en:"AX Missile Rack",de:"AX-Raketenrampe",es:"Lanzamisiles AX",fr:"Batterie de missiles AX",pt:"Estante de Mísseis AX",ru:"Блок ракет АИ"},"Enhanced AX Multi-Cannon":{en:"Enhanced AX Multi-Cannon",de:"Fortschrittliches AX Mehrfachgeschütz",pt:"Canhão de Repetição AX Melhorado",ru:"Улучш. многоствольное орудие АИ"},"Guardian Gauss Cannon":{en:"Guardian Gauss Cannon",de:"Guardian-Gausskanone",es:"Cañón Gauss Guardián",fr:"Canon de Gauss - Guardians",pt:"Canhão Gauss Guardian",ru:"Пушка Гаусса"},"Guardian Plasma Charger":{en:"Guardian Plasma Charger",de:"Guardian-Plasmalader",es:"Cargador de Plasma Guardián",fr:"Chargeur à Plasma - Guardians",pt:"Carregador de Plasma Guardian",ru:"Плазменная пушка"},"Heat Sink Launcher":{en:"Heat Sink Launcher",de:"Kühlkörperabwurf",es:"Eyector térmico",fr:"Éjecteur de dissipateur thermique",pt:"Lançador de Dissipador Térmico",ru:"Теплоотводная катапульта"},"Frame Shift Drive (SCO)":{en:"Frame Shift Drive (SCO)",pt:"Motor de Distorção de Fase (SSV)",ru:"Двигатель FSD (ПГР)"},"Festive Green Remote Release Flak Launcher":{en:"Festive Green Remote Release Flak Launcher"},"Festive Red Remote Release Flak Launcher":{en:"Festive Red Remote Release Flak Launcher"},"Festive Yellow Remote Release Flak Launcher":{en:"Festive Yellow Remote Release Flak Launcher"}}};var NAMES=/* @__PURE__ */createDeduplicatedLocalizedNameIndex(pre_engineered_variant_names_default);function identityKey(identity){const prefix="getPreEngineeredVariantName: variant";requireObject(identity,prefix);const symbol=requireString(identity.symbol,`${prefix}.symbol`).trim();const blueprint=requireString(identity.blueprintSymbol,`${prefix}.blueprintSymbol`).trim();requireStringIfPresent(identity.experimentalEffectSymbol,`${prefix}.experimentalEffectSymbol`);const experimental=identity.experimentalEffectSymbol?.trim()??"";const acquisition=requireString(identity.acquisition,`${prefix}.acquisition`).trim();return`${symbol}|${blueprint}|${experimental}|${acquisition}`}function getPreEngineeredVariantName(variant,locale){return getLocalizedName(NAMES,identityKey(variant),locale,"getPreEngineeredVariantName","variant")}export{getPreEngineeredVariantName};//# sourceMappingURL=chunk-T62GO4AA.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/i18n/pre-engineered.ts"],"names":["getLocalizedName","createDeduplicatedLocalizedNameIndex","requireObject","requireString","requireStringIfPresent","pre_engineered_variant_names_default","NAMES","identityKey","identity","prefix","symbol","trim","blueprint","blueprintSymbol","experimentalEffectSymbol","experimental","acquisition","getPreEngineeredVariantName","variant","locale"],"mappings":"O,wheAeA,IAAMM,qBAAwBL,qCAC1BI,sCAeJ,SAASE,YAAYC,UACjB,MAAMC,OAAS,uCACfP,cAAcM,SAAUC,QACxB,MAAMC,OAASP,cAAcK,SAASE,OAAQ,GAAGD,iBAAiBE,OAClE,MAAMC,UAAYT,cAAcK,SAASK,gBAAiB,GAAGJ,0BAA0BE,OACvFP,uBAAuBI,SAASM,yBAA0B,GAAGL,mCAC7D,MAAMM,aAAeP,SAASM,0BAA0BH,QAAU,GAClE,MAAMK,YAAcb,cAAcK,SAASQ,YAAa,GAAGP,sBAAsBE,OACjF,MAAO,GAAGD,UAAUE,aAAaG,gBAAgBC,aACrD,CAwBO,SAASC,4BACZC,QACAC,QAEA,OAAOnB,iBACHM,MACAC,YAAYW,SACZC,OACA,8BACA,UAER,QAAAF"}