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.
Files changed (152) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/dist/automotive/batteryRuntime.d.ts +1 -0
  3. package/dist/automotive/batteryRuntime.d.ts.map +1 -1
  4. package/dist/automotive/batteryRuntime.js +9 -9
  5. package/dist/automotive/batteryRuntime.js.map +1 -1
  6. package/dist/automotive/evCharging.d.ts +2 -0
  7. package/dist/automotive/evCharging.d.ts.map +1 -1
  8. package/dist/automotive/evCharging.js +4 -17
  9. package/dist/automotive/evCharging.js.map +1 -1
  10. package/dist/automotive/fuelEconomy.d.ts +1 -0
  11. package/dist/automotive/fuelEconomy.d.ts.map +1 -1
  12. package/dist/automotive/fuelEconomy.js +3 -8
  13. package/dist/automotive/fuelEconomy.js.map +1 -1
  14. package/dist/automotive/gearRatio.d.ts +1 -0
  15. package/dist/automotive/gearRatio.d.ts.map +1 -1
  16. package/dist/automotive/gearRatio.js +3 -9
  17. package/dist/automotive/gearRatio.js.map +1 -1
  18. package/dist/chemical/ph.d.ts.map +1 -1
  19. package/dist/chemical/ph.js +5 -7
  20. package/dist/chemical/ph.js.map +1 -1
  21. package/dist/chemical/pid.js +3 -3
  22. package/dist/chemical/pid.js.map +1 -1
  23. package/dist/construction/pert.d.ts +3 -2
  24. package/dist/construction/pert.d.ts.map +1 -1
  25. package/dist/construction/pert.js +11 -7
  26. package/dist/construction/pert.js.map +1 -1
  27. package/dist/construction/slope.d.ts.map +1 -1
  28. package/dist/construction/slope.js +6 -1
  29. package/dist/construction/slope.js.map +1 -1
  30. package/dist/electronics/smt-takt.d.ts.map +1 -1
  31. package/dist/electronics/smt-takt.js +4 -16
  32. package/dist/electronics/smt-takt.js.map +1 -1
  33. package/dist/electronics/solder.d.ts.map +1 -1
  34. package/dist/electronics/solder.js +5 -8
  35. package/dist/electronics/solder.js.map +1 -1
  36. package/dist/electronics/via.d.ts +4 -2
  37. package/dist/electronics/via.d.ts.map +1 -1
  38. package/dist/electronics/via.js +14 -3
  39. package/dist/electronics/via.js.map +1 -1
  40. package/dist/energy/degreeDay.d.ts +1 -0
  41. package/dist/energy/degreeDay.d.ts.map +1 -1
  42. package/dist/energy/degreeDay.js +2 -1
  43. package/dist/energy/degreeDay.js.map +1 -1
  44. package/dist/energy/insulationRoi.d.ts +2 -0
  45. package/dist/energy/insulationRoi.d.ts.map +1 -1
  46. package/dist/energy/insulationRoi.js +13 -10
  47. package/dist/energy/insulationRoi.js.map +1 -1
  48. package/dist/energy/motorEfficiency.d.ts.map +1 -1
  49. package/dist/energy/motorEfficiency.js +5 -8
  50. package/dist/energy/motorEfficiency.js.map +1 -1
  51. package/dist/food/calorie.d.ts +1 -0
  52. package/dist/food/calorie.d.ts.map +1 -1
  53. package/dist/food/calorie.js +9 -2
  54. package/dist/food/calorie.js.map +1 -1
  55. package/dist/logistics/dimWeight.d.ts.map +1 -1
  56. package/dist/logistics/dimWeight.js +8 -10
  57. package/dist/logistics/dimWeight.js.map +1 -1
  58. package/dist/logistics/fillRate.d.ts.map +1 -1
  59. package/dist/logistics/fillRate.js +2 -9
  60. package/dist/logistics/fillRate.js.map +1 -1
  61. package/dist/logistics/freightClass.d.ts.map +1 -1
  62. package/dist/logistics/freightClass.js +8 -9
  63. package/dist/logistics/freightClass.js.map +1 -1
  64. package/dist/logistics/kanban.d.ts.map +1 -1
  65. package/dist/logistics/kanban.js +8 -2
  66. package/dist/logistics/kanban.js.map +1 -1
  67. package/dist/logistics/pickTime.d.ts.map +1 -1
  68. package/dist/logistics/pickTime.js +4 -12
  69. package/dist/logistics/pickTime.js.map +1 -1
  70. package/dist/logistics/shipping.d.ts +4 -2
  71. package/dist/logistics/shipping.d.ts.map +1 -1
  72. package/dist/logistics/shipping.js +13 -6
  73. package/dist/logistics/shipping.js.map +1 -1
  74. package/dist/logistics/tsp.d.ts +2 -1
  75. package/dist/logistics/tsp.d.ts.map +1 -1
  76. package/dist/logistics/tsp.js +2 -1
  77. package/dist/logistics/tsp.js.map +1 -1
  78. package/dist/metal/bearing.d.ts +2 -0
  79. package/dist/metal/bearing.d.ts.map +1 -1
  80. package/dist/metal/bearing.js +10 -2
  81. package/dist/metal/bearing.js.map +1 -1
  82. package/dist/metal/bolt.d.ts.map +1 -1
  83. package/dist/metal/bolt.js +12 -36
  84. package/dist/metal/bolt.js.map +1 -1
  85. package/dist/metal/cutting.d.ts +2 -0
  86. package/dist/metal/cutting.d.ts.map +1 -1
  87. package/dist/metal/cutting.js +3 -1
  88. package/dist/metal/cutting.js.map +1 -1
  89. package/dist/metal/cuttingStock.d.ts +4 -1
  90. package/dist/metal/cuttingStock.d.ts.map +1 -1
  91. package/dist/metal/cuttingStock.js +15 -6
  92. package/dist/metal/cuttingStock.js.map +1 -1
  93. package/dist/metal/material.d.ts +6 -1
  94. package/dist/metal/material.d.ts.map +1 -1
  95. package/dist/metal/material.js +11 -4
  96. package/dist/metal/material.js.map +1 -1
  97. package/dist/metal/pressFit.d.ts.map +1 -1
  98. package/dist/metal/pressFit.js +8 -12
  99. package/dist/metal/pressFit.js.map +1 -1
  100. package/dist/metal/pressTonnage.d.ts +1 -0
  101. package/dist/metal/pressTonnage.d.ts.map +1 -1
  102. package/dist/metal/pressTonnage.js +3 -13
  103. package/dist/metal/pressTonnage.js.map +1 -1
  104. package/dist/metal/roughness.d.ts +2 -0
  105. package/dist/metal/roughness.d.ts.map +1 -1
  106. package/dist/metal/roughness.js +4 -2
  107. package/dist/metal/roughness.js.map +1 -1
  108. package/dist/metal/screw.d.ts +3 -1
  109. package/dist/metal/screw.d.ts.map +1 -1
  110. package/dist/metal/screw.js +5 -2
  111. package/dist/metal/screw.js.map +1 -1
  112. package/dist/metal/spring.d.ts.map +1 -1
  113. package/dist/metal/spring.js +6 -8
  114. package/dist/metal/spring.js.map +1 -1
  115. package/dist/metal/tap.d.ts.map +1 -1
  116. package/dist/metal/tap.js +4 -9
  117. package/dist/metal/tap.js.map +1 -1
  118. package/dist/metal/thread.d.ts +3 -1
  119. package/dist/metal/thread.d.ts.map +1 -1
  120. package/dist/metal/thread.js +8 -4
  121. package/dist/metal/thread.js.map +1 -1
  122. package/dist/metal/tolerance.d.ts +4 -1
  123. package/dist/metal/tolerance.d.ts.map +1 -1
  124. package/dist/metal/tolerance.js +12 -6
  125. package/dist/metal/tolerance.js.map +1 -1
  126. package/dist/metal/vibration.d.ts +3 -0
  127. package/dist/metal/vibration.d.ts.map +1 -1
  128. package/dist/metal/vibration.js +28 -10
  129. package/dist/metal/vibration.js.map +1 -1
  130. package/dist/metal/weldHeat.d.ts +2 -0
  131. package/dist/metal/weldHeat.d.ts.map +1 -1
  132. package/dist/metal/weldHeat.js +13 -15
  133. package/dist/metal/weldHeat.js.map +1 -1
  134. package/dist/metal/welding.d.ts.map +1 -1
  135. package/dist/metal/welding.js +2 -3
  136. package/dist/metal/welding.js.map +1 -1
  137. package/dist/quality/aql.d.ts.map +1 -1
  138. package/dist/quality/aql.js +6 -2
  139. package/dist/quality/aql.js.map +1 -1
  140. package/dist/quality/dpmo.d.ts +1 -0
  141. package/dist/quality/dpmo.d.ts.map +1 -1
  142. package/dist/quality/dpmo.js +7 -3
  143. package/dist/quality/dpmo.js.map +1 -1
  144. package/dist/quality/lineBalancing.d.ts +4 -2
  145. package/dist/quality/lineBalancing.d.ts.map +1 -1
  146. package/dist/quality/lineBalancing.js +18 -9
  147. package/dist/quality/lineBalancing.js.map +1 -1
  148. package/dist/quality/mtbf.d.ts +2 -0
  149. package/dist/quality/mtbf.d.ts.map +1 -1
  150. package/dist/quality/mtbf.js +8 -9
  151. package/dist/quality/mtbf.js.map +1 -1
  152. 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;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CA2BjE"}
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
- // Handle edge cases
16
- if (voltageV <= 0 || loadW <= 0) {
17
- return {
18
- energyWh: voltageV > 0 ? roundTo(capacityAh * voltageV, 2) : 0,
19
- energyKwh: voltageV > 0 ? roundTo((capacityAh * voltageV) / 1000, 2) : 0,
20
- runtimeHours: 0,
21
- runtimeMinutes: 0,
22
- currentDraw: 0,
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;;;;;;;;;;GAUG;AACH,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAE1D,oBAAoB;IACpB,IAAI,QAAQ,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAChC,OAAO;YACL,QAAQ,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,SAAS,EAAE,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,UAAU,GAAG,QAAQ,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACxE,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,CAAC;SACf,CAAC;IACJ,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"}
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;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAuC/D"}
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
- return {
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
- const socDiff = (socEndPercent - socStartPercent) / 100;
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;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,KAAoB;IAC7C,MAAM,EAAE,kBAAkB,EAAE,cAAc,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAEjG,oDAAoD;IACpD,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;QACrC,OAAO;YACL,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,CAAC;YACjB,iBAAiB,EAAE,CAAC;YACpB,mBAAmB,EAAE,CAAC;SACvB,CAAC;IACJ,CAAC;IAED,4BAA4B;IAC5B,IAAI,cAAc,IAAI,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,CAAC,aAAa,GAAG,eAAe,CAAC,GAAG,GAAG,CAAC;QACxD,MAAM,YAAY,GAAG,kBAAkB,GAAG,OAAO,CAAC;QAClD,MAAM,cAAc,GAAG,YAAY,GAAG,UAAU,CAAC;QAEjD,OAAO;YACL,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;YACtC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;YAC1C,iBAAiB,EAAE,CAAC;YACpB,mBAAmB,EAAE,CAAC;SACvB,CAAC;IACJ,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"}
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;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CA+CxD"}
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
- // Handle zero value
21
- if (value === 0) {
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;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,KAAgB;IAC1C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAElC,oBAAoB;IACpB,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;QAChB,OAAO;YACL,MAAM,EAAE,CAAC;YACT,SAAS,EAAE,CAAC;YACZ,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,CAAC;SACT,CAAC;IACJ,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"}
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;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CA2BhE"}
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
- // Handle edge case - zero driving teeth
17
- if (drivingTeeth === 0) {
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;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAEjF,wCAAwC;IACxC,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,KAAK;YACrB,mBAAmB,EAAE,CAAC;SACvB,CAAC;IACJ,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
+ {"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,CAkD3C;AAED;;GAEG"}
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"}
@@ -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 acid concentration
35
+ // Guard against invalid concentrations
36
36
  if (acidConcentration <= 0) {
37
- return {
38
- pH: 0,
39
- pKa: 0,
40
- bufferCapacity: 0,
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;
@@ -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,2CAA2C;IAC3C,IAAI,iBAAiB,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,EAAE,EAAE,CAAC;YACL,GAAG,EAAE,CAAC;YACN,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE;SACnC,CAAC;IACJ,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"}
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"}
@@ -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
- return { kp: 0, ki: 0, kd: 0, ti: 0, td: 0, method: methodName };
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
- return { kp: 0, ki: 0, kd: 0, ti: 0, td: 0, method: methodName };
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
- return { kp: 0, ki: 0, kd: 0, ti: 0, td: 0, method: methodName };
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') {
@@ -1 +1 @@
1
- {"version":3,"file":"pid.js","sourceRoot":"","sources":["../../src/chemical/pid.ts"],"names":[],"mappings":"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"}
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 or null if cycle detected
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 | null;
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;;;;;;;;;;;GAWG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,GAAG,IAAI,CAuHxD"}
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 or null if cycle detected
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
- return null;
85
+ if (tasks.length === 0) {
86
+ throw new RangeError('tasks must not be empty');
87
+ }
86
88
  // Cycle detection
87
- if (detectCycle(tasks))
88
- return null;
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
- return null;
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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"}
@@ -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,CAgDpD"}
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
- // Handle zero value
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,oBAAoB;IACpB,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
+ {"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,CA2D1D"}
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
- return {
24
- placementTimeSec: 0,
25
- totalCycleTimeSec: 0,
26
- boardsPerHour: 0,
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,kBAAkB,IAAI,CAAC,EAAE,CAAC;QAC5B,OAAO;YACL,gBAAgB,EAAE,CAAC;YACnB,iBAAiB,EAAE,CAAC;YACpB,aAAa,EAAE,CAAC;YAChB,mBAAmB,EAAE,CAAC;YACtB,eAAe,EAAE,CAAC;SACnB,CAAC;IACJ,CAAC;IAED,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO;YACL,gBAAgB,EAAE,CAAC;YACnB,iBAAiB,EAAE,CAAC;YACpB,aAAa,EAAE,CAAC;YAChB,mBAAmB,EAAE,CAAC;YACtB,eAAe,EAAE,CAAC;SACnB,CAAC;IACJ,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
+ {"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,CAiD5D"}
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 || stencilThickness <= 0) {
14
- return {
15
- volumePerBoard: 0,
16
- weightPerBoard: 0,
17
- totalVolume: 0,
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,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;QAC3C,OAAO;YACL,cAAc,EAAE,CAAC;YACjB,cAAc,EAAE,CAAC;YACjB,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,CAAC;YACd,aAAa,EAAE,CAAC;SACjB,CAAC;IACJ,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"}
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, or null if invalid
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 | null;
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;;;;;;;;GAQG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,IAAI,CA+C5D"}
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"}
@@ -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, or null if invalid
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 || platingThickness <= 0 || viaLength <= 0 || tempRise <= 0) {
26
- return null;
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;;;;;;;;GAQG;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,IAAI,gBAAgB,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClF,OAAO,IAAI,CAAC;IACd,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"}
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"}