formulab 0.50.0 → 0.51.0
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/CHANGELOG.md +15 -0
- package/dist/battery/cycleLife.d.ts +5 -3
- package/dist/battery/cycleLife.d.ts.map +1 -1
- package/dist/battery/cycleLife.js +53 -18
- package/dist/battery/cycleLife.js.map +1 -1
- package/dist/battery/index.d.ts +1 -1
- package/dist/battery/index.d.ts.map +1 -1
- package/dist/battery/index.js.map +1 -1
- package/dist/battery/types.d.ts +6 -0
- package/dist/battery/types.d.ts.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,21 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
## [0.51.0] - 2026-09-29
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- **`battery/cycleLife()` takes its depth-of-discharge factor from Battery University BU-808, Table 2.**
|
|
15
|
+
The factor was a three-point piecewise-linear guess, flat at 1.5 from 0 to 50% DOD and 0.7 at 100%.
|
|
16
|
+
So 10% and 50% DOD gave the same life, and 50% against 100% differed by 2.1×, where the source it
|
|
17
|
+
cited differs by about 2.6× for NMC and far more at shallow depths. The factor is now each table row
|
|
18
|
+
over its 80% row (the base cycles stay the datasheet figure at 80% DOD), interpolated log-linearly
|
|
19
|
+
between rows and held at the 10% row below it (disclosed by the new `dodBelowTable` flag). LFP follows the table's LiPO4 column; other chemistries
|
|
20
|
+
follow the NMC column as an approximation, and the new `dodCurve` field says which. NMC at 60% DOD and
|
|
21
|
+
40°C now gives 1,800 cycles (was 1,600); at 100% DOD a factor of 0.75 (was 0.7); at 20%, 5.0 (was 1.5).
|
|
22
|
+
- `cycleLife()` now throws `RangeError` for a depth of discharge outside (0, 100] and for an unknown
|
|
23
|
+
chemistry, which returned `NaN` although `ERRORS.md` already documented the throw.
|
|
24
|
+
|
|
10
25
|
## [0.50.0] - 2026-09-28
|
|
11
26
|
|
|
12
27
|
### Changed
|
|
@@ -2,10 +2,12 @@ import type { CycleLifeInput, CycleLifeResult } from './types.js';
|
|
|
2
2
|
/**
|
|
3
3
|
* Estimate battery cycle life based on chemistry, DOD, and temperature
|
|
4
4
|
*
|
|
5
|
-
* @formula cycles = baseCycles × dodFactor × temperatureFactor
|
|
6
|
-
*
|
|
5
|
+
* @formula cycles = baseCycles × dodFactor × temperatureFactor,
|
|
6
|
+
* dodFactor = cycles(DOD) / cycles(80%) from BU-808 Table 2 (log-linear between rows)
|
|
7
|
+
* @reference Battery University BU-808 Table 2 (DOD factor); manufacturer datasheets (base cycles at 80% DOD)
|
|
7
8
|
* @param input - Chemistry type, DOD percentage, temperature
|
|
8
|
-
* @returns Estimated cycle count with adjustment factors
|
|
9
|
+
* @returns Estimated cycle count with adjustment factors and the BU-808 column the DOD factor followed
|
|
10
|
+
* @throws {RangeError} depthOfDischarge is not greater than 0 and at most 100, or the chemistry is unknown
|
|
9
11
|
*/
|
|
10
12
|
export declare function cycleLife(input: CycleLifeInput): CycleLifeResult;
|
|
11
13
|
//# sourceMappingURL=cycleLife.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cycleLife.d.ts","sourceRoot":"","sources":["../../src/battery/cycleLife.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,cAAc,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"cycleLife.d.ts","sourceRoot":"","sources":["../../src/battery/cycleLife.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,cAAc,EAAE,eAAe,EAAY,MAAM,YAAY,CAAC;AAwE9F;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CA0BhE"}
|
|
@@ -13,26 +13,50 @@ const BASE_CYCLE_LIFE = {
|
|
|
13
13
|
NiMH: 600,
|
|
14
14
|
};
|
|
15
15
|
/**
|
|
16
|
-
*
|
|
17
|
-
*
|
|
16
|
+
* Cycles to 70% capacity at each depth of discharge, transcribed from Battery University BU-808
|
|
17
|
+
* "How to Prolong Lithium-based Batteries", Table 2 (NMC and LiPO4 columns; verified against the
|
|
18
|
+
* page's HTML, 2026-09-29). Only the shape of each column is used: the DOD factor is a row divided by
|
|
19
|
+
* the 80% row, so `BASE_CYCLE_LIFE` stays the datasheet figure at 80% DOD and the table says how depth
|
|
20
|
+
* moves it.
|
|
21
|
+
* @reference Battery University, BU-808, Table 2: Cycle life as a function of depth of discharge
|
|
18
22
|
*/
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
23
|
+
const BU808_TABLE2 = {
|
|
24
|
+
NMC: [[10, 6000], [20, 2000], [40, 1000], [60, 600], [80, 400], [100, 300]],
|
|
25
|
+
LFP: [[10, 15000], [20, 9000], [40, 3000], [60, 1500], [80, 900], [100, 600]],
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Which BU-808 column a chemistry follows. The table has LiPO4 (LFP) and NMC columns only; every other
|
|
29
|
+
* chemistry takes the NMC trend as an approximation, and the result says so (`dodCurve`).
|
|
30
|
+
*/
|
|
31
|
+
function dodCurveFor(chemistry) {
|
|
32
|
+
return chemistry === 'LFP' ? 'LFP' : 'NMC';
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* DOD factor: cycles at this depth over cycles at 80%, interpolated log-linearly between rows (cycle
|
|
36
|
+
* counts fall roughly geometrically with depth). Below the table's shallowest row (10%) that row holds —
|
|
37
|
+
* no extrapolation past the source — and the result discloses it (`dodBelowTable`).
|
|
38
|
+
*/
|
|
39
|
+
function getDodFactor(dod, curve) {
|
|
40
|
+
const rows = BU808_TABLE2[curve];
|
|
41
|
+
const at80 = 80;
|
|
42
|
+
const cyclesAt80 = rows.find(([d]) => d === at80)?.[1] ?? rows[0][1];
|
|
43
|
+
if (dod <= rows[0][0])
|
|
44
|
+
return rows[0][1] / cyclesAt80;
|
|
45
|
+
for (let i = 1; i < rows.length; i++) {
|
|
46
|
+
const [d0, c0] = rows[i - 1];
|
|
47
|
+
const [d1, c1] = rows[i];
|
|
48
|
+
if (dod <= d1) {
|
|
49
|
+
const t = (dod - d0) / (d1 - d0);
|
|
50
|
+
return Math.exp(Math.log(c0) + t * (Math.log(c1) - Math.log(c0))) / cyclesAt80;
|
|
51
|
+
}
|
|
31
52
|
}
|
|
53
|
+
return rows[rows.length - 1][1] / cyclesAt80;
|
|
32
54
|
}
|
|
33
55
|
/**
|
|
34
56
|
* Temperature factor: how temperature affects cycle life
|
|
35
57
|
* <0°C → 0.5, 0-15 → 0.8, 15-35 → 1.0, 35-45 → 0.8, >45 → 0.5
|
|
58
|
+
* A qualitative step, not a transcribed table: BU-808 gives the direction (heat and cold both shorten
|
|
59
|
+
* life) but no cycle-count-by-temperature figures to derive it from.
|
|
36
60
|
*/
|
|
37
61
|
function getTemperatureFactor(tempC) {
|
|
38
62
|
if (tempC < 0)
|
|
@@ -48,15 +72,24 @@ function getTemperatureFactor(tempC) {
|
|
|
48
72
|
/**
|
|
49
73
|
* Estimate battery cycle life based on chemistry, DOD, and temperature
|
|
50
74
|
*
|
|
51
|
-
* @formula cycles = baseCycles × dodFactor × temperatureFactor
|
|
52
|
-
*
|
|
75
|
+
* @formula cycles = baseCycles × dodFactor × temperatureFactor,
|
|
76
|
+
* dodFactor = cycles(DOD) / cycles(80%) from BU-808 Table 2 (log-linear between rows)
|
|
77
|
+
* @reference Battery University BU-808 Table 2 (DOD factor); manufacturer datasheets (base cycles at 80% DOD)
|
|
53
78
|
* @param input - Chemistry type, DOD percentage, temperature
|
|
54
|
-
* @returns Estimated cycle count with adjustment factors
|
|
79
|
+
* @returns Estimated cycle count with adjustment factors and the BU-808 column the DOD factor followed
|
|
80
|
+
* @throws {RangeError} depthOfDischarge is not greater than 0 and at most 100, or the chemistry is unknown
|
|
55
81
|
*/
|
|
56
82
|
export function cycleLife(input) {
|
|
57
83
|
const { chemistry, depthOfDischarge, temperatureC } = input;
|
|
84
|
+
if (!Number.isFinite(depthOfDischarge) || depthOfDischarge <= 0 || depthOfDischarge > 100) {
|
|
85
|
+
throw new RangeError('depthOfDischarge must be greater than 0 and at most 100 (%)');
|
|
86
|
+
}
|
|
58
87
|
const baseCycles = BASE_CYCLE_LIFE[chemistry];
|
|
59
|
-
|
|
88
|
+
if (baseCycles === undefined) {
|
|
89
|
+
throw new RangeError(`Unknown chemistry: ${String(chemistry)}`);
|
|
90
|
+
}
|
|
91
|
+
const dodCurve = dodCurveFor(chemistry);
|
|
92
|
+
const dodFactor = getDodFactor(depthOfDischarge, dodCurve);
|
|
60
93
|
const temperatureFactor = getTemperatureFactor(temperatureC);
|
|
61
94
|
const estimatedCycles = roundTo(baseCycles * dodFactor * temperatureFactor, 0);
|
|
62
95
|
return {
|
|
@@ -65,6 +98,8 @@ export function cycleLife(input) {
|
|
|
65
98
|
dodFactor: roundTo(dodFactor, 4),
|
|
66
99
|
temperatureFactor,
|
|
67
100
|
chemistry,
|
|
101
|
+
dodCurve,
|
|
102
|
+
dodBelowTable: depthOfDischarge < BU808_TABLE2[dodCurve][0][0],
|
|
68
103
|
};
|
|
69
104
|
}
|
|
70
105
|
//# sourceMappingURL=cycleLife.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cycleLife.js","sourceRoot":"","sources":["../../src/battery/cycleLife.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;GAGG;AACH,MAAM,eAAe,GAAqC;IACxD,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,IAAI;IACT,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,GAAG;IACR,QAAQ,EAAE,GAAG;IACb,IAAI,EAAE,GAAG;CACV,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"cycleLife.js","sourceRoot":"","sources":["../../src/battery/cycleLife.ts"],"names":[],"mappings":"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"}
|
package/dist/battery/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type { BatteryChemistry, EnergyDensityInput, EnergyDensityResult, CRateMode, CRateInput, CRateResult, StateOfHealthInput, SohStatus, StateOfHealthResult, BatteryPackConfigInput, BatteryPackConfigResult, CycleLifeInput, CycleLifeResult, InternalResistanceInput, InternalResistanceResult, SelfDischargeInput, SelfDischargeResult, ThermalRunawayInput, ThermalRunawayResult, BmsBalancingInput, BmsBalancingResult, ChargingProfileInput, ChargingProfileResult, } from './types.js';
|
|
1
|
+
export type { BatteryChemistry, EnergyDensityInput, EnergyDensityResult, CRateMode, CRateInput, CRateResult, StateOfHealthInput, SohStatus, StateOfHealthResult, BatteryPackConfigInput, BatteryPackConfigResult, CycleLifeInput, CycleLifeResult, DodCurve, InternalResistanceInput, InternalResistanceResult, SelfDischargeInput, SelfDischargeResult, ThermalRunawayInput, ThermalRunawayResult, BmsBalancingInput, BmsBalancingResult, ChargingProfileInput, ChargingProfileResult, } from './types.js';
|
|
2
2
|
export { isCRateInput } from './guards.js';
|
|
3
3
|
export { energyDensity } from './energyDensity.js';
|
|
4
4
|
export { cRate } from './cRate.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/battery/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/battery/index.ts"],"names":[],"mappings":"AACA,YAAY,EACV,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,SAAS,EACT,mBAAmB,EACnB,sBAAsB,EACtB,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,QAAQ,EACR,uBAAuB,EACvB,wBAAwB,EACxB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,iBAAiB,EACjB,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/battery/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/battery/index.ts"],"names":[],"mappings":"AA4BA,SAAS;AACT,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
|
package/dist/battery/types.d.ts
CHANGED
|
@@ -75,12 +75,18 @@ export interface CycleLifeInput {
|
|
|
75
75
|
depthOfDischarge: number;
|
|
76
76
|
temperatureC: number;
|
|
77
77
|
}
|
|
78
|
+
/** The Battery University BU-808 Table 2 column a chemistry's DOD factor follows. */
|
|
79
|
+
export type DodCurve = 'NMC' | 'LFP';
|
|
78
80
|
export interface CycleLifeResult {
|
|
79
81
|
estimatedCycles: number;
|
|
80
82
|
baseCycles: number;
|
|
81
83
|
dodFactor: number;
|
|
82
84
|
temperatureFactor: number;
|
|
83
85
|
chemistry: BatteryChemistry;
|
|
86
|
+
/** Which BU-808 column set the DOD factor — 'NMC' is an approximation for chemistries the table has no column for. */
|
|
87
|
+
dodCurve: DodCurve;
|
|
88
|
+
/** True when depthOfDischarge is below the table's shallowest row (10%) and that row's factor was used. */
|
|
89
|
+
dodBelowTable: boolean;
|
|
84
90
|
}
|
|
85
91
|
/**
|
|
86
92
|
* Internal Resistance Types
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/battery/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,MAAM,gBAAgB,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;AAE3F;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,eAAe,GAAG,eAAe,CAAC;AAE1D,MAAM,MAAM,UAAU,GAClB;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GAC/D;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAEjE,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,WAAW,CAAC;AAEjF,MAAM,WAAW,mBAAmB;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,MAAM,EAAE,SAAS,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB,EAAE,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,gBAAgB,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/battery/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "formulab",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.51.0",
|
|
4
4
|
"description": "Manufacturing & Engineering calculation formulas library - 203 industrial calculations across 15 domains for OEE, Cpk, SPC, FMEA, Nelson Rules, metal weight, CNC machining, GD&T, battery, environmental, pipe flow, logistics, IE time study, and more",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|