formulab 0.13.4 → 0.13.6
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 +31 -0
- package/dist/automotive/batteryRuntime.d.ts +1 -0
- package/dist/automotive/batteryRuntime.d.ts.map +1 -1
- package/dist/automotive/batteryRuntime.js +9 -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/chemical/ph.d.ts.map +1 -1
- package/dist/chemical/ph.js +5 -7
- package/dist/chemical/ph.js.map +1 -1
- package/dist/chemical/pid.js +3 -3
- package/dist/chemical/pid.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/construction/slope.d.ts.map +1 -1
- package/dist/construction/slope.js +6 -1
- package/dist/construction/slope.js.map +1 -1
- package/dist/electronics/smt-takt.d.ts.map +1 -1
- package/dist/electronics/smt-takt.js +4 -16
- package/dist/electronics/smt-takt.js.map +1 -1
- package/dist/electronics/solder.d.ts.map +1 -1
- package/dist/electronics/solder.js +5 -8
- package/dist/electronics/solder.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/energy/motorEfficiency.d.ts.map +1 -1
- package/dist/energy/motorEfficiency.js +5 -8
- package/dist/energy/motorEfficiency.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/dimWeight.d.ts.map +1 -1
- package/dist/logistics/dimWeight.js +8 -10
- package/dist/logistics/dimWeight.js.map +1 -1
- package/dist/logistics/fillRate.d.ts.map +1 -1
- package/dist/logistics/fillRate.js +2 -9
- package/dist/logistics/fillRate.js.map +1 -1
- package/dist/logistics/freightClass.d.ts.map +1 -1
- package/dist/logistics/freightClass.js +8 -9
- package/dist/logistics/freightClass.js.map +1 -1
- package/dist/logistics/kanban.d.ts.map +1 -1
- package/dist/logistics/kanban.js +8 -2
- package/dist/logistics/kanban.js.map +1 -1
- package/dist/logistics/pickTime.d.ts.map +1 -1
- package/dist/logistics/pickTime.js +4 -12
- package/dist/logistics/pickTime.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/bolt.d.ts.map +1 -1
- package/dist/metal/bolt.js +12 -36
- package/dist/metal/bolt.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/pressFit.d.ts.map +1 -1
- package/dist/metal/pressFit.js +8 -12
- package/dist/metal/pressFit.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/spring.d.ts.map +1 -1
- package/dist/metal/spring.js +6 -8
- package/dist/metal/spring.js.map +1 -1
- package/dist/metal/tap.d.ts.map +1 -1
- package/dist/metal/tap.js +4 -9
- package/dist/metal/tap.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/metal/welding.d.ts.map +1 -1
- package/dist/metal/welding.js +2 -3
- package/dist/metal/welding.js.map +1 -1
- package/dist/quality/aql.d.ts.map +1 -1
- package/dist/quality/aql.js +6 -2
- package/dist/quality/aql.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,37 @@ 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.6] - 2026-06-21
|
|
9
|
+
|
|
10
|
+
### Changed (breaking within 0.x)
|
|
11
|
+
|
|
12
|
+
- **Invalid-input zero-fill results migrated to the standard error policy — tail of the v0.13.5 sweep** — the v0.13.5 sweep missed a set of public functions that still returned an all-zero/sentinel result object on must-be-positive invalid input instead of throwing (reported by online-tools: ISSUE-20260621-formulab-zerofill-invalid-guards, which independently reproduced user-facing zero-fills the prior full-audit had marked drained). `ERRORS.md` already documented several of these as `throw` (aspirational); the code now conforms. All of the following now **throw `RangeError`** with a per-constraint message, consistent with the rest of the library — consumers branch on the boundary, not on a zero result:
|
|
13
|
+
- **metal**: `bolt()` (diameter/pitch/kFactor/tensileStrength ≤ 0; torque ≤ 0 in `torqueToPreload`, preload ≤ 0 in `preloadToTorque` — all six former zero-fill paths), `pressFit()` (shaftDiameter/holeDiameter/hubOuterDiameter/contactLength ≤ 0 — the clearance-fit `interference ≤ 0` and `hubOuterDiameter ≤ shaftDiameter` results are legitimate physical states and **kept**), `spring()` (wireDiameter/meanCoilDiameter/activeCoils ≤ 0), `tap()` (majorDiameter/pitch ≤ 0), `welding()` (thickness ≤ 0 — previously returned empty recommendations + zero rod diameter).
|
|
14
|
+
- **logistics**: `dimWeight()` (length/width/height ≤ 0; actualWeight < 0 — zero actual weight stays legit, billing falls back to dimensional weight), `fillRate()` (totalOrders ≤ 0), `freightClass()` (weight/length/width/height ≤ 0), `kanban()` (dailyDemand/leadTime/containerQuantity ≤ 0), `pickTime()` (speed/itemsPerOrder ≤ 0).
|
|
15
|
+
- **electronics**: `smtTakt()` (placementRate/componentsPerBoard ≤ 0), `solderPaste()` (padCount/stencilThickness ≤ 0).
|
|
16
|
+
- **energy**: `motorEfficiency()` (currentEfficiency/newEfficiency ≤ 0).
|
|
17
|
+
- **automotive**: `batteryRuntime()` (capacityAh ≤ 0 — completing the voltageV/loadW guards added in 0.13.5).
|
|
18
|
+
- **chemical**: `ph()` (acidConcentration/baseConcentration ≤ 0), `pid()` (non-positive process parameters in every method branch — processGain/deadTime/timeConstant ≤ 0 for Z-N step & Cohen-Coon, ultimateGain/ultimatePeriod ≤ 0 for Z-N ultimate; previously returned all-zero gains).
|
|
19
|
+
- **quality**: `aql()` (lotSize ≤ 0).
|
|
20
|
+
- **construction**: `slope()` (ratio ≤ 0 — a 1:N ratio with N ≤ 0 is vertical/undefined, previously inverted to "flat 0%"; percent/degrees value 0 stays legit flat ground).
|
|
21
|
+
- **Intentionally kept** (unchanged): `cpk()`/`ppk()`/`cmk()` degenerate-spread zero result (stdDev ≤ 0 → zero indices — a computable degenerate case, not invalid input); `kanban()` negative `safetyFactor` zero-fill and `fillRate()` `serviceLevel()` (not must-be-positive); all legitimate-zero computations (e.g. automotive `power()`/`torque()`, energy `carbonFootprint()` where 0 input = 0 output). `ERRORS.md` condition descriptions corrected for the migrated functions.
|
|
22
|
+
|
|
23
|
+
## [0.13.5] - 2026-06-18
|
|
24
|
+
|
|
25
|
+
### Changed (breaking within 0.x)
|
|
26
|
+
|
|
27
|
+
- **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:
|
|
28
|
+
- **automotive**: `fuelEconomy()` (value ≤ 0), `evCharging()` (socEndPercent ≤ socStartPercent, chargerPowerKw ≤ 0), `batteryRuntime()` (voltageV ≤ 0, loadW ≤ 0), `gearRatio()` (drivingTeeth ≤ 0).
|
|
29
|
+
- **energy**: `insulationRoi()` (surfaceArea/tempDifference/insulationK/insulationThickness ≤ 0), `degreeDay()` (empty `dailyTemps`).
|
|
30
|
+
- **food**: `calorie()` (weightKg/heightCm/age ≤ 0).
|
|
31
|
+
- **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).
|
|
32
|
+
- **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).
|
|
33
|
+
- **electronics**: `viaCurrent()` (holeDiameter/platingThickness/viaLength/tempRise ≤ 0; `... | null` → non-nullable).
|
|
34
|
+
- **logistics**: `shipping()` (weight/volume ≤ 0, truck distance ≤ 0, unknown mode; `... | null` → non-nullable), `tsp()` (empty nodes; `... | null` → non-nullable).
|
|
35
|
+
- **construction**: `pert()` (empty tasks, circular dependency; `... | null` → non-nullable).
|
|
36
|
+
- **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`.
|
|
37
|
+
- **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.
|
|
38
|
+
|
|
8
39
|
## [0.13.4] - 2026-06-18
|
|
9
40
|
|
|
10
41
|
### 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 capacityAh, voltageV, or 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,CA0BjE"}
|
|
@@ -9,18 +9,18 @@ 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 capacityAh, voltageV, or 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
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
};
|
|
16
|
+
if (capacityAh <= 0) {
|
|
17
|
+
throw new RangeError('capacityAh must be greater than 0');
|
|
18
|
+
}
|
|
19
|
+
if (voltageV <= 0) {
|
|
20
|
+
throw new RangeError('voltageV must be greater than 0');
|
|
21
|
+
}
|
|
22
|
+
if (loadW <= 0) {
|
|
23
|
+
throw new RangeError('loadW must be greater than 0');
|
|
24
24
|
}
|
|
25
25
|
const energyWh = capacityAh * voltageV;
|
|
26
26
|
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,UAAU,IAAI,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,UAAU,CAAC,mCAAmC,CAAC,CAAC;IAC5D,CAAC;IACD,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ph.d.ts","sourceRoot":"","sources":["../../src/chemical/ph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AA0BlE;;;;;;;;;GASG;AACH,wBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,
|
|
1
|
+
{"version":3,"file":"ph.d.ts","sourceRoot":"","sources":["../../src/chemical/ph.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AA0BlE;;;;;;;;;GASG;AACH,wBAAgB,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,QAAQ,CAgD3C;AAED;;GAEG"}
|
package/dist/chemical/ph.js
CHANGED
|
@@ -32,14 +32,12 @@ const DPKA_DT = {
|
|
|
32
32
|
*/
|
|
33
33
|
export function ph(input) {
|
|
34
34
|
const { bufferSystem, acidConcentration, baseConcentration, temperature, customPka } = input;
|
|
35
|
-
// Guard against invalid
|
|
35
|
+
// Guard against invalid concentrations
|
|
36
36
|
if (acidConcentration <= 0) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
effectiveRange: { min: 0, max: 0 },
|
|
42
|
-
};
|
|
37
|
+
throw new RangeError('acidConcentration must be greater than 0');
|
|
38
|
+
}
|
|
39
|
+
if (baseConcentration <= 0) {
|
|
40
|
+
throw new RangeError('baseConcentration must be greater than 0');
|
|
43
41
|
}
|
|
44
42
|
// Get base pKa at 25C
|
|
45
43
|
let pKaBase;
|
package/dist/chemical/ph.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ph.js","sourceRoot":"","sources":["../../src/chemical/ph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,GAAoD;IAClE,OAAO,EAAE,IAAI,EAAK,wBAAwB;IAC1C,SAAS,EAAE,IAAI,EAAG,0BAA0B;IAC5C,IAAI,EAAE,IAAI,EAAQ,sBAAsB;IACxC,OAAO,EAAE,IAAI,EAAK,mBAAmB;IACrC,SAAS,EAAE,IAAI,EAAG,uBAAuB;CAC1C,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,GAAoD;IAC/D,OAAO,EAAE,GAAG,EAAM,aAAa;IAC/B,SAAS,EAAE,CAAC,MAAM,EAAE,kBAAkB;IACtC,IAAI,EAAE,CAAC,KAAK,EAAM,sCAAsC;IACxD,OAAO,EAAE,CAAC,KAAK;IACf,SAAS,EAAE,CAAC,MAAM;CACnB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,EAAE,CAAC,KAAc;IAC/B,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE7F,
|
|
1
|
+
{"version":3,"file":"ph.js","sourceRoot":"","sources":["../../src/chemical/ph.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AACH,MAAM,UAAU,GAAoD;IAClE,OAAO,EAAE,IAAI,EAAK,wBAAwB;IAC1C,SAAS,EAAE,IAAI,EAAG,0BAA0B;IAC5C,IAAI,EAAE,IAAI,EAAQ,sBAAsB;IACxC,OAAO,EAAE,IAAI,EAAK,mBAAmB;IACrC,SAAS,EAAE,IAAI,EAAG,uBAAuB;CAC1C,CAAC;AAEF;;;GAGG;AACH,MAAM,OAAO,GAAoD;IAC/D,OAAO,EAAE,GAAG,EAAM,aAAa;IAC/B,SAAS,EAAE,CAAC,MAAM,EAAE,kBAAkB;IACtC,IAAI,EAAE,CAAC,KAAK,EAAM,sCAAsC;IACxD,OAAO,EAAE,CAAC,KAAK;IACf,SAAS,EAAE,CAAC,MAAM;CACnB,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,EAAE,CAAC,KAAc;IAC/B,MAAM,EAAE,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE7F,uCAAuC;IACvC,IAAI,iBAAiB,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,iBAAiB,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,CAAC;IACnE,CAAC;IAED,sBAAsB;IACtB,IAAI,OAAe,CAAC;IACpB,IAAI,MAAc,CAAC;IAEnB,IAAI,YAAY,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,GAAG,SAAS,IAAI,GAAG,CAAC;QAC3B,MAAM,GAAG,CAAC,CAAC;IACb,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC;QACnC,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACjC,CAAC;IAED,+BAA+B;IAC/B,MAAM,QAAQ,GAAG,WAAW,GAAG,EAAE,CAAC;IAClC,MAAM,GAAG,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,CAAC;IAExC,qDAAqD;IACrD,MAAM,KAAK,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;IACpD,MAAM,EAAE,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAEnC,6EAA6E;IAC7E,kEAAkE;IAClE,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,iBAAiB,CAAC;IACjE,MAAM,cAAc,GAAG,KAAK,GAAG,kBAAkB,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;IAE5F,oCAAoC;IACpC,MAAM,cAAc,GAAG;QACrB,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;QACxB,GAAG,EAAE,OAAO,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;KACzB,CAAC;IAEF,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpB,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,cAAc;KACf,CAAC;AACJ,CAAC;AAED;;GAEG"}
|
package/dist/chemical/pid.js
CHANGED
|
@@ -21,7 +21,7 @@ export function pid(input) {
|
|
|
21
21
|
const L = input.deadTime ?? 1;
|
|
22
22
|
const T = input.timeConstant ?? 1;
|
|
23
23
|
if (K <= 0 || L <= 0 || T <= 0) {
|
|
24
|
-
|
|
24
|
+
throw new RangeError('processGain, deadTime, and timeConstant must all be greater than 0');
|
|
25
25
|
}
|
|
26
26
|
if (controllerType === 'P') {
|
|
27
27
|
kp = T / (K * L);
|
|
@@ -44,7 +44,7 @@ export function pid(input) {
|
|
|
44
44
|
const Ku = input.ultimateGain ?? 1;
|
|
45
45
|
const Pu = input.ultimatePeriod ?? 1;
|
|
46
46
|
if (Ku <= 0 || Pu <= 0) {
|
|
47
|
-
|
|
47
|
+
throw new RangeError('ultimateGain and ultimatePeriod must both be greater than 0');
|
|
48
48
|
}
|
|
49
49
|
if (controllerType === 'P') {
|
|
50
50
|
kp = 0.5 * Ku;
|
|
@@ -68,7 +68,7 @@ export function pid(input) {
|
|
|
68
68
|
const L = input.deadTime ?? 1;
|
|
69
69
|
const T = input.timeConstant ?? 1;
|
|
70
70
|
if (K <= 0 || L <= 0 || T <= 0) {
|
|
71
|
-
|
|
71
|
+
throw new RangeError('processGain, deadTime, and timeConstant must all be greater than 0');
|
|
72
72
|
}
|
|
73
73
|
const r = L / T; // dead time ratio
|
|
74
74
|
if (controllerType === 'P') {
|
package/dist/chemical/pid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pid.js","sourceRoot":"","sources":["../../src/chemical/pid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,MAAM,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAEzC,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,GAAG,QAAQ,CAAC;IAClB,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,UAAU,GAAG,MAAM,CAAC;IAExB,IAAI,MAAM,KAAK,sBAAsB,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAC;QACjC,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,KAAK,CAAC,YAAY,IAAI,CAAC,CAAC;QAElC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,
|
|
1
|
+
{"version":3,"file":"pid.js","sourceRoot":"","sources":["../../src/chemical/pid.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;GAEG;AACH,SAAS,WAAW,CAAC,KAAiB;IACpC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAElC,SAAS,GAAG,CAAC,EAAU;QACrB,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;QACjC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO,KAAK,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;YACtB,IAAI,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;gBAChC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;oBAAE,OAAO,IAAI,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,OAAO,IAAI,CAAC;IAC7B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,KAAiB;IACxC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,MAAM,GAAG,GAAG,IAAI,GAAG,EAAoB,CAAC;IAExC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACtE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBACtC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,GAAG,KAAK,CAAC;YAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAChC,CAAC;IAED,MAAM,MAAM,GAAe,EAAE,CAAC;IAC9B,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,EAAG,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAE,CAAC,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACvC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAE,GAAG,CAAC,CAAC;YACvC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAC3B,IAAI,MAAM,KAAK,CAAC;gBAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACxD,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;IAClC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,UAAU,CAAC,yBAAyB,CAAC,CAAC;IAClD,CAAC;IAED,kBAAkB;IAClB,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,UAAU,CAAC,qCAAqC,CAAC,CAAC;IAC9D,CAAC;IAED,mBAAmB;IACnB,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,UAAU,CAAC,qCAAqC,CAAC,CAAC;IAC9D,CAAC;IAED,2CAA2C;IAC3C,MAAM,EAAE,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QAChE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAChB,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,GAAG,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,uBAAuB;IACvB,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAC3B,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;YAClC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,UAAU,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACnC,CAAC;QACH,CAAC;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,EAAE,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,MAAM,EAAE,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;QACvB,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,KAAK,MAAM,IAAI,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;YAClC,IAAI,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACjB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC;YACzC,CAAC;QACH,CAAC;QACD,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACpB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;IACtC,CAAC;IAED,mBAAmB;IACnB,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE7D,wBAAwB;IACxB,MAAM,EAAE,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,MAAM,EAAE,GAAG,IAAI,GAAG,EAAkB,CAAC;IACrC,MAAM,QAAQ,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC;IACvC,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,IAAI,KAAK,GAAG,QAAQ,CAAC;YACrB,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;gBACtB,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC;YACtC,CAAC;YACD,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QACtB,CAAC;QACD,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC,CAAC;IAC9C,CAAC;IAED,oBAAoB;IACpB,MAAM,OAAO,GAAqB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC/C,MAAM,UAAU,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;QAEjD,sDAAsD;QACtD,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC;QACzC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC,CAAC,CAAC;YAC1D,SAAS,GAAG,SAAS,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAC;QACxC,CAAC;QAED,OAAO;YACL,EAAE,EAAE,CAAC,CAAC,EAAE;YACR,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,QAAQ,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,CAAC;YACnC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,CAAC;YACzC,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,CAAC;YAC7B,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,CAAC;YAC7B,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,CAAC;YAC7B,EAAE,EAAE,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,EAAE,CAAC,CAAC;YAC7B,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;YAClC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,EAAE,CAAC,CAAC;YAC7C,UAAU,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,KAAK;SACzC,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IAEtE,oDAAoD;IACpD,MAAM,eAAe,GAAG,OAAO;SAC5B,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;SACzB,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAEjD,MAAM,MAAM,GAAe;QACzB,KAAK,EAAE,OAAO;QACd,YAAY;QACZ,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;QAC5C,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;QAC5C,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;KACzC,CAAC;IAEF,uBAAuB;IACvB,IAAI,QAAQ,KAAK,SAAS,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,CAAC,QAAQ,GAAG,eAAe,CAAC,GAAG,aAAa,CAAC;QACvD,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,qBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slope.d.ts","sourceRoot":"","sources":["../../src/construction/slope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,
|
|
1
|
+
{"version":3,"file":"slope.d.ts","sourceRoot":"","sources":["../../src/construction/slope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1D;;;;;;;;;;GAUG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAsDpD"}
|
|
@@ -11,7 +11,12 @@
|
|
|
11
11
|
*/
|
|
12
12
|
export function slope(input) {
|
|
13
13
|
const { fromUnit, value } = input;
|
|
14
|
-
//
|
|
14
|
+
// A ratio of 1:N with N <= 0 is vertical/undefined, not flat ground.
|
|
15
|
+
// (percent/degrees value 0 is legitimately flat and returns zeros below.)
|
|
16
|
+
if (fromUnit === 'ratio' && value <= 0) {
|
|
17
|
+
throw new RangeError('ratio value must be greater than 0');
|
|
18
|
+
}
|
|
19
|
+
// Handle zero value (flat ground for percent/degrees)
|
|
15
20
|
if (value === 0) {
|
|
16
21
|
return {
|
|
17
22
|
percent: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slope.js","sourceRoot":"","sources":["../../src/construction/slope.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,KAAK,CAAC,KAAiB;IACrC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAElC,
|
|
1
|
+
{"version":3,"file":"slope.js","sourceRoot":"","sources":["../../src/construction/slope.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,KAAK,CAAC,KAAiB;IACrC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAElC,qEAAqE;IACrE,0EAA0E;IAC1E,IAAI,QAAQ,KAAK,OAAO,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;IAC7D,CAAC;IAED,sDAAsD;IACtD,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO;YACL,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,CAAC;YACV,KAAK,EAAE,CAAC;YACR,YAAY,EAAE,CAAC;SAChB,CAAC;IACJ,CAAC;IAED,IAAI,OAAe,CAAC;IAEpB,wCAAwC;IACxC,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS;YACZ,OAAO,GAAG,KAAK,CAAC;YAChB,MAAM;QACR,KAAK,SAAS;YACZ,sCAAsC;YACtC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;YAClD,MAAM;QACR,KAAK,OAAO;YACV,mCAAmC;YACnC,OAAO,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM;QACR;YACE,OAAO,GAAG,CAAC,CAAC;IAChB,CAAC;IAED,sCAAsC;IACtC,+BAA+B;IAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;IAE3D,mCAAmC;IACnC,MAAM,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IAE9C,0DAA0D;IAC1D,MAAM,YAAY,GAAG,OAAO,GAAG,EAAE,CAAC;IAElC,OAAO;QACL,OAAO;QACP,OAAO;QACP,KAAK;QACL,YAAY;KACb,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smt-takt.d.ts","sourceRoot":"","sources":["../../src/electronics/smt-takt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG9D;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,
|
|
1
|
+
{"version":3,"file":"smt-takt.d.ts","sourceRoot":"","sources":["../../src/electronics/smt-takt.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG9D;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CA8C1D"}
|
|
@@ -10,23 +10,11 @@ import { roundTo } from '../utils.js';
|
|
|
10
10
|
export function smtTakt(input) {
|
|
11
11
|
const { placementRate, componentsPerBoard, boardsPerPanel, setupTimeSec, availableTimeMin, } = input;
|
|
12
12
|
// Guard against invalid inputs
|
|
13
|
-
if (componentsPerBoard <= 0) {
|
|
14
|
-
return {
|
|
15
|
-
placementTimeSec: 0,
|
|
16
|
-
totalCycleTimeSec: 0,
|
|
17
|
-
boardsPerHour: 0,
|
|
18
|
-
totalBoardsPerShift: 0,
|
|
19
|
-
lineUtilization: 0,
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
13
|
if (placementRate <= 0) {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
totalBoardsPerShift: 0,
|
|
28
|
-
lineUtilization: 0,
|
|
29
|
-
};
|
|
14
|
+
throw new RangeError('placementRate must be greater than 0');
|
|
15
|
+
}
|
|
16
|
+
if (componentsPerBoard <= 0) {
|
|
17
|
+
throw new RangeError('componentsPerBoard must be greater than 0');
|
|
30
18
|
}
|
|
31
19
|
// Calculate placement time per board (seconds)
|
|
32
20
|
// placementRate is in components per hour (cph)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"smt-takt.js","sourceRoot":"","sources":["../../src/electronics/smt-takt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AAEH;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,MAAM,EACJ,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,gBAAgB,GACjB,GAAG,KAAK,CAAC;IAEV,+BAA+B;IAC/B,IAAI,
|
|
1
|
+
{"version":3,"file":"smt-takt.js","sourceRoot":"","sources":["../../src/electronics/smt-takt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AAEH;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,MAAM,EACJ,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,YAAY,EACZ,gBAAgB,GACjB,GAAG,KAAK,CAAC;IAEV,+BAA+B;IAC/B,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,kBAAkB,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC,CAAC;IACpE,CAAC;IAED,+CAA+C;IAC/C,gDAAgD;IAChD,6CAA6C;IAC7C,MAAM,gBAAgB,GAAG,OAAO,CAAC,CAAC,kBAAkB,GAAG,aAAa,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAEjF,uCAAuC;IACvC,MAAM,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC;IAEtE,kBAAkB;IAClB,MAAM,aAAa,GAAG,iBAAiB,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEvF,0FAA0F;IAC1F,MAAM,gBAAgB,GAAG,gBAAgB,GAAG,EAAE,CAAC;IAC/C,MAAM,mBAAmB,GAAG,iBAAiB,GAAG,CAAC;QAC/C,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,GAAG,cAAc,CAAC;QACrE,CAAC,CAAC,CAAC,CAAC;IAEN,qEAAqE;IACrE,MAAM,eAAe,GAAG,iBAAiB,GAAG,CAAC;QAC3C,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,GAAG,iBAAiB,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC,CAAC;IAEN,OAAO;QACL,gBAAgB;QAChB,iBAAiB;QACjB,aAAa;QACb,mBAAmB;QACnB,eAAe;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solder.d.ts","sourceRoot":"","sources":["../../src/electronics/solder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG5D;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,
|
|
1
|
+
{"version":3,"file":"solder.d.ts","sourceRoot":"","sources":["../../src/electronics/solder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG5D;;GAEG;AAEH;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CA8C5D"}
|
|
@@ -10,14 +10,11 @@ import { roundTo } from '../utils.js';
|
|
|
10
10
|
export function solderPaste(input) {
|
|
11
11
|
const { padCount, avgPadArea, stencilThickness, transferEfficiency, density, boardsPerPanel, panelCount, } = input;
|
|
12
12
|
// Guard against zero/negative values
|
|
13
|
-
if (padCount <= 0
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
totalWeight: 0,
|
|
19
|
-
totalWeightKg: 0,
|
|
20
|
-
};
|
|
13
|
+
if (padCount <= 0) {
|
|
14
|
+
throw new RangeError('padCount must be greater than 0');
|
|
15
|
+
}
|
|
16
|
+
if (stencilThickness <= 0) {
|
|
17
|
+
throw new RangeError('stencilThickness must be greater than 0');
|
|
21
18
|
}
|
|
22
19
|
// Volume per board (mm3)
|
|
23
20
|
// Volume = padCount * avgPadArea * stencilThickness * transferEfficiency
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solder.js","sourceRoot":"","sources":["../../src/electronics/solder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AAEH;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAkB;IAC5C,MAAM,EACJ,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,OAAO,EACP,cAAc,EACd,UAAU,GACX,GAAG,KAAK,CAAC;IAEV,qCAAqC;IACrC,IAAI,QAAQ,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"solder.js","sourceRoot":"","sources":["../../src/electronics/solder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AAEH;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,KAAkB;IAC5C,MAAM,EACJ,QAAQ,EACR,UAAU,EACV,gBAAgB,EAChB,kBAAkB,EAClB,OAAO,EACP,cAAc,EACd,UAAU,GACX,GAAG,KAAK,CAAC;IAEV,qCAAqC;IACrC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,UAAU,CAAC,yCAAyC,CAAC,CAAC;IAClE,CAAC;IAED,yBAAyB;IACzB,yEAAyE;IACzE,MAAM,cAAc,GAAG,OAAO,CAC5B,QAAQ,GAAG,UAAU,GAAG,gBAAgB,GAAG,kBAAkB,EAC7D,CAAC,CACF,CAAC;IAEF,uBAAuB;IACvB,qEAAqE;IACrE,sCAAsC;IACtC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAEnE,6CAA6C;IAC7C,MAAM,WAAW,GAAG,cAAc,GAAG,UAAU,CAAC;IAEhD,0BAA0B;IAC1B,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,aAAa,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAErD,OAAO;QACL,cAAc;QACd,cAAc;QACd,WAAW;QACX,WAAW;QACX,aAAa;KACd,CAAC;AACJ,CAAC"}
|
|
@@ -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"}
|