formulab 0.13.4 → 0.13.5
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 +16 -0
- package/dist/automotive/batteryRuntime.d.ts +1 -0
- package/dist/automotive/batteryRuntime.d.ts.map +1 -1
- package/dist/automotive/batteryRuntime.js +6 -9
- package/dist/automotive/batteryRuntime.js.map +1 -1
- package/dist/automotive/evCharging.d.ts +2 -0
- package/dist/automotive/evCharging.d.ts.map +1 -1
- package/dist/automotive/evCharging.js +4 -17
- package/dist/automotive/evCharging.js.map +1 -1
- package/dist/automotive/fuelEconomy.d.ts +1 -0
- package/dist/automotive/fuelEconomy.d.ts.map +1 -1
- package/dist/automotive/fuelEconomy.js +3 -8
- package/dist/automotive/fuelEconomy.js.map +1 -1
- package/dist/automotive/gearRatio.d.ts +1 -0
- package/dist/automotive/gearRatio.d.ts.map +1 -1
- package/dist/automotive/gearRatio.js +3 -9
- package/dist/automotive/gearRatio.js.map +1 -1
- package/dist/construction/pert.d.ts +3 -2
- package/dist/construction/pert.d.ts.map +1 -1
- package/dist/construction/pert.js +11 -7
- package/dist/construction/pert.js.map +1 -1
- package/dist/electronics/via.d.ts +4 -2
- package/dist/electronics/via.d.ts.map +1 -1
- package/dist/electronics/via.js +14 -3
- package/dist/electronics/via.js.map +1 -1
- package/dist/energy/degreeDay.d.ts +1 -0
- package/dist/energy/degreeDay.d.ts.map +1 -1
- package/dist/energy/degreeDay.js +2 -1
- package/dist/energy/degreeDay.js.map +1 -1
- package/dist/energy/insulationRoi.d.ts +2 -0
- package/dist/energy/insulationRoi.d.ts.map +1 -1
- package/dist/energy/insulationRoi.js +13 -10
- package/dist/energy/insulationRoi.js.map +1 -1
- package/dist/food/calorie.d.ts +1 -0
- package/dist/food/calorie.d.ts.map +1 -1
- package/dist/food/calorie.js +9 -2
- package/dist/food/calorie.js.map +1 -1
- package/dist/logistics/shipping.d.ts +4 -2
- package/dist/logistics/shipping.d.ts.map +1 -1
- package/dist/logistics/shipping.js +13 -6
- package/dist/logistics/shipping.js.map +1 -1
- package/dist/logistics/tsp.d.ts +2 -1
- package/dist/logistics/tsp.d.ts.map +1 -1
- package/dist/logistics/tsp.js +2 -1
- package/dist/logistics/tsp.js.map +1 -1
- package/dist/metal/bearing.d.ts +2 -0
- package/dist/metal/bearing.d.ts.map +1 -1
- package/dist/metal/bearing.js +10 -2
- package/dist/metal/bearing.js.map +1 -1
- package/dist/metal/cutting.d.ts +2 -0
- package/dist/metal/cutting.d.ts.map +1 -1
- package/dist/metal/cutting.js +3 -1
- package/dist/metal/cutting.js.map +1 -1
- package/dist/metal/cuttingStock.d.ts +4 -1
- package/dist/metal/cuttingStock.d.ts.map +1 -1
- package/dist/metal/cuttingStock.js +15 -6
- package/dist/metal/cuttingStock.js.map +1 -1
- package/dist/metal/material.d.ts +6 -1
- package/dist/metal/material.d.ts.map +1 -1
- package/dist/metal/material.js +11 -4
- package/dist/metal/material.js.map +1 -1
- package/dist/metal/pressTonnage.d.ts +1 -0
- package/dist/metal/pressTonnage.d.ts.map +1 -1
- package/dist/metal/pressTonnage.js +3 -13
- package/dist/metal/pressTonnage.js.map +1 -1
- package/dist/metal/roughness.d.ts +2 -0
- package/dist/metal/roughness.d.ts.map +1 -1
- package/dist/metal/roughness.js +4 -2
- package/dist/metal/roughness.js.map +1 -1
- package/dist/metal/screw.d.ts +3 -1
- package/dist/metal/screw.d.ts.map +1 -1
- package/dist/metal/screw.js +5 -2
- package/dist/metal/screw.js.map +1 -1
- package/dist/metal/thread.d.ts +3 -1
- package/dist/metal/thread.d.ts.map +1 -1
- package/dist/metal/thread.js +8 -4
- package/dist/metal/thread.js.map +1 -1
- package/dist/metal/tolerance.d.ts +4 -1
- package/dist/metal/tolerance.d.ts.map +1 -1
- package/dist/metal/tolerance.js +12 -6
- package/dist/metal/tolerance.js.map +1 -1
- package/dist/metal/vibration.d.ts +3 -0
- package/dist/metal/vibration.d.ts.map +1 -1
- package/dist/metal/vibration.js +28 -10
- package/dist/metal/vibration.js.map +1 -1
- package/dist/metal/weldHeat.d.ts +2 -0
- package/dist/metal/weldHeat.d.ts.map +1 -1
- package/dist/metal/weldHeat.js +13 -15
- package/dist/metal/weldHeat.js.map +1 -1
- package/dist/quality/dpmo.d.ts +1 -0
- package/dist/quality/dpmo.d.ts.map +1 -1
- package/dist/quality/dpmo.js +7 -3
- package/dist/quality/dpmo.js.map +1 -1
- package/dist/quality/lineBalancing.d.ts +4 -2
- package/dist/quality/lineBalancing.d.ts.map +1 -1
- package/dist/quality/lineBalancing.js +18 -9
- package/dist/quality/lineBalancing.js.map +1 -1
- package/dist/quality/mtbf.d.ts +2 -0
- package/dist/quality/mtbf.d.ts.map +1 -1
- package/dist/quality/mtbf.js +8 -9
- package/dist/quality/mtbf.js.map +1 -1
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,22 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [0.13.5] - 2026-06-18
|
|
9
|
+
|
|
10
|
+
### Changed (breaking within 0.x)
|
|
11
|
+
|
|
12
|
+
- **Invalid-input `return null` / zero-fill results migrated to the standard error policy across 8 domains** — a systematic sweep (reported by online-tools: ISSUE-20260612-formulab-null-returns-full-audit) found ~25 public functions that returned `null` or an all-zero/sentinel result object on invalid input instead of throwing, contradicting `ERRORS.md`. `ERRORS.md` itself was found to be aspirational for several of these (it claimed `throw` where the code 0-filled) and has been corrected to match the code. All of the following now **throw `RangeError`** with a per-constraint message:
|
|
13
|
+
- **automotive**: `fuelEconomy()` (value ≤ 0), `evCharging()` (socEndPercent ≤ socStartPercent, chargerPowerKw ≤ 0), `batteryRuntime()` (voltageV ≤ 0, loadW ≤ 0), `gearRatio()` (drivingTeeth ≤ 0).
|
|
14
|
+
- **energy**: `insulationRoi()` (surfaceArea/tempDifference/insulationK/insulationThickness ≤ 0), `degreeDay()` (empty `dailyTemps`).
|
|
15
|
+
- **food**: `calorie()` (weightKg/heightCm/age ≤ 0).
|
|
16
|
+
- **metal**: `cutting()` (toolDiameter ≤ 0), `bearing()` (dynamicLoadRating/equivalentLoad/rpm ≤ 0), `roughness()` (value ≤ 0), `weldHeat()` (voltage/current/travelSpeed/thickness ≤ 0), `vibration()` (non-positive system/geometry field; innerDiameter ≥ outerDiameter), `pressTonnage()` (combined operation without `operations`). **Return type changes** (`... | null` → non-nullable): `cuttingStock()` (empty pieces, zero total quantity, stockLength ≤ 0, piece > stockLength), `material()` (unknown category/grade), `screw()` (unknown designation), `thread()` (unknown size), `tolerance()` (nominal size out of range, unknown IT grade / deviation letter).
|
|
17
|
+
- **quality**: `mtbf()` (totalOperatingTime ≤ 0, numberOfFailures ≤ 0 — with zero failures MTBF is undefined; the previous `0` wrongly read as "fails constantly"), `dpmo()` (units ≤ 0, opportunities ≤ 0), `lineBalancing()` (empty tasks, cycleTime ≤ 0, a task time > cycleTime, circular dependency; `... | null` → non-nullable).
|
|
18
|
+
- **electronics**: `viaCurrent()` (holeDiameter/platingThickness/viaLength/tempRise ≤ 0; `... | null` → non-nullable).
|
|
19
|
+
- **logistics**: `shipping()` (weight/volume ≤ 0, truck distance ≤ 0, unknown mode; `... | null` → non-nullable), `tsp()` (empty nodes; `... | null` → non-nullable).
|
|
20
|
+
- **construction**: `pert()` (empty tasks, circular dependency; `... | null` → non-nullable).
|
|
21
|
+
- **Lookup-miss policy unified to throw** — unknown designation/grade/size/category (`material`/`screw`/`thread`/`tolerance`) now throw, consistent with the rest of metal (`hardness`/`pipeSpec`/`flangeSpec`). Consumers branch on the boundary, not on `null`.
|
|
22
|
+
- **Intentionally kept** (not invalid input): `npv().irr` non-convergence null; `nelsonRules()` internal rule-helper nulls (never surfaced); `pallet3d()` internal placement-helper null; `cpk()`/`ppk()`/`cmk()` degenerate-spread zero result; `energyDensity()` missing-mass null.
|
|
23
|
+
|
|
8
24
|
## [0.13.4] - 2026-06-18
|
|
9
25
|
|
|
10
26
|
### Changed (breaking within 0.x)
|
|
@@ -9,6 +9,7 @@ import type { BatteryInput, BatteryResult } from './types.js';
|
|
|
9
9
|
*
|
|
10
10
|
* @param input - Battery parameters
|
|
11
11
|
* @returns Battery result with energy and runtime
|
|
12
|
+
* @throws RangeError if voltageV is not greater than 0, or if loadW is not greater than 0
|
|
12
13
|
*/
|
|
13
14
|
export declare function batteryRuntime(input: BatteryInput): BatteryResult;
|
|
14
15
|
//# sourceMappingURL=batteryRuntime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batteryRuntime.d.ts","sourceRoot":"","sources":["../../src/automotive/batteryRuntime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D
|
|
1
|
+
{"version":3,"file":"batteryRuntime.d.ts","sourceRoot":"","sources":["../../src/automotive/batteryRuntime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAuBjE"}
|
|
@@ -9,18 +9,15 @@ import { roundTo } from '../utils.js';
|
|
|
9
9
|
*
|
|
10
10
|
* @param input - Battery parameters
|
|
11
11
|
* @returns Battery result with energy and runtime
|
|
12
|
+
* @throws RangeError if voltageV is not greater than 0, or if loadW is not greater than 0
|
|
12
13
|
*/
|
|
13
14
|
export function batteryRuntime(input) {
|
|
14
15
|
const { capacityAh, voltageV, loadW, efficiency } = input;
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
runtimeHours: 0,
|
|
21
|
-
runtimeMinutes: 0,
|
|
22
|
-
currentDraw: 0,
|
|
23
|
-
};
|
|
16
|
+
if (voltageV <= 0) {
|
|
17
|
+
throw new RangeError('voltageV must be greater than 0');
|
|
18
|
+
}
|
|
19
|
+
if (loadW <= 0) {
|
|
20
|
+
throw new RangeError('loadW must be greater than 0');
|
|
24
21
|
}
|
|
25
22
|
const energyWh = capacityAh * voltageV;
|
|
26
23
|
const energyKwh = energyWh / 1000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"batteryRuntime.js","sourceRoot":"","sources":["../../src/automotive/batteryRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC
|
|
1
|
+
{"version":3,"file":"batteryRuntime.js","sourceRoot":"","sources":["../../src/automotive/batteryRuntime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAE1D,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACvC,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;IAClC,MAAM,YAAY,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,KAAK,CAAC;IACrD,MAAM,cAAc,GAAG,YAAY,GAAG,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,CAAC;IAErC,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;KACrC,CAAC;AACJ,CAAC"}
|
|
@@ -9,6 +9,8 @@ import type { ChargingInput, ChargingResult } from './types.js';
|
|
|
9
9
|
*
|
|
10
10
|
* @param input - Charging parameters
|
|
11
11
|
* @returns Charging result with energy and time
|
|
12
|
+
* @throws RangeError if socEndPercent is not greater than socStartPercent,
|
|
13
|
+
* or if chargerPowerKw is not greater than 0
|
|
12
14
|
*/
|
|
13
15
|
export declare function evCharging(input: ChargingInput): ChargingResult;
|
|
14
16
|
//# sourceMappingURL=evCharging.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evCharging.d.ts","sourceRoot":"","sources":["../../src/automotive/evCharging.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE
|
|
1
|
+
{"version":3,"file":"evCharging.d.ts","sourceRoot":"","sources":["../../src/automotive/evCharging.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAsB/D"}
|
|
@@ -9,29 +9,16 @@ import { roundTo } from '../utils.js';
|
|
|
9
9
|
*
|
|
10
10
|
* @param input - Charging parameters
|
|
11
11
|
* @returns Charging result with energy and time
|
|
12
|
+
* @throws RangeError if socEndPercent is not greater than socStartPercent,
|
|
13
|
+
* or if chargerPowerKw is not greater than 0
|
|
12
14
|
*/
|
|
13
15
|
export function evCharging(input) {
|
|
14
16
|
const { batteryCapacityKwh, chargerPowerKw, socStartPercent, socEndPercent, efficiency } = input;
|
|
15
|
-
// Handle edge cases - no charging needed or invalid
|
|
16
17
|
if (socEndPercent <= socStartPercent) {
|
|
17
|
-
|
|
18
|
-
energyNeeded: 0,
|
|
19
|
-
energyFromGrid: 0,
|
|
20
|
-
chargingTimeHours: 0,
|
|
21
|
-
chargingTimeMinutes: 0,
|
|
22
|
-
};
|
|
18
|
+
throw new RangeError('socEndPercent must be greater than socStartPercent');
|
|
23
19
|
}
|
|
24
|
-
// Handle zero charger power
|
|
25
20
|
if (chargerPowerKw <= 0) {
|
|
26
|
-
|
|
27
|
-
const energyNeeded = batteryCapacityKwh * socDiff;
|
|
28
|
-
const energyFromGrid = energyNeeded / efficiency;
|
|
29
|
-
return {
|
|
30
|
-
energyNeeded: roundTo(energyNeeded, 2),
|
|
31
|
-
energyFromGrid: roundTo(energyFromGrid, 2),
|
|
32
|
-
chargingTimeHours: 0,
|
|
33
|
-
chargingTimeMinutes: 0,
|
|
34
|
-
};
|
|
21
|
+
throw new RangeError('chargerPowerKw must be greater than 0');
|
|
35
22
|
}
|
|
36
23
|
const socDiff = (socEndPercent - socStartPercent) / 100;
|
|
37
24
|
const energyNeeded = batteryCapacityKwh * socDiff;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evCharging.js","sourceRoot":"","sources":["../../src/automotive/evCharging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC
|
|
1
|
+
{"version":3,"file":"evCharging.js","sourceRoot":"","sources":["../../src/automotive/evCharging.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,UAAU,CAAC,KAAoB;IAC7C,MAAM,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAEjG,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,IAAI,UAAU,CAAC,oDAAoD,CAAC,CAAC;IAC7E,CAAC;IACD,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,UAAU,CAAC,uCAAuC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,aAAa,GAAG,eAAe,CAAC,GAAG,GAAG,CAAC;IACxD,MAAM,YAAY,GAAG,kBAAkB,GAAG,OAAO,CAAC;IAClD,MAAM,cAAc,GAAG,YAAY,GAAG,UAAU,CAAC;IACjD,MAAM,iBAAiB,GAAG,cAAc,GAAG,cAAc,CAAC;IAC1D,MAAM,mBAAmB,GAAG,iBAAiB,GAAG,EAAE,CAAC;IAEnD,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChD,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;KACrD,CAAC;AACJ,CAAC"}
|
|
@@ -10,6 +10,7 @@ import type { FuelInput, FuelResult } from './types.js';
|
|
|
10
10
|
*
|
|
11
11
|
* @param input - Fuel economy input with value and source unit
|
|
12
12
|
* @returns All fuel economy units
|
|
13
|
+
* @throws RangeError if value is not greater than 0
|
|
13
14
|
*/
|
|
14
15
|
export declare function fuelEconomy(input: FuelInput): FuelResult;
|
|
15
16
|
//# sourceMappingURL=fuelEconomy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuelEconomy.d.ts","sourceRoot":"","sources":["../../src/automotive/fuelEconomy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAOxD
|
|
1
|
+
{"version":3,"file":"fuelEconomy.d.ts","sourceRoot":"","sources":["../../src/automotive/fuelEconomy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAOxD;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAyCxD"}
|
|
@@ -14,17 +14,12 @@ const LITERS_PER_UK_GALLON = 4.54609;
|
|
|
14
14
|
*
|
|
15
15
|
* @param input - Fuel economy input with value and source unit
|
|
16
16
|
* @returns All fuel economy units
|
|
17
|
+
* @throws RangeError if value is not greater than 0
|
|
17
18
|
*/
|
|
18
19
|
export function fuelEconomy(input) {
|
|
19
20
|
const { fromUnit, value } = input;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return {
|
|
23
|
-
kmPerL: 0,
|
|
24
|
-
lPer100km: 0,
|
|
25
|
-
mpgUS: 0,
|
|
26
|
-
mpgUK: 0,
|
|
27
|
-
};
|
|
21
|
+
if (value <= 0) {
|
|
22
|
+
throw new RangeError('value must be greater than 0');
|
|
28
23
|
}
|
|
29
24
|
let kmPerL;
|
|
30
25
|
// Convert input to km/L as intermediate value
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fuelEconomy.js","sourceRoot":"","sources":["../../src/automotive/fuelEconomy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,uBAAuB;AACvB,MAAM,WAAW,GAAG,OAAO,CAAC;AAC5B,MAAM,oBAAoB,GAAG,OAAO,CAAC;AACrC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAErC
|
|
1
|
+
{"version":3,"file":"fuelEconomy.js","sourceRoot":"","sources":["../../src/automotive/fuelEconomy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,uBAAuB;AACvB,MAAM,WAAW,GAAG,OAAO,CAAC;AAC5B,MAAM,oBAAoB,GAAG,OAAO,CAAC;AACrC,MAAM,oBAAoB,GAAG,OAAO,CAAC;AAErC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgB;IAC1C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAElC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,MAAc,CAAC;IAEnB,8CAA8C;IAC9C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,MAAM,GAAG,KAAK,CAAC;YACf,MAAM;QACR,KAAK,WAAW;YACd,wDAAwD;YACxD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC;YACrB,MAAM;QACR,KAAK,OAAO;YACV,qDAAqD;YACrD,MAAM,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,oBAAoB,CAAC;YACtD,MAAM;QACR,KAAK,OAAO;YACV,qDAAqD;YACrD,MAAM,GAAG,CAAC,KAAK,GAAG,WAAW,CAAC,GAAG,oBAAoB,CAAC;YACtD,MAAM;QACR;YACE,MAAM,GAAG,KAAK,CAAC;IACnB,CAAC;IAED,kCAAkC;IAClC,MAAM,SAAS,GAAG,GAAG,GAAG,MAAM,CAAC;IAC/B,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,oBAAoB,CAAC,GAAG,WAAW,CAAC;IAC5D,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,oBAAoB,CAAC,GAAG,WAAW,CAAC;IAE5D,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1B,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -10,6 +10,7 @@ import type { GearRatioInput, GearRatioResult } from './types.js';
|
|
|
10
10
|
*
|
|
11
11
|
* @param input - Gear parameters
|
|
12
12
|
* @returns Gear result with ratio, speed, and torque
|
|
13
|
+
* @throws RangeError if drivingTeeth is not greater than 0
|
|
13
14
|
*/
|
|
14
15
|
export declare function gearRatio(input: GearRatioInput): GearRatioResult;
|
|
15
16
|
//# sourceMappingURL=gearRatio.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gearRatio.d.ts","sourceRoot":"","sources":["../../src/automotive/gearRatio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE
|
|
1
|
+
{"version":3,"file":"gearRatio.d.ts","sourceRoot":"","sources":["../../src/automotive/gearRatio.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAoBhE"}
|
|
@@ -10,18 +10,12 @@ import { roundTo } from '../utils.js';
|
|
|
10
10
|
*
|
|
11
11
|
* @param input - Gear parameters
|
|
12
12
|
* @returns Gear result with ratio, speed, and torque
|
|
13
|
+
* @throws RangeError if drivingTeeth is not greater than 0
|
|
13
14
|
*/
|
|
14
15
|
export function gearRatio(input) {
|
|
15
16
|
const { drivingTeeth, drivenTeeth, inputSpeed, inputTorque, efficiency } = input;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return {
|
|
19
|
-
gearRatio: 0,
|
|
20
|
-
outputSpeed: 0,
|
|
21
|
-
outputTorque: 0,
|
|
22
|
-
speedReduction: false,
|
|
23
|
-
mechanicalAdvantage: 0,
|
|
24
|
-
};
|
|
17
|
+
if (drivingTeeth <= 0) {
|
|
18
|
+
throw new RangeError('drivingTeeth must be greater than 0');
|
|
25
19
|
}
|
|
26
20
|
const ratio = drivenTeeth / drivingTeeth;
|
|
27
21
|
const outputSpeed = inputSpeed / ratio;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gearRatio.js","sourceRoot":"","sources":["../../src/automotive/gearRatio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC
|
|
1
|
+
{"version":3,"file":"gearRatio.js","sourceRoot":"","sources":["../../src/automotive/gearRatio.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAEjF,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,UAAU,CAAC,qCAAqC,CAAC,CAAC;IAC9D,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,GAAG,YAAY,CAAC;IACzC,MAAM,WAAW,GAAG,UAAU,GAAG,KAAK,CAAC;IACvC,MAAM,YAAY,GAAG,WAAW,GAAG,KAAK,GAAG,UAAU,CAAC;IACtD,MAAM,cAAc,GAAG,KAAK,GAAG,CAAC,CAAC;IACjC,MAAM,mBAAmB,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,GAAG,WAAW,CAAC;IAE/E,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5B,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACpC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,cAAc;QACd,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;KACrD,CAAC;AACJ,CAAC"}
|
|
@@ -9,7 +9,8 @@ import type { PertInput, PertResult } from './types.js';
|
|
|
9
9
|
* - Z-score = (deadline - project duration) / √(project variance)
|
|
10
10
|
*
|
|
11
11
|
* @param input - PERT input with tasks and optional deadline
|
|
12
|
-
* @returns PERT analysis result
|
|
12
|
+
* @returns PERT analysis result
|
|
13
|
+
* @throws RangeError if tasks is empty or contains a circular dependency
|
|
13
14
|
*/
|
|
14
|
-
export declare function pert(input: PertInput): PertResult
|
|
15
|
+
export declare function pert(input: PertInput): PertResult;
|
|
15
16
|
//# sourceMappingURL=pert.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pert.d.ts","sourceRoot":"","sources":["../../src/construction/pert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAA4B,MAAM,YAAY,CAAC;AAwElF
|
|
1
|
+
{"version":3,"file":"pert.d.ts","sourceRoot":"","sources":["../../src/construction/pert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAA4B,MAAM,YAAY,CAAC;AAwElF;;;;;;;;;;;;GAYG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CA6HjD"}
|
|
@@ -77,19 +77,23 @@ function topologicalSort(tasks) {
|
|
|
77
77
|
* - Z-score = (deadline - project duration) / √(project variance)
|
|
78
78
|
*
|
|
79
79
|
* @param input - PERT input with tasks and optional deadline
|
|
80
|
-
* @returns PERT analysis result
|
|
80
|
+
* @returns PERT analysis result
|
|
81
|
+
* @throws RangeError if tasks is empty or contains a circular dependency
|
|
81
82
|
*/
|
|
82
83
|
export function pert(input) {
|
|
83
84
|
const { tasks, deadline } = input;
|
|
84
|
-
if (tasks.length === 0)
|
|
85
|
-
|
|
85
|
+
if (tasks.length === 0) {
|
|
86
|
+
throw new RangeError('tasks must not be empty');
|
|
87
|
+
}
|
|
86
88
|
// Cycle detection
|
|
87
|
-
if (detectCycle(tasks))
|
|
88
|
-
|
|
89
|
+
if (detectCycle(tasks)) {
|
|
90
|
+
throw new RangeError('tasks contain a circular dependency');
|
|
91
|
+
}
|
|
89
92
|
// Topological sort
|
|
90
93
|
const sorted = topologicalSort(tasks);
|
|
91
|
-
if (!sorted)
|
|
92
|
-
|
|
94
|
+
if (!sorted) {
|
|
95
|
+
throw new RangeError('tasks contain a circular dependency');
|
|
96
|
+
}
|
|
93
97
|
// Calculate expected duration and variance
|
|
94
98
|
const te = new Map();
|
|
95
99
|
const variance = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pert.js","sourceRoot":"","sources":["../../src/construction/pert.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"pert.js","sourceRoot":"","sources":["../../src/construction/pert.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,9 @@ import type { ViaInput, ViaResult } from './types.js';
|
|
|
6
6
|
* Where r_outer = holeDiameter/2 + platingThickness and r_inner = holeDiameter/2
|
|
7
7
|
*
|
|
8
8
|
* @param input - Via hole diameter, plating thickness, via length, and temp rise
|
|
9
|
-
* @returns Via current capacity and related properties
|
|
9
|
+
* @returns Via current capacity and related properties
|
|
10
|
+
* @throws RangeError if holeDiameter, platingThickness, viaLength, or tempRise
|
|
11
|
+
* is not positive
|
|
10
12
|
*/
|
|
11
|
-
export declare function viaCurrent(input: ViaInput): ViaResult
|
|
13
|
+
export declare function viaCurrent(input: ViaInput): ViaResult;
|
|
12
14
|
//# sourceMappingURL=via.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"via.d.ts","sourceRoot":"","sources":["../../src/electronics/via.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAiBtD
|
|
1
|
+
{"version":3,"file":"via.d.ts","sourceRoot":"","sources":["../../src/electronics/via.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAiBtD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAwDrD"}
|
package/dist/electronics/via.js
CHANGED
|
@@ -17,13 +17,24 @@ const IPC_C = 0.725;
|
|
|
17
17
|
* Where r_outer = holeDiameter/2 + platingThickness and r_inner = holeDiameter/2
|
|
18
18
|
*
|
|
19
19
|
* @param input - Via hole diameter, plating thickness, via length, and temp rise
|
|
20
|
-
* @returns Via current capacity and related properties
|
|
20
|
+
* @returns Via current capacity and related properties
|
|
21
|
+
* @throws RangeError if holeDiameter, platingThickness, viaLength, or tempRise
|
|
22
|
+
* is not positive
|
|
21
23
|
*/
|
|
22
24
|
export function viaCurrent(input) {
|
|
23
25
|
const { holeDiameter, platingThickness, viaLength, tempRise } = input;
|
|
24
26
|
// Validate inputs
|
|
25
|
-
if (holeDiameter <= 0
|
|
26
|
-
|
|
27
|
+
if (holeDiameter <= 0) {
|
|
28
|
+
throw new RangeError('holeDiameter must be greater than 0');
|
|
29
|
+
}
|
|
30
|
+
if (platingThickness <= 0) {
|
|
31
|
+
throw new RangeError('platingThickness must be greater than 0');
|
|
32
|
+
}
|
|
33
|
+
if (viaLength <= 0) {
|
|
34
|
+
throw new RangeError('viaLength must be greater than 0');
|
|
35
|
+
}
|
|
36
|
+
if (tempRise <= 0) {
|
|
37
|
+
throw new RangeError('tempRise must be greater than 0');
|
|
27
38
|
}
|
|
28
39
|
// Convert plating thickness from μm to mm
|
|
29
40
|
const platingMm = platingThickness / 1000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"via.js","sourceRoot":"","sources":["../../src/electronics/via.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AAEH,wCAAwC;AACxC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC,0CAA0C;AAC1C,qBAAqB;AACrB,2EAA2E;AAC3E,MAAM,KAAK,GAAG,KAAK,CAAC;AACpB,MAAM,KAAK,GAAG,IAAI,CAAC;AACnB,MAAM,KAAK,GAAG,KAAK,CAAC;AAEpB
|
|
1
|
+
{"version":3,"file":"via.js","sourceRoot":"","sources":["../../src/electronics/via.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AAEH,wCAAwC;AACxC,MAAM,kBAAkB,GAAG,OAAO,CAAC;AAEnC,0CAA0C;AAC1C,qBAAqB;AACrB,2EAA2E;AAC3E,MAAM,KAAK,GAAG,KAAK,CAAC;AACpB,MAAM,KAAK,GAAG,IAAI,CAAC;AACnB,MAAM,KAAK,GAAG,KAAK,CAAC;AAEpB;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,KAAe;IACxC,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAEtE,kBAAkB;IAClB,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,UAAU,CAAC,qCAAqC,CAAC,CAAC;IAC9D,CAAC;IACD,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,UAAU,CAAC,yCAAyC,CAAC,CAAC;IAClE,CAAC;IACD,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QACnB,MAAM,IAAI,UAAU,CAAC,kCAAkC,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IAED,0CAA0C;IAC1C,MAAM,SAAS,GAAG,gBAAgB,GAAG,IAAI,CAAC;IAE1C,kCAAkC;IAClC,MAAM,WAAW,GAAG,YAAY,GAAG,CAAC,CAAC;IACrC,MAAM,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;IAE5C,gDAAgD;IAChD,MAAM,eAAe,GAAG,IAAI,CAAC,EAAE,GAAG,CAAC,WAAW,GAAG,WAAW,GAAG,WAAW,GAAG,WAAW,CAAC,CAAC;IAE1F,0DAA0D;IAC1D,MAAM,iBAAiB,GAAG,eAAe,GAAG,KAAK,GAAG,KAAK,CAAC;IAE1D,sEAAsE;IACtE,qBAAqB;IACrB,MAAM,eAAe,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;IAE/F,qBAAqB;IACrB,0DAA0D;IAC1D,MAAM,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;IACpC,MAAM,UAAU,GAAG,CAAC,kBAAkB,GAAG,UAAU,CAAC,GAAG,eAAe,CAAC;IACvE,MAAM,cAAc,GAAG,UAAU,GAAG,IAAI,CAAC,CAAC,gBAAgB;IAE1D,gDAAgD;IAChD,2EAA2E;IAC3E,4CAA4C;IAC5C,MAAM,2BAA2B,GAAG,GAAG,CAAC;IACxC,MAAM,iBAAiB,GAAG,UAAU,GAAG,CAAC,2BAA2B,GAAG,eAAe,GAAG,OAAO,CAAC,CAAC;IAEjG,4CAA4C;IAC5C,MAAM,gBAAgB,GAAG,eAAe,GAAG,eAAe,GAAG,UAAU,GAAG,IAAI,CAAC;IAE/E,OAAO;QACL,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;QAC5C,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;QAC5C,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChD,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;KAC/C,CAAC;AACJ,CAAC"}
|
|
@@ -8,6 +8,7 @@ import type { DegreeDayInput, DegreeDayResult } from './types.js';
|
|
|
8
8
|
*
|
|
9
9
|
* @reference ASHRAE Fundamentals Handbook — Degree Day Method
|
|
10
10
|
* @reference ISO 50001:2018 — Energy management systems
|
|
11
|
+
* @throws RangeError if dailyTemps is empty
|
|
11
12
|
*/
|
|
12
13
|
export declare function degreeDay(input: DegreeDayInput): DegreeDayResult;
|
|
13
14
|
//# sourceMappingURL=degreeDay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"degreeDay.d.ts","sourceRoot":"","sources":["../../src/energy/degreeDay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE
|
|
1
|
+
{"version":3,"file":"degreeDay.d.ts","sourceRoot":"","sources":["../../src/energy/degreeDay.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElE;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAoChE"}
|
package/dist/energy/degreeDay.js
CHANGED
|
@@ -8,12 +8,13 @@ import { roundTo } from '../utils.js';
|
|
|
8
8
|
*
|
|
9
9
|
* @reference ASHRAE Fundamentals Handbook — Degree Day Method
|
|
10
10
|
* @reference ISO 50001:2018 — Energy management systems
|
|
11
|
+
* @throws RangeError if dailyTemps is empty
|
|
11
12
|
*/
|
|
12
13
|
export function degreeDay(input) {
|
|
13
14
|
const { dailyTemps, baseHeating = 18, baseCooling = 24 } = input;
|
|
14
15
|
const totalDays = dailyTemps.length;
|
|
15
16
|
if (totalDays === 0) {
|
|
16
|
-
|
|
17
|
+
throw new RangeError('dailyTemps must not be empty');
|
|
17
18
|
}
|
|
18
19
|
let hdd = 0;
|
|
19
20
|
let cdd = 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"degreeDay.js","sourceRoot":"","sources":["../../src/energy/degreeDay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC
|
|
1
|
+
{"version":3,"file":"degreeDay.js","sourceRoot":"","sources":["../../src/energy/degreeDay.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,EAAE,UAAU,EAAE,WAAW,GAAG,EAAE,EAAE,WAAW,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC;IACjE,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;IAEpC,IAAI,SAAS,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,GAAG,IAAI,IAAI,CAAC;QACZ,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,WAAW,CAAC,CAAC;QACnD,GAAG,IAAI,UAAU,CAAC;QAClB,GAAG,IAAI,UAAU,CAAC;QAClB,IAAI,UAAU,GAAG,CAAC;YAAE,WAAW,EAAE,CAAC;QAClC,IAAI,UAAU,GAAG,CAAC;YAAE,WAAW,EAAE,CAAC;IACpC,CAAC;IAED,MAAM,WAAW,GAAG,SAAS,GAAG,WAAW,GAAG,WAAW,CAAC;IAC1D,MAAM,OAAO,GAAG,GAAG,GAAG,SAAS,CAAC;IAEhC,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpB,SAAS;QACT,WAAW;QACX,WAAW;QACX,WAAW;QACX,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;KAC7B,CAAC;AACJ,CAAC"}
|
|
@@ -9,6 +9,8 @@ import type { InsulationRoiInput, InsulationRoiResult } from './types.js';
|
|
|
9
9
|
*
|
|
10
10
|
* @param input - Insulation parameters
|
|
11
11
|
* @returns Insulation ROI result with heat savings and payback
|
|
12
|
+
* @throws RangeError if surfaceArea, tempDifference, insulationK, or
|
|
13
|
+
* insulationThickness is not greater than 0
|
|
12
14
|
*/
|
|
13
15
|
export declare function insulationRoi(input: InsulationRoiInput): InsulationRoiResult;
|
|
14
16
|
//# sourceMappingURL=insulationRoi.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insulationRoi.d.ts","sourceRoot":"","sources":["../../src/energy/insulationRoi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE1E
|
|
1
|
+
{"version":3,"file":"insulationRoi.d.ts","sourceRoot":"","sources":["../../src/energy/insulationRoi.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAE1E;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CAwD5E"}
|
|
@@ -9,19 +9,22 @@ import { roundTo } from '../utils.js';
|
|
|
9
9
|
*
|
|
10
10
|
* @param input - Insulation parameters
|
|
11
11
|
* @returns Insulation ROI result with heat savings and payback
|
|
12
|
+
* @throws RangeError if surfaceArea, tempDifference, insulationK, or
|
|
13
|
+
* insulationThickness is not greater than 0
|
|
12
14
|
*/
|
|
13
15
|
export function insulationRoi(input) {
|
|
14
16
|
const { surfaceArea, tempDifference, insulationK, insulationThickness, surfaceCoefficient = 10, operatingHours, energyCost, boilerEfficiency = 0.8, installationCost, } = input;
|
|
15
|
-
if (surfaceArea <= 0
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
17
|
+
if (surfaceArea <= 0) {
|
|
18
|
+
throw new RangeError('surfaceArea must be greater than 0');
|
|
19
|
+
}
|
|
20
|
+
if (tempDifference <= 0) {
|
|
21
|
+
throw new RangeError('tempDifference must be greater than 0');
|
|
22
|
+
}
|
|
23
|
+
if (insulationK <= 0) {
|
|
24
|
+
throw new RangeError('insulationK must be greater than 0');
|
|
25
|
+
}
|
|
26
|
+
if (insulationThickness <= 0) {
|
|
27
|
+
throw new RangeError('insulationThickness must be greater than 0');
|
|
25
28
|
}
|
|
26
29
|
// Bare surface heat loss: Q = h × A × ΔT (W)
|
|
27
30
|
const bareHeatLoss = surfaceCoefficient * surfaceArea * tempDifference;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"insulationRoi.js","sourceRoot":"","sources":["../../src/energy/insulationRoi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC
|
|
1
|
+
{"version":3,"file":"insulationRoi.js","sourceRoot":"","sources":["../../src/energy/insulationRoi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EACJ,WAAW,EACX,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,kBAAkB,GAAG,EAAE,EACvB,cAAc,EACd,UAAU,EACV,gBAAgB,GAAG,GAAG,EACtB,gBAAgB,GACjB,GAAG,KAAK,CAAC;IAEV,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,UAAU,CAAC,uCAAuC,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,mBAAmB,IAAI,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,UAAU,CAAC,4CAA4C,CAAC,CAAC;IACrE,CAAC;IAED,6CAA6C;IAC7C,MAAM,YAAY,GAAG,kBAAkB,GAAG,WAAW,GAAG,cAAc,CAAC;IAEvE,4DAA4D;IAC5D,MAAM,UAAU,GAAG,mBAAmB,GAAG,IAAI,CAAC,CAAC,SAAS;IACxD,MAAM,iBAAiB,GAAG,CAAC,CAAC,GAAG,kBAAkB,CAAC,GAAG,CAAC,UAAU,GAAG,WAAW,CAAC,CAAC;IAChF,MAAM,iBAAiB,GAAG,CAAC,WAAW,GAAG,cAAc,CAAC,GAAG,iBAAiB,CAAC;IAE7E,MAAM,SAAS,GAAG,YAAY,GAAG,iBAAiB,CAAC;IACnD,MAAM,iBAAiB,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,YAAY,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAElF,gFAAgF;IAChF,oEAAoE;IACpE,MAAM,iBAAiB,GAAG,CAAC,SAAS,GAAG,cAAc,CAAC,GAAG,IAAI,GAAG,gBAAgB,CAAC;IACjF,MAAM,eAAe,GAAG,iBAAiB,GAAG,UAAU,CAAC;IAEvD,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,GAAG,CAAC,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;QAClF,aAAa,GAAG,gBAAgB,GAAG,eAAe,CAAC;IACrD,CAAC;IAED,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChD,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChD,iBAAiB,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;QAChD,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;QAC5C,aAAa,EAAE,aAAa,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;KACzE,CAAC;AACJ,CAAC"}
|
package/dist/food/calorie.d.ts
CHANGED
|
@@ -8,6 +8,7 @@ import type { CalorieInput, CalorieResult } from './types.js';
|
|
|
8
8
|
*
|
|
9
9
|
* @param input - Calorie input parameters
|
|
10
10
|
* @returns Calorie result with BMR, TDEE, and calorie goals
|
|
11
|
+
* @throws RangeError if weightKg, heightCm, or age is not greater than 0
|
|
11
12
|
*/
|
|
12
13
|
export declare function calorie(input: CalorieInput): CalorieResult;
|
|
13
14
|
//# sourceMappingURL=calorie.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calorie.d.ts","sourceRoot":"","sources":["../../src/food/calorie.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAU7E
|
|
1
|
+
{"version":3,"file":"calorie.d.ts","sourceRoot":"","sources":["../../src/food/calorie.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAU7E;;;;;;;;;;GAUG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CA+B1D"}
|
package/dist/food/calorie.js
CHANGED
|
@@ -15,11 +15,18 @@ const ACTIVITY_MULTIPLIERS = {
|
|
|
15
15
|
*
|
|
16
16
|
* @param input - Calorie input parameters
|
|
17
17
|
* @returns Calorie result with BMR, TDEE, and calorie goals
|
|
18
|
+
* @throws RangeError if weightKg, heightCm, or age is not greater than 0
|
|
18
19
|
*/
|
|
19
20
|
export function calorie(input) {
|
|
20
21
|
const { gender, age, weightKg, heightCm, activityLevel } = input;
|
|
21
|
-
if (weightKg <= 0
|
|
22
|
-
|
|
22
|
+
if (weightKg <= 0) {
|
|
23
|
+
throw new RangeError('weightKg must be greater than 0');
|
|
24
|
+
}
|
|
25
|
+
if (heightCm <= 0) {
|
|
26
|
+
throw new RangeError('heightCm must be greater than 0');
|
|
27
|
+
}
|
|
28
|
+
if (age <= 0) {
|
|
29
|
+
throw new RangeError('age must be greater than 0');
|
|
23
30
|
}
|
|
24
31
|
// Mifflin-St Jeor equation
|
|
25
32
|
let bmr;
|
package/dist/food/calorie.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calorie.js","sourceRoot":"","sources":["../../src/food/calorie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,MAAM,oBAAoB,GAAkC;IAC1D,SAAS,EAAE,GAAG;IACd,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,GAAG;CAChB,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"calorie.js","sourceRoot":"","sources":["../../src/food/calorie.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,MAAM,oBAAoB,GAAkC;IAC1D,SAAS,EAAE,GAAG;IACd,KAAK,EAAE,KAAK;IACZ,QAAQ,EAAE,IAAI;IACd,MAAM,EAAE,KAAK;IACb,UAAU,EAAE,GAAG;CAChB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;IAEjE,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,UAAU,CAAC,4BAA4B,CAAC,CAAC;IACrD,CAAC;IAED,2BAA2B;IAC3B,IAAI,GAAW,CAAC;IAChB,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACtB,GAAG,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IACtD,CAAC;SAAM,CAAC;QACN,GAAG,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,GAAG,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;IACxD,CAAC;IAED,MAAM,UAAU,GAAG,oBAAoB,CAAC,aAAa,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,GAAG,GAAG,UAAU,CAAC;IAE9B,OAAO;QACL,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACtB,UAAU,EAAE,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;QAClC,cAAc,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,UAAU,EAAE,OAAO,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
|
@@ -10,7 +10,9 @@ import type { ShippingInput, ShippingResult } from './types.js';
|
|
|
10
10
|
* - Truck: Distance + weight based
|
|
11
11
|
*
|
|
12
12
|
* @param input - Shipment details
|
|
13
|
-
* @returns Cost estimate
|
|
13
|
+
* @returns Cost estimate
|
|
14
|
+
* @throws RangeError if weight or volume is not positive, distance is not
|
|
15
|
+
* positive for truck mode, or the shipping mode is unknown
|
|
14
16
|
*/
|
|
15
|
-
export declare function shipping(input: ShippingInput): ShippingResult
|
|
17
|
+
export declare function shipping(input: ShippingInput): ShippingResult;
|
|
16
18
|
//# sourceMappingURL=shipping.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shipping.d.ts","sourceRoot":"","sources":["../../src/logistics/shipping.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE
|
|
1
|
+
{"version":3,"file":"shipping.d.ts","sourceRoot":"","sources":["../../src/logistics/shipping.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CA6G7D"}
|
|
@@ -10,12 +10,18 @@ import { roundTo } from '../utils.js';
|
|
|
10
10
|
* - Truck: Distance + weight based
|
|
11
11
|
*
|
|
12
12
|
* @param input - Shipment details
|
|
13
|
-
* @returns Cost estimate
|
|
13
|
+
* @returns Cost estimate
|
|
14
|
+
* @throws RangeError if weight or volume is not positive, distance is not
|
|
15
|
+
* positive for truck mode, or the shipping mode is unknown
|
|
14
16
|
*/
|
|
15
17
|
export function shipping(input) {
|
|
16
18
|
const { mode, weight, volume, distance } = input;
|
|
17
|
-
if (weight <= 0
|
|
18
|
-
|
|
19
|
+
if (weight <= 0) {
|
|
20
|
+
throw new RangeError('weight must be greater than 0');
|
|
21
|
+
}
|
|
22
|
+
if (volume <= 0) {
|
|
23
|
+
throw new RangeError('volume must be greater than 0');
|
|
24
|
+
}
|
|
19
25
|
let volumetricWeight;
|
|
20
26
|
let estimatedCost;
|
|
21
27
|
let transitDays;
|
|
@@ -74,8 +80,9 @@ export function shipping(input) {
|
|
|
74
80
|
return result;
|
|
75
81
|
}
|
|
76
82
|
case 'truck': {
|
|
77
|
-
if (distance == null || distance <= 0)
|
|
78
|
-
|
|
83
|
+
if (distance == null || distance <= 0) {
|
|
84
|
+
throw new RangeError('distance must be greater than 0 for truck mode');
|
|
85
|
+
}
|
|
79
86
|
volumetricWeight = roundTo(volume * 333, 2);
|
|
80
87
|
const chargeableWt = Math.max(weight, volumetricWeight);
|
|
81
88
|
estimatedCost = roundTo(distance * 1.5 + weight * 0.02, 2);
|
|
@@ -94,7 +101,7 @@ export function shipping(input) {
|
|
|
94
101
|
return result;
|
|
95
102
|
}
|
|
96
103
|
default:
|
|
97
|
-
|
|
104
|
+
throw new RangeError('unknown shipping mode: ' + mode);
|
|
98
105
|
}
|
|
99
106
|
// For ocean modes
|
|
100
107
|
const chargeableWeight = roundTo(Math.max(weight, volumetricWeight), 2);
|