@elite-dangerous-almanac/core 0.2.6 → 0.2.8

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 (149) hide show
  1. package/PROVENANCE/equipment/SOURCES.md +149 -27
  2. package/PROVENANCE/i18n/SOURCES.md +251 -40
  3. package/PROVENANCE/ships/SOURCES.md +232 -63
  4. package/README.md +21 -6
  5. package/THIRD_PARTY_NOTICES.md +4 -1
  6. package/dist/{chunk-AAU7OM47.js → chunk-2OBUSQA7.js} +1 -1
  7. package/dist/{chunk-AAU7OM47.js.map → chunk-2OBUSQA7.js.map} +1 -1
  8. package/dist/chunk-3GNYPM6J.js +1 -0
  9. package/dist/chunk-3GNYPM6J.js.map +1 -0
  10. package/dist/{chunk-A6OINYNP.js → chunk-3WGXGBW5.js} +1 -1
  11. package/dist/{chunk-ABSDZINM.js → chunk-5YEHJM6V.js} +1 -1
  12. package/dist/{chunk-ABSDZINM.js.map → chunk-5YEHJM6V.js.map} +1 -1
  13. package/dist/{chunk-7S7ZTZZY.js → chunk-7EWZGDWY.js} +1 -1
  14. package/dist/chunk-A7IVMYNF.js +1 -0
  15. package/dist/chunk-A7IVMYNF.js.map +1 -0
  16. package/dist/{chunk-KPJ77VPS.js → chunk-BJU27V6C.js} +1 -1
  17. package/dist/{chunk-KPJ77VPS.js.map → chunk-BJU27V6C.js.map} +1 -1
  18. package/dist/chunk-C3LLPLLD.js +1 -0
  19. package/dist/chunk-C3LLPLLD.js.map +1 -0
  20. package/dist/chunk-DAQ3PJ4R.js +1 -0
  21. package/dist/chunk-DAQ3PJ4R.js.map +1 -0
  22. package/dist/chunk-DHACRCLI.js +1 -0
  23. package/dist/chunk-DHACRCLI.js.map +1 -0
  24. package/dist/chunk-EHFHRQEP.js +1 -0
  25. package/dist/{chunk-LOWDDWDT.js.map → chunk-EHFHRQEP.js.map} +1 -1
  26. package/dist/{chunk-YCGISPDR.js → chunk-ETWMPMZP.js} +1 -1
  27. package/dist/chunk-FJIWJYKO.js +1 -0
  28. package/dist/chunk-FJIWJYKO.js.map +1 -0
  29. package/dist/chunk-GIGRBFIJ.js +1 -0
  30. package/dist/{chunk-MGRDB2BZ.js.map → chunk-GIGRBFIJ.js.map} +1 -1
  31. package/dist/{chunk-4CBMQULR.js → chunk-IMNOEFUE.js} +1 -1
  32. package/dist/{chunk-4CBMQULR.js.map → chunk-IMNOEFUE.js.map} +1 -1
  33. package/dist/chunk-IN36YSS4.js +1 -0
  34. package/dist/chunk-IN36YSS4.js.map +1 -0
  35. package/dist/chunk-IUSMAX5T.js +1 -0
  36. package/dist/{chunk-6GJHUWMO.js.map → chunk-IUSMAX5T.js.map} +1 -1
  37. package/dist/{chunk-XQJERZUS.js → chunk-JCYOE3C4.js} +1 -1
  38. package/dist/{chunk-XQJERZUS.js.map → chunk-JCYOE3C4.js.map} +1 -1
  39. package/dist/chunk-LWNBWRKL.js +1 -0
  40. package/dist/{chunk-B7EYTZRK.js.map → chunk-LWNBWRKL.js.map} +1 -1
  41. package/dist/chunk-M6J7KP7G.js +1 -0
  42. package/dist/chunk-M6J7KP7G.js.map +1 -0
  43. package/dist/chunk-MT5AHPNP.js +1 -0
  44. package/dist/{chunk-3CKWT2F3.js.map → chunk-MT5AHPNP.js.map} +1 -1
  45. package/dist/chunk-OLKOWR7S.js +1 -0
  46. package/dist/chunk-OLKOWR7S.js.map +1 -0
  47. package/dist/chunk-QJECDMQQ.js +1 -0
  48. package/dist/{chunk-LZYHBFJC.js.map → chunk-QJECDMQQ.js.map} +1 -1
  49. package/dist/chunk-SC4MEHVY.js +1 -0
  50. package/dist/chunk-SC4MEHVY.js.map +1 -0
  51. package/dist/chunk-T7IQHFQ2.js +1 -0
  52. package/dist/chunk-T7IQHFQ2.js.map +1 -0
  53. package/dist/chunk-W5ULI75F.js +1 -0
  54. package/dist/chunk-W5ULI75F.js.map +1 -0
  55. package/dist/chunk-WV7QCDL5.js +1 -0
  56. package/dist/chunk-WV7QCDL5.js.map +1 -0
  57. package/dist/{chunk-SDXUPP4P.js → chunk-XSLPWM5N.js} +1 -1
  58. package/dist/{chunk-S3MONE55.js → chunk-YJAH6DFY.js} +1 -1
  59. package/dist/chunk-YJAH6DFY.js.map +1 -0
  60. package/dist/chunk-ZZTDEDXJ.js +1 -0
  61. package/dist/{chunk-FA5JVXVG.js.map → chunk-ZZTDEDXJ.js.map} +1 -1
  62. package/dist/equipment/engineering.d.ts +53 -1
  63. package/dist/equipment/engineering.js +1 -1
  64. package/dist/equipment/index.d.ts +13 -2
  65. package/dist/equipment/index.js +1 -1
  66. package/dist/equipment/modification-journal.js +1 -1
  67. package/dist/equipment/modifications.d.ts +32 -9
  68. package/dist/equipment/modifications.js +1 -1
  69. package/dist/equipment/suits.d.ts +32 -2
  70. package/dist/equipment/suits.js +1 -1
  71. package/dist/equipment/upgrade-costs.js +1 -1
  72. package/dist/equipment/weapons.d.ts +16 -2
  73. package/dist/equipment/weapons.js +1 -1
  74. package/dist/i18n/index.d.ts +76 -0
  75. package/dist/i18n/index.js +1 -1
  76. package/dist/i18n/modules.d.ts +10 -7
  77. package/dist/i18n/modules.js +1 -1
  78. package/dist/i18n/personal-modifications.d.ts +68 -0
  79. package/dist/i18n/personal-modifications.js +1 -0
  80. package/dist/i18n/personal-modifications.js.map +1 -0
  81. package/dist/i18n/personal-weapons.d.ts +33 -0
  82. package/dist/i18n/personal-weapons.js +1 -0
  83. package/dist/i18n/personal-weapons.js.map +1 -0
  84. package/dist/i18n/pre-engineered.js +1 -1
  85. package/dist/i18n/suits.d.ts +59 -0
  86. package/dist/i18n/suits.js +1 -0
  87. package/dist/i18n/suits.js.map +1 -0
  88. package/dist/materials/index.js +1 -1
  89. package/dist/materials/micro-resources-all.js +1 -1
  90. package/dist/materials/micro-resources.js +1 -1
  91. package/dist/ships/blueprint-costs.js +1 -1
  92. package/dist/ships/blueprint-journal.js +1 -1
  93. package/dist/ships/build-metrics.js +1 -1
  94. package/dist/ships/engineering-options.d.ts +2 -2
  95. package/dist/ships/engineering-options.js +1 -1
  96. package/dist/ships/engineering.js +1 -1
  97. package/dist/ships/index.d.ts +5 -5
  98. package/dist/ships/index.js +1 -1
  99. package/dist/ships/loadout-calculations.d.ts +11 -2
  100. package/dist/ships/loadout-calculations.js +1 -1
  101. package/dist/ships/loadout-validation.d.ts +7 -2
  102. package/dist/ships/loadout-validation.js +1 -1
  103. package/dist/ships/modules-all.d.ts +2 -2
  104. package/dist/ships/modules-all.js +1 -1
  105. package/dist/ships/modules-core.d.ts +3 -3
  106. package/dist/ships/modules-core.js +1 -1
  107. package/dist/ships/modules-hardpoint.d.ts +1 -1
  108. package/dist/ships/modules-internal.d.ts +17 -6
  109. package/dist/ships/modules-internal.js +1 -1
  110. package/dist/ships/modules-utility.d.ts +1 -1
  111. package/dist/ships/modules.d.ts +14 -7
  112. package/dist/ships/modules.js +1 -1
  113. package/dist/ships/pre-engineered-stats.js +1 -1
  114. package/dist/ships/pre-engineered.js +1 -1
  115. package/dist/ships/shield-capacitor.js +1 -1
  116. package/dist/ships/ship-loadout.d.ts +71 -23
  117. package/dist/ships/ship-loadout.js +1 -1
  118. package/dist/ships/weapons.js +1 -1
  119. package/package.json +13 -1
  120. package/dist/chunk-3CKWT2F3.js +0 -1
  121. package/dist/chunk-3P455LF4.js +0 -1
  122. package/dist/chunk-3P455LF4.js.map +0 -1
  123. package/dist/chunk-5QSCLEEB.js +0 -1
  124. package/dist/chunk-5QSCLEEB.js.map +0 -1
  125. package/dist/chunk-6GJHUWMO.js +0 -1
  126. package/dist/chunk-B7EYTZRK.js +0 -1
  127. package/dist/chunk-C5HG4GJI.js +0 -1
  128. package/dist/chunk-C5HG4GJI.js.map +0 -1
  129. package/dist/chunk-DCB4COCL.js +0 -1
  130. package/dist/chunk-DCB4COCL.js.map +0 -1
  131. package/dist/chunk-E3AUKPSQ.js +0 -1
  132. package/dist/chunk-E3AUKPSQ.js.map +0 -1
  133. package/dist/chunk-FA5JVXVG.js +0 -1
  134. package/dist/chunk-GISL7YML.js +0 -1
  135. package/dist/chunk-GISL7YML.js.map +0 -1
  136. package/dist/chunk-KLC5XT6F.js +0 -1
  137. package/dist/chunk-KLC5XT6F.js.map +0 -1
  138. package/dist/chunk-LOWDDWDT.js +0 -1
  139. package/dist/chunk-LZYHBFJC.js +0 -1
  140. package/dist/chunk-MGRDB2BZ.js +0 -1
  141. package/dist/chunk-NBLLW7TH.js +0 -1
  142. package/dist/chunk-NBLLW7TH.js.map +0 -1
  143. package/dist/chunk-OJC6AUL7.js +0 -1
  144. package/dist/chunk-OJC6AUL7.js.map +0 -1
  145. package/dist/chunk-S3MONE55.js.map +0 -1
  146. /package/dist/{chunk-A6OINYNP.js.map → chunk-3WGXGBW5.js.map} +0 -0
  147. /package/dist/{chunk-7S7ZTZZY.js.map → chunk-7EWZGDWY.js.map} +0 -0
  148. /package/dist/{chunk-YCGISPDR.js.map → chunk-ETWMPMZP.js.map} +0 -0
  149. /package/dist/{chunk-SDXUPP4P.js.map → chunk-XSLPWM5N.js.map} +0 -0
@@ -1 +1 @@
1
- import{getSuitByFamily}from"../chunk-B7EYTZRK.js";import{getPersonalWeaponBySymbol}from"../chunk-6GJHUWMO.js"; import{sumPersonalEngineeringIngredients}from"../chunk-C5HG4GJI.js"; import{deepFreeze}from"../chunk-DURKO7JU.js";var upgrade_costs_default={suits:{utilitysuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"carbonfibreplating",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"carbonfibreplating",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"carbonfibreplating",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"carbonfibreplating",count:12},{symbol:"graphene",count:12}]},tacticalsuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"titaniumplating",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"titaniumplating",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"titaniumplating",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"titaniumplating",count:12},{symbol:"graphene",count:12}]},explorationsuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"aerogel",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"aerogel",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"aerogel",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"aerogel",count:12},{symbol:"graphene",count:12}]}},weaponGroups:{takada:{2:[{symbol:"weaponschematic",count:1},{symbol:"ionisedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"microelectrode",count:2},{symbol:"opticalfibre",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"ionisedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"microelectrode",count:5},{symbol:"opticalfibre",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"ionisedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"microelectrode",count:9},{symbol:"opticalfibre",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"ionisedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"microelectrode",count:12},{symbol:"opticalfibre",count:12}]},manticore:{2:[{symbol:"weaponschematic",count:1},{symbol:"ionisedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"microelectrode",count:2},{symbol:"chemicalsuperbase",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"ionisedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"microelectrode",count:5},{symbol:"chemicalsuperbase",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"ionisedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"microelectrode",count:9},{symbol:"chemicalsuperbase",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"ionisedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"microelectrode",count:12},{symbol:"chemicalsuperbase",count:12}]},karma:{2:[{symbol:"weaponschematic",count:1},{symbol:"compressionliquefiedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"weaponcomponent",count:2},{symbol:"tungstencarbide",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"compressionliquefiedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"weaponcomponent",count:5},{symbol:"tungstencarbide",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"compressionliquefiedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"weaponcomponent",count:9},{symbol:"tungstencarbide",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"compressionliquefiedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"weaponcomponent",count:12},{symbol:"tungstencarbide",count:12}]}}};var PERSONAL_UPGRADE_COSTS=deepFreeze(upgrade_costs_default);function getSuitUpgradeStepCost(family,targetGrade){assertTargetGrade(targetGrade,"getSuitUpgradeStepCost");const costs=getSuitUpgradeCosts(family);return costs?.[String(targetGrade)]??null}function getSuitUpgradeCost(family,targetGrade,currentGrade=1){assertGrade(targetGrade,"getSuitUpgradeCost: targetGrade");assertGrade(currentGrade,"getSuitUpgradeCost: currentGrade");const costs=getSuitUpgradeCosts(family);if(!costs)return null;return totalCosts(costs,targetGrade,currentGrade)}function getPersonalWeaponUpgradeStepCost(symbol,targetGrade){assertTargetGrade(targetGrade,"getPersonalWeaponUpgradeStepCost");const weapon=getPersonalWeaponBySymbol(symbol);if(!weapon)return null;return PERSONAL_UPGRADE_COSTS.weaponGroups[weapon.upgradeGroup][String(targetGrade)]??null}function getPersonalWeaponUpgradeCost(symbol,targetGrade,currentGrade=1){assertGrade(targetGrade,"getPersonalWeaponUpgradeCost: targetGrade");assertGrade(currentGrade,"getPersonalWeaponUpgradeCost: currentGrade");const weapon=getPersonalWeaponBySymbol(symbol);if(!weapon)return null;return totalCosts(PERSONAL_UPGRADE_COSTS.weaponGroups[weapon.upgradeGroup],targetGrade,currentGrade)}function totalCosts(costs,targetGrade,currentGrade){const steps=[];for(let grade=currentGrade+1;grade<=targetGrade;grade++){steps.push(costs[String(grade)])}return sumPersonalEngineeringIngredients(...steps)}function getSuitUpgradeCosts(family){const suit=getSuitByFamily(family);if(!suit||!Object.hasOwn(PERSONAL_UPGRADE_COSTS.suits,suit.family))return null;return PERSONAL_UPGRADE_COSTS.suits[suit.family]}function assertTargetGrade(grade,functionName){if(!Number.isInteger(grade)||grade<2||grade>5){throw new RangeError(`${functionName}: targetGrade must be an integer in [2, 5]`)}}function assertGrade(grade,label){if(!Number.isInteger(grade)||grade<1||grade>5){throw new RangeError(`${label} must be an integer in [1, 5]`)}}export{PERSONAL_UPGRADE_COSTS,getPersonalWeaponUpgradeCost,getPersonalWeaponUpgradeStepCost,getSuitUpgradeCost,getSuitUpgradeStepCost};//# sourceMappingURL=upgrade-costs.js.map
1
+ import{getSuitByFamily}from"../chunk-LWNBWRKL.js";import{getPersonalWeaponBySymbol}from"../chunk-IUSMAX5T.js"; import{sumPersonalEngineeringIngredients}from"../chunk-WV7QCDL5.js"; import{deepFreeze}from"../chunk-DURKO7JU.js";var upgrade_costs_default={suits:{utilitysuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"carbonfibreplating",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"carbonfibreplating",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"carbonfibreplating",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"carbonfibreplating",count:12},{symbol:"graphene",count:12}]},tacticalsuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"titaniumplating",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"titaniumplating",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"titaniumplating",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"titaniumplating",count:12},{symbol:"graphene",count:12}]},explorationsuit:{2:[{symbol:"suitschematic",count:1},{symbol:"healthmonitor",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"aerogel",count:2},{symbol:"graphene",count:2}],3:[{symbol:"suitschematic",count:2},{symbol:"healthmonitor",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"aerogel",count:5},{symbol:"graphene",count:5}],4:[{symbol:"suitschematic",count:4},{symbol:"healthmonitor",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"aerogel",count:9},{symbol:"graphene",count:9}],5:[{symbol:"suitschematic",count:5},{symbol:"healthmonitor",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"aerogel",count:12},{symbol:"graphene",count:12}]}},weaponGroups:{takada:{2:[{symbol:"weaponschematic",count:1},{symbol:"ionisedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"microelectrode",count:2},{symbol:"opticalfibre",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"ionisedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"microelectrode",count:5},{symbol:"opticalfibre",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"ionisedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"microelectrode",count:9},{symbol:"opticalfibre",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"ionisedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"microelectrode",count:12},{symbol:"opticalfibre",count:12}]},manticore:{2:[{symbol:"weaponschematic",count:1},{symbol:"ionisedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"microelectrode",count:2},{symbol:"chemicalsuperbase",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"ionisedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"microelectrode",count:5},{symbol:"chemicalsuperbase",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"ionisedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"microelectrode",count:9},{symbol:"chemicalsuperbase",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"ionisedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"microelectrode",count:12},{symbol:"chemicalsuperbase",count:12}]},karma:{2:[{symbol:"weaponschematic",count:1},{symbol:"compressionliquefiedgas",count:1},{symbol:"manufacturinginstructions",count:1},{symbol:"weaponcomponent",count:2},{symbol:"tungstencarbide",count:2}],3:[{symbol:"weaponschematic",count:2},{symbol:"compressionliquefiedgas",count:2},{symbol:"manufacturinginstructions",count:2},{symbol:"weaponcomponent",count:5},{symbol:"tungstencarbide",count:5}],4:[{symbol:"weaponschematic",count:4},{symbol:"compressionliquefiedgas",count:4},{symbol:"manufacturinginstructions",count:4},{symbol:"weaponcomponent",count:9},{symbol:"tungstencarbide",count:9}],5:[{symbol:"weaponschematic",count:5},{symbol:"compressionliquefiedgas",count:5},{symbol:"manufacturinginstructions",count:5},{symbol:"weaponcomponent",count:12},{symbol:"tungstencarbide",count:12}]}}};var PERSONAL_UPGRADE_COSTS=deepFreeze(upgrade_costs_default);function getSuitUpgradeStepCost(family,targetGrade){assertTargetGrade(targetGrade,"getSuitUpgradeStepCost");const costs=getSuitUpgradeCosts(family);return costs?.[String(targetGrade)]??null}function getSuitUpgradeCost(family,targetGrade,currentGrade=1){assertGrade(targetGrade,"getSuitUpgradeCost: targetGrade");assertGrade(currentGrade,"getSuitUpgradeCost: currentGrade");const costs=getSuitUpgradeCosts(family);if(!costs)return null;return totalCosts(costs,targetGrade,currentGrade)}function getPersonalWeaponUpgradeStepCost(symbol,targetGrade){assertTargetGrade(targetGrade,"getPersonalWeaponUpgradeStepCost");const weapon=getPersonalWeaponBySymbol(symbol);if(!weapon)return null;return PERSONAL_UPGRADE_COSTS.weaponGroups[weapon.upgradeGroup][String(targetGrade)]??null}function getPersonalWeaponUpgradeCost(symbol,targetGrade,currentGrade=1){assertGrade(targetGrade,"getPersonalWeaponUpgradeCost: targetGrade");assertGrade(currentGrade,"getPersonalWeaponUpgradeCost: currentGrade");const weapon=getPersonalWeaponBySymbol(symbol);if(!weapon)return null;return totalCosts(PERSONAL_UPGRADE_COSTS.weaponGroups[weapon.upgradeGroup],targetGrade,currentGrade)}function totalCosts(costs,targetGrade,currentGrade){const steps=[];for(let grade=currentGrade+1;grade<=targetGrade;grade++){steps.push(costs[String(grade)])}return sumPersonalEngineeringIngredients(...steps)}function getSuitUpgradeCosts(family){const suit=getSuitByFamily(family);if(!suit||!Object.hasOwn(PERSONAL_UPGRADE_COSTS.suits,suit.family))return null;return PERSONAL_UPGRADE_COSTS.suits[suit.family]}function assertTargetGrade(grade,functionName){if(!Number.isInteger(grade)||grade<2||grade>5){throw new RangeError(`${functionName}: targetGrade must be an integer in [2, 5]`)}}function assertGrade(grade,label){if(!Number.isInteger(grade)||grade<1||grade>5){throw new RangeError(`${label} must be an integer in [1, 5]`)}}export{PERSONAL_UPGRADE_COSTS,getPersonalWeaponUpgradeCost,getPersonalWeaponUpgradeStepCost,getSuitUpgradeCost,getSuitUpgradeStepCost};//# sourceMappingURL=upgrade-costs.js.map
@@ -1,7 +1,8 @@
1
1
  import { EquipmentGrade } from './suits.js';
2
2
 
3
3
  /**
4
- * Odyssey handheld weapons, their journal identifiers and grade-dependent damage.
4
+ * Odyssey handheld weapons: their journal identifiers, combat stats, sight
5
+ * magnification and grade-dependent damage.
5
6
  *
6
7
  * @packageDocumentation
7
8
  */
@@ -18,6 +19,13 @@ type PersonalWeaponSlot = 'primary' | 'secondary';
18
19
  type PersonalDamageType = 'kinetic' | 'thermal' | 'plasma' | 'explosive';
19
20
  /** A handheld weapon firing cycle. */
20
21
  type PersonalFireMode = 'automatic' | 'semi-automatic' | 'burst';
22
+ /** A weapon's aim-down-sights magnification, before and after the Scope modification. */
23
+ interface ScopeMagnification {
24
+ /** Magnification of the sight the weapon ships with, e.g. `1.12` for 1.12x. */
25
+ readonly default: number;
26
+ /** Magnification of the sight the Scope modification fits, e.g. `1.41` for 1.41x. */
27
+ readonly upgraded: number;
28
+ }
21
29
  /** Grade-dependent stats for one handheld weapon. */
22
30
  interface PersonalWeaponGrade {
23
31
  /** Damage per projectile or pellet. */
@@ -53,6 +61,12 @@ interface PersonalWeapon {
53
61
  readonly headshotMultiplier: number;
54
62
  /** Nominal effective range in metres. */
55
63
  readonly effectiveRange: number;
64
+ /**
65
+ * Aim-down-sights magnification with the stock sight and with the one the Scope
66
+ * modification fits. Scope carries no modifier of its own: this pair is its whole
67
+ * numeric effect, and it differs per weapon.
68
+ */
69
+ readonly scopeMagnification: ScopeMagnification;
56
70
  /**
57
71
  * Grade records keyed by `"1"` through `"5"` — every weapon carries all five,
58
72
  * unlike {@link Suit.grades}, and `equipment.test.ts` pins that. Read one through
@@ -118,4 +132,4 @@ declare function getPersonalWeaponByName(name: string): PersonalWeapon | null;
118
132
  */
119
133
  declare function getPersonalWeaponGrade(weapon: PersonalWeapon, grade: number): PersonalWeaponGrade | null;
120
134
 
121
- export { PERSONAL_WEAPONS, type PersonalDamageType, type PersonalFireMode, type PersonalWeapon, type PersonalWeaponClass, type PersonalWeaponEngineeringType, type PersonalWeaponGrade, type PersonalWeaponSlot, type WeaponUpgradeGroup, getPersonalWeaponByName, getPersonalWeaponBySymbol, getPersonalWeaponGrade };
135
+ export { PERSONAL_WEAPONS, type PersonalDamageType, type PersonalFireMode, type PersonalWeapon, type PersonalWeaponClass, type PersonalWeaponEngineeringType, type PersonalWeaponGrade, type PersonalWeaponSlot, type ScopeMagnification, type WeaponUpgradeGroup, getPersonalWeaponByName, getPersonalWeaponBySymbol, getPersonalWeaponGrade };
@@ -1 +1 @@
1
- export{PERSONAL_WEAPONS,getPersonalWeaponByName,getPersonalWeaponBySymbol,getPersonalWeaponGrade}from"../chunk-6GJHUWMO.js"; //# sourceMappingURL=weapons.js.map
1
+ export{PERSONAL_WEAPONS,getPersonalWeaponByName,getPersonalWeaponBySymbol,getPersonalWeaponGrade}from"../chunk-IUSMAX5T.js"; //# sourceMappingURL=weapons.js.map
@@ -1,3 +1,76 @@
1
+ /**
2
+ * Sparse, source-backed localized display names and descriptions for Elite Dangerous
3
+ * outfitting, personal-equipment and engineering catalogues.
4
+ *
5
+ * Each lookup takes the same Frontier symbol as its owning catalogue and a BCP 47
6
+ * locale. English is complete: for a name catalogue it is exactly the owning record's
7
+ * `name`, and for a description catalogue it is the game's own display prose, which no
8
+ * catalogue otherwise publishes.
9
+ * Other locales are intentionally sparse: the function returns `null` when its pinned
10
+ * sources carry no translation, leaving the application in control of fallback policy.
11
+ * A source-backed localized spelling can be identical to English; the lookup returns
12
+ * explicit source values verbatim but never manufactures an English fallback.
13
+ * The catalogues carry English, French, German, Portuguese, Russian and Spanish only,
14
+ * each stored under a bare language tag: a regional or script subtag is dropped
15
+ * (`de-DE` → `de`), and any other language is an unsupported locale.
16
+ *
17
+ * **How sparse, dataset by dataset.** Each column below is the percentage of that
18
+ * lookup's keys carrying a stored value for the locale, so a `0` would mean the dataset
19
+ * holds nothing in that language at all and the lookup returns `null` for every key:
20
+ * German module names are near-complete, while a quarter of the outfitting families —
21
+ * the ones the game does not name separately — have no locale at all. Plan fallback per
22
+ * lookup rather than per application. The table is generated from the
23
+ * [`data/i18n/` catalogues](https://github.com/DarkSession/Elite-Dangerous-Almanac/tree/main/data/i18n),
24
+ * so it moves when the data does.
25
+ *
26
+ * <!-- generated by scripts/i18n-coverage.mjs -->
27
+ * | Lookup | Keys | en | de | es | fr | pt | ru |
28
+ * | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: |
29
+ * | `getBlueprintName` | 107 | 100 | 100 | 100 | 100 | 100 | 100 |
30
+ * | `getExperimentalEffectDescription` | 86 | 100 | 100 | 100 | 100 | 100 | 100 |
31
+ * | `getExperimentalEffectName` | 86 | 100 | 100 | 100 | 100 | 100 | 100 |
32
+ * | `getMaterialName` | 146 | 100 | 100 | 100 | 100 | 100 | 100 |
33
+ * | `getMicroResourceName` | 226 | 100 | 100 | 100 | 100 | 100 | 100 |
34
+ * | `getModuleName` | 1194 | 100 | 100 | 100 | 100 | 100 | 100 |
35
+ * | `getPersonalModificationDescription` | 31 | 100 | 100 | 100 | 100 | 100 | 100 |
36
+ * | `getPersonalModificationName` | 31 | 100 | 100 | 100 | 100 | 100 | 100 |
37
+ * | `getPersonalWeaponDescription` | 11 | 100 | 100 | 100 | 100 | 100 | 100 |
38
+ * | `getSuitDescription` | 19 | 100 | 100 | 100 | 100 | 100 | 100 |
39
+ * | `getSuitName` | 19 | 100 | 100 | 100 | 100 | 100 | 100 |
40
+ * | `getPreEngineeredVariantName` | 76 | 100 | 92 | 89 | 89 | 100 | 100 |
41
+ * | `getOutfittingFamilyName` | 77 | 100 | 75 | 75 | 75 | 75 | 75 |
42
+ * <!-- end generated -->
43
+ *
44
+ * Each dataset lives in a separate runtime module. Import from this barrel for
45
+ * convenience or from the corresponding `i18n/*` subpath for an explicit bundle
46
+ * boundary.
47
+ *
48
+ * Structured diagnostic helpers expose their current English fallback only for English
49
+ * locales and return `null` otherwise, so a UI never mistakes English prose for a
50
+ * requested translation. Stable codes and `params` remain available for applications
51
+ * that supply their own message catalogues.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * import {
56
+ * getBlueprintName,
57
+ * getMaterialName,
58
+ * getModuleName,
59
+ * getOutfittingFamilyName,
60
+ * } from '@elite-dangerous-almanac/core/i18n';
61
+ *
62
+ * getModuleName('Int_Hyperdrive_Size6_Class5', 'de'); // -> 'Frameshiftantrieb'
63
+ * getBlueprintName('FSD_LongRange', 'de-DE'); // -> 'Erhöhte FSA-Reichweite'
64
+ * getMaterialName('GridResistors', 'de'); // -> 'Gitterwiderstände'
65
+ *
66
+ * // Sparseness is per dataset, not per locale: German module names are near-complete,
67
+ * // while no outfitting family the game does not name separately has any.
68
+ * getOutfittingFamilyName('shieldGenerators', 'de'); // -> 'Schildgeneratoren'
69
+ * getOutfittingFamilyName('xenoScanners', 'de'); // -> null
70
+ * ```
71
+ *
72
+ * @packageDocumentation
73
+ */
1
74
  export { getModuleName } from './modules.js';
2
75
  export { getOutfittingFamilyName } from './module-families.js';
3
76
  export { getBlueprintName } from './blueprints.js';
@@ -5,6 +78,9 @@ export { getExperimentalEffectName } from './experimental-effects.js';
5
78
  export { getExperimentalEffectDescription } from './experimental-effect-descriptions.js';
6
79
  export { getMaterialName } from './materials.js';
7
80
  export { getMicroResourceName } from './micro-resources.js';
81
+ export { getSuitDescription, getSuitName } from './suits.js';
82
+ export { getPersonalWeaponDescription } from './personal-weapons.js';
83
+ export { getPersonalModificationDescription, getPersonalModificationName } from './personal-modifications.js';
8
84
  export { getLoadoutSlotName, getSlotRestrictionLabel } from './slots.js';
9
85
  export { getCalculationIssueMessage, getLoadoutEditErrorMessage, getLoadoutIssueMessage, getSlefDiagnosticMessage } from './diagnostics.js';
10
86
  export { PreEngineeredVariantIdentity, getPreEngineeredVariantName } from './pre-engineered.js';
@@ -1 +1 @@
1
- export{getExperimentalEffectName}from"../chunk-BMQM4JBL.js";export{getMaterialName}from"../chunk-IZIIGK3W.js";export{getMicroResourceName}from"../chunk-XFDMCPDW.js";export{getOutfittingFamilyName}from"../chunk-SD6GNFDX.js";export{getModuleName}from"../chunk-LZYHBFJC.js";export{getPreEngineeredVariantName}from"../chunk-E3AUKPSQ.js";export{getLoadoutSlotName,getSlotRestrictionLabel}from"../chunk-ZRG35JSH.js"; export{getBlueprintName}from"../chunk-DBDCOHI4.js";export{getCalculationIssueMessage,getLoadoutEditErrorMessage,getLoadoutIssueMessage,getSlefDiagnosticMessage}from"../chunk-6G6TYW2D.js";export{getExperimentalEffectDescription}from"../chunk-MRLUWHGI.js"; //# sourceMappingURL=index.js.map
1
+ export{getPreEngineeredVariantName}from"../chunk-T7IQHFQ2.js";export{getLoadoutSlotName,getSlotRestrictionLabel}from"../chunk-ZRG35JSH.js"; export{getSuitDescription,getSuitName}from"../chunk-FJIWJYKO.js";export{getExperimentalEffectName}from"../chunk-BMQM4JBL.js";export{getMaterialName}from"../chunk-IZIIGK3W.js";export{getMicroResourceName}from"../chunk-XFDMCPDW.js";export{getOutfittingFamilyName}from"../chunk-SD6GNFDX.js";export{getModuleName}from"../chunk-QJECDMQQ.js";export{getPersonalModificationDescription,getPersonalModificationName}from"../chunk-OLKOWR7S.js";export{getPersonalWeaponDescription}from"../chunk-W5ULI75F.js";export{getBlueprintName}from"../chunk-DBDCOHI4.js";export{getCalculationIssueMessage,getLoadoutEditErrorMessage,getLoadoutIssueMessage,getSlefDiagnosticMessage}from"../chunk-6G6TYW2D.js";export{getExperimentalEffectDescription}from"../chunk-MRLUWHGI.js"; //# sourceMappingURL=index.js.map
@@ -9,13 +9,15 @@
9
9
  * hyphens. A regional or script subtag is dropped: every stored locale is a bare
10
10
  * language tag.
11
11
  * @returns The localized outfitting name; the canonical `OutfittingModule.name` for any
12
- * English tag; or `null` when the
13
- * symbol is unknown, the locale is unsupported, or the pinned sources carry no value
14
- * for that module and locale.
12
+ * English tag; or `null` when the symbol is unknown or the locale is not one of the six
13
+ * this catalogue stores.
15
14
  * @remarks
16
- * The table deduplicates modules that share one canonical name. It does not bundle any
17
- * module stats, so this lookup avoids the 1,199-record `ALL_MODULES` catalogue. Missing
18
- * translations never silently fall back to English.
15
+ * All six stored locales are complete for this dataset, so a supported locale always
16
+ * answers. The table deduplicates modules that share one name in every locale, which is
17
+ * finer than sharing one canonical English name: the game distinguishes the singular and
18
+ * plural hull alloys, for instance, where English spells both the same. It does not
19
+ * bundle any module stats, so this lookup avoids the 1,194-record `ALL_MODULES`
20
+ * catalogue.
19
21
  * @throws {TypeError} If `symbol` is present and not a string, or `locale` is not a
20
22
  * string. A nullish `symbol` is a lookup miss and returns `null`.
21
23
  * @example
@@ -23,7 +25,8 @@
23
25
  * import { getModuleName } from '@elite-dangerous-almanac/core/i18n/modules';
24
26
  *
25
27
  * getModuleName('Int_Hyperdrive_Size6_Class5', 'de-DE'); // -> 'Frameshiftantrieb'
26
- * getModuleName('Int_LargeCargoRack_Size8_class1', 'de'); // -> null
28
+ * getModuleName('Int_LargeCargoRack_Size8_class1', 'de'); // -> 'Frachtgestell für Mk II'
29
+ * getModuleName('Int_Hyperdrive_Size6_Class5', 'it'); // -> null
27
30
  * ```
28
31
  */
29
32
  declare function getModuleName(symbol: string, locale: string): string | null;
@@ -1 +1 @@
1
- export{getModuleName}from"../chunk-LZYHBFJC.js"; //# sourceMappingURL=modules.js.map
1
+ export{getModuleName}from"../chunk-QJECDMQQ.js"; //# sourceMappingURL=modules.js.map
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Localized personal-equipment modification names and descriptions, isolated from the
3
+ * recipes' modifiers and material costs.
4
+ */
5
+ /**
6
+ * Look up an engineer-applied personal-equipment modification's source-backed display
7
+ * name for a locale.
8
+ *
9
+ * @param modificationSymbol - The recipe symbol `PERSONAL_MODIFICATIONS` is keyed by,
10
+ * such as `"suit_increasedmeleedamage"` or the technology-specific
11
+ * `"weapon_range_laser"`. A journal line writes the unsuffixed `"weapon_range"`, which
12
+ * `resolvePersonalModificationForWeapon` turns into the specific symbol. Matching
13
+ * ignores case and surrounding whitespace.
14
+ * @param locale - A BCP 47 language or regional tag, such as `"de"`, `"de-DE"` or
15
+ * `"en-GB"`. Matching is case-insensitive; underscores are accepted in place of
16
+ * hyphens. A regional or script subtag is dropped: every stored locale is a bare
17
+ * language tag.
18
+ * @returns The localized modification name; the canonical `PersonalModification.name`
19
+ * for any English tag; or `null` when the recipe is unknown or the locale is not one of
20
+ * the six this catalogue stores.
21
+ * @remarks
22
+ * All six stored locales are complete for this dataset, so a supported locale always
23
+ * answers. The game offers Greater Range, Headshot Damage and Improved Hip Fire Accuracy
24
+ * as one menu entry each, so the three Kinetic, Laser and Plasma recipes this repository
25
+ * keys separately share that entry's record rather than storing it three times.
26
+ * @throws {TypeError} If `modificationSymbol` is present and not a string, or `locale`
27
+ * is not a string. A nullish `modificationSymbol` is a lookup miss and returns `null`.
28
+ * @example
29
+ * ```ts
30
+ * import { getPersonalModificationName } from '@elite-dangerous-almanac/core/i18n/personal-modifications';
31
+ *
32
+ * getPersonalModificationName('suit_nightvision', 'de'); // -> 'Nachtsicht'
33
+ * getPersonalModificationName('weapon_range_laser', 'fr'); // -> 'Portée améliorée'
34
+ * getPersonalModificationName('suit_nightvision', 'it'); // -> null
35
+ * ```
36
+ */
37
+ declare function getPersonalModificationName(modificationSymbol: string, locale: string): string | null;
38
+ /**
39
+ * Look up an engineer-applied personal-equipment modification's display description —
40
+ * the prose the game shows a player, in all six stored locales.
41
+ *
42
+ * @param modificationSymbol - The recipe symbol `PERSONAL_MODIFICATIONS` is keyed by,
43
+ * exactly as {@link getPersonalModificationName} accepts. Matching ignores case and
44
+ * surrounding whitespace.
45
+ * @param locale - A BCP 47 locale. All six stored locales are complete for this dataset.
46
+ * @returns The localized description, or `null` when the recipe is unknown or the
47
+ * requested locale is not one this catalogue stores.
48
+ * @remarks
49
+ * This is display prose, not a statement of the magnitudes a recipe applies: the game
50
+ * says a modification "allows more ammo to be carried for each weapon", never how much
51
+ * more. `PersonalModification.modifiers` answers that, and the two are deliberately not
52
+ * the same string. It is also the only account of the ten recipes whose `modifiers` list
53
+ * is empty, whether because the recipe switches a capability on or because it moves a
54
+ * stat the panel puts no number on. English is the game's own wording rather than a
55
+ * projection of `PersonalModification.name`.
56
+ * @throws {TypeError} If a present `modificationSymbol` or `locale` is not a string.
57
+ * @example
58
+ * ```ts
59
+ * import { getPersonalModificationDescription } from '@elite-dangerous-almanac/core/i18n/personal-modifications';
60
+ *
61
+ * getPersonalModificationDescription('suit_nightvision', 'en');
62
+ * // -> 'Adds Night Vision capabilities to the suit.'
63
+ * getPersonalModificationDescription('suit_nightvision', 'ja'); // -> null
64
+ * ```
65
+ */
66
+ declare function getPersonalModificationDescription(modificationSymbol: string, locale: string): string | null;
67
+
68
+ export { getPersonalModificationDescription, getPersonalModificationName };
@@ -0,0 +1 @@
1
+ export{getPersonalModificationDescription,getPersonalModificationName}from"../chunk-OLKOWR7S.js"; //# sourceMappingURL=personal-modifications.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"O"}
@@ -0,0 +1,33 @@
1
+ /** Localized handheld-weapon descriptions, isolated from weapon combat stats. */
2
+ /**
3
+ * Look up a handheld weapon's display description — the prose the game shows a player,
4
+ * in all six stored locales.
5
+ *
6
+ * @param symbol - Frontier's weapon symbol, such as `"wpn_s_pistol_kinetic_sauto"`.
7
+ * Matching ignores case and surrounding whitespace.
8
+ * @param locale - A BCP 47 language or regional tag, such as `"de"`, `"de-DE"` or
9
+ * `"en-GB"`. Matching is case-insensitive; underscores are accepted in place of
10
+ * hyphens. A regional or script subtag is dropped: every stored locale is a bare
11
+ * language tag. All six stored locales are complete for this dataset.
12
+ * @returns The localized description, or `null` when the weapon is unknown or the
13
+ * requested locale is not one this catalogue stores.
14
+ * @remarks
15
+ * **There is no matching name lookup, and that is not a gap.** A handheld weapon's name
16
+ * is a product name — "Karma P-15", "TK Aphelion" — that the game leaves in English in
17
+ * every locale, so `PersonalWeapon.name` is the name in all six. This is display prose
18
+ * and not a statement of the weapon's mechanics: it names no damage figure, rate of fire
19
+ * or effective range, which are the stats `PERSONAL_WEAPONS` carries.
20
+ * @throws {TypeError} If `symbol` is present and not a string, or `locale` is not a
21
+ * string. A nullish `symbol` is a lookup miss and returns `null`.
22
+ * @example
23
+ * ```ts
24
+ * import { getPersonalWeaponDescription } from '@elite-dangerous-almanac/core/i18n/personal-weapons';
25
+ *
26
+ * getPersonalWeaponDescription('wpn_m_sniper_plasma_charged', 'en');
27
+ * // -> 'A semi-automatic, long-range plasma rifle with high damage output and a low rate of fire.'
28
+ * getPersonalWeaponDescription('wpn_m_sniper_plasma_charged', 'it'); // -> null
29
+ * ```
30
+ */
31
+ declare function getPersonalWeaponDescription(symbol: string, locale: string): string | null;
32
+
33
+ export { getPersonalWeaponDescription };
@@ -0,0 +1 @@
1
+ export{getPersonalWeaponDescription}from"../chunk-W5ULI75F.js"; //# sourceMappingURL=personal-weapons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"O"}
@@ -1 +1 @@
1
- export{getPreEngineeredVariantName}from"../chunk-E3AUKPSQ.js"; //# sourceMappingURL=pre-engineered.js.map
1
+ export{getPreEngineeredVariantName}from"../chunk-T7IQHFQ2.js"; //# sourceMappingURL=pre-engineered.js.map
@@ -0,0 +1,59 @@
1
+ /** Localized personal-suit display names and descriptions, isolated from suit stats. */
2
+ /**
3
+ * Look up an Odyssey suit's source-backed display name for a locale.
4
+ *
5
+ * @param suit - Either the grade-independent family `Suit.family` carries, such as
6
+ * `"utilitysuit"`, or one grade's Frontier symbol, such as `"utilitysuit_class3"` — the
7
+ * form a journal line writes. Matching ignores case and surrounding whitespace.
8
+ * @param locale - A BCP 47 language or regional tag, such as `"de"`, `"de-DE"` or
9
+ * `"en-GB"`. Matching is case-insensitive; underscores are accepted in place of
10
+ * hyphens. A regional or script subtag is dropped: every stored locale is a bare
11
+ * language tag.
12
+ * @returns The localized suit name; the canonical `Suit.name` for any English tag; or
13
+ * `null` when the suit is unknown or the locale is not one of the six this catalogue
14
+ * stores.
15
+ * @remarks
16
+ * All six stored locales are complete for this dataset, so a supported locale always
17
+ * answers. The game names a suit per family rather than per grade, so every grade of one
18
+ * suit resolves to the same name. The name is the suit's own: the outfitting list
19
+ * prefixes it with the manufacturer — "Remlok Maverick Suit" — which names a shop
20
+ * listing rather than the suit, and is not stored. This lookup bundles no suit stats.
21
+ * @throws {TypeError} If `suit` is present and not a string, or `locale` is not a
22
+ * string. A nullish `suit` is a lookup miss and returns `null`.
23
+ * @example
24
+ * ```ts
25
+ * import { getSuitName } from '@elite-dangerous-almanac/core/i18n/suits';
26
+ *
27
+ * getSuitName('utilitysuit', 'de-DE'); // -> 'Maverick-Anzug'
28
+ * getSuitName('explorationsuit_class3', 'fr'); // -> 'Combinaison Artemis'
29
+ * getSuitName('utilitysuit', 'it'); // -> null
30
+ * ```
31
+ */
32
+ declare function getSuitName(suit: string, locale: string): string | null;
33
+ /**
34
+ * Look up an Odyssey suit's display description — the prose the game shows a player, in
35
+ * all six stored locales.
36
+ *
37
+ * @param suit - Either the grade-independent family `Suit.family` carries or one grade's
38
+ * Frontier symbol, exactly as {@link getSuitName} accepts. Matching ignores case and
39
+ * surrounding whitespace.
40
+ * @param locale - A BCP 47 locale. All six stored locales are complete for this dataset.
41
+ * @returns The localized description, or `null` when the suit is unknown or the
42
+ * requested locale is not one this catalogue stores.
43
+ * @remarks
44
+ * This is display prose, not a statement of what the suit does: it names no shield
45
+ * strength, no battery capacity and no resistance. Those are the stats
46
+ * `SUITS` carries, and the two are deliberately not the same string. English is the
47
+ * game's own wording here rather than a projection of `Suit.name`.
48
+ * @throws {TypeError} If a present `suit` or `locale` is not a string.
49
+ * @example
50
+ * ```ts
51
+ * import { getSuitDescription } from '@elite-dangerous-almanac/core/i18n/suits';
52
+ *
53
+ * getSuitDescription('flightsuit', 'en')?.startsWith('Remlok'); // -> true
54
+ * getSuitDescription('flightsuit', 'ja'); // -> null
55
+ * ```
56
+ */
57
+ declare function getSuitDescription(suit: string, locale: string): string | null;
58
+
59
+ export { getSuitDescription, getSuitName };
@@ -0,0 +1 @@
1
+ export{getSuitDescription,getSuitName}from"../chunk-FJIWJYKO.js"; //# sourceMappingURL=suits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"O"}
@@ -1 +1 @@
1
- export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory}from"../chunk-7S7ZTZZY.js";export{MaterialGrade,MaterialLine,getMaterialByElementSymbol,getMaterialByName,getMaterialBySymbol,materialsByGrade,materialsInCategory,materialsInLine}from"../chunk-OFZGNWBT.js";export{ALL_MATERIALS}from"../chunk-KBCA4GEZ.js";export{ENCODED_MATERIALS}from"../chunk-A5TCT2AJ.js";export{MANUFACTURED_MATERIALS}from"../chunk-PF3HZ73R.js";export{RAW_MATERIALS}from"../chunk-Q6YDPREF.js"; export{ALL_MICRO_RESOURCES}from"../chunk-KLC5XT6F.js";export{CONSUMABLE_MICRO_RESOURCES}from"../chunk-K7L7SMIR.js";export{DATA_MICRO_RESOURCES}from"../chunk-GVLDFJEY.js";export{ITEM_MICRO_RESOURCES}from"../chunk-WHWFKHV3.js";export{COMPONENT_MICRO_RESOURCES}from"../chunk-HTB52N6S.js"; //# sourceMappingURL=index.js.map
1
+ export{MaterialGrade,MaterialLine,getMaterialByElementSymbol,getMaterialByName,getMaterialBySymbol,materialsByGrade,materialsInCategory,materialsInLine}from"../chunk-OFZGNWBT.js";export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory}from"../chunk-7EWZGDWY.js";export{ALL_MICRO_RESOURCES}from"../chunk-DAQ3PJ4R.js";export{COMPONENT_MICRO_RESOURCES}from"../chunk-HTB52N6S.js";export{CONSUMABLE_MICRO_RESOURCES}from"../chunk-K7L7SMIR.js";export{DATA_MICRO_RESOURCES}from"../chunk-GVLDFJEY.js";export{ITEM_MICRO_RESOURCES}from"../chunk-WHWFKHV3.js"; export{ALL_MATERIALS}from"../chunk-KBCA4GEZ.js";export{ENCODED_MATERIALS}from"../chunk-A5TCT2AJ.js";export{MANUFACTURED_MATERIALS}from"../chunk-PF3HZ73R.js";export{RAW_MATERIALS}from"../chunk-Q6YDPREF.js"; //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- export{ALL_MICRO_RESOURCES}from"../chunk-KLC5XT6F.js"; //# sourceMappingURL=micro-resources-all.js.map
1
+ export{ALL_MICRO_RESOURCES}from"../chunk-DAQ3PJ4R.js"; //# sourceMappingURL=micro-resources-all.js.map
@@ -1 +1 @@
1
- export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory}from"../chunk-7S7ZTZZY.js"; //# sourceMappingURL=micro-resources.js.map
1
+ export{getMicroResourceByName,getMicroResourceBySymbol,microResourcesInCategory}from"../chunk-7EWZGDWY.js"; //# sourceMappingURL=micro-resources.js.map
@@ -1 +1 @@
1
- export{BLUEPRINT_COSTS,BLUEPRINT_MERC_COIN_COSTS,getBlueprintCost,getBlueprintCosts,getBlueprintGradeCost}from"../chunk-YCGISPDR.js"; //# sourceMappingURL=blueprint-costs.js.map
1
+ export{BLUEPRINT_COSTS,BLUEPRINT_MERC_COIN_COSTS,getBlueprintCost,getBlueprintCosts,getBlueprintGradeCost}from"../chunk-ETWMPMZP.js"; //# sourceMappingURL=blueprint-costs.js.map
@@ -1 +1 @@
1
- export{resolveBlueprintForModule}from"../chunk-SDXUPP4P.js"; //# sourceMappingURL=blueprint-journal.js.map
1
+ export{resolveBlueprintForModule}from"../chunk-XSLPWM5N.js"; //# sourceMappingURL=blueprint-journal.js.map
@@ -1 +1 @@
1
- export{BuildMetrics}from"../chunk-S3MONE55.js"; //# sourceMappingURL=build-metrics.js.map
1
+ export{BuildMetrics}from"../chunk-YJAH6DFY.js"; //# sourceMappingURL=build-metrics.js.map
@@ -8,7 +8,7 @@
8
8
  * this module?" is the question the game actually answers. So modules are grouped, and
9
9
  * each group lists what it offers.
10
10
  *
11
- * The catalogue groups 1005 of the 1199 modules — every stock module with an ordinary
11
+ * The catalogue groups 1000 of the 1194 modules — every stock module with an ordinary
12
12
  * engineering menu. The other 194 have no ordinary menu: whole families (fuel tanks,
13
13
  * cargo racks, passenger cabins, the repair, recon, research, decontamination and
14
14
  * multi-limpet controllers, meta-alloy and ordinary module reinforcement, the Pulse Wave
@@ -190,7 +190,7 @@ declare function getBlueprintsForModule(symbol: string): readonly string[];
190
190
  * here, so the result is the exact set for this module.
191
191
  *
192
192
  * **An empty array is the common answer, and it usually means "blueprints only".** 368
193
- * of the 1005 grouped modules have no experimental slot; all sit in the 27 of 48 groups
193
+ * of the 1000 grouped modules have no experimental slot; all sit in the 27 of 48 groups
194
194
  * that offer none — life support, sensors, the limpet controllers, the utility scanners,
195
195
  * and every Guardian group, weapons and modules alike. An ungrouped module answers empty
196
196
  * too; {@link getEngineeringGroup} tells the two apart.
@@ -1 +1 @@
1
- export{ENGINEERING_OPTION_GROUPS,getBlueprintsForModule,getEngineeringGroup,getExperimentalsForBlueprint,getExperimentalsForModule}from"../chunk-LOWDDWDT.js"; //# sourceMappingURL=engineering-options.js.map
1
+ export{ENGINEERING_OPTION_GROUPS,getBlueprintsForModule,getEngineeringGroup,getExperimentalsForBlueprint,getExperimentalsForModule}from"../chunk-EHFHRQEP.js"; //# sourceMappingURL=engineering-options.js.map
@@ -1 +1 @@
1
- export{computeModifiers,sumMaterials}from"../chunk-5QSCLEEB.js"; //# sourceMappingURL=engineering.js.map
1
+ export{computeModifiers,sumMaterials}from"../chunk-A7IVMYNF.js"; //# sourceMappingURL=engineering.js.map
@@ -28,7 +28,7 @@
28
28
  * {@link ships/default-loadouts!DEFAULT_LOADOUTS | default-loadouts} subpath carries
29
29
  * the stock modules {@link ShipLoadout.default} turns into a live build.
30
30
  * - **Modules** — the {@link OutfittingModule} type and the lookups
31
- * ({@link getModuleBySymbol} & co.), which search all 1199 modules unless you hand
31
+ * ({@link getModuleBySymbol} & co.), which search all 1194 modules unless you hand
32
32
  * them a narrower set; capability guards such as {@link hasWeaponDamageStats} narrow
33
33
  * the sparse record before stat access. The catalogues live on explicit subpaths split
34
34
  * by Frontier's four outfitting categories —
@@ -111,7 +111,7 @@
111
111
  * ```
112
112
  *
113
113
  * @example
114
- * **The lookup layer.** One small hull catalogue, and 1199 modules split by Frontier's
114
+ * **The lookup layer.** One small hull catalogue, and 1194 modules split by Frontier's
115
115
  * four outfitting categories. Lookups ignore case and surrounding whitespace.
116
116
  *
117
117
  * ```ts
@@ -121,8 +121,8 @@
121
121
  *
122
122
  * getShipBySymbol('empire_trader')?.name; // -> 'Imperial Clipper'
123
123
  *
124
- * // Pass a category to bound what you bundle; omit it to search all 1199.
125
- * CORE_MODULES.length; // -> 521
124
+ * // Pass a category to bound what you bundle; omit it to search all 1194.
125
+ * CORE_MODULES.length; // -> 516
126
126
  * getModuleBySymbol('Int_Hyperdrive_Size6_Class5', CORE_MODULES)?.name;
127
127
  * // -> 'Frame Shift Drive'
128
128
  * ```
@@ -157,7 +157,7 @@ export { BlueprintModuleEngineering, EngineeringModifier, LoadoutEvent, LoadoutM
157
157
  export { FrameShiftDriveParams, TotalRangeDetails, frameShiftDriveMassFactor, fuelPerJump, singleJumpRange, totalRange } from './jump-range.js';
158
158
  export { ApplyBlueprintOptions, AvailableBlueprint, EngineeringNormalizationCode, EngineeringNormalizationResult, EngineeringNormalizationUnchanged, EngineeringNormalizationUnsupported, EngineeringNormalized, ExperimentalEffectMutationCode, ExperimentalEffectMutationResult, ExperimentalEffectUnchanged, ExperimentalEffectUnsupported, ExperimentalEffectUpdated, FittedModule, FixedMountRepairResult, ImmovableReason, LoadoutEditError, LoadoutEditErrorCode, LoadoutExportOptions, LoadoutImportOutcome, LoadoutSlot, ShipLoadout, SlefExportOptions } from './ship-loadout.js';
159
159
  export { BuildCost, BuildCredits, BuildMass, BuildMetrics, BuildWeaponMetrics, DistributorOptions, FittedWeaponMetrics, JumpOptions, JumpRangeSummary, MobilityCapacitorOptions, ShieldCapacitorOptions, ShieldRecoveryOptions, StandardLoad, StandardLoadInputs, WeaponsOptions } from './build-metrics.js';
160
- export { CalculationIssue, CalculationIssueReason, CalculationResult, FuelCapacity, LoadoutCalculationModule, calculateCargoCapacity, calculateFuelCapacity, calculateUnladenMass } from './loadout-calculations.js';
160
+ export { CalculationIssue, CalculationIssueReason, CalculationResult, FuelCapacity, LoadoutCalculationModule, calculateCargoCapacity, calculateFuelCapacity, calculatePassengerCapacity, calculateUnladenMass } from './loadout-calculations.js';
161
161
  export { LoadoutIssue, LoadoutIssueCode, LoadoutIssueParam, LoadoutIssueParams, LoadoutMass, LoadoutValidation, LoadoutValidationInput, ModuleFitConstraint, ThrusterLoad, ValidationModule, validateLoadout } from './loadout-validation.js';
162
162
  export { SourceModuleValue, SourcePurchaseRecord, getSourceModuleValue, sourcePurchaseFromLoadout, sumSourceModuleValues } from './source-purchase.js';
163
163
  export { PowerBand, PowerBudget, PowerConsumer, PowerConsumerResult, powerBudget } from './power.js';
@@ -1 +1 @@
1
- export{LoadoutEditError,ShipLoadout}from"../chunk-3P455LF4.js";export{hasFrameShiftDriveJumpStats,hasMassCurveStats,hasPowerDistributorStats,hasPowerGenerationStats,hasShieldRegenerationStats,hasWeaponDamageStats}from"../chunk-JTQVWIGL.js";export{OUTFITTING_FAMILIES}from"../chunk-M6G3UDTX.js";export{SHIP_GUNSIGHTS,getShipGunsight,projectGunsight}from"../chunk-XSN53F7W.js";export{validateLoadout}from"../chunk-OJC6AUL7.js";export{SHIP_MODULE_LIMITS,calculateModuleLimits}from"../chunk-KPETDYQX.js";export{BuildMetrics}from"../chunk-S3MONE55.js"; export{SHIPS,getShipByName,getShipBySymbol,getShipSlots}from"../chunk-6UNAD74Z.js";export{getLoadoutModifier,inspectSlef,parseSlef,stringifySlef,toSlef}from"../chunk-T4MKUKYS.js";export{getSourceModuleValue,sourcePurchaseFromLoadout,sumSourceModuleValues}from"../chunk-NIURLW2F.js";export{weaponsCapacitorMetrics}from"../chunk-M4FZRDAH.js";export{armourPiercingFactor,combinedRateOfFire,damageFalloff,damagePerSecond,energyPerSecond,heatPerSecond,splitDamage,sumWeaponMetrics,sustainedDamagePerSecond,sustainedFireFactor,weaponMetrics}from"../chunk-AAU7OM47.js";export{powerBudget}from"../chunk-GGQMIQPC.js";export{getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,unresolvedModifiers}from"../chunk-NBLLW7TH.js";export{getBulkheadsForShip,getModuleBySymbol,getModulesByName}from"../chunk-ABSDZINM.js";export{PRE_ENGINEERED_MODULES,getPreEngineeredVariants,isPreEngineered}from"../chunk-KPJ77VPS.js";export{shieldCapacitorMetrics}from"../chunk-XQJERZUS.js";export{cellBankSummary,shieldRecovery}from"../chunk-JMAXSXXQ.js";export{shieldMassCurveMultiplier,shieldMetrics,shieldStrength}from"../chunk-5VWACBTN.js"; export{OVERHEAT_HEAT_LEVEL,effectiveWeaponThermalLoad,equilibriumHeatLevel,heatLevelAtTime,heatMetrics,secondsToHeatLevel}from"../chunk-6HA2YIKW.js";export{frameShiftDriveMassFactor,fuelPerJump,singleJumpRange,totalRange}from"../chunk-VTMCSCXV.js";export{calculateCargoCapacity,calculateFuelCapacity,calculateUnladenMass}from"../chunk-DCB4COCL.js";export{mobilityCapacitorMetrics}from"../chunk-VEEBJFJ7.js";export{mobilityMetrics,thrusterMassCurveMultiplier}from"../chunk-A4QKXXZD.js"; export{BLUEPRINTS,getBlueprint,getBlueprintGrade}from"../chunk-AYAKU4YA.js"; export{distributorMetrics}from"../chunk-M2TCZKRT.js"; export{EXPERIMENTAL_EFFECTS,getExperimentalEffect}from"../chunk-77I24V6B.js";export{ammunitionCapacity}from"../chunk-AA3K5XUE.js";export{armourMetrics}from"../chunk-Q5ALV3DI.js";export{effectiveHitPoints,mapDamageTypes,stackArmourResistance,stackShieldResistance,systemsResistance}from"../chunk-F44QX47A.js"; export{computeModifiers,sumMaterials}from"../chunk-5QSCLEEB.js"; export{resolveBlueprintForModule}from"../chunk-SDXUPP4P.js";export{ENGINEERING_OPTION_GROUPS,getBlueprintsForModule,getEngineeringGroup,getExperimentalsForBlueprint,getExperimentalsForModule}from"../chunk-LOWDDWDT.js"; export{SLOT_RESTRICTION_LABELS,enumerateSlots,parseSlotName}from"../chunk-RAO35XDF.js"; //# sourceMappingURL=index.js.map
1
+ export{LoadoutEditError,ShipLoadout}from"../chunk-SC4MEHVY.js";export{validateLoadout}from"../chunk-3GNYPM6J.js";export{hasFrameShiftDriveJumpStats,hasMassCurveStats,hasPowerDistributorStats,hasPowerGenerationStats,hasShieldRegenerationStats,hasWeaponDamageStats}from"../chunk-JTQVWIGL.js";export{OUTFITTING_FAMILIES}from"../chunk-M6G3UDTX.js";export{SHIP_MODULE_LIMITS,calculateModuleLimits}from"../chunk-KPETDYQX.js";export{SHIP_GUNSIGHTS,getShipGunsight,projectGunsight}from"../chunk-XSN53F7W.js";export{BuildMetrics}from"../chunk-YJAH6DFY.js";export{weaponsCapacitorMetrics}from"../chunk-M4FZRDAH.js";export{shieldCapacitorMetrics}from"../chunk-JCYOE3C4.js";export{cellBankSummary,shieldRecovery}from"../chunk-JMAXSXXQ.js"; export{armourPiercingFactor,combinedRateOfFire,damageFalloff,damagePerSecond,energyPerSecond,heatPerSecond,splitDamage,sumWeaponMetrics,sustainedDamagePerSecond,sustainedFireFactor,weaponMetrics}from"../chunk-2OBUSQA7.js";export{shieldMassCurveMultiplier,shieldMetrics,shieldStrength}from"../chunk-5VWACBTN.js";export{SHIPS,getShipByName,getShipBySymbol,getShipSlots}from"../chunk-6UNAD74Z.js";export{getLoadoutModifier,inspectSlef,parseSlef,stringifySlef,toSlef}from"../chunk-T4MKUKYS.js";export{getSourceModuleValue,sourcePurchaseFromLoadout,sumSourceModuleValues}from"../chunk-NIURLW2F.js";export{powerBudget}from"../chunk-GGQMIQPC.js";export{getPreEngineeredJournalModifiers,getPreEngineeredModifiers,getPreEngineeredStats,identifyPreEngineeredVariant,unresolvedModifiers}from"../chunk-IN36YSS4.js";export{getBulkheadsForShip,getModuleBySymbol,getModulesByName}from"../chunk-5YEHJM6V.js";export{PRE_ENGINEERED_MODULES,getPreEngineeredVariants,isPreEngineered}from"../chunk-BJU27V6C.js"; export{mobilityCapacitorMetrics}from"../chunk-VEEBJFJ7.js";export{mobilityMetrics,thrusterMassCurveMultiplier}from"../chunk-A4QKXXZD.js"; export{EXPERIMENTAL_EFFECTS,getExperimentalEffect}from"../chunk-77I24V6B.js";export{OVERHEAT_HEAT_LEVEL,effectiveWeaponThermalLoad,equilibriumHeatLevel,heatLevelAtTime,heatMetrics,secondsToHeatLevel}from"../chunk-6HA2YIKW.js";export{frameShiftDriveMassFactor,fuelPerJump,singleJumpRange,totalRange}from"../chunk-VTMCSCXV.js";export{calculateCargoCapacity,calculateFuelCapacity,calculatePassengerCapacity,calculateUnladenMass}from"../chunk-C3LLPLLD.js";export{armourMetrics}from"../chunk-Q5ALV3DI.js";export{effectiveHitPoints,mapDamageTypes,stackArmourResistance,stackShieldResistance,systemsResistance}from"../chunk-F44QX47A.js"; export{computeModifiers,sumMaterials}from"../chunk-A7IVMYNF.js"; export{resolveBlueprintForModule}from"../chunk-XSLPWM5N.js";export{BLUEPRINTS,getBlueprint,getBlueprintGrade}from"../chunk-AYAKU4YA.js"; export{distributorMetrics}from"../chunk-M2TCZKRT.js"; export{ENGINEERING_OPTION_GROUPS,getBlueprintsForModule,getEngineeringGroup,getExperimentalsForBlueprint,getExperimentalsForModule}from"../chunk-EHFHRQEP.js";export{ammunitionCapacity}from"../chunk-AA3K5XUE.js"; export{SLOT_RESTRICTION_LABELS,enumerateSlots,parseSlotName}from"../chunk-RAO35XDF.js"; //# sourceMappingURL=index.js.map
@@ -2,7 +2,7 @@
2
2
  * Pure aggregate calculations for ship loadouts.
3
3
  *
4
4
  * @remarks
5
- * The three sums here consume already-resolved module contributions, so they import no
5
+ * The four sums here consume already-resolved module contributions, so they import no
6
6
  * catalogue and know nothing of {@link ShipLoadout}. Every contribution is a known number
7
7
  * — a record missing one is refused long before it reaches a build — so each returns its
8
8
  * figure outright. The {@link CalculationResult} types below belong to the
@@ -59,6 +59,8 @@ interface LoadoutCalculationModule {
59
59
  readonly mass: number;
60
60
  /** Cargo tonnes; `undefined` for anything but a cargo rack. */
61
61
  readonly cargoCapacity?: number;
62
+ /** Berths; `undefined` for anything but a passenger cabin. */
63
+ readonly cabinCapacity?: number;
62
64
  /** Fuel tonnes; `undefined` for anything but a fuel tank. */
63
65
  readonly fuelCapacity?: number;
64
66
  }
@@ -84,6 +86,13 @@ declare function calculateUnladenMass(hullMass: number, modules: readonly Loadou
84
86
  * @returns Cargo capacity in tonnes. A build with no rack carries `0`.
85
87
  */
86
88
  declare function calculateCargoCapacity(modules: readonly LoadoutCalculationModule[]): number;
89
+ /**
90
+ * Sum fitted passenger cabins.
91
+ *
92
+ * @param modules - Resolved fitted-module contributions.
93
+ * @returns Passenger capacity, in berths. A build with no cabin carries `0`.
94
+ */
95
+ declare function calculatePassengerCapacity(modules: readonly LoadoutCalculationModule[]): number;
87
96
  /**
88
97
  * Sum fitted fuel tanks and the hull reserve.
89
98
  *
@@ -93,4 +102,4 @@ declare function calculateCargoCapacity(modules: readonly LoadoutCalculationModu
93
102
  */
94
103
  declare function calculateFuelCapacity(reserveFuelCapacity: number, modules: readonly LoadoutCalculationModule[]): FuelCapacity;
95
104
 
96
- export { type CalculationIssue, type CalculationIssueReason, type CalculationResult, type FuelCapacity, type LoadoutCalculationModule, calculateCargoCapacity, calculateFuelCapacity, calculateUnladenMass };
105
+ export { type CalculationIssue, type CalculationIssueReason, type CalculationResult, type FuelCapacity, type LoadoutCalculationModule, calculateCargoCapacity, calculateFuelCapacity, calculatePassengerCapacity, calculateUnladenMass };
@@ -1 +1 @@
1
- export{calculateCargoCapacity,calculateFuelCapacity,calculateUnladenMass}from"../chunk-DCB4COCL.js";//# sourceMappingURL=loadout-calculations.js.map
1
+ export{calculateCargoCapacity,calculateFuelCapacity,calculatePassengerCapacity,calculateUnladenMass}from"../chunk-C3LLPLLD.js";//# sourceMappingURL=loadout-calculations.js.map
@@ -39,8 +39,13 @@ type LoadoutIssueCode = 'duplicateSlot' | 'unknownSlot' | 'missingRequiredSlot'
39
39
  * Failing only at `laden` is a warning: the hold is the one load a pilot chooses.
40
40
  */
41
41
  type ThrusterLoad = 'dry' | 'unladen' | 'laden';
42
- /** Stable machine-readable constraint behind an `incompatibleModule` issue. */
43
- type ModuleFitConstraint = 'immutableSlot' | 'armourRequired' | 'wrongHullArmour' | 'restrictedHull' | 'restrictedMount' | 'wrongCoreType' | 'hardpointRequired' | 'utilityRequired' | 'optionalInternalRequired' | 'coreModuleInOptionalSlot' | 'oversized' | 'unknownConstraint';
42
+ /**
43
+ * Stable machine-readable constraint behind an `incompatibleModule` issue.
44
+ *
45
+ * `builtInHullModule` is the only one that does not depend on the mount: the cargo hatch
46
+ * comes with the hull and goes in no mount an editor can set.
47
+ */
48
+ type ModuleFitConstraint = 'immutableSlot' | 'builtInHullModule' | 'armourRequired' | 'wrongHullArmour' | 'restrictedHull' | 'restrictedMount' | 'wrongCoreType' | 'hardpointRequired' | 'utilityRequired' | 'optionalInternalRequired' | 'coreModuleInOptionalSlot' | 'oversized' | 'unknownConstraint';
44
49
  /**
45
50
  * One language-neutral value carried by a structured loadout diagnostic: a scalar
46
51
  * string/number, or a string list the consumer can format for its locale. Paired name
@@ -1 +1 @@
1
- export{validateLoadout}from"../chunk-OJC6AUL7.js"; //# sourceMappingURL=loadout-validation.js.map
1
+ export{validateLoadout}from"../chunk-3GNYPM6J.js"; //# sourceMappingURL=loadout-validation.js.map