eve-fit-engine 0.1.2 → 0.1.3
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.
- package/README.md +8 -1
- package/dist/index.cjs +4 -0
- package/dist/index.js +4 -0
- package/dist/node.cjs +4 -0
- package/dist/node.js +4 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -25,7 +25,7 @@ projected effects, and structure fuel/service stats.
|
|
|
25
25
|
release gate and the engine's correctness ground truth.
|
|
26
26
|
- **Differential harness** — `npm run diff`: generates 4 fits for *every*
|
|
27
27
|
published ship and compares every stat against a headless **pyfa-org/Pyfa**
|
|
28
|
-
oracle.
|
|
28
|
+
oracle. 1662/1676 fits (99.2%) match exactly; the residual is a documented
|
|
29
29
|
set of pyfa float/modelling/per-ship quirks (see
|
|
30
30
|
[`test/diff/known-diffs.mjs`](test/diff/known-diffs.mjs)). Exits 0 on no
|
|
31
31
|
*unexpected* diffs; `--strict` re-lists the accepted set as failures.
|
|
@@ -99,6 +99,13 @@ tracked and ported, then re-checked against **both** the fixture suite
|
|
|
99
99
|
(`npm run test:pyfa`) and the per-ship differential harness (`npm run diff`)
|
|
100
100
|
before release. See [`MAINTENANCE.md`](./MAINTENANCE.md) for the update flows.
|
|
101
101
|
|
|
102
|
+
## Contributing
|
|
103
|
+
|
|
104
|
+
See [`CONTRIBUTING.md`](./CONTRIBUTING.md) — the step-by-step guide to setup,
|
|
105
|
+
every internal command, the two validation suites (`npm run test:pyfa` +
|
|
106
|
+
`npm run diff`), how to add fixtures / port effects, the pyfa-pin recalibration
|
|
107
|
+
flow, and the project's hard rules.
|
|
108
|
+
|
|
102
109
|
## Licence
|
|
103
110
|
|
|
104
111
|
GPL-3.0-or-later. Copyright (C) 2026 Capsuleers.app. This is free software; see
|
package/dist/index.cjs
CHANGED
|
@@ -4217,11 +4217,15 @@ function collectDrains(ctx, dataset) {
|
|
|
4217
4217
|
}
|
|
4218
4218
|
continue;
|
|
4219
4219
|
}
|
|
4220
|
+
const seen = /* @__PURE__ */ new Set();
|
|
4220
4221
|
for (const eid of m.effectIDs) {
|
|
4221
4222
|
const effect = dataset.effects.get(eid);
|
|
4222
4223
|
if (!effect) continue;
|
|
4223
4224
|
const entry = drainEntryFromEffect(effect, m);
|
|
4224
4225
|
if (!entry) continue;
|
|
4226
|
+
const sig = `${entry.cycleMs}|${entry.capNeed}|${entry.clipSize}|${entry.reloadMs}|${entry.isInjector ? 1 : 0}|${entry.disableStagger ? 1 : 0}`;
|
|
4227
|
+
if (seen.has(sig)) continue;
|
|
4228
|
+
seen.add(sig);
|
|
4225
4229
|
drains.push(entry);
|
|
4226
4230
|
if (entry.capNeed > 0 && entry.cycleMs > 0) {
|
|
4227
4231
|
totalGrossDrain += entry.capNeed / (entry.cycleMs / 1e3);
|
package/dist/index.js
CHANGED
|
@@ -4215,11 +4215,15 @@ function collectDrains(ctx, dataset) {
|
|
|
4215
4215
|
}
|
|
4216
4216
|
continue;
|
|
4217
4217
|
}
|
|
4218
|
+
const seen = /* @__PURE__ */ new Set();
|
|
4218
4219
|
for (const eid of m.effectIDs) {
|
|
4219
4220
|
const effect = dataset.effects.get(eid);
|
|
4220
4221
|
if (!effect) continue;
|
|
4221
4222
|
const entry = drainEntryFromEffect(effect, m);
|
|
4222
4223
|
if (!entry) continue;
|
|
4224
|
+
const sig = `${entry.cycleMs}|${entry.capNeed}|${entry.clipSize}|${entry.reloadMs}|${entry.isInjector ? 1 : 0}|${entry.disableStagger ? 1 : 0}`;
|
|
4225
|
+
if (seen.has(sig)) continue;
|
|
4226
|
+
seen.add(sig);
|
|
4223
4227
|
drains.push(entry);
|
|
4224
4228
|
if (entry.capNeed > 0 && entry.cycleMs > 0) {
|
|
4225
4229
|
totalGrossDrain += entry.capNeed / (entry.cycleMs / 1e3);
|
package/dist/node.cjs
CHANGED
|
@@ -4245,11 +4245,15 @@ function collectDrains(ctx, dataset) {
|
|
|
4245
4245
|
}
|
|
4246
4246
|
continue;
|
|
4247
4247
|
}
|
|
4248
|
+
const seen = /* @__PURE__ */ new Set();
|
|
4248
4249
|
for (const eid of m.effectIDs) {
|
|
4249
4250
|
const effect = dataset.effects.get(eid);
|
|
4250
4251
|
if (!effect) continue;
|
|
4251
4252
|
const entry = drainEntryFromEffect(effect, m);
|
|
4252
4253
|
if (!entry) continue;
|
|
4254
|
+
const sig = `${entry.cycleMs}|${entry.capNeed}|${entry.clipSize}|${entry.reloadMs}|${entry.isInjector ? 1 : 0}|${entry.disableStagger ? 1 : 0}`;
|
|
4255
|
+
if (seen.has(sig)) continue;
|
|
4256
|
+
seen.add(sig);
|
|
4253
4257
|
drains.push(entry);
|
|
4254
4258
|
if (entry.capNeed > 0 && entry.cycleMs > 0) {
|
|
4255
4259
|
totalGrossDrain += entry.capNeed / (entry.cycleMs / 1e3);
|
package/dist/node.js
CHANGED
|
@@ -4221,11 +4221,15 @@ function collectDrains(ctx, dataset) {
|
|
|
4221
4221
|
}
|
|
4222
4222
|
continue;
|
|
4223
4223
|
}
|
|
4224
|
+
const seen = /* @__PURE__ */ new Set();
|
|
4224
4225
|
for (const eid of m.effectIDs) {
|
|
4225
4226
|
const effect = dataset.effects.get(eid);
|
|
4226
4227
|
if (!effect) continue;
|
|
4227
4228
|
const entry = drainEntryFromEffect(effect, m);
|
|
4228
4229
|
if (!entry) continue;
|
|
4230
|
+
const sig = `${entry.cycleMs}|${entry.capNeed}|${entry.clipSize}|${entry.reloadMs}|${entry.isInjector ? 1 : 0}|${entry.disableStagger ? 1 : 0}`;
|
|
4231
|
+
if (seen.has(sig)) continue;
|
|
4232
|
+
seen.add(sig);
|
|
4229
4233
|
drains.push(entry);
|
|
4230
4234
|
if (entry.capNeed > 0 && entry.cycleMs > 0) {
|
|
4231
4235
|
totalGrossDrain += entry.capNeed / (entry.cycleMs / 1e3);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eve-fit-engine",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
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",
|