formulab 0.14.0 → 0.14.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,33 @@ 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.14.2] - 2026-07-07
9
+
10
+ ### Documentation
11
+
12
+ - **`utility/correlation()` — zero-variance sentinel now documented.** `correlation()`
13
+ throws `RangeError` for genuinely invalid input (mismatched lengths, fewer than 2 points),
14
+ but for **valid** constant data (one variable has zero variance, so the Pearson denominator
15
+ is 0) it returns `{ r: 0, r2: 0, n }` as a finite sentinel rather than throwing or emitting
16
+ `NaN` — the same "valid-but-degenerate → finite sentinel" policy as the capability-index
17
+ family. This behavior was already covered by tests but was undocumented in `ERRORS.md`,
18
+ which implied all migrated utility functions throw on invalid input. `ERRORS.md` and the
19
+ `correlation()` JSDoc now document the exception. No behavior change. Surfaced during an
20
+ error-handling characterization audit (online-tools NT-66 갈래①).
21
+
22
+ ## [0.14.1] - 2026-07-06
23
+
24
+ ### Fixed
25
+
26
+ - **`quality/gageRR()` — `status` now also considers `%GRR`-of-tolerance when a `tolerance`
27
+ is supplied.** Previously `status` was classified from `percentGRR` (the process-control
28
+ criterion, %GRR of Total Variation) alone, so a measurement system with excellent %GRR but
29
+ a tolerance far narrower than the part-to-part variation could report `'acceptable'` while
30
+ `percentTolerance` (the product-acceptance criterion) sat well above 30%. `status` is now
31
+ `worse(byPercentGRR, byPercentTolerance)` — AIAG MSA 4th Ed.'s ≤10/≤30 bands applied to
32
+ both criteria — falling back to `byPercentGRR` alone when no tolerance is given (unchanged
33
+ behavior). Reported via dogfooding (online-tools `quality/gage-rr`, ISSUE-20260705).
34
+
8
35
  ## [0.14.0] - 2026-07-05
9
36
 
10
37
  ### Changed (breaking within 0.x) — standard-table conformance sweep
@@ -1 +1 @@
1
- {"version":3,"file":"gageRR.d.ts","sourceRoot":"","sources":["../../src/quality/gageRR.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAc5D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CA+FvD"}
1
+ {"version":3,"file":"gageRR.d.ts","sourceRoot":"","sources":["../../src/quality/gageRR.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA4B5D;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,YAAY,CA2FvD"}
@@ -8,6 +8,18 @@ const K3 = {
8
8
  2: 3.65, 3: 2.70, 4: 2.30, 5: 2.08,
9
9
  6: 1.93, 7: 1.82, 8: 1.74, 9: 1.67, 10: 1.62,
10
10
  };
11
+ const STATUS_RANK = { acceptable: 0, marginal: 1, unacceptable: 2 };
12
+ // AIAG MSA 4th Ed. applies the same ≤10/≤30 bands to %GRR-of-tolerance as to %GRR-of-TV.
13
+ function classifyPercent(percent) {
14
+ if (percent <= 10)
15
+ return 'acceptable';
16
+ if (percent <= 30)
17
+ return 'marginal';
18
+ return 'unacceptable';
19
+ }
20
+ function worse(a, b) {
21
+ return STATUS_RANK[a] >= STATUS_RANK[b] ? a : b;
22
+ }
11
23
  /**
12
24
  * Gage R&R (Measurement System Analysis) — AIAG MSA 4th Edition, Average and Range Method
13
25
  *
@@ -84,17 +96,11 @@ export function gageRR(input) {
84
96
  : null;
85
97
  // ndc
86
98
  const ndc = grr > 0 ? Math.floor(1.41 * (pv / grr)) : 0;
87
- // Status
88
- let status;
89
- if (percentGRR <= 10) {
90
- status = 'acceptable';
91
- }
92
- else if (percentGRR <= 30) {
93
- status = 'marginal';
94
- }
95
- else {
96
- status = 'unacceptable';
97
- }
99
+ // Status — %GRR-of-TV is the process-control criterion; when a tolerance is supplied,
100
+ // %GRR-of-tolerance (product-acceptance criterion) is evaluated too and the worse of the
101
+ // two wins, since a measurement system unfit for either purpose should not read "acceptable".
102
+ const byPercentGRR = classifyPercent(percentGRR);
103
+ const status = percentTolerance != null ? worse(byPercentGRR, classifyPercent(percentTolerance)) : byPercentGRR;
98
104
  return {
99
105
  ev: roundTo(ev, 4),
100
106
  av: roundTo(av, 4),
@@ -1 +1 @@
1
- {"version":3,"file":"gageRR.js","sourceRoot":"","sources":["../../src/quality/gageRR.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"gageRR.js","sourceRoot":"","sources":["../../src/quality/gageRR.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC,qDAAqD;AACrD,MAAM,EAAE,GAA2B,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;AAExD,sCAAsC;AACtC,MAAM,EAAE,GAA2B,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC;AAExD,kCAAkC;AAClC,MAAM,EAAE,GAA2B;IACjC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI;IAClC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI;CAC7C,CAAC;AAGF,MAAM,WAAW,GAAiC,EAAE,UAAU,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;AAElG,yFAAyF;AACzF,SAAS,eAAe,CAAC,OAAe;IACtC,IAAI,OAAO,IAAI,EAAE;QAAE,OAAO,YAAY,CAAC;IACvC,IAAI,OAAO,IAAI,EAAE;QAAE,OAAO,UAAU,CAAC;IACrC,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,SAAS,KAAK,CAAC,CAAe,EAAE,CAAe;IAC7C,OAAO,WAAW,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,MAAM,CAAC,KAAkB;IACvC,MAAM,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAE1C,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC;IACrC,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC5C,MAAM,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAE5C,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAClC,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC;IAElC,uDAAuD;IACvD,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;YACnC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;YACnC,QAAQ,IAAI,MAAM,GAAG,MAAM,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAC,QAAQ,GAAG,YAAY,CAAC,CAAC;IAElD,2CAA2C;IAC3C,MAAM,EAAE,GAAG,IAAI,GAAG,EAAE,CAAC;IAErB,iBAAiB;IACjB,MAAM,aAAa,GAAa,EAAE,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,aAAa,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC;IAEzE,6CAA6C;IAC7C,MAAM,SAAS,GAAG,CAAC,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;IAC5E,MAAM,EAAE,GAAG,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAEpD,MAAM;IACN,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAEzC,oBAAoB;IACpB,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnC,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QACD,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC,CAAC;IACnD,CAAC;IACD,MAAM,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAC3D,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IAEnB,uBAAuB;IACvB,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC;IAEzC,OAAO;IACP,MAAM,UAAU,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7D,aAAa;IACb,MAAM,gBAAgB,GAAG,SAAS,IAAI,IAAI,IAAI,SAAS,GAAG,CAAC;QACzD,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC,IAAI,CAAC;IAET,MAAM;IACN,MAAM,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAExD,sFAAsF;IACtF,yFAAyF;IACzF,8FAA8F;IAC9F,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,gBAAgB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC;IAEhH,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAClB,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAClB,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACpB,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAClB,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAClB,UAAU;QACV,gBAAgB;QAChB,GAAG;QACH,MAAM;KACP,CAAC;AACJ,CAAC"}
@@ -5,6 +5,10 @@ import type { CorrelationInput, CorrelationResult } from './types.js';
5
5
  * @param input - Paired samples x and y
6
6
  * @returns Correlation coefficient r, r-squared, and sample size n
7
7
  * @throws RangeError if x and y lengths differ or contain fewer than 2 points
8
+ * @remarks For valid input where one variable has zero variance (constant data),
9
+ * the Pearson denominator is 0 and correlation is undefined; this returns
10
+ * `{ r: 0, r2: 0, n }` as a finite sentinel rather than throwing or emitting NaN
11
+ * (same valid-but-degenerate policy as the capability-index family — see ERRORS.md).
8
12
  */
9
13
  export declare function correlation(input: CorrelationInput): CorrelationResult;
10
14
  //# sourceMappingURL=correlation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"correlation.d.ts","sourceRoot":"","sources":["../../src/utility/correlation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAmCtE"}
1
+ {"version":3,"file":"correlation.d.ts","sourceRoot":"","sources":["../../src/utility/correlation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CAmCtE"}
@@ -5,6 +5,10 @@ import { roundTo } from '../utils.js';
5
5
  * @param input - Paired samples x and y
6
6
  * @returns Correlation coefficient r, r-squared, and sample size n
7
7
  * @throws RangeError if x and y lengths differ or contain fewer than 2 points
8
+ * @remarks For valid input where one variable has zero variance (constant data),
9
+ * the Pearson denominator is 0 and correlation is undefined; this returns
10
+ * `{ r: 0, r2: 0, n }` as a finite sentinel rather than throwing or emitting NaN
11
+ * (same valid-but-degenerate policy as the capability-index family — see ERRORS.md).
8
12
  */
9
13
  export function correlation(input) {
10
14
  const { x, y } = input;
@@ -1 +1 @@
1
- {"version":3,"file":"correlation.js","sourceRoot":"","sources":["../../src/utility/correlation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,UAAU,CAAC,+CAA+C,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAE/C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACxB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACxB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAE3C,MAAM,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;IAExB,OAAO;QACL,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"correlation.js","sourceRoot":"","sources":["../../src/utility/correlation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,KAAK,CAAC;IACvB,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC;QACtC,MAAM,IAAI,UAAU,CAAC,0CAA0C,CAAC,EAAE,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjB,MAAM,IAAI,UAAU,CAAC,+CAA+C,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;IAClF,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;IACnB,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC;IAE/C,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACxB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;QACxB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;QACjB,KAAK,IAAI,EAAE,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;IACvC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IAE3C,MAAM,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC;IAExB,OAAO;QACL,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAChB,EAAE,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrB,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "formulab",
3
- "version": "0.14.0",
3
+ "version": "0.14.2",
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",