formulab 0.13.5 → 0.13.7

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 (110) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/automotive/batteryRuntime.d.ts +1 -1
  3. package/dist/automotive/batteryRuntime.d.ts.map +1 -1
  4. package/dist/automotive/batteryRuntime.js +4 -1
  5. package/dist/automotive/batteryRuntime.js.map +1 -1
  6. package/dist/chemical/ph.d.ts.map +1 -1
  7. package/dist/chemical/ph.js +5 -7
  8. package/dist/chemical/ph.js.map +1 -1
  9. package/dist/chemical/pid.js +3 -3
  10. package/dist/chemical/pid.js.map +1 -1
  11. package/dist/construction/slope.d.ts.map +1 -1
  12. package/dist/construction/slope.js +6 -1
  13. package/dist/construction/slope.js.map +1 -1
  14. package/dist/electronics/smt-takt.d.ts.map +1 -1
  15. package/dist/electronics/smt-takt.js +4 -16
  16. package/dist/electronics/smt-takt.js.map +1 -1
  17. package/dist/electronics/solder.d.ts.map +1 -1
  18. package/dist/electronics/solder.js +5 -8
  19. package/dist/electronics/solder.js.map +1 -1
  20. package/dist/energy/motorEfficiency.d.ts.map +1 -1
  21. package/dist/energy/motorEfficiency.js +5 -8
  22. package/dist/energy/motorEfficiency.js.map +1 -1
  23. package/dist/logistics/dimWeight.d.ts.map +1 -1
  24. package/dist/logistics/dimWeight.js +8 -10
  25. package/dist/logistics/dimWeight.js.map +1 -1
  26. package/dist/logistics/fillRate.d.ts.map +1 -1
  27. package/dist/logistics/fillRate.js +2 -9
  28. package/dist/logistics/fillRate.js.map +1 -1
  29. package/dist/logistics/freightClass.d.ts.map +1 -1
  30. package/dist/logistics/freightClass.js +8 -9
  31. package/dist/logistics/freightClass.js.map +1 -1
  32. package/dist/logistics/kanban.d.ts.map +1 -1
  33. package/dist/logistics/kanban.js +8 -2
  34. package/dist/logistics/kanban.js.map +1 -1
  35. package/dist/logistics/pickTime.d.ts.map +1 -1
  36. package/dist/logistics/pickTime.js +4 -12
  37. package/dist/logistics/pickTime.js.map +1 -1
  38. package/dist/metal/bolt.d.ts.map +1 -1
  39. package/dist/metal/bolt.js +12 -36
  40. package/dist/metal/bolt.js.map +1 -1
  41. package/dist/metal/pressFit.d.ts.map +1 -1
  42. package/dist/metal/pressFit.js +8 -12
  43. package/dist/metal/pressFit.js.map +1 -1
  44. package/dist/metal/spring.d.ts.map +1 -1
  45. package/dist/metal/spring.js +6 -8
  46. package/dist/metal/spring.js.map +1 -1
  47. package/dist/metal/tap.d.ts.map +1 -1
  48. package/dist/metal/tap.js +4 -9
  49. package/dist/metal/tap.js.map +1 -1
  50. package/dist/metal/types.d.ts +23 -0
  51. package/dist/metal/types.d.ts.map +1 -1
  52. package/dist/metal/weldHeat.d.ts +5 -1
  53. package/dist/metal/weldHeat.d.ts.map +1 -1
  54. package/dist/metal/weldHeat.js +31 -4
  55. package/dist/metal/weldHeat.js.map +1 -1
  56. package/dist/metal/welding.d.ts.map +1 -1
  57. package/dist/metal/welding.js +2 -3
  58. package/dist/metal/welding.js.map +1 -1
  59. package/dist/quality/aql.d.ts.map +1 -1
  60. package/dist/quality/aql.js +6 -2
  61. package/dist/quality/aql.js.map +1 -1
  62. package/dist/safety/arcFlash.d.ts +3 -0
  63. package/dist/safety/arcFlash.d.ts.map +1 -1
  64. package/dist/safety/arcFlash.js +18 -0
  65. package/dist/safety/arcFlash.js.map +1 -1
  66. package/dist/safety/confinedSpace.d.ts +5 -0
  67. package/dist/safety/confinedSpace.d.ts.map +1 -1
  68. package/dist/safety/confinedSpace.js +20 -0
  69. package/dist/safety/confinedSpace.js.map +1 -1
  70. package/dist/safety/ergonomicRisk.d.ts +4 -0
  71. package/dist/safety/ergonomicRisk.d.ts.map +1 -1
  72. package/dist/safety/ergonomicRisk.js +7 -0
  73. package/dist/safety/ergonomicRisk.js.map +1 -1
  74. package/dist/safety/fallClearance.d.ts +5 -0
  75. package/dist/safety/fallClearance.d.ts.map +1 -1
  76. package/dist/safety/fallClearance.js +16 -0
  77. package/dist/safety/fallClearance.js.map +1 -1
  78. package/dist/safety/havsCalculate.d.ts +3 -0
  79. package/dist/safety/havsCalculate.d.ts.map +1 -1
  80. package/dist/safety/havsCalculate.js +8 -0
  81. package/dist/safety/havsCalculate.js.map +1 -1
  82. package/dist/safety/illuminance.d.ts +2 -0
  83. package/dist/safety/illuminance.d.ts.map +1 -1
  84. package/dist/safety/illuminance.js +4 -16
  85. package/dist/safety/illuminance.js.map +1 -1
  86. package/dist/safety/ladderAngle.d.ts +2 -0
  87. package/dist/safety/ladderAngle.d.ts.map +1 -1
  88. package/dist/safety/ladderAngle.js +14 -0
  89. package/dist/safety/ladderAngle.js.map +1 -1
  90. package/dist/safety/lel.d.ts +5 -0
  91. package/dist/safety/lel.d.ts.map +1 -1
  92. package/dist/safety/lel.js +19 -6
  93. package/dist/safety/lel.js.map +1 -1
  94. package/dist/safety/nioshLifting.d.ts +5 -0
  95. package/dist/safety/nioshLifting.d.ts.map +1 -1
  96. package/dist/safety/nioshLifting.js +13 -0
  97. package/dist/safety/nioshLifting.js.map +1 -1
  98. package/dist/safety/noiseExposure.d.ts +3 -0
  99. package/dist/safety/noiseExposure.d.ts.map +1 -1
  100. package/dist/safety/noiseExposure.js +8 -0
  101. package/dist/safety/noiseExposure.js.map +1 -1
  102. package/dist/safety/respiratorCalculate.d.ts +3 -0
  103. package/dist/safety/respiratorCalculate.d.ts.map +1 -1
  104. package/dist/safety/respiratorCalculate.js +10 -2
  105. package/dist/safety/respiratorCalculate.js.map +1 -1
  106. package/dist/safety/thermalComfort.d.ts +5 -0
  107. package/dist/safety/thermalComfort.d.ts.map +1 -1
  108. package/dist/safety/thermalComfort.js +17 -0
  109. package/dist/safety/thermalComfort.js.map +1 -1
  110. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -5,6 +5,36 @@ 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.7] - 2026-06-21
9
+
10
+ ### Changed (breaking within 0.x)
11
+
12
+ - **Safety domain: clamp/`Infinity`/0-guard validation migrated to the standard error policy (12 functions)** — the v0.13.5/0.13.6 zero-fill sweep was return-pattern-driven and missed the safety domain, where invalid inputs were masked by `Math.max/min` clamping, `Infinity`, or 0-guards rather than `throw` (reported by online-tools: ISSUE-20260621-formulab-validation-gaps-pid-safety-domain — gap 2). For an accuracy-critical domain this left no defense-in-depth for non-page consumers. The following now **throw `RangeError`** with a per-constraint message:
13
+ - `arcFlash()` (voltage/boltedFaultCurrent/workingDistance/faultClearingTime/gapBetweenConductors ≤ 0), `illuminance()` (roomLength/roomWidth/lumensPerLuminaire/targetLux ≤ 0, or luminaireHeight ≤ workplaneHeight — **return-type behavior change**: previously returned an all-zero result), `lel()` (gas with negative concentration or non-positive LEL), `respiratorCalculate()` (oel ≤ 0 — **was a tested `Infinity` return**; concentration < 0), `confinedSpace()` (oxygenPercent outside 0–100, or any negative gas reading; customGas pel/idlh ≤ 0), `thermalComfort()` (relativeHumidity outside 0–100, metabolicRate ≤ 0, clothingInsulation < 0, airVelocity < 0), `nioshLifting()` (negative distance/angle/frequency/loadWeight), `ladderAngle()` (negative height/baseDistance; ladderLength ≤ 0 when used as a given), `fallClearance()` (workerHeight ≤ 0, or negative distances), `havsCalculate()` (negative tool vibrationMagnitude/exposureTime), `noiseExposure()` (negative exposure duration), `ergonomicRisk()` (load < 0).
14
+ - **Boundaries deliberately preserved** (valid degenerate domain answers, not invalid input): `confinedSpace()` accepts a reading of `0` (a valid, possibly catastrophic measurement); `fallClearance()` keeps anchorHeight ≤ 0 → `isAdequate=false` + warning; `thermalComfort()`/`wbgtCalculate()` accept negative °C temperatures; `ergonomicRisk()` accepts negative joint angles (flexion/extension); empty tool/exposure/gas lists report no-exposure. **Intentional `Infinity` sentinels kept** (and now documented in `ERRORS.md`): `respiratorCalculate().safetyMargin = Infinity` when concentration = 0 (no hazard), `nioshLifting().liftingIndex = Infinity` when RWL = 0 (no acceptable weight) — both from valid inputs, analogous to the `cpk`/`ppk`/`cmk` degenerate-spread exception. `wbgtCalculate()` remains `safe` (no invalid-input class).
15
+ - **`lel()` status thresholds conservatized (NT-14)** — the mixed-gas `%LEL` status used `safe < 25 / caution 25–50 / danger > 50`, more permissive than the industry `%LEL` convention used everywhere else in the library (`confinedSpace()` and all locale docs: `safe < 10 / caution 10–25 / danger > 25`, evacuate above 25% LEL). `lel()` now follows the same `10 / 25` convention. **Behavior change**: the `status` field returns `caution`/`danger` at lower `%LEL` than before (e.g. 20% LEL: `safe` → `caution`; 40% LEL: `caution` → `danger`). Numeric outputs (`mixtureLel`, `percentOfLel`, `safetyMargin`) are unchanged.
16
+
17
+ ### Added
18
+
19
+ - **`weldHeat()`: machine-readable i18n codes (additive, backward-compatible)** — addresses online-tools ISSUE-20260621-formulab-weldheat-recommendations-no-code, where consumers could only render the English `recommendations` prose and `preheatTemp.source` string (i18n required brittle reverse-mapping or re-implementing the branch logic — both layer-violating anti-patterns). The result now also carries:
20
+ - `preheatTemp.sourceCode: 'awsTable' | 'awsJudgment' | 'engineeringJudgment'` alongside the unchanged `source` string.
21
+ - `recommendationCodes: { code, params }[]` parallel (index-aligned) to `recommendations`, with stable codes (`preheat`, `fastCooling`, `pwht`, `stainlessInterpass`, …) and interpolation params (e.g. `{ min, max, source }`, `{ t85 }`, `{ hazHardnessMax }`). Consumers map `code` → a localized template and interpolate `params`. The existing `recommendations`/`source` strings are untouched.
22
+
23
+ ## [0.13.6] - 2026-06-21
24
+
25
+ ### Changed (breaking within 0.x)
26
+
27
+ - **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:
28
+ - **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).
29
+ - **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).
30
+ - **electronics**: `smtTakt()` (placementRate/componentsPerBoard ≤ 0), `solderPaste()` (padCount/stencilThickness ≤ 0).
31
+ - **energy**: `motorEfficiency()` (currentEfficiency/newEfficiency ≤ 0).
32
+ - **automotive**: `batteryRuntime()` (capacityAh ≤ 0 — completing the voltageV/loadW guards added in 0.13.5).
33
+ - **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).
34
+ - **quality**: `aql()` (lotSize ≤ 0).
35
+ - **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).
36
+ - **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.
37
+
8
38
  ## [0.13.5] - 2026-06-18
9
39
 
10
40
  ### Changed (breaking within 0.x)
@@ -9,7 +9,7 @@ import type { BatteryInput, BatteryResult } from './types.js';
9
9
  *
10
10
  * @param input - Battery parameters
11
11
  * @returns Battery result with energy and runtime
12
- * @throws RangeError if voltageV is not greater than 0, or if loadW is not greater than 0
12
+ * @throws RangeError if capacityAh, voltageV, or loadW is not greater than 0
13
13
  */
14
14
  export declare function batteryRuntime(input: BatteryInput): BatteryResult;
15
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;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAuBjE"}
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,10 +9,13 @@ import { roundTo } from '../utils.js';
9
9
  *
10
10
  * @param input - Battery parameters
11
11
  * @returns Battery result with energy and runtime
12
- * @throws RangeError if voltageV is not greater than 0, or if loadW is not greater than 0
12
+ * @throws RangeError if capacityAh, voltageV, or loadW is not greater than 0
13
13
  */
14
14
  export function batteryRuntime(input) {
15
15
  const { capacityAh, voltageV, loadW, efficiency } = input;
16
+ if (capacityAh <= 0) {
17
+ throw new RangeError('capacityAh must be greater than 0');
18
+ }
16
19
  if (voltageV <= 0) {
17
20
  throw new RangeError('voltageV must be greater than 0');
18
21
  }
@@ -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;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAAC,KAAmB;IAChD,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;IAE1D,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAClB,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;IACvD,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;IACvC,MAAM,SAAS,GAAG,QAAQ,GAAG,IAAI,CAAC;IAClC,MAAM,YAAY,GAAG,CAAC,QAAQ,GAAG,UAAU,CAAC,GAAG,KAAK,CAAC;IACrD,MAAM,cAAc,GAAG,YAAY,GAAG,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,KAAK,GAAG,QAAQ,CAAC;IAErC,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;KACrC,CAAC;AACJ,CAAC"}
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"}
@@ -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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"}
@@ -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"}
@@ -1 +1 @@
1
- {"version":3,"file":"motorEfficiency.d.ts","sourceRoot":"","sources":["../../src/energy/motorEfficiency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAgDlF"}
1
+ {"version":3,"file":"motorEfficiency.d.ts","sourceRoot":"","sources":["../../src/energy/motorEfficiency.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE9E;;;;;;;;;;GAUG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CA6ClF"}
@@ -12,14 +12,11 @@
12
12
  export function motorEfficiency(input) {
13
13
  const { motorPower, runningHours, currentEfficiency, newEfficiency, electricityRate, loadFactor, upgradeCost, } = input;
14
14
  // Handle edge case - invalid efficiency values
15
- if (currentEfficiency <= 0 || newEfficiency <= 0) {
16
- return {
17
- currentAnnualCost: 0,
18
- newAnnualCost: 0,
19
- annualSavings: 0,
20
- energySavings: 0,
21
- paybackPeriod: null,
22
- };
15
+ if (currentEfficiency <= 0) {
16
+ throw new RangeError('currentEfficiency must be greater than 0');
17
+ }
18
+ if (newEfficiency <= 0) {
19
+ throw new RangeError('newEfficiency must be greater than 0');
23
20
  }
24
21
  // Calculate annual energy consumption for each efficiency level
25
22
  // Energy = Power * Hours * LoadFactor / Efficiency
@@ -1 +1 @@
1
- {"version":3,"file":"motorEfficiency.js","sourceRoot":"","sources":["../../src/energy/motorEfficiency.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,EACJ,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,UAAU,EACV,WAAW,GACZ,GAAG,KAAK,CAAC;IAEV,+CAA+C;IAC/C,IAAI,iBAAiB,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACjD,OAAO;YACL,iBAAiB,EAAE,CAAC;YACpB,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,CAAC;YAChB,aAAa,EAAE,IAAI;SACpB,CAAC;IACJ,CAAC;IAED,gEAAgE;IAChE,mDAAmD;IACnD,MAAM,mBAAmB,GAAG,CAAC,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC,GAAG,iBAAiB,CAAC;IACzF,MAAM,eAAe,GAAG,CAAC,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC,GAAG,aAAa,CAAC;IAEjF,yBAAyB;IACzB,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,eAAe,CAAC;IAChE,MAAM,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;IAExD,oBAAoB;IACpB,MAAM,aAAa,GAAG,iBAAiB,GAAG,aAAa,CAAC;IACxD,MAAM,aAAa,GAAG,mBAAmB,GAAG,eAAe,CAAC;IAE5D,2BAA2B;IAC3B,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtE,aAAa,GAAG,WAAW,GAAG,aAAa,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,iBAAiB;QACjB,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KACd,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"motorEfficiency.js","sourceRoot":"","sources":["../../src/energy/motorEfficiency.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,EACJ,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,UAAU,EACV,WAAW,GACZ,GAAG,KAAK,CAAC;IAEV,+CAA+C;IAC/C,IAAI,iBAAiB,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;IAC/D,CAAC;IAED,gEAAgE;IAChE,mDAAmD;IACnD,MAAM,mBAAmB,GAAG,CAAC,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC,GAAG,iBAAiB,CAAC;IACzF,MAAM,eAAe,GAAG,CAAC,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC,GAAG,aAAa,CAAC;IAEjF,yBAAyB;IACzB,MAAM,iBAAiB,GAAG,mBAAmB,GAAG,eAAe,CAAC;IAChE,MAAM,aAAa,GAAG,eAAe,GAAG,eAAe,CAAC;IAExD,oBAAoB;IACpB,MAAM,aAAa,GAAG,iBAAiB,GAAG,aAAa,CAAC;IACxD,MAAM,aAAa,GAAG,mBAAmB,GAAG,eAAe,CAAC;IAE5D,2BAA2B;IAC3B,IAAI,aAAa,GAAkB,IAAI,CAAC;IACxC,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtE,aAAa,GAAG,WAAW,GAAG,aAAa,CAAC;IAC9C,CAAC;IAED,OAAO;QACL,iBAAiB;QACjB,aAAa;QACb,aAAa;QACb,aAAa;QACb,aAAa;KACd,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"dimWeight.d.ts","sourceRoot":"","sources":["../../src/logistics/dimWeight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAa/E;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CAgChE"}
1
+ {"version":3,"file":"dimWeight.d.ts","sourceRoot":"","sources":["../../src/logistics/dimWeight.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAe,MAAM,YAAY,CAAC;AAa/E;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,eAAe,CA0BhE"}
@@ -21,16 +21,14 @@ const DIM_FACTORS = {
21
21
  */
22
22
  export function dimWeight(input) {
23
23
  const { length, width, height, actualWeight, carrier } = input;
24
- // Handle zero/invalid inputs
25
- if (length <= 0 || width <= 0 || height <= 0 || actualWeight < 0) {
26
- return {
27
- dimensionalWeight: 0,
28
- actualWeight: 0,
29
- billableWeight: 0,
30
- dimFactor: DIM_FACTORS[carrier],
31
- isDimWeightHigher: false,
32
- };
33
- }
24
+ if (length <= 0)
25
+ throw new RangeError('length must be greater than 0');
26
+ if (width <= 0)
27
+ throw new RangeError('width must be greater than 0');
28
+ if (height <= 0)
29
+ throw new RangeError('height must be greater than 0');
30
+ if (actualWeight < 0)
31
+ throw new RangeError('actualWeight must not be negative');
34
32
  const dimFactor = DIM_FACTORS[carrier];
35
33
  // Dimensional weight = (L × W × H) / DIM factor
36
34
  // Input is in cm, output in kg
@@ -1 +1 @@
1
- {"version":3,"file":"dimWeight.js","sourceRoot":"","sources":["../../src/logistics/dimWeight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,qEAAqE;AACrE,6BAA6B;AAC7B,mEAAmE;AACnE,wEAAwE;AACxE,4DAA4D;AAC5D,MAAM,WAAW,GAAgC;IAC/C,YAAY,EAAE,IAAI;IAClB,iBAAiB,EAAE,IAAI;IACvB,MAAM,EAAE,IAAI;CACb,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE/D,6BAA6B;IAC7B,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACjE,OAAO;YACL,iBAAiB,EAAE,CAAC;YACpB,YAAY,EAAE,CAAC;YACf,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,WAAW,CAAC,OAAO,CAAC;YAC/B,iBAAiB,EAAE,KAAK;SACzB,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEvC,gDAAgD;IAChD,+BAA+B;IAC/B,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1C,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAErD,2DAA2D;IAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IAExE,OAAO;QACL,iBAAiB;QACjB,YAAY,EAAE,mBAAmB;QACjC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,SAAS;QACT,iBAAiB,EAAE,iBAAiB,GAAG,mBAAmB;KAC3D,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"dimWeight.js","sourceRoot":"","sources":["../../src/logistics/dimWeight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,qEAAqE;AACrE,6BAA6B;AAC7B,mEAAmE;AACnE,wEAAwE;AACxE,4DAA4D;AAC5D,MAAM,WAAW,GAAgC;IAC/C,YAAY,EAAE,IAAI;IAClB,iBAAiB,EAAE,IAAI;IACvB,MAAM,EAAE,IAAI;CACb,CAAC;AAEF;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,KAAqB;IAC7C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;IAE/D,IAAI,MAAM,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,+BAA+B,CAAC,CAAC;IACvE,IAAI,KAAK,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;IACrE,IAAI,MAAM,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,+BAA+B,CAAC,CAAC;IACvE,IAAI,YAAY,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,mCAAmC,CAAC,CAAC;IAEhF,MAAM,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEvC,gDAAgD;IAChD,+BAA+B;IAC/B,MAAM,SAAS,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1C,MAAM,iBAAiB,GAAG,OAAO,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC;IAC5D,MAAM,mBAAmB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAErD,2DAA2D;IAC3D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;IAExE,OAAO;QACL,iBAAiB;QACjB,YAAY,EAAE,mBAAmB;QACjC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,SAAS;QACT,iBAAiB,EAAE,iBAAiB,GAAG,mBAAmB;KAC3D,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fillRate.d.ts","sourceRoot":"","sources":["../../src/logistics/fillRate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CA2B7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CA0BzE"}
1
+ {"version":3,"file":"fillRate.d.ts","sourceRoot":"","sources":["../../src/logistics/fillRate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EACnB,MAAM,YAAY,CAAC;AAEpB;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAmB7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CA0BzE"}
@@ -11,15 +11,8 @@ import { normalCDF } from '../math.js';
11
11
  */
12
12
  export function fillRate(input) {
13
13
  const { totalOrders, filledComplete } = input;
14
- // Handle zero/invalid inputs
15
- if (totalOrders <= 0) {
16
- return {
17
- fillRate: 0,
18
- shortfallRate: 100,
19
- filledComplete: 0,
20
- shortfall: 0,
21
- };
22
- }
14
+ if (totalOrders <= 0)
15
+ throw new RangeError('totalOrders must be greater than 0');
23
16
  // Clamp filledComplete to valid range
24
17
  const actualFilled = Math.min(Math.max(0, filledComplete), totalOrders);
25
18
  const shortfall = totalOrders - actualFilled;
@@ -1 +1 @@
1
- {"version":3,"file":"fillRate.js","sourceRoot":"","sources":["../../src/logistics/fillRate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAE9C,6BAA6B;IAC7B,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,aAAa,EAAE,GAAG;YAClB,cAAc,EAAE,CAAC;YACjB,SAAS,EAAE,CAAC;SACb,CAAC;IACJ,CAAC;IAED,sCAAsC;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;IAE7C,sBAAsB;IACtB,MAAM,IAAI,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC;IAChD,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC;IAEjC,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1B,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACxC,cAAc,EAAE,YAAY;QAC5B,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAE5C,6BAA6B;IAC7B,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,CAAC;YACT,YAAY,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACxC,mBAAmB,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;SAC9C,CAAC;IACJ,CAAC;IAED,gDAAgD;IAChD,MAAM,MAAM,GAAG,WAAW,GAAG,YAAY,CAAC;IAE1C,2DAA2D;IAC3D,mEAAmE;IACnE,kCAAkC;IAClC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;IACtC,MAAM,mBAAmB,GAAG,GAAG,GAAG,KAAK,CAAC;IAExC,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1B,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;KACrD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"fillRate.js","sourceRoot":"","sources":["../../src/logistics/fillRate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQvC;;;;;;;;GAQG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAE9C,IAAI,WAAW,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;IAEjF,sCAAsC;IACtC,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,cAAc,CAAC,EAAE,WAAW,CAAC,CAAC;IACxE,MAAM,SAAS,GAAG,WAAW,GAAG,YAAY,CAAC;IAE7C,sBAAsB;IACtB,MAAM,IAAI,GAAG,CAAC,YAAY,GAAG,WAAW,CAAC,GAAG,GAAG,CAAC;IAChD,MAAM,aAAa,GAAG,GAAG,GAAG,IAAI,CAAC;IAEjC,OAAO;QACL,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1B,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QACxC,cAAc,EAAE,YAAY;QAC5B,SAAS;KACV,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAE5C,6BAA6B;IAC7B,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO;YACL,MAAM,EAAE,CAAC;YACT,YAAY,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YACxC,mBAAmB,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;SAC9C,CAAC;IACJ,CAAC;IAED,gDAAgD;IAChD,MAAM,MAAM,GAAG,WAAW,GAAG,YAAY,CAAC;IAE1C,2DAA2D;IAC3D,mEAAmE;IACnE,kCAAkC;IAClC,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;IACtC,MAAM,mBAAmB,GAAG,GAAG,GAAG,KAAK,CAAC;IAExC,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC1B,YAAY,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC/B,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;KACrD,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"freightClass.d.ts","sourceRoot":"","sources":["../../src/logistics/freightClass.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA2BxE;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAsCzE"}
1
+ {"version":3,"file":"freightClass.d.ts","sourceRoot":"","sources":["../../src/logistics/freightClass.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AA2BxE;;;;;;;;GAQG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAiCzE"}
@@ -34,15 +34,14 @@ const FREIGHT_CLASS_TABLE = [
34
34
  */
35
35
  export function freightClass(input) {
36
36
  const { weight, length, width, height } = input;
37
- // Handle zero/invalid inputs
38
- if (weight <= 0 || length <= 0 || width <= 0 || height <= 0) {
39
- return {
40
- density: 0,
41
- freightClass: 0,
42
- className: 'Invalid Input',
43
- volumeCuFt: 0,
44
- };
45
- }
37
+ if (weight <= 0)
38
+ throw new RangeError('weight must be greater than 0');
39
+ if (length <= 0)
40
+ throw new RangeError('length must be greater than 0');
41
+ if (width <= 0)
42
+ throw new RangeError('width must be greater than 0');
43
+ if (height <= 0)
44
+ throw new RangeError('height must be greater than 0');
46
45
  // Calculate volume in cubic feet (input is in inches)
47
46
  const volumeCuIn = length * width * height;
48
47
  const volumeCuFt = volumeCuIn / 1728; // 12^3 = 1728 cubic inches per cubic foot
@@ -1 +1 @@
1
- {"version":3,"file":"freightClass.js","sourceRoot":"","sources":["../../src/logistics/freightClass.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"freightClass.js","sourceRoot":"","sources":["../../src/logistics/freightClass.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"kanban.d.ts","sourceRoot":"","sources":["../../src/logistics/kanban.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CAoCvD"}
1
+ {"version":3,"file":"kanban.d.ts","sourceRoot":"","sources":["../../src/logistics/kanban.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE5D;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CAwCvD"}
@@ -17,8 +17,14 @@ import { roundTo } from '../utils.js';
17
17
  */
18
18
  export function kanban(input) {
19
19
  const { dailyDemand, leadTime, safetyFactor, containerQuantity } = input;
20
- // Handle zero/invalid inputs
21
- if (dailyDemand <= 0 || leadTime <= 0 || containerQuantity <= 0 || safetyFactor < 0) {
20
+ if (dailyDemand <= 0)
21
+ throw new RangeError('dailyDemand must be greater than 0');
22
+ if (leadTime <= 0)
23
+ throw new RangeError('leadTime must be greater than 0');
24
+ if (containerQuantity <= 0)
25
+ throw new RangeError('containerQuantity must be greater than 0');
26
+ // Negative safety factor is invalid but returns a zero result (not a throw)
27
+ if (safetyFactor < 0) {
22
28
  return {
23
29
  numberOfKanbans: 0,
24
30
  numberOfKanbansRounded: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"kanban.js","sourceRoot":"","sources":["../../src/logistics/kanban.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAC;IAEzE,6BAA6B;IAC7B,IAAI,WAAW,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,iBAAiB,IAAI,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACpF,OAAO;YACL,eAAe,EAAE,CAAC;YAClB,sBAAsB,EAAE,CAAC;YACzB,oBAAoB,EAAE,CAAC;YACvB,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,CAAC;SACpB,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,MAAM,oBAAoB,GAAG,OAAO,CAAC,WAAW,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;IAEhE,yBAAyB;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC;IAE/D,8BAA8B;IAC9B,MAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/E,8BAA8B;IAC9B,MAAM,eAAe,GAAG,OAAO,CAAC,gBAAgB,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC;IAEzE,qEAAqE;IACrE,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE1D,OAAO;QACL,eAAe;QACf,sBAAsB;QACtB,oBAAoB;QACpB,WAAW,EAAE,MAAM;QACnB,gBAAgB;KACjB,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"kanban.js","sourceRoot":"","sources":["../../src/logistics/kanban.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAC;IAEzE,IAAI,WAAW,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;IACjF,IAAI,QAAQ,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC3E,IAAI,iBAAiB,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,CAAC;IAE7F,4EAA4E;IAC5E,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;QACrB,OAAO;YACL,eAAe,EAAE,CAAC;YAClB,sBAAsB,EAAE,CAAC;YACzB,oBAAoB,EAAE,CAAC;YACvB,WAAW,EAAE,CAAC;YACd,gBAAgB,EAAE,CAAC;SACpB,CAAC;IACJ,CAAC;IAED,oCAAoC;IACpC,MAAM,oBAAoB,GAAG,OAAO,CAAC,WAAW,GAAG,QAAQ,EAAE,CAAC,CAAC,CAAC;IAEhE,yBAAyB;IACzB,MAAM,MAAM,GAAG,OAAO,CAAC,oBAAoB,GAAG,YAAY,EAAE,CAAC,CAAC,CAAC;IAE/D,8BAA8B;IAC9B,MAAM,gBAAgB,GAAG,OAAO,CAAC,oBAAoB,GAAG,CAAC,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/E,8BAA8B;IAC9B,MAAM,eAAe,GAAG,OAAO,CAAC,gBAAgB,GAAG,iBAAiB,EAAE,CAAC,CAAC,CAAC;IAEzE,qEAAqE;IACrE,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAE1D,OAAO;QACL,eAAe;QACf,sBAAsB;QACtB,oBAAoB;QACpB,WAAW,EAAE,MAAM;QACnB,gBAAgB;KACjB,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"pickTime.d.ts","sourceRoot":"","sources":["../../src/logistics/pickTime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CAqE7D"}
1
+ {"version":3,"file":"pickTime.d.ts","sourceRoot":"","sources":["../../src/logistics/pickTime.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,cAAc,CA2D7D"}
@@ -15,18 +15,10 @@ import { roundTo } from '../utils.js';
15
15
  */
16
16
  export function pickTime(input) {
17
17
  const { mode, distance, speed, itemsPerOrder, searchTimePerItem, pickTimePerItem, documentationTime, batchSize = 1, } = input;
18
- // Handle zero/invalid inputs
19
- if (speed <= 0 || itemsPerOrder <= 0) {
20
- return {
21
- travelTime: 0,
22
- searchTime: 0,
23
- pickTime: 0,
24
- documentationTime: 0,
25
- totalTime: 0,
26
- totalTimeMinutes: 0,
27
- ordersPerHour: 0,
28
- };
29
- }
18
+ if (speed <= 0)
19
+ throw new RangeError('speed must be greater than 0');
20
+ if (itemsPerOrder <= 0)
21
+ throw new RangeError('itemsPerOrder must be greater than 0');
30
22
  // Calculate base times
31
23
  // Travel time = distance / speed, convert to seconds (speed is per minute)
32
24
  const baseTravelTime = (distance / speed) * 60;
@@ -1 +1 @@
1
- {"version":3,"file":"pickTime.js","sourceRoot":"","sources":["../../src/logistics/pickTime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,SAAS,GAAG,CAAC,GACd,GAAG,KAAK,CAAC;IAEV,6BAA6B;IAC7B,IAAI,KAAK,IAAI,CAAC,IAAI,aAAa,IAAI,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,UAAU,EAAE,CAAC;YACb,UAAU,EAAE,CAAC;YACb,QAAQ,EAAE,CAAC;YACX,iBAAiB,EAAE,CAAC;YACpB,SAAS,EAAE,CAAC;YACZ,gBAAgB,EAAE,CAAC;YACnB,aAAa,EAAE,CAAC;SACjB,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,2EAA2E;IAC3E,MAAM,cAAc,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IAE/C,yCAAyC;IACzC,MAAM,cAAc,GAAG,aAAa,GAAG,iBAAiB,CAAC;IACzD,MAAM,YAAY,GAAG,aAAa,GAAG,eAAe,CAAC;IAErD,IAAI,UAAkB,CAAC;IACvB,IAAI,UAAkB,CAAC;IACvB,IAAI,IAAY,CAAC;IACjB,IAAI,OAAe,CAAC;IAEpB,IAAI,IAAI,KAAK,OAAO,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACtC,0DAA0D;QAC1D,4DAA4D;QAC5D,6BAA6B;QAC7B,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;QACxC,UAAU,GAAG,cAAc,CAAC,CAAC,YAAY;QACzC,IAAI,GAAG,YAAY,CAAC,CAAC,YAAY;QACjC,OAAO,GAAG,iBAAiB,CAAC,CAAC,YAAY;IAC3C,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,UAAU,GAAG,cAAc,CAAC;QAC5B,UAAU,GAAG,cAAc,CAAC;QAC5B,IAAI,GAAG,YAAY,CAAC;QACpB,OAAO,GAAG,iBAAiB,CAAC;IAC9B,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC;IAC3D,MAAM,gBAAgB,GAAG,SAAS,GAAG,EAAE,CAAC;IAExC,8BAA8B;IAC9B,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1B,iBAAiB,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC9C,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;KACzC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"pickTime.js","sourceRoot":"","sources":["../../src/logistics/pickTime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAoB;IAC3C,MAAM,EACJ,IAAI,EACJ,QAAQ,EACR,KAAK,EACL,aAAa,EACb,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EACjB,SAAS,GAAG,CAAC,GACd,GAAG,KAAK,CAAC;IAEV,IAAI,KAAK,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;IACrE,IAAI,aAAa,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,sCAAsC,CAAC,CAAC;IAErF,uBAAuB;IACvB,2EAA2E;IAC3E,MAAM,cAAc,GAAG,CAAC,QAAQ,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC;IAE/C,yCAAyC;IACzC,MAAM,cAAc,GAAG,aAAa,GAAG,iBAAiB,CAAC;IACzD,MAAM,YAAY,GAAG,aAAa,GAAG,eAAe,CAAC;IAErD,IAAI,UAAkB,CAAC;IACvB,IAAI,UAAkB,CAAC;IACvB,IAAI,IAAY,CAAC;IACjB,IAAI,OAAe,CAAC;IAEpB,IAAI,IAAI,KAAK,OAAO,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;QACtC,0DAA0D;QAC1D,4DAA4D;QAC5D,6BAA6B;QAC7B,UAAU,GAAG,cAAc,GAAG,SAAS,CAAC;QACxC,UAAU,GAAG,cAAc,CAAC,CAAC,YAAY;QACzC,IAAI,GAAG,YAAY,CAAC,CAAC,YAAY;QACjC,OAAO,GAAG,iBAAiB,CAAC,CAAC,YAAY;IAC3C,CAAC;SAAM,CAAC;QACN,uBAAuB;QACvB,UAAU,GAAG,cAAc,CAAC;QAC5B,UAAU,GAAG,cAAc,CAAC;QAC5B,IAAI,GAAG,YAAY,CAAC;QACpB,OAAO,GAAG,iBAAiB,CAAC;IAC9B,CAAC;IAED,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,GAAG,OAAO,CAAC;IAC3D,MAAM,gBAAgB,GAAG,SAAS,GAAG,EAAE,CAAC;IAExC,8BAA8B;IAC9B,MAAM,aAAa,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3D,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1B,iBAAiB,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QACtC,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC9C,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;KACzC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"bolt.d.ts","sourceRoot":"","sources":["../../src/metal/bolt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAyFjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyBzD"}
1
+ {"version":3,"file":"bolt.d.ts","sourceRoot":"","sources":["../../src/metal/bolt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,IAAI,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CA2DjD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQpD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAyBzD"}