formulab 0.13.6 → 0.13.8

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 (59) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/metal/index.d.ts +1 -1
  3. package/dist/metal/index.d.ts.map +1 -1
  4. package/dist/metal/index.js.map +1 -1
  5. package/dist/metal/types.d.ts +23 -0
  6. package/dist/metal/types.d.ts.map +1 -1
  7. package/dist/metal/weldHeat.d.ts +5 -1
  8. package/dist/metal/weldHeat.d.ts.map +1 -1
  9. package/dist/metal/weldHeat.js +31 -4
  10. package/dist/metal/weldHeat.js.map +1 -1
  11. package/dist/safety/arcFlash.d.ts +3 -0
  12. package/dist/safety/arcFlash.d.ts.map +1 -1
  13. package/dist/safety/arcFlash.js +18 -0
  14. package/dist/safety/arcFlash.js.map +1 -1
  15. package/dist/safety/confinedSpace.d.ts +5 -0
  16. package/dist/safety/confinedSpace.d.ts.map +1 -1
  17. package/dist/safety/confinedSpace.js +20 -0
  18. package/dist/safety/confinedSpace.js.map +1 -1
  19. package/dist/safety/ergonomicRisk.d.ts +4 -0
  20. package/dist/safety/ergonomicRisk.d.ts.map +1 -1
  21. package/dist/safety/ergonomicRisk.js +7 -0
  22. package/dist/safety/ergonomicRisk.js.map +1 -1
  23. package/dist/safety/fallClearance.d.ts +5 -0
  24. package/dist/safety/fallClearance.d.ts.map +1 -1
  25. package/dist/safety/fallClearance.js +16 -0
  26. package/dist/safety/fallClearance.js.map +1 -1
  27. package/dist/safety/havsCalculate.d.ts +3 -0
  28. package/dist/safety/havsCalculate.d.ts.map +1 -1
  29. package/dist/safety/havsCalculate.js +8 -0
  30. package/dist/safety/havsCalculate.js.map +1 -1
  31. package/dist/safety/illuminance.d.ts +2 -0
  32. package/dist/safety/illuminance.d.ts.map +1 -1
  33. package/dist/safety/illuminance.js +4 -16
  34. package/dist/safety/illuminance.js.map +1 -1
  35. package/dist/safety/ladderAngle.d.ts +2 -0
  36. package/dist/safety/ladderAngle.d.ts.map +1 -1
  37. package/dist/safety/ladderAngle.js +14 -0
  38. package/dist/safety/ladderAngle.js.map +1 -1
  39. package/dist/safety/lel.d.ts +5 -0
  40. package/dist/safety/lel.d.ts.map +1 -1
  41. package/dist/safety/lel.js +19 -6
  42. package/dist/safety/lel.js.map +1 -1
  43. package/dist/safety/nioshLifting.d.ts +5 -0
  44. package/dist/safety/nioshLifting.d.ts.map +1 -1
  45. package/dist/safety/nioshLifting.js +13 -0
  46. package/dist/safety/nioshLifting.js.map +1 -1
  47. package/dist/safety/noiseExposure.d.ts +3 -0
  48. package/dist/safety/noiseExposure.d.ts.map +1 -1
  49. package/dist/safety/noiseExposure.js +8 -0
  50. package/dist/safety/noiseExposure.js.map +1 -1
  51. package/dist/safety/respiratorCalculate.d.ts +3 -0
  52. package/dist/safety/respiratorCalculate.d.ts.map +1 -1
  53. package/dist/safety/respiratorCalculate.js +10 -2
  54. package/dist/safety/respiratorCalculate.js.map +1 -1
  55. package/dist/safety/thermalComfort.d.ts +5 -0
  56. package/dist/safety/thermalComfort.d.ts.map +1 -1
  57. package/dist/safety/thermalComfort.js +17 -0
  58. package/dist/safety/thermalComfort.js.map +1 -1
  59. package/package.json +1 -1
@@ -16,11 +16,27 @@ import { roundTo } from '../utils.js';
16
16
  *
17
17
  * @param input - Fall clearance parameters
18
18
  * @returns Fall clearance results including adequacy assessment and warnings
19
+ * @throws {RangeError} workerHeight ≤ 0, or any distance (lanyardLength,
20
+ * decelerationDistance, harnessStretch, safetyFactor, rescueClearance,
21
+ * obstacleHeight) is negative.
22
+ * @remarks anchorHeight ≤ 0 is NOT rejected: it is a valid (dangerous) geometry
23
+ * that the function reports as isAdequate=false with a warning.
19
24
  */
20
25
  export function fallClearance(input) {
21
26
  const { lanyardLength, decelerationDistance, harnessStretch, workerHeight, safetyFactor, anchorHeight, rescueClearance = 0.9, // ANSI Z359.4 default minimum
22
27
  obstacleHeight = 0, // Ground level default
23
28
  } = input;
29
+ if (workerHeight <= 0) {
30
+ throw new RangeError('workerHeight must be greater than 0');
31
+ }
32
+ if (lanyardLength < 0 ||
33
+ decelerationDistance < 0 ||
34
+ harnessStretch < 0 ||
35
+ safetyFactor < 0 ||
36
+ rescueClearance < 0 ||
37
+ obstacleHeight < 0) {
38
+ throw new RangeError('lanyardLength, decelerationDistance, harnessStretch, safetyFactor, rescueClearance, and obstacleHeight must not be negative');
39
+ }
24
40
  const warnings = [];
25
41
  // Validate inputs and generate warnings
26
42
  if (lanyardLength > 1.8) {
@@ -1 +1 @@
1
- {"version":3,"file":"fallClearance.js","sourceRoot":"","sources":["../../src/safety/fallClearance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fallClearance.js","sourceRoot":"","sources":["../../src/safety/fallClearance.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,9 @@ import type { HavsInput, HavsResult } from './types.js';
11
11
  *
12
12
  * @param input - HAVS input parameters with tool exposures
13
13
  * @returns HAVS results including A(8), status, and exposure metrics
14
+ * @throws {RangeError} a tool has a negative vibrationMagnitude or exposureTime.
15
+ * @remarks Zero-valued tool entries are treated as unused and filtered out; an empty
16
+ * (or all-zero) tool list is a valid input that reports no exposure.
14
17
  */
15
18
  export declare function havsCalculate(input: HavsInput): HavsResult;
16
19
  //# sourceMappingURL=havsCalculate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"havsCalculate.d.ts","sourceRoot":"","sources":["../../src/safety/havsCalculate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAyEtE;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAkC1D"}
1
+ {"version":3,"file":"havsCalculate.d.ts","sourceRoot":"","sources":["../../src/safety/havsCalculate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAgB,MAAM,YAAY,CAAC;AAyEtE;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG,UAAU,CAwC1D"}
@@ -72,9 +72,17 @@ function calculateMaxDailyExposure(tools) {
72
72
  *
73
73
  * @param input - HAVS input parameters with tool exposures
74
74
  * @returns HAVS results including A(8), status, and exposure metrics
75
+ * @throws {RangeError} a tool has a negative vibrationMagnitude or exposureTime.
76
+ * @remarks Zero-valued tool entries are treated as unused and filtered out; an empty
77
+ * (or all-zero) tool list is a valid input that reports no exposure.
75
78
  */
76
79
  export function havsCalculate(input) {
77
80
  const { tools } = input;
81
+ for (const t of tools) {
82
+ if (t.vibrationMagnitude < 0 || t.exposureTime < 0) {
83
+ throw new RangeError('tool vibrationMagnitude and exposureTime must not be negative');
84
+ }
85
+ }
78
86
  // Filter out empty entries
79
87
  const validTools = tools.filter(t => t.vibrationMagnitude > 0 && t.exposureTime > 0);
80
88
  // Calculate partial exposures for each tool
@@ -1 +1 @@
1
- {"version":3,"file":"havsCalculate.js","sourceRoot":"","sources":["../../src/safety/havsCalculate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"havsCalculate.js","sourceRoot":"","sources":["../../src/safety/havsCalculate.ts"],"names":[],"mappings":"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"}
@@ -8,6 +8,8 @@ import type { IlluminanceInput, IlluminanceResult } from './types.js';
8
8
  *
9
9
  * @param input - Room dimensions and lighting parameters
10
10
  * @returns Number of fixtures needed and lighting metrics
11
+ * @throws {RangeError} roomLength, roomWidth, lumensPerLuminaire, or targetLux ≤ 0,
12
+ * or the mounting height above the workplane (luminaireHeight − workplaneHeight) ≤ 0.
11
13
  */
12
14
  export declare function illuminance(input: IlluminanceInput): IlluminanceResult;
13
15
  //# sourceMappingURL=illuminance.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"illuminance.d.ts","sourceRoot":"","sources":["../../src/safety/illuminance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAgCtE;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAqEtE"}
1
+ {"version":3,"file":"illuminance.d.ts","sourceRoot":"","sources":["../../src/safety/illuminance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAgCtE;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAuDtE"}
@@ -37,30 +37,18 @@ function lookupCU(roomIndex) {
37
37
  *
38
38
  * @param input - Room dimensions and lighting parameters
39
39
  * @returns Number of fixtures needed and lighting metrics
40
+ * @throws {RangeError} roomLength, roomWidth, lumensPerLuminaire, or targetLux ≤ 0,
41
+ * or the mounting height above the workplane (luminaireHeight − workplaneHeight) ≤ 0.
40
42
  */
41
43
  export function illuminance(input) {
42
44
  const { roomLength, roomWidth, luminaireHeight, workplaneHeight = 0.85, targetLux, lumensPerLuminaire, wattsPerLuminaire, cu: cuOverride, mf = 0.8, } = input;
43
45
  if (roomLength <= 0 || roomWidth <= 0 || lumensPerLuminaire <= 0 || targetLux <= 0) {
44
- return {
45
- fixturesNeeded: 0,
46
- actualLux: 0,
47
- roomIndex: 0,
48
- totalLumens: 0,
49
- powerDensity: null,
50
- recommendedSpacing: 0,
51
- };
46
+ throw new RangeError('roomLength, roomWidth, lumensPerLuminaire, and targetLux must all be greater than 0');
52
47
  }
53
48
  const area = roomLength * roomWidth;
54
49
  const hm = luminaireHeight - workplaneHeight;
55
50
  if (hm <= 0) {
56
- return {
57
- fixturesNeeded: 0,
58
- actualLux: 0,
59
- roomIndex: 0,
60
- totalLumens: 0,
61
- powerDensity: null,
62
- recommendedSpacing: 0,
63
- };
51
+ throw new RangeError('luminaireHeight must be greater than workplaneHeight');
64
52
  }
65
53
  // Room Index (Cavity Ratio)
66
54
  const roomIndex = (roomLength * roomWidth) / (hm * (roomLength + roomWidth));
@@ -1 +1 @@
1
- {"version":3,"file":"illuminance.js","sourceRoot":"","sources":["../../src/safety/illuminance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"illuminance.js","sourceRoot":"","sources":["../../src/safety/illuminance.ts"],"names":[],"mappings":"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"}
@@ -11,6 +11,8 @@ import type { LadderAngleInput, LadderAngleResult } from './types.js';
11
11
  *
12
12
  * @param input - Ladder dimensions (2 of 3 required)
13
13
  * @returns Angle, compliance status, and warnings
14
+ * @throws {RangeError} a provided height/baseDistance is negative, or ladderLength ≤ 0
15
+ * when it is used as a given (i.e. height and baseDistance are not both supplied).
14
16
  */
15
17
  export declare function ladderAngle(input: LadderAngleInput): LadderAngleResult;
16
18
  //# sourceMappingURL=ladderAngle.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ladderAngle.d.ts","sourceRoot":"","sources":["../../src/safety/ladderAngle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKtE;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAsEtE"}
1
+ {"version":3,"file":"ladderAngle.d.ts","sourceRoot":"","sources":["../../src/safety/ladderAngle.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAKtE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAmFtE"}
@@ -13,10 +13,24 @@ const RAD = Math.PI / 180;
13
13
  *
14
14
  * @param input - Ladder dimensions (2 of 3 required)
15
15
  * @returns Angle, compliance status, and warnings
16
+ * @throws {RangeError} a provided height/baseDistance is negative, or ladderLength ≤ 0
17
+ * when it is used as a given (i.e. height and baseDistance are not both supplied).
16
18
  */
17
19
  export function ladderAngle(input) {
18
20
  let { ladderLength, height, baseDistance } = input;
19
21
  const warnings = [];
22
+ if (height !== undefined && height < 0) {
23
+ throw new RangeError('height must not be negative');
24
+ }
25
+ if (baseDistance !== undefined && baseDistance < 0) {
26
+ throw new RangeError('baseDistance must not be negative');
27
+ }
28
+ // When both height and baseDistance are given, ladderLength is recalculated and
29
+ // its input value (often a 0 placeholder) is ignored. Otherwise it is a given.
30
+ const bothGiven = height !== undefined && baseDistance !== undefined;
31
+ if (!bothGiven && ladderLength <= 0) {
32
+ throw new RangeError('ladderLength must be greater than 0');
33
+ }
20
34
  // Resolve the third dimension from the other two
21
35
  if (height !== undefined && baseDistance !== undefined) {
22
36
  // Both given: recalculate ladder length
@@ -1 +1 @@
1
- {"version":3,"file":"ladderAngle.js","sourceRoot":"","sources":["../../src/safety/ladderAngle.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ladderAngle.js","sourceRoot":"","sources":["../../src/safety/ladderAngle.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,11 @@ import type { LelInput, LelResult } from './types.js';
9
9
  *
10
10
  * @reference Le Chatelier, H. (1891). Estimation of Firedamp by Flammability Limits.
11
11
  * @reference NFPA 69 — Standard on Explosion Prevention Systems
12
+ *
13
+ * @throws {RangeError} a gas component has a negative concentration or a non-positive LEL.
14
+ * @remarks Status thresholds follow the industry %LEL convention (matching
15
+ * {@link confinedSpace}): safe < 10%, caution 10–25%, danger > 25%. An empty
16
+ * gas list (no flammable gas present) is a valid input that reports 'safe'.
12
17
  */
13
18
  export declare function lel(input: LelInput): LelResult;
14
19
  //# sourceMappingURL=lel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lel.d.ts","sourceRoot":"","sources":["../../src/safety/lel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;;;;GAUG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CA0D9C"}
1
+ {"version":3,"file":"lel.d.ts","sourceRoot":"","sources":["../../src/safety/lel.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEtD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CAmE9C"}
@@ -9,9 +9,22 @@ import { roundTo } from '../utils.js';
9
9
  *
10
10
  * @reference Le Chatelier, H. (1891). Estimation of Firedamp by Flammability Limits.
11
11
  * @reference NFPA 69 — Standard on Explosion Prevention Systems
12
+ *
13
+ * @throws {RangeError} a gas component has a negative concentration or a non-positive LEL.
14
+ * @remarks Status thresholds follow the industry %LEL convention (matching
15
+ * {@link confinedSpace}): safe < 10%, caution 10–25%, danger > 25%. An empty
16
+ * gas list (no flammable gas present) is a valid input that reports 'safe'.
12
17
  */
13
18
  export function lel(input) {
14
19
  const { gases } = input;
20
+ for (const gas of gases) {
21
+ if (gas.concentration < 0) {
22
+ throw new RangeError(`gas "${gas.name}" concentration must not be negative`);
23
+ }
24
+ if (gas.lel <= 0) {
25
+ throw new RangeError(`gas "${gas.name}" LEL must be greater than 0`);
26
+ }
27
+ }
15
28
  const totalConcentration = gases.reduce((s, g) => s + g.concentration, 0);
16
29
  if (totalConcentration === 0 || gases.length === 0) {
17
30
  return {
@@ -28,9 +41,8 @@ export function lel(input) {
28
41
  const contributions = [];
29
42
  for (const gas of gases) {
30
43
  const yi = gas.concentration / totalConcentration;
31
- if (gas.lel > 0) {
32
- sumFractionOverLel += yi / gas.lel;
33
- }
44
+ // gas.lel > 0 is guaranteed by input validation above
45
+ sumFractionOverLel += yi / gas.lel;
34
46
  contributions.push({
35
47
  name: gas.name,
36
48
  fraction: roundTo(yi * 100, 2),
@@ -43,12 +55,13 @@ export function lel(input) {
43
55
  const safetyMargin = mixtureLel > 0
44
56
  ? mixtureLel - totalConcentration
45
57
  : 0;
46
- // Status
58
+ // Status — industry %LEL convention (matches confinedSpace):
59
+ // safe < 10%, caution 10–25%, danger > 25%
47
60
  let status;
48
- if (percentOfLel < 25) {
61
+ if (percentOfLel < 10) {
49
62
  status = 'safe';
50
63
  }
51
- else if (percentOfLel < 50) {
64
+ else if (percentOfLel <= 25) {
52
65
  status = 'caution';
53
66
  }
54
67
  else {
@@ -1 +1 @@
1
- {"version":3,"file":"lel.js","sourceRoot":"","sources":["../../src/safety/lel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,GAAG,CAAC,KAAe;IACjC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAExB,MAAM,kBAAkB,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;IAE1E,IAAI,kBAAkB,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO;YACL,UAAU,EAAE,CAAC;YACb,kBAAkB,EAAE,CAAC;YACrB,YAAY,EAAE,CAAC;YACf,MAAM,EAAE,MAAM;YACd,YAAY,EAAE,CAAC;YACf,aAAa,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;SAC/D,CAAC;IACJ,CAAC;IAED,wCAAwC;IACxC,IAAI,kBAAkB,GAAG,CAAC,CAAC;IAC3B,MAAM,aAAa,GAAyC,EAAE,CAAC;IAE/D,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;QACxB,MAAM,EAAE,GAAG,GAAG,CAAC,aAAa,GAAG,kBAAkB,CAAC;QAClD,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;YAChB,kBAAkB,IAAI,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC;QACrC,CAAC;QACD,aAAa,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,EAAE,CAAC,CAAC;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,UAAU,GAAG,kBAAkB,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,UAAU,GAAG,CAAC;QACjC,CAAC,CAAC,CAAC,kBAAkB,GAAG,UAAU,CAAC,GAAG,GAAG;QACzC,CAAC,CAAC,CAAC,CAAC;IAEN,MAAM,YAAY,GAAG,UAAU,GAAG,CAAC;QACjC,CAAC,CAAC,UAAU,GAAG,kBAAkB;QACjC,CAAC,CAAC,CAAC,CAAC;IAEN,SAAS;IACT,IAAI,MAA2B,CAAC;IAChC,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;QACtB,MAAM,GAAG,MAAM,CAAC;IAClB,CAAC;SAAM,IAAI,YAAY,GAAG,EAAE,EAAE,CAAC;QAC7B,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,QAAQ,CAAC;IACpB,CAAC;IAED,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,kBAAkB,EAAE,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAClD,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,MAAM;QACN,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,aAAa;KACd,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"lel.js","sourceRoot":"","sources":["../../src/safety/lel.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,11 @@ import type { NioshInput, NioshResult } from './types.js';
25
25
  *
26
26
  * @param input - NIOSH lifting parameters
27
27
  * @returns NIOSH results including RWL, LI, multipliers, and risk level
28
+ * @throws {RangeError} any distance, angle, frequency, or loadWeight is negative.
29
+ * @remarks Distances below the equation's domain (H, D < 25 cm) are clamped per the
30
+ * NIOSH spec rather than rejected. When the frequency multiplier drives RWL to 0
31
+ * (sustained high-frequency lifting), liftingIndex is Infinity — an intentional
32
+ * sentinel meaning "no weight is acceptable for this task".
28
33
  */
29
34
  export declare function nioshLifting(input: NioshInput): NioshResult;
30
35
  //# sourceMappingURL=nioshLifting.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"nioshLifting.d.ts","sourceRoot":"","sources":["../../src/safety/nioshLifting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAGZ,MAAM,YAAY,CAAC;AAoHpB;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CA4D3D"}
1
+ {"version":3,"file":"nioshLifting.d.ts","sourceRoot":"","sources":["../../src/safety/nioshLifting.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EACV,WAAW,EAGZ,MAAM,YAAY,CAAC;AAoHpB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,WAAW,CAuE3D"}
@@ -125,9 +125,22 @@ function getCouplingMultiplier(coupling, verticalDistance) {
125
125
  *
126
126
  * @param input - NIOSH lifting parameters
127
127
  * @returns NIOSH results including RWL, LI, multipliers, and risk level
128
+ * @throws {RangeError} any distance, angle, frequency, or loadWeight is negative.
129
+ * @remarks Distances below the equation's domain (H, D < 25 cm) are clamped per the
130
+ * NIOSH spec rather than rejected. When the frequency multiplier drives RWL to 0
131
+ * (sustained high-frequency lifting), liftingIndex is Infinity — an intentional
132
+ * sentinel meaning "no weight is acceptable for this task".
128
133
  */
129
134
  export function nioshLifting(input) {
130
135
  const { horizontalDistance, verticalDistance, verticalTravel, asymmetryAngle, frequency, duration, coupling, loadWeight, } = input;
136
+ if (horizontalDistance < 0 ||
137
+ verticalDistance < 0 ||
138
+ verticalTravel < 0 ||
139
+ asymmetryAngle < 0 ||
140
+ frequency < 0 ||
141
+ loadWeight < 0) {
142
+ throw new RangeError('distances, asymmetryAngle, frequency, and loadWeight must not be negative');
143
+ }
131
144
  // Calculate multipliers
132
145
  // HM: Horizontal Multiplier (25/H), max 1.0, H must be >= 25cm
133
146
  const h = Math.max(horizontalDistance, 25);
@@ -1 +1 @@
1
- {"version":3,"file":"nioshLifting.js","sourceRoot":"","sources":["../../src/safety/nioshLifting.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"nioshLifting.js","sourceRoot":"","sources":["../../src/safety/nioshLifting.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,9 @@ import type { NoiseExposureInput, NoiseExposureResult } from './types.js';
17
17
  *
18
18
  * @param input - Noise exposure input with array of exposures
19
19
  * @returns Noise exposure result with dose, TWA, and status
20
+ * @throws {RangeError} an exposure entry has a negative duration.
21
+ * @remarks An empty exposure list (no significant noise) is a valid input that
22
+ * reports a compliant 0% dose.
20
23
  */
21
24
  export declare function noiseExposure(input: NoiseExposureInput): NoiseExposureResult;
22
25
  //# sourceMappingURL=noiseExposure.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"noiseExposure.d.ts","sourceRoot":"","sources":["../../src/safety/noiseExposure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAkB1E;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CA0C5E"}
1
+ {"version":3,"file":"noiseExposure.d.ts","sourceRoot":"","sources":["../../src/safety/noiseExposure.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAkB1E;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CAgD5E"}
@@ -31,9 +31,17 @@ function getAllowableTime(soundLevel) {
31
31
  *
32
32
  * @param input - Noise exposure input with array of exposures
33
33
  * @returns Noise exposure result with dose, TWA, and status
34
+ * @throws {RangeError} an exposure entry has a negative duration.
35
+ * @remarks An empty exposure list (no significant noise) is a valid input that
36
+ * reports a compliant 0% dose.
34
37
  */
35
38
  export function noiseExposure(input) {
36
39
  const { exposures } = input;
40
+ for (const exposure of exposures) {
41
+ if (exposure.duration < 0) {
42
+ throw new RangeError('exposure duration must not be negative');
43
+ }
44
+ }
37
45
  // Calculate dose as sum of (Cn/Tn)
38
46
  let doseSum = 0;
39
47
  for (const exposure of exposures) {
@@ -1 +1 @@
1
- {"version":3,"file":"noiseExposure.js","sourceRoot":"","sources":["../../src/safety/noiseExposure.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,2DAA2D;IAC3D,4DAA4D;IAC5D,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE5B,mCAAmC;IACnC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAC1C,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,IAAI,QAAQ,GAAG,aAAa,CAAC;QACtC,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,IAAI,GAAG,OAAO,GAAG,GAAG,CAAC;IAE3B,+CAA+C;IAC/C,kCAAkC;IAClC,mDAAmD;IACnD,IAAI,GAAW,CAAC;IAChB,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,gCAAgC;QAChC,GAAG,GAAG,CAAC,CAAC;IACV,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAkD,CAAC;IACvD,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QACf,MAAM,GAAG,WAAW,CAAC;IACvB,CAAC;SAAM,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,MAAM,GAAG,gBAAgB,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;IAED,OAAO;QACL,IAAI;QACJ,GAAG;QACH,MAAM;KACP,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"noiseExposure.js","sourceRoot":"","sources":["../../src/safety/noiseExposure.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,UAAkB;IAC1C,2DAA2D;IAC3D,4DAA4D;IAC5D,IAAI,UAAU,GAAG,EAAE,EAAE,CAAC;QACpB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,OAAO,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,UAAU,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,aAAa,CAAC,KAAyB;IACrD,MAAM,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE5B,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,IAAI,QAAQ,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,UAAU,CAAC,wCAAwC,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,mCAAmC;IACnC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,QAAQ,CAAC;QAC1C,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,aAAa,KAAK,QAAQ,EAAE,CAAC;YAC/B,OAAO,IAAI,QAAQ,GAAG,aAAa,CAAC;QACtC,CAAC;IACH,CAAC;IAED,qBAAqB;IACrB,MAAM,IAAI,GAAG,OAAO,GAAG,GAAG,CAAC;IAE3B,+CAA+C;IAC/C,kCAAkC;IAClC,mDAAmD;IACnD,IAAI,GAAW,CAAC;IAChB,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,gCAAgC;QAChC,GAAG,GAAG,CAAC,CAAC;IACV,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAkD,CAAC;IACvD,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;QACf,MAAM,GAAG,WAAW,CAAC;IACvB,CAAC;SAAM,IAAI,IAAI,IAAI,GAAG,EAAE,CAAC;QACvB,MAAM,GAAG,gBAAgB,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,SAAS,CAAC;IACrB,CAAC;IAED,OAAO;QACL,IAAI;QACJ,GAAG;QACH,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -9,6 +9,9 @@ import type { RespiratorInput, RespiratorResult } from './types.js';
9
9
  *
10
10
  * @param input - Respirator input parameters
11
11
  * @returns Respirator results including MUC, APF, and protection assessment
12
+ * @throws {RangeError} oel is not greater than 0, or concentration is negative
13
+ * @remarks When concentration is 0 (no hazard present), safetyMargin is Infinity —
14
+ * an intentional sentinel meaning "any respirator is infinitely adequate".
12
15
  */
13
16
  export declare function respiratorCalculate(input: RespiratorInput): RespiratorResult;
14
17
  //# sourceMappingURL=respiratorCalculate.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"respiratorCalculate.d.ts","sourceRoot":"","sources":["../../src/safety/respiratorCalculate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC;AA2DpF;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CA8B5E"}
1
+ {"version":3,"file":"respiratorCalculate.d.ts","sourceRoot":"","sources":["../../src/safety/respiratorCalculate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAkB,MAAM,YAAY,CAAC;AA2DpF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,eAAe,GAAG,gBAAgB,CAqC5E"}
@@ -32,8 +32,7 @@ function calculateMUC(apf, oel) {
32
32
  * concentration exceeds the occupational exposure limit.
33
33
  */
34
34
  function calculateHazardRatio(concentration, oel) {
35
- if (oel <= 0)
36
- return Infinity;
35
+ // oel > 0 is guaranteed by the caller's input validation
37
36
  return concentration / oel;
38
37
  }
39
38
  /**
@@ -62,9 +61,18 @@ function calculateSafetyMargin(apf, requiredAPF) {
62
61
  *
63
62
  * @param input - Respirator input parameters
64
63
  * @returns Respirator results including MUC, APF, and protection assessment
64
+ * @throws {RangeError} oel is not greater than 0, or concentration is negative
65
+ * @remarks When concentration is 0 (no hazard present), safetyMargin is Infinity —
66
+ * an intentional sentinel meaning "any respirator is infinitely adequate".
65
67
  */
66
68
  export function respiratorCalculate(input) {
67
69
  const { concentration, oel, respiratorType } = input;
70
+ if (oel <= 0) {
71
+ throw new RangeError('oel (occupational exposure limit) must be greater than 0');
72
+ }
73
+ if (concentration < 0) {
74
+ throw new RangeError('concentration must not be negative');
75
+ }
68
76
  // Get APF for selected respirator type
69
77
  const apf = APF_VALUES[respiratorType];
70
78
  // Calculate MUC
@@ -1 +1 @@
1
- {"version":3,"file":"respiratorCalculate.js","sourceRoot":"","sources":["../../src/safety/respiratorCalculate.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,GAAmC;IACjD,qBAAqB,EAAE,EAAE;IACzB,WAAW,EAAE,EAAE;IACf,gBAAgB,EAAE,EAAE;IACpB,mBAAmB,EAAE,EAAE;IACvB,cAAc,EAAE,EAAE;IAClB,wBAAwB,EAAE,IAAI;IAC9B,mBAAmB,EAAE,EAAE;IACvB,mBAAmB,EAAE,EAAE;IACvB,sBAAsB,EAAE,IAAI;IAC5B,SAAS,EAAE,KAAK;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,GAAW,EAAE,GAAW;IAC5C,OAAO,GAAG,GAAG,GAAG,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,aAAqB,EAAE,GAAW;IAC9D,IAAI,GAAG,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,aAAa,GAAG,GAAG,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,GAAW,EAAE,WAAmB;IAC7D,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtC,OAAO,GAAG,GAAG,WAAW,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAErD,uCAAuC;IACvC,MAAM,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAEvC,gBAAgB;IAChB,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnC,yBAAyB;IACzB,MAAM,WAAW,GAAG,oBAAoB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAE7D,yBAAyB;IACzB,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAEtD,kCAAkC;IAClC,4EAA4E;IAC5E,MAAM,kBAAkB,GAAG,aAAa,IAAI,GAAG,CAAC;IAEhD,0BAA0B;IAC1B,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAE7D,OAAO;QACL,GAAG;QACH,GAAG;QACH,WAAW;QACX,WAAW;QACX,kBAAkB;QAClB,YAAY;KACb,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"respiratorCalculate.js","sourceRoot":"","sources":["../../src/safety/respiratorCalculate.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,GAAmC;IACjD,qBAAqB,EAAE,EAAE;IACzB,WAAW,EAAE,EAAE;IACf,gBAAgB,EAAE,EAAE;IACpB,mBAAmB,EAAE,EAAE;IACvB,cAAc,EAAE,EAAE;IAClB,wBAAwB,EAAE,IAAI;IAC9B,mBAAmB,EAAE,EAAE;IACvB,mBAAmB,EAAE,EAAE;IACvB,sBAAsB,EAAE,IAAI;IAC5B,SAAS,EAAE,KAAK;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,YAAY,CAAC,GAAW,EAAE,GAAW;IAC5C,OAAO,GAAG,GAAG,GAAG,CAAC;AACnB,CAAC;AAED;;;;;;GAMG;AACH,SAAS,oBAAoB,CAAC,aAAqB,EAAE,GAAW;IAC9D,yDAAyD;IACzD,OAAO,aAAa,GAAG,GAAG,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,SAAS,oBAAoB,CAAC,WAAmB;IAC/C,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,SAAS,qBAAqB,CAAC,GAAW,EAAE,WAAmB;IAC7D,IAAI,WAAW,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IACtC,OAAO,GAAG,GAAG,WAAW,CAAC;AAC3B,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAsB;IACxD,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAErD,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,UAAU,CAAC,0DAA0D,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,aAAa,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,UAAU,CAAC,oCAAoC,CAAC,CAAC;IAC7D,CAAC;IAED,uCAAuC;IACvC,MAAM,GAAG,GAAG,UAAU,CAAC,cAAc,CAAC,CAAC;IAEvC,gBAAgB;IAChB,MAAM,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAEnC,yBAAyB;IACzB,MAAM,WAAW,GAAG,oBAAoB,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;IAE7D,yBAAyB;IACzB,MAAM,WAAW,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;IAEtD,kCAAkC;IAClC,4EAA4E;IAC5E,MAAM,kBAAkB,GAAG,aAAa,IAAI,GAAG,CAAC;IAEhD,0BAA0B;IAC1B,MAAM,YAAY,GAAG,qBAAqB,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAE7D,OAAO;QACL,GAAG;QACH,GAAG;QACH,WAAW;QACX,WAAW;QACX,kBAAkB;QAClB,YAAY;KACb,CAAC;AACJ,CAAC"}
@@ -9,6 +9,11 @@ import type { ThermalComfortInput, ThermalComfortResult } from './types.js';
9
9
  * @reference ISO 7730:2005 — Ergonomics of the thermal environment
10
10
  * @reference ASHRAE Standard 55-2020
11
11
  * @reference pythermalcomfort reference implementation
12
+ *
13
+ * @throws {RangeError} relativeHumidity outside 0–100, metabolicRate ≤ 0,
14
+ * clothingInsulation < 0, or airVelocity < 0.
15
+ * @remarks Air and radiant temperatures are in °C and may be negative, so they
16
+ * are not range-checked.
12
17
  */
13
18
  export declare function thermalComfort(input: ThermalComfortInput): ThermalComfortResult;
14
19
  //# sourceMappingURL=thermalComfort.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"thermalComfort.d.ts","sourceRoot":"","sources":["../../src/safety/thermalComfort.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE5E;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAkF/E"}
1
+ {"version":3,"file":"thermalComfort.d.ts","sourceRoot":"","sources":["../../src/safety/thermalComfort.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE5E;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CA+F/E"}
@@ -9,9 +9,26 @@ import { roundTo } from '../utils.js';
9
9
  * @reference ISO 7730:2005 — Ergonomics of the thermal environment
10
10
  * @reference ASHRAE Standard 55-2020
11
11
  * @reference pythermalcomfort reference implementation
12
+ *
13
+ * @throws {RangeError} relativeHumidity outside 0–100, metabolicRate ≤ 0,
14
+ * clothingInsulation < 0, or airVelocity < 0.
15
+ * @remarks Air and radiant temperatures are in °C and may be negative, so they
16
+ * are not range-checked.
12
17
  */
13
18
  export function thermalComfort(input) {
14
19
  const { airTemp, radiantTemp, airVelocity, relativeHumidity, metabolicRate, clothingInsulation } = input;
20
+ if (relativeHumidity < 0 || relativeHumidity > 100) {
21
+ throw new RangeError('relativeHumidity must be between 0 and 100');
22
+ }
23
+ if (metabolicRate <= 0) {
24
+ throw new RangeError('metabolicRate must be greater than 0');
25
+ }
26
+ if (clothingInsulation < 0) {
27
+ throw new RangeError('clothingInsulation must not be negative');
28
+ }
29
+ if (airVelocity < 0) {
30
+ throw new RangeError('airVelocity must not be negative');
31
+ }
15
32
  const M = metabolicRate * 58.15; // W/m²
16
33
  const W = 0;
17
34
  const Icl = clothingInsulation * 0.155; // m²·K/W
@@ -1 +1 @@
1
- {"version":3,"file":"thermalComfort.js","sourceRoot":"","sources":["../../src/safety/thermalComfort.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thermalComfort.js","sourceRoot":"","sources":["../../src/safety/thermalComfort.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "formulab",
3
- "version": "0.13.6",
3
+ "version": "0.13.8",
4
4
  "description": "Manufacturing & Engineering calculation formulas library - 182 industrial calculations across 15 domains for OEE, Cpk, SPC, FMEA, Nelson Rules, metal weight, CNC machining, GD&T, battery, environmental, pipe flow, logistics, IE time study, and more",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",