@elite-dangerous-almanac/core 0.1.0-beta.5 → 0.1.0-beta.7

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 (67) hide show
  1. package/PROVENANCE/ships/SOURCES.md +45 -23
  2. package/README.md +12 -1
  3. package/dist/chunk-2YPWFAWM.js +1 -0
  4. package/dist/chunk-2YPWFAWM.js.map +1 -0
  5. package/dist/chunk-43LFDZ4T.js +1 -0
  6. package/dist/chunk-43LFDZ4T.js.map +1 -0
  7. package/dist/chunk-4TXQWLIQ.js +1 -0
  8. package/dist/chunk-4TXQWLIQ.js.map +1 -0
  9. package/dist/chunk-BSOIPL4A.js +1 -0
  10. package/dist/{chunk-IHHS5Q5S.js.map → chunk-BSOIPL4A.js.map} +1 -1
  11. package/dist/chunk-IAWTRADE.js +1 -0
  12. package/dist/chunk-IAWTRADE.js.map +1 -0
  13. package/dist/{chunk-6LUEKHO5.js → chunk-OHGOVZ7U.js} +1 -1
  14. package/dist/{chunk-6LUEKHO5.js.map → chunk-OHGOVZ7U.js.map} +1 -1
  15. package/dist/{chunk-ECBYOHPF.js → chunk-PRQELBIC.js} +1 -1
  16. package/dist/chunk-SQJMIEAQ.js +1 -0
  17. package/dist/chunk-SQJMIEAQ.js.map +1 -0
  18. package/dist/{chunk-VZZ2XIRE.js → chunk-SVZARHWP.js} +1 -1
  19. package/dist/chunk-SVZARHWP.js.map +1 -0
  20. package/dist/chunk-TH4S5MVD.js +1 -0
  21. package/dist/{chunk-BNILZXJD.js.map → chunk-TH4S5MVD.js.map} +1 -1
  22. package/dist/chunk-W7XI3WVA.js +1 -0
  23. package/dist/{chunk-XSFGRMJC.js.map → chunk-W7XI3WVA.js.map} +1 -1
  24. package/dist/chunk-WCIK2WB7.js +1 -0
  25. package/dist/chunk-WCIK2WB7.js.map +1 -0
  26. package/dist/{chunk-GJCB2Z72.js → chunk-XYK6DYVQ.js} +1 -1
  27. package/dist/{chunk-GJCB2Z72.js.map → chunk-XYK6DYVQ.js.map} +1 -1
  28. package/dist/{chunk-L2ZZXEZM.js → chunk-ZJB5UYNE.js} +1 -1
  29. package/dist/{ship-loadout-D27yT2y2.d.ts → ship-loadout-DBTsp5g-.d.ts} +79 -12
  30. package/dist/ships/blueprint-costs.js +1 -1
  31. package/dist/ships/blueprint-journal.js +1 -1
  32. package/dist/ships/decorative-modification-stats.d.ts +112 -0
  33. package/dist/ships/decorative-modification-stats.js +1 -0
  34. package/dist/ships/decorative-modification-stats.js.map +1 -0
  35. package/dist/ships/decorative-modifications.d.ts +7 -4
  36. package/dist/ships/decorative-modifications.js +1 -1
  37. package/dist/ships/engineering-options.d.ts +44 -41
  38. package/dist/ships/engineering-options.js +1 -1
  39. package/dist/ships/engineering.d.ts +15 -12
  40. package/dist/ships/engineering.js +1 -1
  41. package/dist/ships/index.d.ts +8 -4
  42. package/dist/ships/index.js +1 -1
  43. package/dist/ships/modules-all.js +1 -1
  44. package/dist/ships/modules-hardpoint.js +1 -1
  45. package/dist/ships/modules.d.ts +2 -2
  46. package/dist/ships/modules.js +1 -1
  47. package/dist/ships/pre-engineered-stats.d.ts +5 -3
  48. package/dist/ships/pre-engineered-stats.js +1 -1
  49. package/dist/ships/pre-engineered.d.ts +6 -4
  50. package/dist/ships/pre-engineered.js +1 -1
  51. package/dist/ships/ship-loadout.d.ts +1 -1
  52. package/dist/ships/ship-loadout.js +1 -1
  53. package/dist/ships/slef.d.ts +57 -18
  54. package/dist/ships/slef.js +1 -1
  55. package/package.json +5 -1
  56. package/dist/chunk-7MKYFCFF.js +0 -1
  57. package/dist/chunk-7MKYFCFF.js.map +0 -1
  58. package/dist/chunk-AUHDXSQL.js +0 -1
  59. package/dist/chunk-AUHDXSQL.js.map +0 -1
  60. package/dist/chunk-BNILZXJD.js +0 -1
  61. package/dist/chunk-IHHS5Q5S.js +0 -1
  62. package/dist/chunk-JBR4PTCM.js +0 -1
  63. package/dist/chunk-JBR4PTCM.js.map +0 -1
  64. package/dist/chunk-VZZ2XIRE.js.map +0 -1
  65. package/dist/chunk-XSFGRMJC.js +0 -1
  66. /package/dist/{chunk-ECBYOHPF.js.map → chunk-PRQELBIC.js.map} +0 -0
  67. /package/dist/{chunk-L2ZZXEZM.js.map → chunk-ZJB5UYNE.js.map} +0 -0
@@ -379,10 +379,12 @@ FDevIDs, stats from coriolis-data and EDSY, joined on `symbol`.
379
379
  II's `Int_MkIIAgileBoost_Engine_*` thrusters.
380
380
  - **A fuel tank is the one module built for two kinds of mount:** it is `fuelTank`
381
381
  and also fits any optional slot large enough, exactly as the game sells it.
382
- - **`kind` is the engineering family.** The 1028 records mapped by
382
+ - **`kind` is the ordinary engineering-menu family.** The 1026 records mapped by
383
383
  `engineering-options.jsonc` repeat that map's group key in the compact on-disk `kind`
384
- field. The remaining 171 records carry no `kind` because the pinned sources publish
385
- no engineering family for them. The group source, derivation, split
384
+ field. Of the remaining 173 records, 171 carry no `kind` because the pinned sources
385
+ publish no engineering family for them; the fixed Mining Laser and Abrasion Blaster
386
+ omit the family as the in-game correction documented under Engineering options below.
387
+ The group source, derivation, split
386
388
  Guardian families and coverage are documented under Engineering options below; this
387
389
  field is a projection of that map, not a separate classification source.
388
390
  - **Stats source:** coriolis-data `modules/**` for the mechanical, defence, power and
@@ -1344,7 +1346,7 @@ up straight through with no disambiguation at all. Both paths are evidence that
1344
1346
  - **Availability is a property of the module, not of the blueprint.** A Pulse Laser and a
1345
1347
  Rail Gun both take the Efficient blueprint but offer different experimental effects, so
1346
1348
  "which experimentals go with blueprint X" has no single answer. Modules are therefore
1347
- grouped (53 groups covering 1028 engineerable modules) and each group lists the
1349
+ grouped (52 groups covering 1026 ordinary engineering menus) and each group lists the
1348
1350
  `blueprints` and `experimentals` it offers.
1349
1351
  - **Source:** EDSY `eddb.js`, whose module-group tables carry each group's `blueprints`
1350
1352
  and `expeffects` lists and which modules belong to each group, and whose module records
@@ -1352,8 +1354,10 @@ up straight through with no disambiguation at all. Both paths are evidence that
1352
1354
  denials that narrow either list. Second registry: coriolis-data
1353
1355
  `modifications/modules.json`, which carries the same per-group lists keyed by the
1354
1356
  journal `BlueprintName`s this catalogue joins on.
1355
- - **Coverage: every group EDSY's `mtype` table gives a `blueprints:` key.** That is 53
1356
- groups over 1028 modules, including bulkheads (the 241 ship armour records), life
1357
+ - **Coverage: every retained group EDSY's `mtype` table gives a `blueprints:` key.** After
1358
+ the Mining Laser and Abrasion Blaster corrections below, that is 52 groups over 1026
1359
+ modules, including
1360
+ bulkheads (the 241 ship armour records), life
1357
1361
  support, sensors, the Detailed Surface Scanner, cargo racks, refineries, AFMUs, fuel
1358
1362
  scoops, FSD interdictors and boosters, Guardian module and shield reinforcement, the
1359
1363
  four engineerable limpet controllers, chaff, heat sink and caustic sink launchers,
@@ -1380,18 +1384,25 @@ up straight through with no disambiguation at all. Both paths are evidence that
1380
1384
  - **14 modules are absent because upstream denies them every blueprint:** eight AX
1381
1385
  multi-cannons (all but the two gimballed), five of the seven mining tools, and the
1382
1386
  Mk II Plasma Shock Accelerator — which is why `antiXenoMultiCannons` holds 2 of that
1383
- family's 10 modules, `miningToolsLasers` 2 of its 7 and `plasmaAccelerators` 4 of its 5.
1387
+ family's 10 modules and `plasmaAccelerators` 4 of its 5. The other two mining tools
1388
+ are the manually corrected Mining Laser and Abrasion Blaster below, so all seven lack
1389
+ an ordinary menu and the empty `miningToolsLasers` group is not retained.
1384
1390
  The ten plain Module Reinforcement Packages are denied their family's only recipe
1385
1391
  and are absent too, which leaves `moduleReinforcements` holding the ten Guardian
1386
1392
  packages.
1387
- - **The 171 modules absent take no engineering.** Whole families first, both registries
1393
+ - **The 173 modules absent have no ordinary engineering menu.** For 171 this comes from
1394
+ the pinned registries. Whole families first, both registries
1388
1395
  agreeing: fuel tanks, passenger cabins, the repair/recon/research/decontamination and
1389
1396
  multi-limpet controllers, meta-alloy and ordinary module reinforcement, the Pulse Wave
1390
1397
  Analyser, the mining launchers, Shock Cannons, Nanite Torpedo Pylons, fighter and
1391
1398
  vehicle hangars, the docking computers and Supercruise Assist, the module stabilisers,
1392
1399
  the planetary approach suites, the cargo hatch and
1393
1400
  the AX utility modules (Xeno Scanners, Shutdown Field Neutralisers), followed by the
1394
- individually denied modules described above.
1401
+ individually denied modules described above. The other two are the fixed Mining Laser
1402
+ and Abrasion Blaster, corrected from the registry-derived result below. They and the
1403
+ size-5 class-2 Module Reinforcement Package within the registry-derived 171 have no
1404
+ stock menu, but their purchased Mercenary articles remain upgradeable through their
1405
+ bespoke recipes.
1395
1406
  - **EDSY's `_X_` prefix means "not applicable" and is honoured**, not stripped: the
1396
1407
  Detailed Surface Scanner's group lists only `iss_er` (`Sensor_Expanded`), because its
1397
1408
  three other entries are `_X_`-marked. The `Decorative_*` entries on the remote-release
@@ -1417,14 +1428,14 @@ up straight through with no disambiguation at all. Both paths are evidence that
1417
1428
  the nine further groups it carries a list for —
1418
1429
  20 in all, every one an exact match. Chaff, heat sink, point defence and ECMs keep the
1419
1430
  generic `Misc_*` ids: there coriolis agrees with EDSY.
1420
- - **13 groups rest on EDSY alone**, because coriolis carries no blueprint list for
1431
+ - **12 retained groups rest on EDSY alone**, because coriolis carries no blueprint list for
1421
1432
  them at all: the nine Guardian-only groups (`guardianPowerPlants`,
1422
1433
  `guardianPowerDistributors`, `guardianHullReinforcements`, `moduleReinforcements`,
1423
1434
  `shieldReinforcements`, `fsdBoosters`, `guardianGauss`, `guardianPlasma`,
1424
- `guardianShard`), `antiXenoMissileRacks`, `experimentalWeapons`,
1425
- `miningToolsLasers` and `antiXenoMultiCannons`. That is coriolis being
1435
+ `guardianShard`), `antiXenoMissileRacks`, `experimentalWeapons` and
1436
+ `antiXenoMultiCannons`. That is coriolis being
1426
1437
  silent rather than contradicting — its Guardian and anti-xeno groups are empty
1427
- objects — but it means the second registry corroborates 40 of the 53 groups, not
1438
+ objects — but it means the second registry corroborates 40 of the 52 groups, not
1428
1439
  all of them. The Guardian-weapon menus are independently settled by the in-game
1429
1440
  observations below: stock weapons take Anti-Guardian Zone Resistance alone, while
1430
1441
  the pre-engineered articles are final.
@@ -1454,19 +1465,30 @@ up straight through with no disambiguation at all. Both paths are evidence that
1454
1465
  - **File order is derivable:** `modules` is written group by group in the order `groups`
1455
1466
  declares them, and within a group in module-catalogue order, so a re-derivation from the
1456
1467
  same sources reproduces the file rather than reshuffling it.
1457
- - **`exclusions` are the exceptions, and they are real.** 24 modules take their group's
1468
+ - **`exclusions` are the exceptions, and they are real.** 23 modules take their group's
1458
1469
  blueprints but not all of its experimental effects: 13 Multi-cannons cannot take Phasing
1459
1470
  Sequence, six dumbfire racks cannot take Drag Munitions, four missile racks are short of
1460
- Penetrator Munitions or FSD Interrupt, and the small fixed Abrasion Blaster takes none
1461
- at all. Upstream these are an exclusion map (with a wildcard for "none of them"); here
1462
- the wildcard is expanded to the explicit list. A module absent from `exclusions` takes
1463
- its whole group's list. Five mining tools
1471
+ Penetrator Munitions or FSD Interrupt. Upstream these are an exclusion map. A module
1472
+ absent from `exclusions` takes its whole group's list. All seven mining tools
1464
1473
  that would otherwise be listed here are absent from the catalogue entirely, taking no
1465
- blueprint either.
1466
- - **Kept deliberately:** the Abrasion Blaster stays in `modules` (it has a blueprint) even
1467
- though its experimental list is empty. That distinction carries most of the catalogue:
1468
- 30 of the 53 groups offer no experimental at all, so 388 of the 1028 grouped modules
1469
- have an empty experimental list while retaining blueprints.
1474
+ ordinary blueprint either.
1475
+ - **The fixed Mining Laser and Abrasion Blaster have no ordinary engineering menu.** Both
1476
+ are removed from `modules`, despite EDSY assigning them to `miningToolsLasers` with
1477
+ `Weapon_LongRange`; the Abrasion Blaster is also removed from `exclusions`, where EDSY
1478
+ denies the group's experimental effect. Direct in-game menu confirmation recorded
1479
+ 2026-08-15 UTC establishes that neither stock article can receive ordinary engineering;
1480
+ there is no immutable revision for an in-game observation. Their `Weapon_LongRange`
1481
+ grade-5 states are separately catalogued reward articles with hand-set modifiers that
1482
+ identify rather than reproduce them. This does not remove the Mercenary routes: both
1483
+ are acquired at grade 1 with bespoke recipes (`MiningLaser_LongRange` and
1484
+ `AbrasionBlaster_FarReaching`), whose sourced grades 2–5 remain applicable through the
1485
+ `pre-engineered.jsonc` purchase records. A re-derivation from EDSY must reapply this
1486
+ correction by dropping both module mappings, the now-empty `miningToolsLasers` group,
1487
+ both projected `kind` fields in `modules-hardpoint.jsonc`, and the Abrasion Blaster's
1488
+ now-unreachable experimental exclusion.
1489
+ - **An empty experimental menu is still distinct from no menu.** 30 of the 52 groups offer
1490
+ no experimental at all, so 387 of the 1026 grouped modules have an empty experimental
1491
+ list while retaining blueprints.
1470
1492
  - **Key form:** the Anti-Guardian blueprint is listed under `GuardianModule_Sturdy`, the id
1471
1493
  a Loadout writes and the one EDSY uses — the same and only spelling `blueprints.jsonc`
1472
1494
  keys it under.
package/README.md CHANGED
@@ -3,6 +3,13 @@
3
3
  Tree-shakeable Elite Dangerous static data and calculations for TypeScript and
4
4
  JavaScript applications.
5
5
 
6
+ ## Project status
7
+
8
+ **This library is a work in progress.** Until version 1.0, backwards compatibility is
9
+ not ensured and breaking changes are very likely: exported names, signatures, subpath
10
+ exports and data shapes can change in any release. Pin an exact version if your
11
+ application needs a stable surface, and read the release notes before upgrading.
12
+
6
13
  ## Install
7
14
 
8
15
  ```bash
@@ -141,7 +148,11 @@ normally writes that id in its `Engineering` block, but a few blueprint aliases
141
148
  collide across module families; `resolveBlueprintForModule` resolves those journal
142
149
  spellings. Functions that ask what engineering a module accepts therefore take the
143
150
  module's `symbol`; functions that look up a recipe, effect or modification take its
144
- `fdname`.
151
+ `fdname`. `getDecorativeModifiers` takes both identities to reconstruct the
152
+ journal-style stat block of a fitted decorative transformation;
153
+ `unresolvedDecorativeModifiers` reports any authored labels the module catalogue could
154
+ not compute. `ShipLoadout.applyDecorativeModification` installs that fixed block on one
155
+ fitted slot and exports it without fabricating an engineering grade or quality roll.
145
156
 
146
157
  Personal-equipment modifications are keyed by their recipe symbol, just as ship
147
158
  blueprints and experimental effects are keyed by `fdname`; there is no second synthetic
@@ -0,0 +1 @@
1
+ import{fixedModifierFeatures}from"./chunk-4TXQWLIQ.js";import{builtInModuleBySymbol}from"./chunk-PRQELBIC.js";import{getPreEngineeredVariants}from"./chunk-XYK6DYVQ.js";import{EXPERIMENTAL_EFFECTS}from"./chunk-PMJG7PHU.js";import{fieldForLabel,preciseModifierValue,computeModifiers,baseStats}from"./chunk-SVZARHWP.js";import{resolveBlueprintForModule}from"./chunk-ZJB5UYNE.js";import{getBlueprintsForModule,getExperimentalsForModule,getEngineeringGroup}from"./chunk-TH4S5MVD.js";import{getBlueprint,BLUEPRINTS}from"./chunk-Q5MR36RW.js";import{normalizeKey}from"./chunk-S4DBNX2B.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var FITTED_ITEM="ShipLoadout: fitted module Item";function isNonOutfittingSlot(slotKey){return/^(paintjob|shipname\d+|shipid\d+|bobble\d+|decal\d+|shipkit.+|weaponcolour|enginecolour|vesselvoice|shipcockpit|stringlights)$/i.test(slotKey)}function isBuiltInHullModule(module){return module.Slot.toLowerCase()==="cargohatch"&&module.Item.toLowerCase().startsWith("modularcargobaydoor")}function cloneLoadoutModule(module){return{Slot:module.Slot,Item:module.Item,...module.On===void 0?{}:{On:module.On},...module.Priority===void 0?{}:{Priority:module.Priority},...module.Health===void 0?{}:{Health:module.Health},...module.Value===void 0?{}:{Value:module.Value},...module.Engineering===void 0?{}:{Engineering:{BlueprintName:module.Engineering.BlueprintName,...module.Engineering.Level===void 0?{}:{Level:module.Engineering.Level},...module.Engineering.Quality===void 0?{}:{Quality:module.Engineering.Quality},...module.Engineering.ExperimentalEffect===void 0?{}:{ExperimentalEffect:module.Engineering.ExperimentalEffect},...module.Engineering.ExperimentalEffect_Localised===void 0?{}:{ExperimentalEffect_Localised:module.Engineering.ExperimentalEffect_Localised},...module.Engineering.Modifiers===void 0?{}:{Modifiers:module.Engineering.Modifiers.map(modifier=>({...modifier}))}}}}}function matchingKeyIn(keyed,slotKey){if(keyed.has(slotKey))return slotKey;const wanted=slotKey.toLowerCase();for(const key of keyed.keys()){if(key.toLowerCase()===wanted)return key}return null}function cloneModuleStats(module){return deepFreeze({...module,...module.restrictedToShips===void 0?{}:{restrictedToShips:[...module.restrictedToShips]},...module.limitIncrease===void 0?{}:{limitIncrease:{...module.limitIncrease}},...module.damageDistribution===void 0?{}:{damageDistribution:{...module.damageDistribution}},...module.damageComponents===void 0?{}:{damageComponents:{...module.damageComponents,...module.damageComponents.unclassified===void 0?{}:{unclassified:[...module.damageComponents.unclassified]}}},...module.projectileRange===void 0?{}:{projectileRange:{...module.projectileRange}}})}var GUARDIAN_WEAPON_GROUPS=/* @__PURE__ */new Set(["guardianGauss","guardianPlasma","guardianShard"]);function missingBaseLabels(stats,base,features,experimental){const contributions=[...features,...experimental??[]];return[...new Set(contributions.map(contribution=>contribution.label).filter(label=>{if(base[label]!==void 0)return false;return fieldForLabel(label,stats)===null}))]}function recipeSignature(fdname){const blueprint=getBlueprint(fdname);if(!blueprint)return null;const grades=Object.entries(blueprint.grades).map(([grade,{features:features}])=>`${grade}:${features.map(feature=>`${feature.label}/${feature.method??""}`).sort().join(",")}`).sort().join(";");return`${blueprint.name.toLowerCase()}|${grades}`}var isGenericSpelling=fdname=>fdname.toLowerCase().startsWith("misc_");function isSoldWithBlueprint(item,wanted){return getPreEngineeredVariants(item).some(variant=>variant.acquisition==="mercenary"&&variant.blueprint.toLowerCase()===wanted)}function blueprintRoutesFor(item){const routes=/* @__PURE__ */new Map;for(const fdname of getBlueprintsForModule(item))routes.set(fdname,"ordinary");for(const variant of getPreEngineeredVariants(item)){if(variant.acquisition==="mercenary"&&!routes.has(variant.blueprint)){routes.set(variant.blueprint,"mercenary")}}return routes}function blueprintAvailableFor(item,fdname){const offered=getBlueprintsForModule(item);const asWritten=normalizeKey(fdname,"ShipLoadout.applyBlueprint: fdname");const resolved=resolveBlueprintForModule(item,fdname).trim();const wanted=resolved.toLowerCase();if(offered.some(id=>id.toLowerCase()===wanted))return true;if(isSoldWithBlueprint(item,wanted)||isSoldWithBlueprint(item,asWritten))return true;if(!isGenericSpelling(wanted))return false;const signature=recipeSignature(resolved);if(signature===null)return false;return offered.some(id=>recipeSignature(id)===signature&&!isGenericSpelling(id))}function experimentalAvailableFor(item,fdname){const wanted=normalizeKey(fdname,"ShipLoadout.applyBlueprint: options.experimental");return getExperimentalsForModule(item).some(id=>id.toLowerCase()===wanted)}function primitiveLabelFor(stats,label){if(label==="MaximumRange"&&stats.maximumRange!==void 0)return"Range";if(label==="DamageFalloffRange"&&stats.falloffRange!==void 0){return"FalloffRange"}if(label==="Range"&&stats.scannerRange!==void 0)return"ScannerRange";if(label==="DSS_PatchRadius")return"ProbeRadius";if(label==="FuelScoopRate")return"RefuelRate";if(label==="EnergyPerRegen"&&stats.shieldRegenRate!==void 0){return"DistributorDraw"}return label}function primitiveEngineeringInputsFor(stats,grade,experimental){const canonicalGrade={...grade,features:grade.features.map(feature=>{const label=primitiveLabelFor(stats,feature.label);return label===feature.label?feature:{...feature,label:label}})};if(!experimental)return{grade:canonicalGrade};return{grade:canonicalGrade,experimental:{...experimental,modifiers:experimental.modifiers.map(modifier=>{const label=primitiveLabelFor(stats,modifier.label);return label===modifier.label?modifier:{...modifier,label:label}})}}}var round6=value=>{const rounded=Math.round(value*1e6)/1e6;return Object.is(rounded,-0)?0:rounded};function float32FiringCycle(interval,burstRounds,burstRateOfFire){if(interval<=0)return void 0;const withinBurst=burstRounds>1?Math.fround(Math.fround(burstRounds-1)/Math.fround(burstRateOfFire)):0;const cycle=Math.fround(withinBurst+Math.fround(interval));return cycle>0?cycle:void 0}function float32RateOfFire(interval,burstRounds,burstRateOfFire){const cycle=float32FiringCycle(interval,burstRounds,burstRateOfFire);return cycle===void 0?void 0:Math.fround(Math.fround(burstRounds)/cycle)}function float32DamagePerSecond(damage,rounds,rate,burstRounds,cycle){if(cycle!==void 0&&(rounds!==1||burstRounds!==1)){const damagePerCycle=Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(burstRounds));return Math.fround(damagePerCycle/cycle)}return Math.fround(Math.fround(Math.fround(damage)*Math.fround(rounds))*Math.fround(rate))}var JOURNAL_MODIFIER_ORDER=["CargoCapacity","GuardianModuleResistance","Mass","Integrity","PowerDraw","BootTime","PowerCapacity","HeatEfficiency","FSDOptimalMass","MaxFuelPerJump","FSDHeatRate","EngineOptimalMass","EngineOptPerformance","EngineHeatRate","ShieldGenOptimalMass","ShieldGenStrength","DamagePerSecond","Damage","DistributorDraw","ThermalLoad","ArmourPenetration","MaximumRange","ShotSpeed","RateOfFire","DamageType","$Kinetic;","$Thermal;","$Explosive;","$Absolute;","AmmoClipSize","AmmoMaximum","ReloadTime","Jitter","DamageFalloffRange","DefenceModifierShieldMultiplier","DefenceModifierHealthMultiplier","DefenceModifierHealthAddition","DefenceModifierShieldAddition","RegenRate","BrokenRegenRate","EnergyPerRegen","KineticResistance","ThermicResistance","ExplosiveResistance","CausticResistance","DamageProtection","ModuleDefenceAbsorption","WeaponsCapacity","WeaponsRecharge","EnginesCapacity","EnginesRecharge","SystemsCapacity","SystemsRecharge","ShieldBankSpinUp","ShieldBankDuration","ShieldBankReinforcement","ShieldBankHeat","FSDInterdictorRange","FSDInterdictorFacingLimit","SensorTargetScanAngle","MaxAngle","ScannerTimeToScan","Range","DSS_PatchRadius","FuelScoopRate","FuelCapacity"];var JOURNAL_MODIFIER_RANK=new Map(JOURNAL_MODIFIER_ORDER.map((label,index)=>[label,index]));function sortJournalModifiers(modifiers){return modifiers.map((modifier,index)=>({modifier:modifier,index:index})).sort((a,b)=>(JOURNAL_MODIFIER_RANK.get(a.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)-(JOURNAL_MODIFIER_RANK.get(b.modifier.Label)??JOURNAL_MODIFIER_ORDER.length)||a.index-b.index).map(({modifier:modifier})=>modifier)}function journalModifiersFor(stats,modifiers){const weapon=stats.damage!==void 0;const valueFor=(label,fallback)=>{const modifier=modifiers.find(candidate=>candidate.Label===label);return(modifier&&preciseModifierValue(modifier))??Math.fround(fallback)};const burstTouched=["BurstInterval","BurstSize","BurstRateOfFire"].some(label=>modifiers.some(modifier=>modifier.Label===label));const damageTouched=modifiers.some(modifier=>modifier.Label==="Damage");const rateTouched=burstTouched||modifiers.some(modifier=>modifier.Label==="RateOfFire");let damagePerSecond;let derivedRate;if(weapon&&(damageTouched||rateTouched)){const continuous=stats.burstInterval===void 0&&stats.rateOfFire===void 0;const baseDamage=Math.fround(stats.damage);const effectiveDamage=valueFor("Damage",stats.damage);if(continuous){damagePerSecond={Label:"DamagePerSecond",Value:round6(effectiveDamage),OriginalValue:round6(baseDamage)}}else{const burstRounds=valueFor("BurstSize",stats.burstRounds??1);const burstRate=valueFor("BurstRateOfFire",stats.burstRateOfFire??1);const baseBurstRounds=Math.fround(stats.burstRounds??1);const baseBurstRate=Math.fround(stats.burstRateOfFire??1);const baseInterval=stats.burstInterval===void 0?void 0:Math.fround(stats.burstInterval);const baseCycle=baseInterval===void 0?void 0:float32FiringCycle(baseInterval,baseBurstRounds,baseBurstRate);const baseRate=baseInterval!==void 0?float32RateOfFire(baseInterval,baseBurstRounds,baseBurstRate):stats.rateOfFire===void 0?void 0:Math.fround(stats.rateOfFire);const rateModifier=modifiers.find(modifier=>modifier.Label==="RateOfFire");const effectiveRate=rateModifier&&preciseModifierValue(rateModifier);const effectiveInterval=valueFor("BurstInterval",stats.burstInterval??0);const effectiveCycle=effectiveRate===void 0?float32FiringCycle(effectiveInterval,burstRounds,burstRate):void 0;const rate=effectiveRate??(effectiveCycle===void 0?void 0:Math.fround(Math.fround(burstRounds)/effectiveCycle));if(baseRate!==void 0&&rate!==void 0){const stockRounds=Math.fround(stats.roundsPerShot??1);const effectiveRounds=Math.fround(modifiers.find(modifier=>modifier.Label==="Rounds"||modifier.Label==="RoundsPerShot")?.Value??stockRounds);damagePerSecond={Label:"DamagePerSecond",Value:round6(float32DamagePerSecond(effectiveDamage,effectiveRounds,rate,burstRounds,effectiveCycle)),OriginalValue:round6(float32DamagePerSecond(baseDamage,stockRounds,baseRate,baseBurstRounds,baseCycle))};if(burstTouched){derivedRate={Label:"RateOfFire",Value:round6(rate),OriginalValue:round6(baseRate)}}}}}const result=[];for(const modifier of modifiers){const label=modifier.Label;if(weapon&&["BurstInterval","BurstSize","BurstRateOfFire"].includes(label))continue;if(weapon&&label==="Damage"&&stats.rateOfFire===void 0)continue;let journalLabel=label;if(label==="Range"&&stats.maximumRange!==void 0)journalLabel="MaximumRange";else if(label==="FalloffRange"&&stats.falloffRange!==void 0){journalLabel="DamageFalloffRange"}else if(label==="ScannerRange"&&stats.scannerRange!==void 0){journalLabel="Range"}else if(label==="ProbeRadius")journalLabel="DSS_PatchRadius";else if(label==="RefuelRate")journalLabel="FuelScoopRate";else if(label==="DistributorDraw"&&stats.shieldRegenRate!==void 0){journalLabel="EnergyPerRegen"}result.push(journalLabel===label?modifier:{...modifier,Label:journalLabel})}if(damagePerSecond)result.push(damagePerSecond);if(derivedRate){const direct=result.findIndex(modifier=>modifier.Label==="RateOfFire");if(direct>=0)result[direct]=derivedRate;else result.push(derivedRate)}return sortJournalModifiers(result)}function isFinalGuardianWeaponEngineering(item,blueprint){const group=getEngineeringGroup(item);if(group===null||!GUARDIAN_WEAPON_GROUPS.has(group))return false;const resolved=resolveBlueprintForModule(item,blueprint);return getBlueprint(resolved)!==null&&!blueprintAvailableFor(item,blueprint)}function engineerableBase(item,statsOverride){const stats=statsOverride??builtInModuleBySymbol(item,FITTED_ITEM);if(!stats||stats.engineeringLocked)return null;return{stats:stats,base:baseStats(stats)}}function availableBlueprintsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;const available=[];for(const[fdname,route]of blueprintRoutesFor(item)){const blueprint=BLUEPRINTS[fdname];if(!blueprint)continue;const grades=Object.entries(blueprint.grades).filter(([,grade])=>missingBaseLabels(stats,base,grade.features).length===0).map(([grade])=>Number(grade)).filter(Number.isFinite).sort((a,b)=>a-b);if(grades.length>0)available.push({fdname:fdname,grades:grades,route:route})}return available}function availableExperimentalsFor(item,statsOverride){const engineerable=engineerableBase(item,statsOverride);if(!engineerable)return[];const{stats:stats,base:base}=engineerable;return getExperimentalsForModule(item).filter(fdname=>{const effect=EXPERIMENTAL_EFFECTS[fdname];return effect!==void 0&&missingBaseLabels(stats,base,effect.modifiers).length===0})}function resolveDecorativeModificationStats(stats,modification){const primitiveModifiers=computeModifiers(baseStats(stats),fixedModifierFeatures(modification.modifiers));const resolvedLabels=new Set(primitiveModifiers.map(modifier=>modifier.Label));return{primitiveModifiers:primitiveModifiers,modifiers:journalModifiersFor(stats,primitiveModifiers),unresolved:modification.modifiers.map(modifier=>modifier.label).filter(label=>!resolvedLabels.has(label))}}export{FITTED_ITEM,availableBlueprintsFor,availableExperimentalsFor,blueprintAvailableFor,blueprintRoutesFor,cloneLoadoutModule,cloneModuleStats,experimentalAvailableFor,isBuiltInHullModule,isFinalGuardianWeaponEngineering,isNonOutfittingSlot,journalModifiersFor,matchingKeyIn,missingBaseLabels,primitiveEngineeringInputsFor,resolveDecorativeModificationStats};//# sourceMappingURL=chunk-2YPWFAWM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/loadout-state.ts","../src/ships/internal/loadout-engineering.ts","../src/ships/internal/decorative-modification-resolution.ts"],"names":["fixedModifierFeatures","builtInModuleBySymbol","getPreEngineeredVariants","EXPERIMENTAL_EFFECTS","fieldForLabel","preciseModifierValue","computeModifiers","baseStats","resolveBlueprintForModule","getBlueprintsForModule","getExperimentalsForModule","getEngineeringGroup","getBlueprint","BLUEPRINTS","normalizeKey","deepFreeze","FITTED_ITEM","isNonOutfittingSlot","slotKey","test","isBuiltInHullModule","module","Slot","toLowerCase","Item","startsWith","cloneLoadoutModule","On","Priority","Health","Value","Engineering","BlueprintName","Level","Quality","ExperimentalEffect","ExperimentalEffect_Localised","Modifiers","map","modifier","matchingKeyIn","keyed","has","wanted","key","keys","cloneModuleStats","restrictedToShips","limitIncrease","damageDistribution","damageComponents","unclassified","projectileRange","GUARDIAN_WEAPON_GROUPS","Set","missingBaseLabels","stats","base","features","experimental","contributions","contribution","label","filter","recipeSignature","fdname","blueprint","grades","Object","entries","grade","feature","method","sort","join","name","isGenericSpelling","isSoldWithBlueprint","item","some","variant","acquisition","blueprintRoutesFor","routes","Map","set","blueprintAvailableFor","offered","asWritten","resolved","trim","id","signature","experimentalAvailableFor","primitiveLabelFor","maximumRange","falloffRange","scannerRange","shieldRegenRate","primitiveEngineeringInputsFor","canonicalGrade","modifiers","round6","value","rounded","Math","round","is","float32FiringCycle","interval","burstRounds","burstRateOfFire","withinBurst","fround","cycle","float32RateOfFire","float32DamagePerSecond","damage","rounds","rate","damagePerCycle","JOURNAL_MODIFIER_ORDER","JOURNAL_MODIFIER_RANK","index","sortJournalModifiers","a","b","get","Label","length","journalModifiersFor","weapon","valueFor","fallback","find","candidate","burstTouched","damageTouched","rateTouched","damagePerSecond","derivedRate","continuous","burstInterval","rateOfFire","baseDamage","effectiveDamage","OriginalValue","burstRate","baseBurstRounds","baseBurstRate","baseInterval","baseCycle","baseRate","rateModifier","effectiveRate","effectiveInterval","effectiveCycle","stockRounds","roundsPerShot","effectiveRounds","result","includes","journalLabel","push","direct","findIndex","isFinalGuardianWeaponEngineering","group","engineerableBase","statsOverride","engineeringLocked","availableBlueprintsFor","engineerable","available","route","Number","isFinite","availableExperimentalsFor","effect","resolveDecorativeModificationStats","modification","primitiveModifiers","resolvedLabels","unresolved"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ import{shieldRecovery,cellBankSummary}from"./chunk-MPZGCTRG.js";import{shieldMetrics}from"./chunk-2FHHMYDC.js";import{getShipSlots,getShipBySymbol,getShipByName}from"./chunk-IJRKEODR.js";import{parseSlef,toSlef,stringifySlef,getLoadoutModifier}from"./chunk-IAWTRADE.js";import{enumerateSlots,parseSlotName,SLOT_RESTRICTION_LABELS}from"./chunk-I7PIDRMU.js";import{sourcePurchaseFromLoadout,getSourceModuleValue}from"./chunk-QTDBO7R2.js";import{weaponsCapacitorMetrics}from"./chunk-FMPRCYKY.js";import{powerBudget}from"./chunk-76XKY2Y2.js";import{identifyPreEngineeredVariant,getPreEngineeredStats,scaleDamageComponents}from"./chunk-WCIK2WB7.js";import{weaponMetrics,sumWeaponMetrics,combinedRateOfFire}from"./chunk-LJI7VXJD.js";import{singleJumpRange,frameShiftDriveMassFactor,fuelPerJump,totalRange}from"./chunk-GQ5GX5TB.js";import{completeResult,calculateUnladenMass,calculateCargoCapacity,calculateFuelCapacity}from"./chunk-RF2IKLWQ.js";import{validateLoadout}from"./chunk-5W43EQEQ.js";import{mobilityMetrics}from"./chunk-24INI4U7.js";import{calculateModuleLimits}from"./chunk-KPETDYQX.js";import{getDefaultLoadout}from"./chunk-V3DW67W2.js";import{heatMetrics}from"./chunk-QMQHIZGS.js";import{ammunitionCapacity}from"./chunk-AA3K5XUE.js";import{armourMetrics}from"./chunk-FGXWVFN6.js";import{isNonOutfittingSlot,isBuiltInHullModule,cloneLoadoutModule,cloneModuleStats,availableBlueprintsFor,availableExperimentalsFor,blueprintAvailableFor,blueprintRoutesFor,experimentalAvailableFor,primitiveEngineeringInputsFor,missingBaseLabels,journalModifiersFor,resolveDecorativeModificationStats,matchingKeyIn,FITTED_ITEM,isFinalGuardianWeaponEngineering}from"./chunk-2YPWFAWM.js";import{builtInModuleBySymbol,getBulkheadsForShip}from"./chunk-PRQELBIC.js";import{getPreEngineeredVariants}from"./chunk-XYK6DYVQ.js";import{ALL_MODULES}from"./chunk-W7XI3WVA.js";import{CORE_MODULES}from"./chunk-O72KI7RP.js";import{getExperimentalEffect}from"./chunk-PMJG7PHU.js";import{baseStats,computeModifiers,labelsForDamageType,scaleForLabel,fieldForLabel,labelsForField,capabilityValueForLabel,damageTypeForLabel}from"./chunk-SVZARHWP.js";import{resolveBlueprintForModule}from"./chunk-ZJB5UYNE.js";import{getExperimentalsForModule}from"./chunk-TH4S5MVD.js";import{getBlueprintGrade}from"./chunk-Q5MR36RW.js";import{isDecorativeModification,getDecorativeModification}from"./chunk-OHGOVZ7U.js";import{normalizeKey}from"./chunk-S4DBNX2B.js";import{truncate,describeValue,requireString,requireStringIfPresent}from"./chunk-B5TT26XE.js";import{deepFreeze}from"./chunk-DURKO7JU.js";var PREFIX={powerPlant:["int_powerplant","int_guardianpowerplant"],thrusters:["int_engine","int_mkiiagileboost_engine"],frameShiftDrive:["int_hyperdrive"],powerDistributor:["int_powerdistributor","int_guardianpowerdistributor"],shieldGenerator:["int_shieldgenerator"],shieldCellBank:["int_shieldcellbank"],shieldBooster:["hpt_shieldbooster"],shieldReinforcement:["int_guardianshieldreinforcement"],hullReinforcement:["int_hullreinforcement","int_guardianhullreinforcement","int_metaalloyhullreinforcement"],moduleReinforcement:["int_modulereinforcement","int_guardianmodulereinforcement"]};var startsWithAny=(symbol,prefixes)=>prefixes.some(prefix=>symbol.toLowerCase().startsWith(prefix));function isPowerDistributor(module,stats){return stats?.slot?stats.slot==="powerDistributor":startsWithAny(module.Item,PREFIX.powerDistributor)}function isEnabled(module){return module.On!==false}function priorityOf(module){return(module.Priority??0)+1}function effectiveStat(module,field,stats){const stated=statedModifier(module,field);if(stated!==void 0)return stated;const base=stats?.[field];return typeof base==="number"?base:void 0}function statedModifier(module,field){for(const label of labelsForField(field)){if(capabilityValueForLabel(label)!==null)continue;const modified=getLoadoutModifier(module,label);if(modified!==null)return modified/scaleForLabel(label)}return void 0}function effectiveCapability(module,field,stats){for(const label of labelsForField(field)){if(capabilityValueForLabel(label)===null)continue;if(module.Engineering?.Modifiers?.some(modifier=>modifier.Label.toLowerCase()===label.toLowerCase())){return true}}const base=stats[field];return typeof base==="boolean"?base:void 0}function effectiveDamageDistribution(module,stats){const fromEffect=module.Engineering?.ExperimentalEffect?getExperimentalEffect(module.Engineering.ExperimentalEffect)?.damageDistribution:void 0;const distribution={...fromEffect??stats.damageDistribution};let resolved=fromEffect!==void 0||stats.damageDistribution!==void 0;for(const modifier of module.Engineering?.Modifiers??[]){if(modifier.Value===void 0)continue;const type=damageTypeForLabel(modifier.Label);if(type===null)continue;distribution[type]=modifier.Value/scaleForLabel(modifier.Label);resolved=true}return resolved?distribution:void 0}function convertsDamage(module){if(module.Engineering?.ExperimentalEffect&&getExperimentalEffect(module.Engineering.ExperimentalEffect)?.damageDistribution){return true}return(module.Engineering?.Modifiers??[]).some(modifier=>damageTypeForLabel(modifier.Label)!==null)}function modifierRatio(module,stats,field){const base=stats?.[field];if(typeof base!=="number"||base===0)return 1;const effective=effectiveStat(module,field,stats);return effective===void 0?1:effective/base}function relatedStat(module,stats,field,ratio){const stated=statedModifier(module,field);if(stated!==void 0)return stated;const base=stats?.[field];return typeof base==="number"?base*ratio:void 0}function effectiveModule(module,stats){if(!stats||!module.Engineering)return stats;const merged={...stats};const fields=new Set(Object.keys(stats));for(const modifier of module.Engineering.Modifiers??[]){const field=fieldForLabel(modifier.Label,stats);if(field)fields.add(field)}for(const key of fields){const capability=effectiveCapability(module,key,stats);if(capability!==void 0){merged[key]=capability;continue}const value=effectiveStat(module,key,stats);if(value!==void 0)merged[key]=value}if(stats.engineeringGroup==="thrusters"){const massRatio=modifierRatio(module,stats,"optMass");const minMass=relatedStat(module,stats,"minMass",massRatio);const maxMass=relatedStat(module,stats,"maxMass",massRatio);if(minMass!==void 0)merged.minMass=minMass;if(maxMass!==void 0)merged.maxMass=maxMass}if(stats.engineeringGroup==="thrusters"||stats.engineeringGroup==="shieldGenerators"){const performanceRatio=modifierRatio(module,stats,"optMultiplier");const minMultiplier=relatedStat(module,stats,"minMultiplier",performanceRatio);const maxMultiplier=relatedStat(module,stats,"maxMultiplier",performanceRatio);if(minMultiplier!==void 0)merged.minMultiplier=minMultiplier;if(maxMultiplier!==void 0)merged.maxMultiplier=maxMultiplier;if(stats.engineeringGroup==="thrusters"){for(const field of["minSpeedMultiplier","optSpeedMultiplier","maxSpeedMultiplier","minRotationMultiplier","optRotationMultiplier","maxRotationMultiplier"]){const value=stats[field];if(value!==void 0)merged[field]=value*performanceRatio}}}const damageDistribution=effectiveDamageDistribution(module,stats);if(damageDistribution)merged.damageDistribution=damageDistribution;if(stats.category==="hardpoint")normalizeEffectiveWeapon(module,merged);if(convertsDamage(module)){delete merged.damageComponents}else if(stats.damageComponents){merged.damageComponents=scaleDamageComponents(stats.damageComponents,stats.damage,typeof merged.damage==="number"?merged.damage:void 0)}return merged}function powerConsumerFor(module,stats){const draw=effectiveStat(module,"powerDraw",stats);const parsedSlot=parseSlotName(module.Slot);const mounted=stats?.category==="hardpoint"||stats?.category==="utility";const deployedOnly=stats!==null?mounted&&stats.alwaysPowered!==true:parsedSlot?.kind==="hardpoint"?true:parsedSlot?.kind==="utility"?void 0:false;const common={priority:priorityOf(module),enabled:isEnabled(module),...deployedOnly===void 0?{}:{deployedOnly:deployedOnly},label:module.Slot};if(draw===void 0){const inherentlyPassiveSlot=parsedSlot?.kind==="armour"||parsedSlot?.kind==="core"&&(parsedSlot.core==="powerPlant"||parsedSlot.core==="fuelTank");if(stats!==null||inherentlyPassiveSlot||isNonOutfittingSlot(module.Slot))return null;return{drawUnknown:true,...common}}if(draw===0)return null;return{draw:draw,...common}}function powerAvailable(modules,statsFor){for(const module of modules){const stats=statsFor(module);const isPlant=stats?.slot?stats.slot==="powerPlant":startsWithAny(module.Item,PREFIX.powerPlant);if(!isPlant)continue;if(!isEnabled(module))return 0;return effectiveStat(module,"powerCapacity",stats)??0}return 0}function mapResistanceFields(read){return{kineticResistance:read("kineticResistance")??0,thermalResistance:read("thermalResistance")??0,explosiveResistance:read("explosiveResistance")??0,causticResistance:read("causticResistance")??0}}function resistancesOf(module,stats){return mapResistanceFields(field=>effectiveStat(module,field,stats))}function shieldInputFor(shipSymbol,modules,systemsPips,statsFor){const hull=getShipBySymbol(shipSymbol);let generator=null;const boosters=[];let reinforcement=0;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(!generator&&startsWithAny(module.Item,PREFIX.shieldGenerator)){const massRatio=modifierRatio(module,stats,"optMass");const strengthRatio=modifierRatio(module,stats,"optMultiplier");const optMass=effectiveStat(module,"optMass",stats);const minMass=relatedStat(module,stats,"minMass",massRatio);const maxMass=relatedStat(module,stats,"maxMass",Math.max(1,massRatio));const optMultiplier=effectiveStat(module,"optMultiplier",stats);const minMultiplier=relatedStat(module,stats,"minMultiplier",strengthRatio);const maxMultiplier=relatedStat(module,stats,"maxMultiplier",strengthRatio);generator={...optMass===void 0?{}:{optMass:optMass},...minMass===void 0?{}:{minMass:minMass},...maxMass===void 0?{}:{maxMass:maxMass},...optMultiplier===void 0?{}:{optMultiplier:optMultiplier},...minMultiplier===void 0?{}:{minMultiplier:minMultiplier},...maxMultiplier===void 0?{}:{maxMultiplier:maxMultiplier},...resistancesOf(module,stats)}}else if(startsWithAny(module.Item,PREFIX.shieldBooster)){boosters.push({shieldBoost:effectiveStat(module,"shieldBoost",stats)??0,...resistancesOf(module,stats)})}else if(startsWithAny(module.Item,PREFIX.shieldReinforcement)){reinforcement+=effectiveStat(module,"shieldAddition",stats)??0}}return{hullMass:hull?.hullMass??0,baseShieldStrength:hull?.baseShieldStrength??0,generator:generator,boosters:boosters,reinforcement:reinforcement,systemsPips:systemsPips}}function mobilityInputFor(shipSymbol,modules,mass,enginesPips,statsFor){const hull=getShipBySymbol(shipSymbol);if(!hull)return null;let thrusters=null;for(const module of modules){const stats=statsFor(module);const isThruster=stats?.slot?stats.slot==="thrusters":startsWithAny(module.Item,PREFIX.thrusters);if(!isThruster)continue;if(!isEnabled(module))return null;const effective=effectiveModule(module,stats);const minMass=effective?.minMass;const optMass=effective?.optMass;const maxMass=effective?.maxMass;const minMultiplier=effective?.minMultiplier;const optMultiplier=effective?.optMultiplier;const maxMultiplier=effective?.maxMultiplier;if(minMass===void 0||optMass===void 0||maxMass===void 0||minMultiplier===void 0||optMultiplier===void 0||maxMultiplier===void 0){return null}thrusters={minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:minMultiplier,optMultiplier:optMultiplier,maxMultiplier:maxMultiplier,...effective?.optSpeedMultiplier===void 0?{}:{speedCurve:{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:effective.minSpeedMultiplier??minMultiplier,optMultiplier:effective.optSpeedMultiplier,maxMultiplier:effective.maxSpeedMultiplier??maxMultiplier}},...effective?.optRotationMultiplier===void 0?{}:{rotationCurve:{minMass:minMass,optMass:optMass,maxMass:maxMass,minMultiplier:effective.minRotationMultiplier??minMultiplier,optMultiplier:effective.optRotationMultiplier,maxMultiplier:effective.maxRotationMultiplier??maxMultiplier}}};break}if(!thrusters)return null;return{minimumSpeed:hull.minimumSpeed,maximumSpeed:hull.maximumSpeed,boost:hull.boost,minPitch:hull.minPitch,pitch:hull.pitch,minRoll:hull.minRoll,roll:hull.roll,minYaw:hull.minYaw,yaw:hull.yaw,mass:typeof mass==="function"?mass():mass,thrusters:thrusters,enginesPips:enginesPips}}function shieldRecoveryInputFor(shipSymbol,modules,systemsPips,statsFor){let generator=null;let distributor=null;for(const module of modules){const stats=statsFor(module);if(!generator&&startsWithAny(module.Item,PREFIX.shieldGenerator)){if(!isEnabled(module))return null;generator=module}if(isPowerDistributor(module,stats)&&isEnabled(module))distributor=module}if(!generator)return null;const generatorStats=statsFor(generator);const distributorStats=distributor?statsFor(distributor):null;const strength=shieldMetrics(shieldInputFor(shipSymbol,modules,0,statsFor)).strength;return{strength:strength,regenRate:effectiveStat(generator,"shieldRegenRate",generatorStats)??0,brokenRegenRate:effectiveStat(generator,"shieldBrokenRegenRate",generatorStats)??0,distributorDraw:effectiveStat(generator,"distributorDraw",generatorStats)??.6,systemsCapacity:distributor?effectiveStat(distributor,"systemsCapacity",distributorStats)??0:0,systemsRecharge:distributor?effectiveStat(distributor,"systemsRecharge",distributorStats)??0:0,systemsPips:systemsPips}}function weaponsCapacitorInputFor(modules,weaponsPips,budget,statsFor){let weaponsCapacity=0;let weaponsRecharge=0;let sustainedEnergyPerSecond=0;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(!poweredStates(module,stats,budget).deployed)continue;if(isPowerDistributor(module,stats)){weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats)??0;weaponsRecharge=effectiveStat(module,"weaponsRecharge",stats)??0}const weapon=weaponStatsFor(module,stats);if(weapon){sustainedEnergyPerSecond+=weaponMetrics(weapon).sustainedEnergyPerSecond}}return{weaponsCapacity:weaponsCapacity,weaponsRecharge:weaponsRecharge,sustainedEnergyPerSecond:sustainedEnergyPerSecond,weaponsPips:weaponsPips}}function heatInputFor(shipSymbol,modules,budget,statsFor){const hull=getShipBySymbol(shipSymbol);if(!hull)return null;let heatEfficiency;let thrusterHeatRate=0;let deployedThrusterHeatRate=0;let fsdHeatRate=0;let weaponsCapacity=0;const weapons=[];for(const module of modules){const stats=statsFor(module);const isPlant=stats?.slot?stats.slot==="powerPlant":startsWithAny(module.Item,PREFIX.powerPlant);if(isPlant){if(!isEnabled(module))return null;heatEfficiency=effectiveStat(module,"heatEfficiency",stats);continue}if(!isEnabled(module))continue;const running=poweredStates(module,stats,budget);if(stats?.slot?stats.slot==="thrusters":startsWithAny(module.Item,PREFIX.thrusters)){const heat=effectiveStat(module,"engineHeatRate",stats)??0;if(running.retracted)thrusterHeatRate+=heat;if(running.deployed)deployedThrusterHeatRate+=heat}else if(stats?.slot?stats.slot==="frameShiftDrive":startsWithAny(module.Item,PREFIX.frameShiftDrive)){if(running.retracted)fsdHeatRate+=effectiveStat(module,"fsdHeatRate",stats)??0}else if(isPowerDistributor(module,stats)){if(running.deployed){weaponsCapacity=effectiveStat(module,"weaponsCapacity",stats)??0}}const weapon=weaponStatsFor(module,stats);if(!weapon||!running.deployed)continue;weapons.push({heatPerSecond:weaponMetrics(weapon).sustainedHeatPerSecond,distributorDraw:weapon.distributorDraw??0})}if(heatEfficiency===void 0)return null;return{heatCapacity:hull.heatCapacity,heatDissipation:hull.heatDissipation,heatEfficiency:heatEfficiency,retractedPowerDraw:poweredDraw(budget,"retracted"),deployedPowerDraw:poweredDraw(budget,"deployed"),thrusterHeatRate:thrusterHeatRate,deployedThrusterHeatRate:deployedThrusterHeatRate,fsdHeatRate:fsdHeatRate,weaponsCapacity:weaponsCapacity,weapons:weapons,unknownDraws:budget.unknownDraws.map(consumer=>consumer.label??"(unnamed module)")}}function poweredDraw(budget,state){const powered=state==="retracted"?"poweredRetracted":"poweredDeployed";return budget.bands.reduce((total,band)=>band[powered]?total+band[state]:total,0)}function poweredStates(module,stats,budget){const draw=effectiveStat(module,"powerDraw",stats);if(draw===void 0||draw===0)return{retracted:true,deployed:true};const band=budget.bands[Math.min(budget.bands.length,Math.max(1,priorityOf(module)))-1];if(!band)return{retracted:true,deployed:true};return{retracted:band.poweredRetracted,deployed:band.poweredDeployed}}function cellBankInputsFor(modules,statsFor){const banks=[];for(const module of modules){if(!startsWithAny(module.Item,PREFIX.shieldCellBank))continue;const effective=effectiveModule(module,statsFor(module));const ammunition=effective?ammunitionCapacity(effective):null;banks.push({slot:module.Slot,symbol:module.Item,reinforcementRate:effective?.shieldBankReinforcement??0,cells:ammunition?.total??0,spinUp:effective?.shieldBankSpinUp??0,duration:effective?.shieldBankDuration??0,heat:effective?.shieldBankHeat??0})}return banks}function stockBulkhead(shipSymbol){const hull=getShipBySymbol(shipSymbol);if(!hull)return null;const variants=getBulkheadsForShip(hull.name,CORE_MODULES);return variants.find(v=>v.symbol.toLowerCase().endsWith("_default"))??variants.find(v=>v.mass===0)??variants[0]??null}function armourInputFor(shipSymbol,modules,statsFor){const hull=getShipBySymbol(shipSymbol);const reinforcements=[];const moduleReinforcements=[];let bulkhead=null;for(const module of modules){if(!isEnabled(module))continue;const stats=statsFor(module);if(module.Slot.toLowerCase()==="armour"){bulkhead={hullBoost:effectiveStat(module,"hullBoost",stats)??0,...resistancesOf(module,stats)}}else if(startsWithAny(module.Item,PREFIX.hullReinforcement)){const boost=getLoadoutModifier(module,"DefenceModifierHealthMultiplier");reinforcements.push({hullReinforcement:effectiveStat(module,"hullReinforcement",stats)??0,hullBoost:boost===null?0:boost/scaleForLabel("DefenceModifierHealthMultiplier"),...resistancesOf(module,stats)})}else if(startsWithAny(module.Item,PREFIX.moduleReinforcement)){moduleReinforcements.push({moduleProtection:effectiveStat(module,"moduleProtection",stats)??0,integrity:effectiveStat(module,"integrity",stats)??0})}}if(!bulkhead){const stock=stockBulkhead(shipSymbol);bulkhead=stock?{hullBoost:stock.hullBoost??0,...mapResistanceFields(field=>stock[field])}:null}return{baseArmour:hull?.baseArmour??0,bulkhead:bulkhead,reinforcements:reinforcements,moduleReinforcements:moduleReinforcements}}var WEAPON_FIELDS=["damage","roundsPerShot","rateOfFire","burstInterval","burstRounds","burstRateOfFire","chargeTime","clipSize","ammoMaximum","reloadTime","distributorDraw","thermalLoad","powerDraw","maximumRange","falloffRange","armourPiercing"];function weaponStatsFor(module,stats){if(!stats||stats.category!=="hardpoint")return null;const weapon={};for(const field of WEAPON_FIELDS){const value=effectiveStat(module,field,stats);if(value!==void 0)weapon[field]=value}normalizeEffectiveWeapon(module,weapon);const damageDistribution=effectiveDamageDistribution(module,stats);if(damageDistribution)weapon.damageDistribution=damageDistribution;if(stats.damageComponents&&!convertsDamage(module)){weapon.damageComponents=scaleDamageComponents(stats.damageComponents,stats.damage,typeof weapon.damage==="number"?weapon.damage:void 0)}if(stats.projectileRange)weapon.projectileRange={...stats.projectileRange};return weapon}function burstAdjustedRateOfFire(module,weapon){if(getLoadoutModifier(module,"RateOfFire")!==null)return void 0;const touched=["BurstSize","BurstRateOfFire","BurstInterval"].some(label=>getLoadoutModifier(module,label)!==null);if(!touched)return void 0;return combinedRateOfFire(weapon)}function normalizeEffectiveWeapon(module,weapon){const rate=burstAdjustedRateOfFire(module,weapon);if(rate!==void 0)weapon.rateOfFire=rate;const statedDamagePerSecond=getLoadoutModifier(module,"DamagePerSecond");const firingFactor=Number(weapon.roundsPerShot??1)*Number(weapon.rateOfFire??1);if(statedDamagePerSecond!==null&&firingFactor>0){weapon.damage=statedDamagePerSecond/firingFactor}const{maximumRange:maximumRange,falloffRange:falloffRange}=weapon;if(maximumRange!==void 0&&falloffRange!==void 0&&falloffRange>maximumRange){weapon.falloffRange=maximumRange}}var CORE_NAMES={powerPlant:"Power Plant",thrusters:"Thrusters",frameShiftDrive:"Frame Shift Drive",lifeSupport:"Life Support",powerDistributor:"Power Distributor",sensors:"Sensors",fuelTank:"Fuel Tank"};var RESTRICTED_OPTIONAL_NAMES={military:"Military Slot",cargo:"Cargo Slot",limpetController:"Limpet Controller Slot",vesselHangar:"Vessel Hangar Slot",passenger:"Passenger Slot"};function trailingDigits(key){let start=key.length;while(start>0){const code=key.charCodeAt(start-1);if(code<48||code>57)break;start--}return start===key.length?null:key.slice(start)}function loadoutSlotName(slot){switch(slot.kind){case"core":return CORE_NAMES[slot.core];case"hardpoint":{const match=/^(Small|Medium|Large|Huge)(Mining)?Hardpoint(\d+)$/.exec(slot.key);if(!match)return slot.key;return`${match[1]}${match[2]?" Mining":""} Hardpoint ${Number(match[3])}`}case"utility":{const match=/^TinyHardpoint(\d+)$/.exec(slot.key);return match?`Utility Mount ${Number(match[1])}`:slot.key}case"optional":{if(slot.restriction==="planetaryApproachSuite")return"Planetary Approach Suite";if(slot.restriction){const numbered=trailingDigits(slot.key);const label=RESTRICTED_OPTIONAL_NAMES[slot.restriction];return label&&numbered?`${label} ${Number(numbered)}`:slot.key}const optional=/^Slot(\d+)_Size(\d+)$/.exec(slot.key);return optional?`Optional Internal ${Number(optional[1])} (Size ${slot.size})`:slot.key}case"armour":return"Armour";case"cargoHatch":return"Cargo Hatch"}}var MILITARY_PREFIXES=["int_hullreinforcement","int_metaalloyhullreinforcement","int_modulereinforcement","int_shieldcellbank","int_guardianhullreinforcement","int_guardianmodulereinforcement","int_guardianshieldreinforcement"];var MINING_PREFIXES=["hpt_mininglaser","hpt_mining_abrblstr","hpt_mining_seismchrgwarhd","hpt_mining_subsurfdispmisle","hpt_human_extraction","hpt_miningtoolv2"];var CARGO_PREFIXES=["int_cargorack","int_largecargorack","int_corrosionproofcargorack","int_fueltank"];var RESTRICTED_SLOT_PREFIXES={mining:MINING_PREFIXES,military:MILITARY_PREFIXES,cargo:CARGO_PREFIXES,limpetController:["int_dronecontrol","int_multidronecontrol"],vesselHangar:["int_fighterbay"],passenger:["int_passengercabin","int_mkii_passengercabin"],planetaryApproachSuite:["int_planetapproachsuite"]};var problem=(constraint,message,params)=>({constraint:constraint,message:message,...params===void 0?{}:{params:params}});function restrictionProblem(slot,symbol){const restriction=slot.restriction;if(!restriction)return null;if(RESTRICTED_SLOT_PREFIXES[restriction].some(prefix=>symbol.startsWith(prefix))){return null}return problem("restrictedMount",`slot only takes ${SLOT_RESTRICTION_LABELS[restriction]}`,{restriction:restriction})}function moduleSlotProblem(slot,module){const required=module.restrictedToSlot;if(!required||slot.restriction===required)return null;return problem("restrictedMount",`module only fits a mount that takes ${SLOT_RESTRICTION_LABELS[required]}`,{restriction:required})}function moduleFitProblem(shipSymbol,slot,module){if(slot.kind==="cargoHatch"){return problem("immutableSlot","the cargoHatch slot cannot be changed")}if(slot.kind==="armour"){const hull=getShipBySymbol(shipSymbol);if(module.slot!=="armour"||module.ship===void 0){return problem("armourRequired","not a ship armour module")}if(!hull||module.ship.toLowerCase()!==hull.name.toLowerCase()){const armourHull=getShipByName(module.ship);return problem("wrongHullArmour",`armour belongs to ${truncate(module.ship)}, not ${truncate(hull?.name??shipSymbol)}`,{armourShipName:module.ship,...armourHull===null?{}:{armourShipSymbol:armourHull.symbol},shipSymbol:shipSymbol,...hull===null?{}:{shipName:hull.name}})}return null}const restricted=module.restrictedToShips;if(restricted&&!restricted.some(symbol2=>symbol2.toLowerCase()===shipSymbol.toLowerCase())){const allowedShipNames=restricted.map(symbol2=>{const hull=getShipBySymbol(symbol2);return hull?.name??symbol2});const labels=restricted.map((symbol2,index)=>{const name=allowedShipNames[index];return name===symbol2?symbol2:`${name} (${symbol2})`});return problem("restrictedHull",`module is restricted to ${truncate(labels.join(", "))}`,{allowedShipNames:allowedShipNames,allowedShipSymbols:[...restricted],shipSymbol:shipSymbol})}const wrongMount=moduleSlotProblem(slot,module);if(wrongMount)return wrongMount;const symbol=module.symbol.toLowerCase();const moduleSlot=module.slot;switch(slot.kind){case"core":if(moduleSlot!==slot.core){return problem("wrongCoreType",`not a ${slot.core} module`,{requiredCore:slot.core,moduleSlot:moduleSlot??"none"})}break;case"hardpoint":{if(module.category!=="hardpoint"){return problem("hardpointRequired","not a hardpoint weapon")}const restricted2=restrictionProblem(slot,symbol);if(restricted2)return restricted2;break}case"utility":if(module.category!=="utility"){return problem("utilityRequired","not a utility module")}return null;case"optional":{const isFuelTank=moduleSlot==="fuelTank";if(module.category!=="internal"&&!isFuelTank){return problem("optionalInternalRequired","not an optional-internal module")}if(moduleSlot&&!isFuelTank){return problem("coreModuleInOptionalSlot","a core module only fits its core slot")}const restricted2=restrictionProblem(slot,symbol);if(restricted2)return restricted2;break}}return module.class>slot.size?problem("oversized",`module size ${truncate(module.class)} exceeds slot size ${slot.size}`,{moduleClass:module.class,slotSize:slot.size}):null}function moduleFitError(shipSymbol,slot,module){return moduleFitProblem(shipSymbol,slot,module)?.message??null}var REBUY_FRACTION=.05;function exportLoadoutEvent(input,options){const fromSource=options.credits==="source";const source=fromSource?input.sourcePurchase:null;const totals=source!==null&&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{event:"Loadout",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},...input.unladenMass===null?{}:{UnladenMass:input.unladenMass},...input.cargoCapacity===null?{}:{CargoCapacity:input.cargoCapacity},...input.maxJumpRange===null?{}:{MaxJumpRange:input.maxJumpRange},...input.fuelCapacity===null?{}:{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.shipSymbol,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(shipSymbol,modules,layout){if(!layout){throw new TypeError(`ShipLoadout.toLoadoutEvent: no slot layout for hull "${truncate(shipSymbol)}", so modules cannot be ordered by slot`)}const remaining=new Map(modules);const ordered=[];for(const slot of layout){const key=matchingKeyIn(remaining,slot.key);const module=key===null?void 0:remaining.get(key);if(module&&key!==null){ordered.push(module);remaining.delete(key)}}return[...ordered,...remaining.values()]}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||normalizeKey(fitted.Item,FITTED_ITEM)!==normalizeKey(entry.item,SOURCE_ITEM)){return false}}return true}function captureLoadoutEvent(event){const modules=event.Modules;const shipName=event.ShipName;const shipIdent=event.ShipIdent;const hullValue=event.HullValue;const modulesValue=event.ModulesValue;const rebuy=event.Rebuy;const unladenMass=event.UnladenMass;const cargoCapacity=event.CargoCapacity;const fuelCapacity=event.FuelCapacity;return{Ship:event.Ship,Modules:Array.isArray(modules)?captureEach(modules,captureModule):modules,...shipName===void 0?{}:{ShipName:shipName},...shipIdent===void 0?{}:{ShipIdent:shipIdent},...hullValue===void 0?{}:{HullValue:hullValue},...modulesValue===void 0?{}:{ModulesValue:modulesValue},...rebuy===void 0?{}:{Rebuy:rebuy},...unladenMass===void 0?{}:{UnladenMass:unladenMass},...cargoCapacity===void 0?{}:{CargoCapacity:cargoCapacity},...fuelCapacity===void 0?{}:{FuelCapacity:{...fuelCapacity}}}}function captureEach(values,capture){const captured=[];const{length:length}=values;for(let index=0;index<length;index++)captured.push(capture(values[index]));return captured}function captureModule(module){if(module===null||typeof module!=="object")return module;const on=module.On;const priority=module.Priority;const health=module.Health;const value=module.Value;const engineering=module.Engineering;return{Slot:module.Slot,Item:module.Item,...on===void 0?{}:{On:on},...priority===void 0?{}:{Priority:priority},...health===void 0?{}:{Health:health},...value===void 0?{}:{Value:value},...engineering===void 0?{}:{Engineering:captureEngineering(engineering)}}}function captureEngineering(engineering){if(engineering===null||typeof engineering!=="object")return engineering;const experimental=engineering.ExperimentalEffect;const experimentalLocalised=engineering.ExperimentalEffect_Localised;const modifiers=engineering.Modifiers;return{BlueprintName:engineering.BlueprintName,...engineering.Level===void 0?{}:{Level:engineering.Level},...engineering.Quality===void 0?{}:{Quality:engineering.Quality},...experimental===void 0?{}:{ExperimentalEffect:experimental},...experimentalLocalised===void 0?{}:{ExperimentalEffect_Localised:experimentalLocalised},...modifiers===void 0?{}:{Modifiers:Array.isArray(modifiers)?captureEach(modifiers,modifier=>modifier!==null&&typeof modifier==="object"?{...modifier}:modifier):modifiers}}}function normalizeLoadoutEvent(rawEvent){const event=captureLoadoutEvent(rawEvent);requireStringIfPresent(event.Ship,"ShipLoadout.fromLoadout: event.Ship");if(!Array.isArray(event.Modules)){throw new TypeError(`ShipLoadout.fromLoadout: event.Modules must be an array, received ${describeValue(event.Modules)}`)}const modules=/* @__PURE__ */new Map;const slots=/* @__PURE__ */new Set;for(const module of event.Modules){if(module===null||typeof module!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: event.Modules[] must hold module objects, received ${describeValue(module)}`)}requireString(module.Slot,"ShipLoadout.fromLoadout: module.Slot");requireString(module.Item,"ShipLoadout.fromLoadout: module.Item");if(module.Engineering!==void 0){if(module.Engineering===null||typeof module.Engineering!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: module.Engineering must be an object, received ${describeValue(module.Engineering)}`)}requireStringIfPresent(module.Engineering.BlueprintName,"ShipLoadout.fromLoadout: module.Engineering.BlueprintName");requireStringIfPresent(module.Engineering.ExperimentalEffect,"ShipLoadout.fromLoadout: module.Engineering.ExperimentalEffect");if(module.Engineering.Modifiers!==void 0&&!Array.isArray(module.Engineering.Modifiers)){throw new TypeError(`ShipLoadout.fromLoadout: module.Engineering.Modifiers must be an array, received ${describeValue(module.Engineering.Modifiers)}`)}for(const[index,modifier]of(module.Engineering.Modifiers??[]).entries()){if(modifier===null||typeof modifier!=="object"){throw new TypeError(`ShipLoadout.fromLoadout: module.Engineering.Modifiers[${index}] must be an object, received ${describeValue(modifier)}`)}requireString(modifier.Label,`ShipLoadout.fromLoadout: module.Engineering.Modifiers[${index}].Label`)}}const normalizedSlot=module.Slot.toLowerCase();if(slots.has(normalizedSlot)){throw new TypeError(`ShipLoadout.fromLoadout: duplicate slot "${truncate(module.Slot)}"`)}slots.add(normalizedSlot);modules.set(module.Slot,cloneLoadoutModule(module))}const top={};if(event.ShipName!==void 0)top.ShipName=event.ShipName;if(event.ShipIdent!==void 0)top.ShipIdent=event.ShipIdent;if(event.HullValue!==void 0)top.HullValue=event.HullValue;if(event.ModulesValue!==void 0)top.ModulesValue=event.ModulesValue;if(event.Rebuy!==void 0)top.Rebuy=event.Rebuy;if(event.UnladenMass!==void 0)top.UnladenMass=event.UnladenMass;if(event.CargoCapacity!==void 0)top.CargoCapacity=event.CargoCapacity;if(event.FuelCapacity!==void 0)top.FuelCapacity={...event.FuelCapacity};const moduleStats=/* @__PURE__ */new Map;for(const module of modules.values()){const engineering=module.Engineering;const variant=identifyPreEngineeredVariant(module);const variantStats=variant?getPreEngineeredStats(variant):null;if(variantStats)moduleStats.set(module.Slot,cloneModuleStats(variantStats));if(variantStats?.engineeringLocked||typeof engineering?.BlueprintName!=="string"||!isFinalGuardianWeaponEngineering(module.Item,engineering.BlueprintName)){continue}const normalizedBlueprint=normalizeKey(engineering.BlueprintName,"ShipLoadout.fromLoadout: module.Engineering.BlueprintName");const normalizedExperimental=normalizeKey(engineering.ExperimentalEffect,"ShipLoadout.fromLoadout: module.Engineering.ExperimentalEffect");const exact=getPreEngineeredVariants(module.Item).find(candidate=>candidate.blueprint.toLowerCase()===normalizedBlueprint&&candidate.grade===engineering.Level&&candidate.experimental?.toLowerCase()===normalizedExperimental);const stats=exact?getPreEngineeredStats(exact):builtInModuleBySymbol(module.Item,"ShipLoadout.fromLoadout: module.Item");if(stats){moduleStats.set(module.Slot,cloneModuleStats({...stats,engineeringLocked:true}))}}return{shipSymbol:event.Ship,modules:modules,moduleStats:moduleStats,top:top,sourcePurchase:sourcePurchaseFromLoadout(event)}}var SLOT_KEY="ShipLoadout: slotKey";var requireLoadOptions=(scope,options)=>{for(const field of["fuel","cargo"]){const value=options[field];if(value!==void 0&&(!Number.isFinite(value)||value<0)){throw new RangeError(`${scope}: ${field} must be a finite non-negative number`)}}};var LoadoutEditError=class extends TypeError{code;constraint;params;constructor(message,code,params,constraint){super(message);this.code=code;this.params=deepFreeze(Object.fromEntries(Object.entries(params).map(([key,value])=>[key,Array.isArray(value)?[...value]:value])));if(constraint!==void 0)this.constraint=constraint}};var FSD_PREFIX="int_hyperdrive";var BOOSTER_PREFIX="int_guardianfsdbooster";var FUEL_TANK_PREFIX="int_fueltank";var ShipLoadout=class _ShipLoadout{#shipSymbol;#modules;#moduleStats;#primitiveModifiers=/* @__PURE__ */new Map;#top;#sourcePurchase;#version=0;#viewVersion=0;#layoutCache;#calculationCache=null;#validationCache=null;#fittedModuleCache=null;#slotCache=null;constructor(shipSymbol,modules,top,sourcePurchase=null,moduleStats=/* @__PURE__ */new Map){this.#shipSymbol=shipSymbol;this.#modules=modules;this.#top=top;this.#sourcePurchase=sourcePurchase;this.#moduleStats=moduleStats}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})`)}return _ShipLoadout.fromLoadout(entry.data)}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);return new _ShipLoadout(imported.shipSymbol,imported.modules,imported.top,imported.sourcePurchase,imported.moduleStats)}static empty(shipSymbol){const layout=getShipSlots(requireString(shipSymbol,"ShipLoadout.empty: shipSymbol"));if(!layout){throw new TypeError(`ShipLoadout.empty: no slot layout for hull "${truncate(shipSymbol)}"`)}return new _ShipLoadout(layout.symbol,/* @__PURE__ */new Map,{})}static default(shipSymbol){const requested=requireString(shipSymbol,"ShipLoadout.default: shipSymbol");const loadout=getDefaultLoadout(requested);if(!loadout){throw new TypeError(`ShipLoadout.default: no default loadout for hull "${truncate(shipSymbol)}"`)}return new _ShipLoadout(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.unladenMassResult.value}get unladenMassResult(){return this.#top.UnladenMass===void 0?this.#computedUnladenMass():completeResult(this.#top.UnladenMass)}#computedUnladenMass(){return calculateUnladenMass(getShipBySymbol(this.#shipSymbol)?.hullMass??null,this.#calculationModules())}get fuelCapacity(){return this.fuelCapacityResult.value}get fuelCapacityResult(){const cap=this.#top.FuelCapacity;if(cap?.Main!==void 0&&cap.Reserve!==void 0){return completeResult(Object.freeze({main:cap.Main,reserve:cap.Reserve}))}const computed=this.#computedFuelCapacity();if(computed.value===null)return computed;return completeResult(Object.freeze({main:cap?.Main??computed.value.main,reserve:cap?.Reserve??computed.value.reserve}))}get cargoCapacity(){return this.cargoCapacityResult.value}get cargoCapacityResult(){return this.#top.CargoCapacity===void 0?this.#computedCargoCapacity():completeResult(this.#top.CargoCapacity)}#computedCargoCapacity(){return calculateCargoCapacity(this.#calculationModules())}#computedFuelCapacity(){return calculateFuelCapacity(getShipBySymbol(this.#shipSymbol)?.reserveFuelCapacity??null,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 validation(){const cached=this.#validationCache;if(cached!==null&&cached.version===this.#version)return cached.value;const slots=this.#layoutOrNull();const byKey=new Map(slots?.map(slot=>[slot.key.toLowerCase(),slot])??[]);const modules=[...this.#modules.values()].map(module=>{const stats=this.#statsFor(module);const slot=byKey.get(module.Slot.toLowerCase());const builtIn=stats===null&&isNonOutfittingSlot(module.Slot)||isBuiltInHullModule(module);const fitProblem=stats&&slot&&!builtIn?moduleFitProblem(this.#shipSymbol,slot,stats):null;return{slot:module.Slot,symbol:module.Item,known:stats!==null||builtIn,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}}});const value=validateLoadout({shipSymbol:this.#shipSymbol,slots:slots,modules:modules});this.#validationCache={version:this.#version,value:value};return value}slots(kind){let cached=this.#slotCache;if(cached===null||cached.version!==this.#viewVersion){cached={version:this.#viewVersion,value:/* @__PURE__ */new Map};this.#slotCache=cached}const existing=cached.value.get(kind);if(existing!==void 0)return existing;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 immovableReason=slot.key.toLowerCase()==="cargohatch"?"cargoHatch":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}}}));cached.value.set(kind,value);return value}fittedModuleAt(slotKey){const module=this.#fittedModuleFor(slotKey);if(!module)return null;let cached=this.#fittedModuleCache;if(cached===null||cached.version!==this.#viewVersion){cached={version:this.#viewVersion,value:/* @__PURE__ */new Map};this.#fittedModuleCache=cached}const existing=cached.value.get(module.Slot);if(existing!==void 0)return existing;const raw=cloneLoadoutModule(module);const stats=this.#statsFor(module);const effective=effectiveModule(this.#moduleForEffectiveStats(module),stats);const value=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:identifyPreEngineeredVariant(raw)});cached.value.set(module.Slot,value);return value}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(fitted.Slot.toLowerCase()===slot.key.toLowerCase())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=>moduleFitError(this.#shipSymbol,slot,module)===null&&(module.exclusionGroup===void 0||!occupied.has(module.exclusionGroup))&&this.#moduleLimitRegression(slot.key,module,currentLimits,currentStats)===null)}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)}`)}const problem2=moduleFitProblem(this.#shipSymbol,slot,module);if(problem2){if(problem2.constraint==="immutableSlot"){throw new LoadoutEditError(`ShipLoadout.setModule: ${truncate(module.symbol)} → ${truncate(slotKey)}: ${problem2.message}`,"immutableSlot",{slot:slot.key})}throw new LoadoutEditError(`ShipLoadout.setModule: ${truncate(module.symbol)} → ${truncate(slotKey)}: ${problem2.message}`,"incompatibleModule",{...problem2.params,slot:slot.key,symbol:module.symbol,constraint:problem2.constraint},problem2.constraint)}if(module.exclusionGroup!==void 0){const conflict=[...this.#modules.values()].find(fitted=>fitted.Slot.toLowerCase()!==slot.key.toLowerCase()&&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},cloneModuleStats(module));return this}removeModule(slotKey){if(requireString(slotKey,SLOT_KEY).toLowerCase()==="cargohatch"){throw new LoadoutEditError("ShipLoadout.removeModule: the cargoHatch slot cannot be changed","immutableSlot",{slot:"CargoHatch"})}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,fdname,options){requireString(fdname,"ShipLoadout.applyBlueprint: fdname");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.experimental??void 0;requireStringIfPresent(wantedExperimental,"ShipLoadout.applyBlueprint: options.experimental");const module=this.#fittedModuleFor(slotKey);if(!module){throw new RangeError(`ShipLoadout.applyBlueprint: slot "${truncate(slotKey)}" is empty`)}const stats=this.#statsFor(module);if(!stats){throw new TypeError(`ShipLoadout.applyBlueprint: no stats for module "${truncate(module.Item)}"`)}const recipe=resolveBlueprintForModule(module.Item,fdname);const named=recipe===fdname?`"${truncate(fdname)}"`:`"${truncate(fdname)}" (${truncate(recipe)} on this module)`;if(isDecorativeModification(recipe)){throw new TypeError(`ShipLoadout.applyBlueprint: ${named} is a decorative modification, not a blueprint; use applyDecorativeModification to fit its fixed stat changes`)}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(stats.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,fdname)){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 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:fdname,Level:wantedGrade,Quality:quality,...wantedExperimental!==void 0?{ExperimentalEffect:wantedExperimental}:{},Modifiers:modifiers};this.#replaceModule(module.Slot,{...module,Engineering:engineering},void 0,primitiveModifiers);return this}applyDecorativeModification(slotKey,fdname){requireString(fdname,"ShipLoadout.applyDecorativeModification: fdname");const module=this.#fittedModuleFor(slotKey);if(!module){throw new RangeError(`ShipLoadout.applyDecorativeModification: slot "${truncate(slotKey)}" is empty`)}const modification=getDecorativeModification(fdname);if(!modification){throw new RangeError(`ShipLoadout.applyDecorativeModification: unknown decorative modification "${truncate(fdname)}"`)}const stats=this.#statsFor(module);if(!stats){throw new TypeError(`ShipLoadout.applyDecorativeModification: no stats for module "${truncate(module.Item)}"`)}if(stats.engineeringLocked){throw new TypeError(`ShipLoadout.applyDecorativeModification: module "${truncate(module.Item)}" is a final pre-engineered article and accepts no further modification`)}const{modifiers:modifiers,primitiveModifiers:primitiveModifiers,unresolved:unresolved}=resolveDecorativeModificationStats(stats,modification);if(unresolved.length>0){throw new TypeError(`ShipLoadout.applyDecorativeModification: cannot compute decorative modification "${truncate(fdname)}" for module "${truncate(module.Item)}"; missing base stats for ${unresolved.join(", ")}`)}const engineering={BlueprintName:fdname,Modifiers:modifiers};this.#replaceModule(module.Slot,{...module,Engineering:engineering},void 0,primitiveModifiers);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 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)}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.#viewVersion++}toLoadoutEvent(options={}){const hull=getShipBySymbol(this.#shipSymbol);const unladenMass=this.#computedUnladenMass().value;const cargoCapacity=this.#computedCargoCapacity().value;const fuel=this.#computedFuelCapacity().value;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,...options.moduleOrder==="slots"?{layout:this.#layoutOrNull()}:{},sourcePurchase:this.#sourcePurchase,retailHullValue:hull?.hullCost??null,unladenMass:unladenMass,cargoCapacity:cargoCapacity,fuelCapacity:fuel,maxJumpRange:maxJumpRange,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){if(unladenMass===null)return null;let drive;try{drive=this.#resolveDrive()}catch{return null}if(drive===null)return null;const tank=this.#computedFuelCapacity().value;if(tank===null)return null;return singleJumpRange(unladenMass,Math.min(tank.main,drive.maxFuel),drive)}get frameShiftDrive(){const drive=this.#resolveDrive();if(drive===null)throw new TypeError("ShipLoadout: build has no frame shift drive");return drive}frameShiftDriveMassFactor(options={}){requireLoadOptions("ShipLoadout.frameShiftDriveMassFactor",options);const fuel=options.fuel??this.#requireFuelCapacity().main;return frameShiftDriveMassFactor(this.#requireMass(options.cargo??0),fuel,this.frameShiftDrive)}maxJumpRange(){const fsd=this.frameShiftDrive;const fuel=Math.min(this.#requireFuelCapacity().main,fsd.maxFuel);return singleJumpRange(this.#requireMass(0),fuel,fsd)}jumpRange(options={}){requireLoadOptions("ShipLoadout.jumpRange",options);const fsd=this.frameShiftDrive;const fuel=options.fuel??this.#requireFuelCapacity().main;return singleJumpRange(this.#requireMass(options.cargo??0),fuel,fsd)}ladenJumpRange(){return this.jumpRange({cargo:this.#requireCargoCapacity()})}fuelPerJump(distance,options={}){requireLoadOptions("ShipLoadout.fuelPerJump",options);const fsd=this.frameShiftDrive;const fuel=options.fuel??this.#requireFuelCapacity().main;return fuelPerJump(distance,this.#requireMass(options.cargo??0),fuel,fsd)}totalRange(options={}){requireLoadOptions("ShipLoadout.totalRange",options);return totalRange(this.#requireMass(options.cargo??0),this.#requireFuelCapacity().main,this.frameShiftDrive)}jumpRangeSummary(){const cargo=this.#requireCargoCapacity();return{max:this.maxJumpRange(),unladen:this.jumpRange(),laden:this.jumpRange({cargo:cargo}),totalUnladen:this.totalRange(),totalLaden:this.totalRange({cargo:cargo})}}powerBudget(){const modules=[...this.#modules.values()];const consumers=[];for(const module of modules){const consumer=powerConsumerFor(module,this.#statsFor(module));if(consumer)consumers.push(consumer)}return powerBudget(powerAvailable(modules,module=>this.#statsFor(module)),consumers)}heatMetrics(){const input=heatInputFor(this.#shipSymbol,this.#modulesForEffectiveStats(),this.powerBudget(),module=>this.#statsFor(module));return input?heatMetrics(input):null}mobilityMetrics(options={}){const enginesPips=options.enginesPips??4;if(!Number.isFinite(enginesPips)||enginesPips<0||enginesPips>4){throw new RangeError("ShipLoadout.mobilityMetrics: enginesPips must be a finite number from 0 to 4")}requireLoadOptions("ShipLoadout.mobilityMetrics",options);const input=mobilityInputFor(this.#shipSymbol,[...this.#modules.values()],()=>{const main=options.fuel??this.#top.FuelCapacity?.Main??this.#requireFuelCapacity().main;return this.#requireMass(options.cargo??0)+main},enginesPips,module=>this.#statsFor(module));return input?mobilityMetrics(input):null}shieldMetrics(options={}){const input=shieldInputFor(this.#shipSymbol,[...this.#modules.values()],options.systemsPips??0,module=>this.#statsFor(module));if(!input.generator)return null;return shieldMetrics(input)}shieldRecovery(options={}){const systemsPips=options.systemsPips??4;if(!Number.isFinite(systemsPips)||systemsPips<0||systemsPips>4){throw new RangeError("ShipLoadout.shieldRecovery: systemsPips must be a finite number from 0 to 4")}const input=shieldRecoveryInputFor(this.#shipSymbol,[...this.#modules.values()],systemsPips,module=>this.#statsFor(module));return input?shieldRecovery(input):null}cellBanks(){const banks=cellBankInputsFor([...this.#modules.values()],module=>this.#statsFor(module));const layout=this.#layoutOrNull();if(layout){const order=new Map(layout.map((slot,index)=>[slot.key.toLowerCase(),index]));banks.sort((left,right)=>(order.get(left.slot.toLowerCase())??Number.MAX_SAFE_INTEGER)-(order.get(right.slot.toLowerCase())??Number.MAX_SAFE_INTEGER))}return cellBankSummary(banks)}retailCredits(){const hull=getShipBySymbol(this.#shipSymbol)?.hullCost??null;let modules=0;const unpriced=[];for(const module of this.#modules.values()){const stats=this.#statsFor(module);if(stats?.cost!==void 0){modules+=stats.cost}else if(stats!==null||!isNonOutfittingSlot(module.Slot)&&!isBuiltInHullModule(module)){unpriced.push({slot:module.Slot,symbol:module.Item})}}return deepFreeze({hull:hull,modules:modules,rebuy:hull===null?null:Math.trunc((hull+modules)*.05),unpriced:unpriced})}armourMetrics(){return armourMetrics(armourInputFor(this.#shipSymbol,[...this.#modules.values()],module=>this.#statsFor(module)))}weaponMetrics(){const weapons=[];for(const module of this.#modules.values()){const record=this.#statsFor(module);const stats=weaponStatsFor(this.#moduleForEffectiveStats(module),record);if(!stats)continue;weapons.push({slot:module.Slot,symbol:module.Item,name:record?.name??module.Item,enabled:module.On!==false,metrics:weaponMetrics(stats),ammunition:ammunitionCapacity(stats)})}return{weapons:weapons,total:sumWeaponMetrics(weapons.filter(weapon=>weapon.enabled).map(weapon=>weapon.metrics))}}weaponsCapacitorMetrics(options={}){const weaponsPips=options.weaponsPips??4;if(!Number.isFinite(weaponsPips)||weaponsPips<0||weaponsPips>4){throw new RangeError("ShipLoadout.weaponsCapacitorMetrics: weaponsPips must be a finite number from 0 to 4")}return weaponsCapacitorMetrics(weaponsCapacitorInputFor(this.#modulesForEffectiveStats(),weaponsPips,this.powerBudget(),module=>this.#statsFor(module)))}#layoutOrNull(){if(this.#layoutCache===void 0){const layout=getShipSlots(this.#shipSymbol);this.#layoutCache=layout===null?null:Object.freeze(enumerateSlots(layout))}return this.#layoutCache}#invalidate(){this.#version++;this.#viewVersion++}#layout(){const layout=this.#layoutOrNull();if(!layout){throw new TypeError(`ShipLoadout: no slot layout for hull "${truncate(this.#shipSymbol)}"`)}return layout}#requireSlot(slotKey){const wanted=requireString(slotKey,SLOT_KEY).toLowerCase();const slot=this.#layout().find(s=>s.key.toLowerCase()===wanted);if(!slot){throw new RangeError(`ShipLoadout: hull "${truncate(this.#shipSymbol)}" has no slot "${truncate(slotKey)}"`)}return slot}#fittedKey(slotKey){return matchingKeyIn(this.#modules,requireString(slotKey,SLOT_KEY))}#fittedModuleFor(slotKey){const key=this.#fittedKey(slotKey);return key===null?void 0:this.#modules.get(key)}#require(result,what){if(result.value===null){throw new TypeError(`ShipLoadout: cannot determine ${what} (${result.issues.map(i=>i.message).join("; ")})`)}return result.value}#requireMass(cargo){return this.#require(this.unladenMassResult,"mass")+cargo}#requireFuelCapacity(){return this.#require(this.fuelCapacityResult,"fuel capacity")}#requireCargoCapacity(){return this.#require(this.cargoCapacityResult,"cargo capacity")}#calculationModules(){const cached=this.#calculationCache;if(cached!==null&&cached.version===this.#version)return cached.value;const value=this.#resolveCalculationModules();this.#calculationCache={version:this.#version,value:value};return value}#resolveCalculationModules(){return[...this.#modules.values()].map(module=>{const stats=this.#statsFor(module);const symbol=module.Item.toLowerCase();const parsedSlot=parseSlotName(module.Slot);const unresolvedOutfitting=stats===null&&!isNonOutfittingSlot(module.Slot)&&!isBuiltInHullModule(module);const isCargoRack=stats?.cargoCapacity!==void 0||stats?.engineeringGroup==="cargoRacks"||symbol.includes("cargorack");const isFuelTank=stats?.fuelCapacity!==void 0||stats?.slot==="fuelTank"||symbol.startsWith(FUEL_TANK_PREFIX);const mayCarryCapacity=unresolvedOutfitting&&(parsedSlot===null||parsedSlot.kind==="optional");const mayCarryFuel=mayCarryCapacity||unresolvedOutfitting&&parsedSlot?.kind==="core"&&parsedSlot.core==="fuelTank";return{slot:module.Slot,symbol:module.Item,mass:this.#moduleMass(module),...isCargoRack||mayCarryCapacity?{cargoCapacity:isCargoRack?this.#moduleCapacity(module,"CargoCapacity","cargoCapacity"):null}:{},...isFuelTank||mayCarryFuel?{fuelCapacity:isFuelTank?this.#moduleCapacity(module,"FuelCapacity","fuelCapacity"):null}:{}}})}#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)}#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.#invalidate()}#adjustImportedFigures(previous,next,nextStats){const previousMass=this.#moduleMass(previous);const nextMass=this.#moduleMass(next,nextStats);if(this.#top.UnladenMass!==void 0){if(previousMass===null||nextMass===null)delete this.#top.UnladenMass;else this.#top.UnladenMass+=nextMass-previousMass}const previousCargo=this.#moduleCapacity(previous,"CargoCapacity","cargoCapacity");const nextCargo=this.#moduleCapacity(next,"CargoCapacity","cargoCapacity",nextStats);if(this.#top.CargoCapacity!==void 0){if(previousCargo===null||nextCargo===null)delete this.#top.CargoCapacity;else this.#top.CargoCapacity+=nextCargo-previousCargo}const previousFuel=this.#moduleCapacity(previous,"FuelCapacity","fuelCapacity");const nextFuel=this.#moduleCapacity(next,"FuelCapacity","fuelCapacity",nextStats);if(this.#top.FuelCapacity?.Main!==void 0){const reserve=this.#top.FuelCapacity.Reserve;if(previousFuel===null||nextFuel===null){if(reserve===void 0)delete this.#top.FuelCapacity;else this.#top.FuelCapacity={Reserve:reserve}}else{this.#top.FuelCapacity={Main:this.#top.FuelCapacity.Main+nextFuel-previousFuel,...reserve===void 0?{}:{Reserve:reserve}}}}if(normalizeKey(previous?.Item,FITTED_ITEM)===normalizeKey(next?.Item,FITTED_ITEM)){return}delete this.#top.ModulesValue;delete this.#top.Rebuy}#moduleMass(module,statsOverride){if(module===null)return 0;const modified=getLoadoutModifier(module,"Mass");if(modified!==null)return modified;const stats=statsOverride??this.#statsFor(module);if(stats?.mass!==void 0)return stats.mass;if(isBuiltInHullModule(module))return 0;return stats===null&&isNonOutfittingSlot(module.Slot)?0:null}#moduleCapacity(module,modifierLabel,field,statsOverride){if(module===null)return 0;const modified=getLoadoutModifier(module,modifierLabel);if(modified!==null)return modified;const stats=statsOverride??this.#statsFor(module);if(stats?.[field]!==void 0)return stats[field];const symbol=module.Item.toLowerCase();const isFuelTank=stats?.slot?stats.slot==="fuelTank":symbol.startsWith(FUEL_TANK_PREFIX);const shouldCarryCapacity=field==="cargoCapacity"?symbol.includes("cargorack"):isFuelTank;return shouldCarryCapacity?null:0}#resolveDrive(){let fsdModule;for(const m of this.#modules.values()){const stats=this.#statsFor(m);const isDrive=stats?.slot?stats.slot==="frameShiftDrive":m.Item.toLowerCase().startsWith(FSD_PREFIX);if(isDrive){fsdModule=m;break}}if(!fsdModule)return null;const base=this.#statsFor(fsdModule);if(!base||base.fuelMul===void 0||base.fuelPower===void 0){throw new TypeError(`ShipLoadout: no jump constants in the stats catalogue for frame shift drive "${truncate(fsdModule.Item)}"`)}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: frame shift drive "${truncate(fsdModule.Item)}" has no ${missing.join(" or ")} in the stats catalogue`)}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"&&!m.Item.toLowerCase().startsWith(BOOSTER_PREFIX)){continue}if(m.On===false)continue;if(stats?.jumpBoost===void 0){throw new TypeError(`ShipLoadout: FSD booster "${truncate(m.Item)}" has no jumpBoost in the stats catalogue`)}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-43LFDZ4T.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/loadout-metrics.ts","../src/ships/internal/loadout-views.ts","../src/ships/internal/loadout-fitting.ts","../src/ships/internal/loadout-export.ts","../src/ships/internal/loadout-import.ts","../src/ships/ship-loadout.ts"],"names":["shieldRecovery","cellBankSummary","shieldMetrics","getShipSlots","getShipBySymbol","getShipByName","parseSlef","toSlef","stringifySlef","getLoadoutModifier","enumerateSlots","parseSlotName","SLOT_RESTRICTION_LABELS","sourcePurchaseFromLoadout","getSourceModuleValue","weaponsCapacitorMetrics","powerBudget","identifyPreEngineeredVariant","getPreEngineeredStats","scaleDamageComponents","weaponMetrics","sumWeaponMetrics","combinedRateOfFire","singleJumpRange","frameShiftDriveMassFactor","fuelPerJump","totalRange","completeResult","calculateUnladenMass","calculateCargoCapacity","calculateFuelCapacity","validateLoadout","mobilityMetrics","calculateModuleLimits","getDefaultLoadout","heatMetrics","ammunitionCapacity","armourMetrics","isNonOutfittingSlot","isBuiltInHullModule","cloneLoadoutModule","cloneModuleStats","availableBlueprintsFor","availableExperimentalsFor","blueprintAvailableFor","blueprintRoutesFor","experimentalAvailableFor","primitiveEngineeringInputsFor","missingBaseLabels","journalModifiersFor","resolveDecorativeModificationStats","matchingKeyIn","FITTED_ITEM","isFinalGuardianWeaponEngineering","builtInModuleBySymbol","getBulkheadsForShip","getPreEngineeredVariants","ALL_MODULES","CORE_MODULES","getExperimentalEffect","baseStats","computeModifiers","labelsForDamageType","scaleForLabel","fieldForLabel","labelsForField","capabilityValueForLabel","damageTypeForLabel","resolveBlueprintForModule","getExperimentalsForModule","getBlueprintGrade","isDecorativeModification","getDecorativeModification","normalizeKey","truncate","describeValue","requireString","requireStringIfPresent","deepFreeze","PREFIX","powerPlant","thrusters","frameShiftDrive","powerDistributor","shieldGenerator","shieldCellBank","shieldBooster","shieldReinforcement","hullReinforcement","moduleReinforcement","startsWithAny","symbol","prefixes","some","prefix","toLowerCase","startsWith","isPowerDistributor","module","stats","slot","Item","isEnabled","On","priorityOf","Priority","effectiveStat","field","stated","statedModifier","base","label","modified","effectiveCapability","Engineering","Modifiers","modifier","Label","effectiveDamageDistribution","fromEffect","ExperimentalEffect","damageDistribution","distribution","resolved","Value","type","convertsDamage","modifierRatio","effective","relatedStat","ratio","effectiveModule","merged","fields","Set","Object","keys","add","key","capability","value","engineeringGroup","massRatio","minMass","maxMass","performanceRatio","minMultiplier","maxMultiplier","category","normalizeEffectiveWeapon","damageComponents","damage","powerConsumerFor","draw","parsedSlot","Slot","mounted","deployedOnly","alwaysPowered","kind","common","priority","enabled","inherentlyPassiveSlot","core","drawUnknown","powerAvailable","modules","statsFor","isPlant","mapResistanceFields","read","kineticResistance","thermalResistance","explosiveResistance","causticResistance","resistancesOf","shieldInputFor","shipSymbol","systemsPips","hull","generator","boosters","reinforcement","strengthRatio","optMass","Math","max","optMultiplier","push","shieldBoost","hullMass","baseShieldStrength","mobilityInputFor","mass","enginesPips","isThruster","optSpeedMultiplier","speedCurve","minSpeedMultiplier","maxSpeedMultiplier","optRotationMultiplier","rotationCurve","minRotationMultiplier","maxRotationMultiplier","minimumSpeed","maximumSpeed","boost","minPitch","pitch","minRoll","roll","minYaw","yaw","shieldRecoveryInputFor","distributor","generatorStats","distributorStats","strength","regenRate","brokenRegenRate","distributorDraw","systemsCapacity","systemsRecharge","weaponsCapacitorInputFor","weaponsPips","budget","weaponsCapacity","weaponsRecharge","sustainedEnergyPerSecond","poweredStates","deployed","weapon","weaponStatsFor","heatInputFor","heatEfficiency","thrusterHeatRate","deployedThrusterHeatRate","fsdHeatRate","weapons","running","heat","retracted","heatPerSecond","sustainedHeatPerSecond","heatCapacity","heatDissipation","retractedPowerDraw","poweredDraw","deployedPowerDraw","unknownDraws","map","consumer","state","powered","bands","reduce","total","band","min","length","poweredRetracted","poweredDeployed","cellBankInputsFor","banks","ammunition","reinforcementRate","shieldBankReinforcement","cells","spinUp","shieldBankSpinUp","duration","shieldBankDuration","shieldBankHeat","stockBulkhead","variants","name","find","v","endsWith","armourInputFor","reinforcements","moduleReinforcements","bulkhead","hullBoost","moduleProtection","integrity","stock","baseArmour","WEAPON_FIELDS","projectileRange","burstAdjustedRateOfFire","touched","rate","rateOfFire","statedDamagePerSecond","firingFactor","Number","roundsPerShot","maximumRange","falloffRange","CORE_NAMES","lifeSupport","sensors","fuelTank","RESTRICTED_OPTIONAL_NAMES","military","cargo","limpetController","vesselHangar","passenger","trailingDigits","start","code","charCodeAt","slice","loadoutSlotName","match","exec","restriction","numbered","optional","size","MILITARY_PREFIXES","MINING_PREFIXES","CARGO_PREFIXES","RESTRICTED_SLOT_PREFIXES","mining","planetaryApproachSuite","problem","constraint","message","params","restrictionProblem","moduleSlotProblem","required","restrictedToSlot","moduleFitProblem","ship","armourHull","armourShipName","armourShipSymbol","shipName","restricted","restrictedToShips","allowedShipNames","labels","index","join","allowedShipSymbols","wrongMount","moduleSlot","requiredCore","isFuelTank","class","moduleClass","slotSize","moduleFitError","REBUY_FRACTION","exportLoadoutEvent","input","options","fromSource","credits","source","sourcePurchase","totals","sourceTotalsHold","hullValue","retailHullValue","modulesValue","computedModulesValue","rebuy","trunc","event","Ship","ShipName","shipIdent","ShipIdent","HullValue","ModulesValue","unladenMass","UnladenMass","cargoCapacity","CargoCapacity","maxJumpRange","MaxJumpRange","fuelCapacity","FuelCapacity","Main","main","Reserve","reserve","Rebuy","Modules","exportModules","ordered","moduleOrder","slotOrderedModules","layout","values","on","explicitPower","sourceModuleValue","moduleValue","Health","TypeError","remaining","Map","get","delete","sum","cost","SOURCE_ITEM","entry","item","moduleValues","fitted","captureLoadoutEvent","Array","isArray","captureEach","captureModule","capture","captured","health","engineering","captureEngineering","experimental","experimentalLocalised","ExperimentalEffect_Localised","modifiers","BlueprintName","Level","Quality","normalizeLoadoutEvent","rawEvent","slots","entries","normalizedSlot","has","set","top","moduleStats","variant","variantStats","engineeringLocked","normalizedBlueprint","normalizedExperimental","exact","candidate","blueprint","grade","SLOT_KEY","requireLoadOptions","scope","isFinite","RangeError","LoadoutEditError","constructor","super","this","fromEntries","FSD_PREFIX","BOOSTER_PREFIX","FUEL_TANK_PREFIX","ShipLoadout","_ShipLoadout","primitiveModifiers","version","viewVersion","layoutCache","calculationCache","validationCache","fittedModuleCache","slotCache","fromSlef","fromLoadout","data","imported","empty","requested","loadout","unladenMassResult","computedUnladenMass","calculationModules","fuelCapacityResult","cap","freeze","computed","computedFuelCapacity","cargoCapacityResult","computedCargoCapacity","reserveFuelCapacity","validation","cached","layoutOrNull","byKey","builtIn","fitProblem","known","requiresKnownSlot","fitError","fitConstraint","fitParams","exclusionGroup","limitGroup","limitIncrease","existing","filter","currentLimits","moduleLimits","moduleStatsAt","immovableReason","moduleLimitRegression","fittedModuleAt","removable","slotKey","fittedModuleFor","raw","moduleForEffectiveStats","effectiveStats","preEngineeredVariant","fittedModules","flatMap","availableBlueprints","availableExperimentalEffects","modulesForSlot","requireSlot","occupied","group","currentStats","setModule","conflict","previousSlot","previousSymbol","limitProblem","count","limit","fittedKey","replaceModule","removeModule","applyBlueprint","fdname","wantedGrade","wantedQuality","quality","wantedExperimental","recipe","named","isInteger","offered","route","canonical","missing","features","damageModifier","OriginalValue","applyDecorativeModification","modification","unresolved","clearEngineering","bare","setModuleEnabled","patchModule","setModulePriority","patch","toLoadoutEvent","fuel","exportableJumpRange","hullCost","header","toSlefString","indent","drive","resolveDrive","tank","maxFuel","requireFuelCapacity","requireMass","fsd","jumpRange","ladenJumpRange","requireCargoCapacity","distance","jumpRangeSummary","unladen","laden","totalUnladen","totalLaden","consumers","modulesForEffectiveStats","cellBanks","order","sort","left","right","MAX_SAFE_INTEGER","retailCredits","unpriced","record","metrics","invalidate","wanted","s","require","result","what","issues","i","resolveCalculationModules","unresolvedOutfitting","isCargoRack","includes","mayCarryCapacity","mayCarryFuel","moduleMass","moduleCapacity","replacement","current","previous","usage","increase","amount","baseLimit","excess","replacementStats","adjustImportedFigures","next","nextStats","previousMass","nextMass","previousCargo","nextCargo","previousFuel","nextFuel","statsOverride","modifierLabel","shouldCarryCapacity","fsdModule","m","isDrive","fuelMul","fuelPower","jumpBoost","resolveJumpBoost"],"mappings":"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"}
@@ -0,0 +1 @@
1
+ function fixedModifierFeatures(modifiers){return modifiers.map(modifier=>({label:modifier.label,method:modifier.method,min:modifier.value,max:modifier.value}))}export{fixedModifierFeatures};//# sourceMappingURL=chunk-4TXQWLIQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ships/internal/fixed-modifier-features.ts"],"names":["fixedModifierFeatures","modifiers","map","modifier","label","method","min","value","max"],"mappings":"AAgBO,SAASA,sBACZC,WAEA,OAAOA,UAAUC,IAAKC,WAAA,CAClBC,MAAOD,SAASC,MAChBC,OAAQF,SAASE,OACjBC,IAAKH,SAASI,MACdC,IAAKL,SAASI,QAEtB,QAAAP"}