eve-fit-engine 0.1.20 → 0.1.22

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 (31) hide show
  1. package/data/.build +1 -1
  2. package/data/manifest.json +1 -1
  3. package/dist/index.cjs +8 -2
  4. package/dist/index.d.cts +1 -0
  5. package/dist/index.d.ts +1 -0
  6. package/dist/index.js +8 -2
  7. package/dist/node.cjs +8 -2
  8. package/dist/node.js +8 -2
  9. package/package.json +2 -1
  10. /package/data/{v4fa5cbe900d0 → v4db61606166f}/attributes.json +0 -0
  11. /package/data/{v4fa5cbe900d0 → v4db61606166f}/categories.json +0 -0
  12. /package/data/{v4fa5cbe900d0 → v4db61606166f}/clone-grades.json +0 -0
  13. /package/data/{v4fa5cbe900d0 → v4db61606166f}/dbuff-collections.json +0 -0
  14. /package/data/{v4fa5cbe900d0 → v4db61606166f}/dynamic-attributes.json +0 -0
  15. /package/data/{v4fa5cbe900d0 → v4db61606166f}/effects.json +0 -0
  16. /package/data/{v4fa5cbe900d0 → v4db61606166f}/groups.json +0 -0
  17. /package/data/{v4fa5cbe900d0 → v4db61606166f}/market-groups.json +0 -0
  18. /package/data/{v4fa5cbe900d0 → v4db61606166f}/meta-groups.json +0 -0
  19. /package/data/{v4fa5cbe900d0 → v4db61606166f}/types/charges.json +0 -0
  20. /package/data/{v4fa5cbe900d0 → v4db61606166f}/types/drones.json +0 -0
  21. /package/data/{v4fa5cbe900d0 → v4db61606166f}/types/fighters.json +0 -0
  22. /package/data/{v4fa5cbe900d0 → v4db61606166f}/types/implants.json +0 -0
  23. /package/data/{v4fa5cbe900d0 → v4db61606166f}/types/modules.json +0 -0
  24. /package/data/{v4fa5cbe900d0 → v4db61606166f}/types/mutaplasmids.json +0 -0
  25. /package/data/{v4fa5cbe900d0 → v4db61606166f}/types/ships.json +0 -0
  26. /package/data/{v4fa5cbe900d0 → v4db61606166f}/types/skills.json +0 -0
  27. /package/data/{v4fa5cbe900d0 → v4db61606166f}/types/structure-modules.json +0 -0
  28. /package/data/{v4fa5cbe900d0 → v4db61606166f}/types/structures.json +0 -0
  29. /package/data/{v4fa5cbe900d0 → v4db61606166f}/types/subsystems.json +0 -0
  30. /package/data/{v4fa5cbe900d0 → v4db61606166f}/types/system-effects.json +0 -0
  31. /package/data/{v4fa5cbe900d0 → v4db61606166f}/units.json +0 -0
package/data/.build CHANGED
@@ -1 +1 @@
1
- 3457062
1
+ 3458726
@@ -1 +1 @@
1
- {"version":"4fa5cbe900d0","builtAt":"2026-08-05T21:16:58.997Z","totalBytes":8459685,"files":{"attributes.json":{"bytes":251648,"entries":1273},"units.json":{"bytes":3458,"entries":60},"effects.json":{"bytes":1598314,"entries":3416},"meta-groups.json":{"bytes":1108,"entries":13},"categories.json":{"bytes":1192,"entries":33},"groups.json":{"bytes":64022,"entries":963},"market-groups.json":{"bytes":197613,"entries":2106},"clone-grades.json":{"bytes":18709,"entries":4},"dbuff-collections.json":{"bytes":87418,"entries":276},"dynamic-attributes.json":{"bytes":143296,"entries":413},"types/ships.json":{"bytes":912990,"entries":423},"types/modules.json":{"bytes":2571430,"entries":3995},"types/charges.json":{"bytes":599961,"entries":1017},"types/drones.json":{"bytes":195367,"entries":154},"types/fighters.json":{"bytes":133181,"entries":94},"types/implants.json":{"bytes":565271,"entries":1301},"types/subsystems.json":{"bytes":36255,"entries":48},"types/skills.json":{"bytes":203164,"entries":511},"types/system-effects.json":{"bytes":37911,"entries":114},"types/structures.json":{"bytes":31627,"entries":18},"types/structure-modules.json":{"bytes":246957,"entries":356},"types/mutaplasmids.json":{"bytes":558793,"entries":2844}}}
1
+ {"version":"4db61606166f","builtAt":"2026-08-07T06:12:02.279Z","totalBytes":8459685,"files":{"attributes.json":{"bytes":251648,"entries":1273},"units.json":{"bytes":3458,"entries":60},"effects.json":{"bytes":1598314,"entries":3416},"meta-groups.json":{"bytes":1108,"entries":13},"categories.json":{"bytes":1192,"entries":33},"groups.json":{"bytes":64022,"entries":963},"market-groups.json":{"bytes":197613,"entries":2106},"clone-grades.json":{"bytes":18709,"entries":4},"dbuff-collections.json":{"bytes":87418,"entries":276},"dynamic-attributes.json":{"bytes":143296,"entries":413},"types/ships.json":{"bytes":912990,"entries":423},"types/modules.json":{"bytes":2571430,"entries":3995},"types/charges.json":{"bytes":599961,"entries":1017},"types/drones.json":{"bytes":195367,"entries":154},"types/fighters.json":{"bytes":133181,"entries":94},"types/implants.json":{"bytes":565271,"entries":1301},"types/subsystems.json":{"bytes":36255,"entries":48},"types/skills.json":{"bytes":203164,"entries":511},"types/system-effects.json":{"bytes":37911,"entries":114},"types/structures.json":{"bytes":31627,"entries":18},"types/structure-modules.json":{"bytes":246957,"entries":356},"types/mutaplasmids.json":{"bytes":558793,"entries":2844}}}
package/dist/index.cjs CHANGED
@@ -146,6 +146,9 @@ var ATTR = {
146
146
  UPGRADE_COST: 1153,
147
147
  // calibration used per rig
148
148
  DRONE_BANDWIDTH: 1271,
149
+ // ship: the cap, Mbit/s
150
+ DRONE_BANDWIDTH_USED: 1272,
151
+ // drone: what ONE drone of this type occupies
149
152
  DRONE_CAPACITY: 283,
150
153
  // ---- Slots (ship attributes telling how many slots) ----
151
154
  HI_SLOTS: 14,
@@ -5427,7 +5430,7 @@ function deriveStats(ctx, dataset, damageProfile, fit, projectionReports) {
5427
5430
  const t = dataset.getType(droneItem.typeID);
5428
5431
  if (!t) continue;
5429
5432
  const volume = t.volume ?? 0;
5430
- const bandwidth = droneItem.getBase(ATTR.DRONE_BANDWIDTH) ?? 0;
5433
+ const bandwidth = droneItem.getBase(ATTR.DRONE_BANDWIDTH_USED) ?? 0;
5431
5434
  droneBayUsed += volume * fd.countTotal;
5432
5435
  droneBwUsed += bandwidth * fd.countActive;
5433
5436
  }
@@ -5533,7 +5536,10 @@ function deriveStats(ctx, dataset, damageProfile, fit, projectionReports) {
5533
5536
  bayMax: ship.getFinal(ATTR.DRONE_CAPACITY, 0),
5534
5537
  bandwidthUsed: droneBwUsed,
5535
5538
  bandwidthMax: ship.getFinal(ATTR.DRONE_BANDWIDTH, 0),
5536
- active: ctx.drones.filter((d) => d.state === "ACTIVE").length,
5539
+ // Drones in space, not drone GROUPS in space. `ctx.drones` holds one
5540
+ // ItemState per FitDrone stack, so filtering by state counted five
5541
+ // active Ogre IIs as 1 — and this is the number bandwidth gates.
5542
+ active: fit.drones.reduce((n, d) => n + d.countActive, 0),
5537
5543
  // Drone control range is the ship base (default 20 km, attr 458)
5538
5544
  // PLUS the character's accumulated skill bonus on the same attr.
5539
5545
  // Drone Avionics V + Advanced Drone Avionics V each ModAdd to
package/dist/index.d.cts CHANGED
@@ -961,6 +961,7 @@ declare const ATTR: {
961
961
  readonly UPGRADE_CAPACITY: 1132;
962
962
  readonly UPGRADE_COST: 1153;
963
963
  readonly DRONE_BANDWIDTH: 1271;
964
+ readonly DRONE_BANDWIDTH_USED: 1272;
964
965
  readonly DRONE_CAPACITY: 283;
965
966
  readonly HI_SLOTS: 14;
966
967
  readonly MED_SLOTS: 13;
package/dist/index.d.ts CHANGED
@@ -961,6 +961,7 @@ declare const ATTR: {
961
961
  readonly UPGRADE_CAPACITY: 1132;
962
962
  readonly UPGRADE_COST: 1153;
963
963
  readonly DRONE_BANDWIDTH: 1271;
964
+ readonly DRONE_BANDWIDTH_USED: 1272;
964
965
  readonly DRONE_CAPACITY: 283;
965
966
  readonly HI_SLOTS: 14;
966
967
  readonly MED_SLOTS: 13;
package/dist/index.js CHANGED
@@ -144,6 +144,9 @@ var ATTR = {
144
144
  UPGRADE_COST: 1153,
145
145
  // calibration used per rig
146
146
  DRONE_BANDWIDTH: 1271,
147
+ // ship: the cap, Mbit/s
148
+ DRONE_BANDWIDTH_USED: 1272,
149
+ // drone: what ONE drone of this type occupies
147
150
  DRONE_CAPACITY: 283,
148
151
  // ---- Slots (ship attributes telling how many slots) ----
149
152
  HI_SLOTS: 14,
@@ -5425,7 +5428,7 @@ function deriveStats(ctx, dataset, damageProfile, fit, projectionReports) {
5425
5428
  const t = dataset.getType(droneItem.typeID);
5426
5429
  if (!t) continue;
5427
5430
  const volume = t.volume ?? 0;
5428
- const bandwidth = droneItem.getBase(ATTR.DRONE_BANDWIDTH) ?? 0;
5431
+ const bandwidth = droneItem.getBase(ATTR.DRONE_BANDWIDTH_USED) ?? 0;
5429
5432
  droneBayUsed += volume * fd.countTotal;
5430
5433
  droneBwUsed += bandwidth * fd.countActive;
5431
5434
  }
@@ -5531,7 +5534,10 @@ function deriveStats(ctx, dataset, damageProfile, fit, projectionReports) {
5531
5534
  bayMax: ship.getFinal(ATTR.DRONE_CAPACITY, 0),
5532
5535
  bandwidthUsed: droneBwUsed,
5533
5536
  bandwidthMax: ship.getFinal(ATTR.DRONE_BANDWIDTH, 0),
5534
- active: ctx.drones.filter((d) => d.state === "ACTIVE").length,
5537
+ // Drones in space, not drone GROUPS in space. `ctx.drones` holds one
5538
+ // ItemState per FitDrone stack, so filtering by state counted five
5539
+ // active Ogre IIs as 1 — and this is the number bandwidth gates.
5540
+ active: fit.drones.reduce((n, d) => n + d.countActive, 0),
5535
5541
  // Drone control range is the ship base (default 20 km, attr 458)
5536
5542
  // PLUS the character's accumulated skill bonus on the same attr.
5537
5543
  // Drone Avionics V + Advanced Drone Avionics V each ModAdd to
package/dist/node.cjs CHANGED
@@ -174,6 +174,9 @@ var ATTR = {
174
174
  UPGRADE_COST: 1153,
175
175
  // calibration used per rig
176
176
  DRONE_BANDWIDTH: 1271,
177
+ // ship: the cap, Mbit/s
178
+ DRONE_BANDWIDTH_USED: 1272,
179
+ // drone: what ONE drone of this type occupies
177
180
  DRONE_CAPACITY: 283,
178
181
  // ---- Slots (ship attributes telling how many slots) ----
179
182
  HI_SLOTS: 14,
@@ -5455,7 +5458,7 @@ function deriveStats(ctx, dataset, damageProfile, fit, projectionReports) {
5455
5458
  const t = dataset.getType(droneItem.typeID);
5456
5459
  if (!t) continue;
5457
5460
  const volume = t.volume ?? 0;
5458
- const bandwidth = droneItem.getBase(ATTR.DRONE_BANDWIDTH) ?? 0;
5461
+ const bandwidth = droneItem.getBase(ATTR.DRONE_BANDWIDTH_USED) ?? 0;
5459
5462
  droneBayUsed += volume * fd.countTotal;
5460
5463
  droneBwUsed += bandwidth * fd.countActive;
5461
5464
  }
@@ -5561,7 +5564,10 @@ function deriveStats(ctx, dataset, damageProfile, fit, projectionReports) {
5561
5564
  bayMax: ship.getFinal(ATTR.DRONE_CAPACITY, 0),
5562
5565
  bandwidthUsed: droneBwUsed,
5563
5566
  bandwidthMax: ship.getFinal(ATTR.DRONE_BANDWIDTH, 0),
5564
- active: ctx.drones.filter((d) => d.state === "ACTIVE").length,
5567
+ // Drones in space, not drone GROUPS in space. `ctx.drones` holds one
5568
+ // ItemState per FitDrone stack, so filtering by state counted five
5569
+ // active Ogre IIs as 1 — and this is the number bandwidth gates.
5570
+ active: fit.drones.reduce((n, d) => n + d.countActive, 0),
5565
5571
  // Drone control range is the ship base (default 20 km, attr 458)
5566
5572
  // PLUS the character's accumulated skill bonus on the same attr.
5567
5573
  // Drone Avionics V + Advanced Drone Avionics V each ModAdd to
package/dist/node.js CHANGED
@@ -150,6 +150,9 @@ var ATTR = {
150
150
  UPGRADE_COST: 1153,
151
151
  // calibration used per rig
152
152
  DRONE_BANDWIDTH: 1271,
153
+ // ship: the cap, Mbit/s
154
+ DRONE_BANDWIDTH_USED: 1272,
155
+ // drone: what ONE drone of this type occupies
153
156
  DRONE_CAPACITY: 283,
154
157
  // ---- Slots (ship attributes telling how many slots) ----
155
158
  HI_SLOTS: 14,
@@ -5431,7 +5434,7 @@ function deriveStats(ctx, dataset, damageProfile, fit, projectionReports) {
5431
5434
  const t = dataset.getType(droneItem.typeID);
5432
5435
  if (!t) continue;
5433
5436
  const volume = t.volume ?? 0;
5434
- const bandwidth = droneItem.getBase(ATTR.DRONE_BANDWIDTH) ?? 0;
5437
+ const bandwidth = droneItem.getBase(ATTR.DRONE_BANDWIDTH_USED) ?? 0;
5435
5438
  droneBayUsed += volume * fd.countTotal;
5436
5439
  droneBwUsed += bandwidth * fd.countActive;
5437
5440
  }
@@ -5537,7 +5540,10 @@ function deriveStats(ctx, dataset, damageProfile, fit, projectionReports) {
5537
5540
  bayMax: ship.getFinal(ATTR.DRONE_CAPACITY, 0),
5538
5541
  bandwidthUsed: droneBwUsed,
5539
5542
  bandwidthMax: ship.getFinal(ATTR.DRONE_BANDWIDTH, 0),
5540
- active: ctx.drones.filter((d) => d.state === "ACTIVE").length,
5543
+ // Drones in space, not drone GROUPS in space. `ctx.drones` holds one
5544
+ // ItemState per FitDrone stack, so filtering by state counted five
5545
+ // active Ogre IIs as 1 — and this is the number bandwidth gates.
5546
+ active: fit.drones.reduce((n, d) => n + d.countActive, 0),
5541
5547
  // Drone control range is the ship base (default 20 km, attr 458)
5542
5548
  // PLUS the character's accumulated skill bonus on the same attr.
5543
5549
  // Drone Avionics V + Advanced Drone Avionics V each ModAdd to
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "eve-fit-engine",
3
- "version": "0.1.20",
3
+ "version": "0.1.22",
4
4
  "description": "Pyfa-parity EVE Online ship & structure fitting calculation engine. Inject an SDE dataset + a fit, get the full derived stat block (offense, defense, capacitor, navigation, targeting, fitting, projected, structure).",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "type": "module",
@@ -55,6 +55,7 @@
55
55
  "diff": "node test/diff/run-diff.mjs",
56
56
  "diff:recalibrate": "node scripts/recalibrate-pyfa-pin.mjs",
57
57
  "test:pyfa": "tsx test/parity/run-pyfa-parity.ts",
58
+ "test:drones": "tsx test/drone-bandwidth.ts",
58
59
  "audit:coverage": "tsx test/effect-coverage-audit.ts",
59
60
  "drift": "node scripts/check-pyfa-drift.mjs",
60
61
  "drift:update": "node scripts/check-pyfa-drift.mjs --update",