formulab 0.9.0 → 0.10.1
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 +42 -0
- package/README.md +36 -10
- package/dist/automotive/brakingDistance.d.ts +4 -0
- package/dist/automotive/brakingDistance.d.ts.map +1 -1
- package/dist/automotive/brakingDistance.js +8 -4
- package/dist/automotive/brakingDistance.js.map +1 -1
- package/dist/battery/cRate.d.ts.map +1 -1
- package/dist/battery/cRate.js +6 -0
- package/dist/battery/cRate.js.map +1 -1
- package/dist/chemical/dilution.js +4 -4
- package/dist/chemical/dilution.js.map +1 -1
- package/dist/chemical/heatTransfer.d.ts +6 -0
- package/dist/chemical/heatTransfer.d.ts.map +1 -1
- package/dist/chemical/heatTransfer.js +15 -9
- package/dist/chemical/heatTransfer.js.map +1 -1
- package/dist/chemical/pipeFlow.d.ts +6 -0
- package/dist/chemical/pipeFlow.d.ts.map +1 -1
- package/dist/chemical/pipeFlow.js +12 -6
- package/dist/chemical/pipeFlow.js.map +1 -1
- package/dist/construction/aggregate.d.ts +4 -0
- package/dist/construction/aggregate.d.ts.map +1 -1
- package/dist/construction/aggregate.js +8 -4
- package/dist/construction/aggregate.js.map +1 -1
- package/dist/construction/momentOfInertia.d.ts +7 -0
- package/dist/construction/momentOfInertia.d.ts.map +1 -1
- package/dist/construction/momentOfInertia.js +19 -12
- package/dist/construction/momentOfInertia.js.map +1 -1
- package/dist/construction/roof.js +2 -2
- package/dist/construction/roof.js.map +1 -1
- package/dist/electronics/awg.d.ts +3 -2
- package/dist/electronics/awg.d.ts.map +1 -1
- package/dist/electronics/awg.js +3 -3
- package/dist/electronics/awg.js.map +1 -1
- package/dist/electronics/capacitor.js +1 -1
- package/dist/electronics/capacitor.js.map +1 -1
- package/dist/electronics/led.js +2 -2
- package/dist/electronics/led.js.map +1 -1
- package/dist/electronics/ohmsLaw.d.ts +3 -0
- package/dist/electronics/ohmsLaw.d.ts.map +1 -1
- package/dist/electronics/ohmsLaw.js +11 -8
- package/dist/electronics/ohmsLaw.js.map +1 -1
- package/dist/electronics/stencil.d.ts +2 -1
- package/dist/electronics/stencil.d.ts.map +1 -1
- package/dist/electronics/stencil.js +4 -3
- package/dist/electronics/stencil.js.map +1 -1
- package/dist/energy/solarOutput.d.ts +4 -0
- package/dist/energy/solarOutput.d.ts.map +1 -1
- package/dist/energy/solarOutput.js +8 -4
- package/dist/energy/solarOutput.js.map +1 -1
- package/dist/environmental/scope2Emissions.d.ts +1 -0
- package/dist/environmental/scope2Emissions.d.ts.map +1 -1
- package/dist/environmental/scope2Emissions.js +2 -1
- package/dist/environmental/scope2Emissions.js.map +1 -1
- package/dist/machining/boringBarDeflection.d.ts.map +1 -1
- package/dist/machining/boringBarDeflection.js +7 -1
- package/dist/machining/boringBarDeflection.js.map +1 -1
- package/dist/machining/toolDeflection.d.ts.map +1 -1
- package/dist/machining/toolDeflection.js +7 -1
- package/dist/machining/toolDeflection.js.map +1 -1
- package/dist/machining/triangleSolver.d.ts +2 -1
- package/dist/machining/triangleSolver.d.ts.map +1 -1
- package/dist/machining/triangleSolver.js +6 -5
- package/dist/machining/triangleSolver.js.map +1 -1
- package/dist/metal/flangeSpec.d.ts +3 -0
- package/dist/metal/flangeSpec.d.ts.map +1 -1
- package/dist/metal/flangeSpec.js +6 -3
- package/dist/metal/flangeSpec.js.map +1 -1
- package/dist/metal/metalWeight.d.ts.map +1 -1
- package/dist/metal/metalWeight.js +20 -0
- package/dist/metal/metalWeight.js.map +1 -1
- package/dist/metal/pipeSpec.d.ts +3 -0
- package/dist/metal/pipeSpec.d.ts.map +1 -1
- package/dist/metal/pipeSpec.js +6 -3
- package/dist/metal/pipeSpec.js.map +1 -1
- package/dist/quality/controlChart.d.ts +3 -0
- package/dist/quality/controlChart.d.ts.map +1 -1
- package/dist/quality/controlChart.js +6 -3
- package/dist/quality/controlChart.js.map +1 -1
- package/dist/quality/oee.js +2 -2
- package/dist/quality/oee.js.map +1 -1
- package/dist/safety/ventilationRate.d.ts +3 -0
- package/dist/safety/ventilationRate.d.ts.map +1 -1
- package/dist/safety/ventilationRate.js +6 -3
- package/dist/safety/ventilationRate.js.map +1 -1
- package/package.json +1 -1
|
@@ -10,6 +10,13 @@ import { roundTo } from '../utils.js';
|
|
|
10
10
|
* Formulas from: Timoshenko "Mechanics of Materials", AISC Steel Manual,
|
|
11
11
|
* Roark's "Formulas for Stress and Strain"
|
|
12
12
|
*
|
|
13
|
+
* @throws {RangeError} Dimensions must be positive
|
|
14
|
+
* @throws {RangeError} Diameter must be positive
|
|
15
|
+
* @throws {RangeError} Diameters must be positive
|
|
16
|
+
* @throws {RangeError} Inner dimensions must be smaller than outer
|
|
17
|
+
* @throws {RangeError} Inner diameter must be smaller than outer
|
|
18
|
+
* @throws {RangeError} Web thickness must be less than flange width
|
|
19
|
+
* @throws {RangeError} 2 x flange thickness must be less than total height
|
|
13
20
|
* @param input - discriminated union by `shape`
|
|
14
21
|
* @returns section properties
|
|
15
22
|
*/
|
|
@@ -46,7 +53,7 @@ function roundResult(r) {
|
|
|
46
53
|
/** Solid Rectangle: I_x = bh³/12, I_y = hb³/12 */
|
|
47
54
|
function calcRectangle(b, h) {
|
|
48
55
|
if (b <= 0 || h <= 0)
|
|
49
|
-
throw new
|
|
56
|
+
throw new RangeError('Dimensions must be positive');
|
|
50
57
|
const area = b * h;
|
|
51
58
|
const Ix = (b * h * h * h) / 12;
|
|
52
59
|
const Iy = (h * b * b * b) / 12;
|
|
@@ -62,7 +69,7 @@ function calcRectangle(b, h) {
|
|
|
62
69
|
/** Solid Circle: I = πd⁴/64 */
|
|
63
70
|
function calcCircle(d) {
|
|
64
71
|
if (d <= 0)
|
|
65
|
-
throw new
|
|
72
|
+
throw new RangeError('Diameter must be positive');
|
|
66
73
|
const area = (Math.PI * d * d) / 4;
|
|
67
74
|
const I = (Math.PI * d * d * d * d) / 64;
|
|
68
75
|
const S = (Math.PI * d * d * d) / 32;
|
|
@@ -76,9 +83,9 @@ function calcCircle(d) {
|
|
|
76
83
|
/** Hollow Rectangle (Box): I_x = (BH³ - bh³)/12 */
|
|
77
84
|
function calcHollowRectangle(B, H, b, h) {
|
|
78
85
|
if (B <= 0 || H <= 0 || b <= 0 || h <= 0)
|
|
79
|
-
throw new
|
|
86
|
+
throw new RangeError('Dimensions must be positive');
|
|
80
87
|
if (b >= B || h >= H)
|
|
81
|
-
throw new
|
|
88
|
+
throw new RangeError('Inner dimensions must be smaller than outer');
|
|
82
89
|
const area = B * H - b * h;
|
|
83
90
|
const Ix = (B * H * H * H - b * h * h * h) / 12;
|
|
84
91
|
const Iy = (H * B * B * B - h * b * b * b) / 12;
|
|
@@ -94,9 +101,9 @@ function calcHollowRectangle(B, H, b, h) {
|
|
|
94
101
|
/** Hollow Circle (Pipe): I = π(D⁴-d⁴)/64 */
|
|
95
102
|
function calcHollowCircle(D, d) {
|
|
96
103
|
if (D <= 0 || d <= 0)
|
|
97
|
-
throw new
|
|
104
|
+
throw new RangeError('Diameters must be positive');
|
|
98
105
|
if (d >= D)
|
|
99
|
-
throw new
|
|
106
|
+
throw new RangeError('Inner diameter must be smaller than outer');
|
|
100
107
|
const area = (Math.PI * (D * D - d * d)) / 4;
|
|
101
108
|
const I = (Math.PI * (D * D * D * D - d * d * d * d)) / 64;
|
|
102
109
|
const S = I / (D / 2);
|
|
@@ -110,11 +117,11 @@ function calcHollowCircle(D, d) {
|
|
|
110
117
|
/** I-Beam (symmetric): I_x = (B×H³ - (B-tw)×(H-2tf)³) / 12 */
|
|
111
118
|
function calcIBeam(B, H, tw, tf) {
|
|
112
119
|
if (B <= 0 || H <= 0 || tw <= 0 || tf <= 0)
|
|
113
|
-
throw new
|
|
120
|
+
throw new RangeError('Dimensions must be positive');
|
|
114
121
|
if (tw >= B)
|
|
115
|
-
throw new
|
|
122
|
+
throw new RangeError('Web thickness must be less than flange width');
|
|
116
123
|
if (2 * tf >= H)
|
|
117
|
-
throw new
|
|
124
|
+
throw new RangeError('2 × flange thickness must be less than total height');
|
|
118
125
|
const hw = H - 2 * tf; // clear web height
|
|
119
126
|
const area = 2 * B * tf + tw * hw;
|
|
120
127
|
const Ix = (B * H * H * H - (B - tw) * hw * hw * hw) / 12;
|
|
@@ -137,7 +144,7 @@ function calcIBeam(B, H, tw, tf) {
|
|
|
137
144
|
*/
|
|
138
145
|
function calcTSection(bf, tf, tw, hw) {
|
|
139
146
|
if (bf <= 0 || tf <= 0 || tw <= 0 || hw <= 0)
|
|
140
|
-
throw new
|
|
147
|
+
throw new RangeError('Dimensions must be positive');
|
|
141
148
|
const H = tf + hw; // total height
|
|
142
149
|
const aFlange = bf * tf;
|
|
143
150
|
const aWeb = tw * hw;
|
|
@@ -169,9 +176,9 @@ function calcTSection(bf, tf, tw, hw) {
|
|
|
169
176
|
*/
|
|
170
177
|
function calcCChannel(bf, H, tw, tf) {
|
|
171
178
|
if (bf <= 0 || H <= 0 || tw <= 0 || tf <= 0)
|
|
172
|
-
throw new
|
|
179
|
+
throw new RangeError('Dimensions must be positive');
|
|
173
180
|
if (2 * tf >= H)
|
|
174
|
-
throw new
|
|
181
|
+
throw new RangeError('2 × flange thickness must be less than total height');
|
|
175
182
|
const hw = H - 2 * tf; // clear web height
|
|
176
183
|
const area = 2 * bf * tf + hw * tw;
|
|
177
184
|
// Strong axis (Ix) — symmetric about x-axis
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"momentOfInertia.js","sourceRoot":"","sources":["../../src/construction/momentOfInertia.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC
|
|
1
|
+
{"version":3,"file":"momentOfInertia.js","sourceRoot":"","sources":["../../src/construction/momentOfInertia.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,10 +30,10 @@ export function roof(input) {
|
|
|
30
30
|
const { rise, run, footprintLength, footprintWidth } = input;
|
|
31
31
|
// Validate inputs
|
|
32
32
|
if (run <= 0) {
|
|
33
|
-
throw new
|
|
33
|
+
throw new RangeError('Run must be greater than zero');
|
|
34
34
|
}
|
|
35
35
|
if (rise < 0) {
|
|
36
|
-
throw new
|
|
36
|
+
throw new RangeError('Rise must be non-negative');
|
|
37
37
|
}
|
|
38
38
|
// Calculate slope ratio (normalized to 12-unit run for pitch notation)
|
|
39
39
|
const risePerTwelve = (rise / run) * 12;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"roof.js","sourceRoot":"","sources":["../../src/construction/roof.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AACH,SAAS,mBAAmB,CAAC,aAAqB;IAChD,IAAI,aAAa,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,IAAI,aAAa,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,aAAa,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC;IAC7C,IAAI,aAAa,GAAG,EAAE;QAAE,OAAO,OAAO,CAAC;IACvC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAE7D,kBAAkB;IAClB,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"roof.js","sourceRoot":"","sources":["../../src/construction/roof.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AACH,SAAS,mBAAmB,CAAC,aAAqB;IAChD,IAAI,aAAa,GAAG,CAAC;QAAE,OAAO,MAAM,CAAC;IACrC,IAAI,aAAa,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,IAAI,aAAa,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC;IAC7C,IAAI,aAAa,GAAG,EAAE;QAAE,OAAO,OAAO,CAAC;IACvC,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,IAAI,CAAC,KAAgB;IACnC,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAE7D,kBAAkB;IAClB,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,UAAU,CAAC,+BAA+B,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;IACpD,CAAC;IAED,uEAAuE;IACvE,MAAM,aAAa,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;IACxC,MAAM,UAAU,GAAG,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC;IAErD,6BAA6B;IAC7B,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;IAC3C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAEhE,gCAAgC;IAChC,MAAM,YAAY,GAAG,OAAO,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;IAEpD,uCAAuC;IACvC,MAAM,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IAEpE,oDAAoD;IACpD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvE,sBAAsB;IACtB,MAAM,aAAa,GAAG,eAAe,GAAG,cAAc,CAAC;IACvD,MAAM,QAAQ,GAAG,OAAO,CAAC,aAAa,GAAG,WAAW,EAAE,CAAC,CAAC,CAAC;IAEzD,6CAA6C;IAC7C,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAC;IAE5D,OAAO;QACL,UAAU;QACV,YAAY;QACZ,YAAY;QACZ,YAAY;QACZ,WAAW;QACX,QAAQ;QACR,gBAAgB;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -3,7 +3,8 @@ import type { AwgInput, AwgResult } from './types.js';
|
|
|
3
3
|
* Calculate AWG wire properties
|
|
4
4
|
* AWG diameter formula: d(mm) = 0.127 × 92^((36-AWG)/39)
|
|
5
5
|
* @param input - AWG gauge number, material, and temperature
|
|
6
|
-
* @returns Wire properties
|
|
6
|
+
* @returns Wire properties
|
|
7
|
+
* @throws {RangeError} If AWG is not between 0 and 40
|
|
7
8
|
*/
|
|
8
|
-
export declare function awgProperties(input: AwgInput): AwgResult
|
|
9
|
+
export declare function awgProperties(input: AwgInput): AwgResult;
|
|
9
10
|
//# sourceMappingURL=awg.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"awg.d.ts","sourceRoot":"","sources":["../../src/electronics/awg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AA0BnE
|
|
1
|
+
{"version":3,"file":"awg.d.ts","sourceRoot":"","sources":["../../src/electronics/awg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAe,MAAM,YAAY,CAAC;AA0BnE;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,CA0CxD"}
|
package/dist/electronics/awg.js
CHANGED
|
@@ -22,13 +22,13 @@ const CURRENT_DENSITY = {
|
|
|
22
22
|
* Calculate AWG wire properties
|
|
23
23
|
* AWG diameter formula: d(mm) = 0.127 × 92^((36-AWG)/39)
|
|
24
24
|
* @param input - AWG gauge number, material, and temperature
|
|
25
|
-
* @returns Wire properties
|
|
25
|
+
* @returns Wire properties
|
|
26
|
+
* @throws {RangeError} If AWG is not between 0 and 40
|
|
26
27
|
*/
|
|
27
28
|
export function awgProperties(input) {
|
|
28
29
|
const { awg, material, tempC } = input;
|
|
29
|
-
// Validate input range
|
|
30
30
|
if (awg < 0 || awg > 40) {
|
|
31
|
-
|
|
31
|
+
throw new RangeError('AWG must be between 0 and 40');
|
|
32
32
|
}
|
|
33
33
|
// Calculate diameter using AWG formula
|
|
34
34
|
// d(inch) = 0.005 × 92^((36-AWG)/39) → d(mm) = 0.127 × 92^((36-AWG)/39)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"awg.js","sourceRoot":"","sources":["../../src/electronics/awg.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AAEH,iCAAiC;AACjC,MAAM,eAAe,GAAgC;IACnD,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,OAAO;CAClB,CAAC;AAEF,kCAAkC;AAClC,MAAM,gBAAgB,GAAgC;IACpD,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,OAAO;CAClB,CAAC;AAEF,8EAA8E;AAC9E,mEAAmE;AACnE,MAAM,eAAe,GAAgC;IACnD,MAAM,EAAE,GAAG,EAAM,QAAQ;IACzB,QAAQ,EAAE,GAAG,EAAI,sCAAsC;CACxD,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"awg.js","sourceRoot":"","sources":["../../src/electronics/awg.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AAEH,iCAAiC;AACjC,MAAM,eAAe,GAAgC;IACnD,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,OAAO;CAClB,CAAC;AAEF,kCAAkC;AAClC,MAAM,gBAAgB,GAAgC;IACpD,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,OAAO;CAClB,CAAC;AAEF,8EAA8E;AAC9E,mEAAmE;AACnE,MAAM,eAAe,GAAgC;IACnD,MAAM,EAAE,GAAG,EAAM,QAAQ;IACzB,QAAQ,EAAE,GAAG,EAAI,sCAAsC;CACxD,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,aAAa,CAAC,KAAe;IAC3C,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAEvC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,GAAG,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;IACvD,CAAC;IAED,uCAAuC;IACvC,wEAAwE;IACxE,MAAM,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,UAAU,GAAG,MAAM,CAAC;IAEzC,uBAAuB;IACvB,MAAM,QAAQ,GAAG,UAAU,GAAG,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,IAAI,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAE9C,qCAAqC;IACrC,MAAM,gBAAgB,GAAG,YAAY,GAAG,YAAY,CAAC;IAErD,gDAAgD;IAChD,8BAA8B;IAC9B,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IAC7C,MAAM,UAAU,GAAG,CAAC,GAAG,SAAS,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC;IAChD,MAAM,cAAc,GAAG,CAAC,WAAW,GAAG,OAAO,CAAC,GAAG,UAAU,CAAC;IAE5D,wCAAwC;IACxC,MAAM,eAAe,GAAG,cAAc,GAAG,MAAM,CAAC;IAEhD,sCAAsC;IACtC,MAAM,cAAc,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;IACjD,MAAM,eAAe,GAAG,cAAc,GAAG,OAAO,CAAC;IAEjD,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5B,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC9C,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;QAC5C,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;KAC7C,CAAC;AACJ,CAAC"}
|
|
@@ -12,7 +12,7 @@ export function capacitorDecode(input) {
|
|
|
12
12
|
const { code } = input;
|
|
13
13
|
// Validate: must be exactly 3 digits
|
|
14
14
|
if (!/^\d{3}$/.test(code)) {
|
|
15
|
-
throw new
|
|
15
|
+
throw new RangeError('Invalid capacitor code: must be exactly 3 digits');
|
|
16
16
|
}
|
|
17
17
|
const digit1 = parseInt(code[0], 10);
|
|
18
18
|
const digit2 = parseInt(code[1], 10);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"capacitor.js","sourceRoot":"","sources":["../../src/electronics/capacitor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAyB;IACvD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAEvB,qCAAqC;IACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"capacitor.js","sourceRoot":"","sources":["../../src/electronics/capacitor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AAEH;;;;;GAKG;AACH,MAAM,UAAU,eAAe,CAAC,KAAyB;IACvD,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAEvB,qCAAqC;IACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,eAAe,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAE9C,4CAA4C;IAC5C,MAAM,kBAAkB,GAAG,MAAM,GAAG,EAAE,GAAG,MAAM,CAAC;IAEhD,gCAAgC;IAChC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IAEjD,sBAAsB;IACtB,MAAM,UAAU,GAAG,kBAAkB,GAAG,UAAU,CAAC;IACnD,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC;IAErD,uBAAuB;IACvB,IAAI,SAAiB,CAAC;IACtB,IAAI,WAAW,IAAI,CAAC,EAAE,CAAC;QACrB,SAAS,GAAG,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,SAAS,CAAC;IAClD,CAAC;SAAM,IAAI,UAAU,IAAI,CAAC,EAAE,CAAC;QAC3B,SAAS,GAAG,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC;IAC5C,CAAC;SAAM,CAAC;QACN,SAAS,GAAG,GAAG,UAAU,IAAI,CAAC;IAChC,CAAC;IAED,OAAO;QACL,UAAU;QACV,UAAU;QACV,WAAW;QACX,SAAS;QACT,kBAAkB;QAClB,UAAU;KACX,CAAC;AACJ,CAAC"}
|
package/dist/electronics/led.js
CHANGED
|
@@ -43,10 +43,10 @@ export function ledResistor(input) {
|
|
|
43
43
|
const { supplyVoltage, forwardVoltage, forwardCurrent } = input;
|
|
44
44
|
// Validate inputs
|
|
45
45
|
if (supplyVoltage <= forwardVoltage) {
|
|
46
|
-
throw new
|
|
46
|
+
throw new RangeError('Supply voltage must be greater than forward voltage');
|
|
47
47
|
}
|
|
48
48
|
if (forwardCurrent <= 0) {
|
|
49
|
-
throw new
|
|
49
|
+
throw new RangeError('Forward current must be positive');
|
|
50
50
|
}
|
|
51
51
|
// R = (Vs - Vf) / If
|
|
52
52
|
// Note: forwardCurrent is in mA, so convert to A for calculation
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"led.js","sourceRoot":"","sources":["../../src/electronics/led.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AAEH,8CAA8C;AAC9C,MAAM,UAAU,GAAG;IACjB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;IAC1D,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;CAC3D,CAAC;AAEF;;GAEG;AACH,SAAS,2BAA2B,CAAC,UAAkB;IACrD,IAAI,UAAU,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC,CAAC,0BAA0B;IAE1D,gCAAgC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAClD,MAAM,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAErD,yBAAyB;IACzB,IAAI,YAAY,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAEnD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC;QAC1C,IAAI,IAAI,GAAG,OAAO,EAAE,CAAC;YACnB,OAAO,GAAG,IAAI,CAAC;YACf,YAAY,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,uDAAuD;IACvD,MAAM,eAAe,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC;IACjE,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,eAAe,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;QACxG,OAAO,eAAe,CAAC;IACzB,CAAC;IAED,OAAO,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAEhE,kBAAkB;IAClB,IAAI,aAAa,IAAI,cAAc,EAAE,CAAC;QACpC,MAAM,IAAI,
|
|
1
|
+
{"version":3,"file":"led.js","sourceRoot":"","sources":["../../src/electronics/led.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,9 @@ import type { OhmsLawInput, OhmsLawResult } from './types.js';
|
|
|
5
5
|
* Solves for any one of voltage, current, resistance, or power
|
|
6
6
|
* given the other two known quantities.
|
|
7
7
|
*
|
|
8
|
+
* @throws {RangeError} Current must be positive
|
|
9
|
+
* @throws {RangeError} Resistance must be positive
|
|
10
|
+
* @throws {RangeError} Voltage must be non-negative
|
|
8
11
|
* @param input - discriminated union by `solveFor`
|
|
9
12
|
* @returns all four electrical quantities
|
|
10
13
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ohmsLaw.d.ts","sourceRoot":"","sources":["../../src/electronics/ohmsLaw.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D
|
|
1
|
+
{"version":3,"file":"ohmsLaw.d.ts","sourceRoot":"","sources":["../../src/electronics/ohmsLaw.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE9D;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CAmD1D"}
|
|
@@ -5,6 +5,9 @@ import { roundTo } from '../utils.js';
|
|
|
5
5
|
* Solves for any one of voltage, current, resistance, or power
|
|
6
6
|
* given the other two known quantities.
|
|
7
7
|
*
|
|
8
|
+
* @throws {RangeError} Current must be positive
|
|
9
|
+
* @throws {RangeError} Resistance must be positive
|
|
10
|
+
* @throws {RangeError} Voltage must be non-negative
|
|
8
11
|
* @param input - discriminated union by `solveFor`
|
|
9
12
|
* @returns all four electrical quantities
|
|
10
13
|
*/
|
|
@@ -18,9 +21,9 @@ export function ohmsLaw(input) {
|
|
|
18
21
|
current = input.current;
|
|
19
22
|
resistance = input.resistance;
|
|
20
23
|
if (current <= 0)
|
|
21
|
-
throw new
|
|
24
|
+
throw new RangeError('Current must be positive');
|
|
22
25
|
if (resistance <= 0)
|
|
23
|
-
throw new
|
|
26
|
+
throw new RangeError('Resistance must be positive');
|
|
24
27
|
voltage = current * resistance;
|
|
25
28
|
power = voltage * current;
|
|
26
29
|
break;
|
|
@@ -29,9 +32,9 @@ export function ohmsLaw(input) {
|
|
|
29
32
|
voltage = input.voltage;
|
|
30
33
|
resistance = input.resistance;
|
|
31
34
|
if (voltage < 0)
|
|
32
|
-
throw new
|
|
35
|
+
throw new RangeError('Voltage must be non-negative');
|
|
33
36
|
if (resistance <= 0)
|
|
34
|
-
throw new
|
|
37
|
+
throw new RangeError('Resistance must be positive');
|
|
35
38
|
current = voltage / resistance;
|
|
36
39
|
power = voltage * current;
|
|
37
40
|
break;
|
|
@@ -40,9 +43,9 @@ export function ohmsLaw(input) {
|
|
|
40
43
|
voltage = input.voltage;
|
|
41
44
|
current = input.current;
|
|
42
45
|
if (voltage < 0)
|
|
43
|
-
throw new
|
|
46
|
+
throw new RangeError('Voltage must be non-negative');
|
|
44
47
|
if (current <= 0)
|
|
45
|
-
throw new
|
|
48
|
+
throw new RangeError('Current must be positive');
|
|
46
49
|
resistance = voltage / current;
|
|
47
50
|
power = voltage * current;
|
|
48
51
|
break;
|
|
@@ -51,9 +54,9 @@ export function ohmsLaw(input) {
|
|
|
51
54
|
voltage = input.voltage;
|
|
52
55
|
current = input.current;
|
|
53
56
|
if (voltage < 0)
|
|
54
|
-
throw new
|
|
57
|
+
throw new RangeError('Voltage must be non-negative');
|
|
55
58
|
if (current <= 0)
|
|
56
|
-
throw new
|
|
59
|
+
throw new RangeError('Current must be positive');
|
|
57
60
|
resistance = voltage / current;
|
|
58
61
|
power = voltage * current;
|
|
59
62
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ohmsLaw.js","sourceRoot":"","sources":["../../src/electronics/ohmsLaw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC
|
|
1
|
+
{"version":3,"file":"ohmsLaw.js","sourceRoot":"","sources":["../../src/electronics/ohmsLaw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO,CAAC,KAAmB;IACzC,IAAI,OAAe,CAAC;IACpB,IAAI,OAAe,CAAC;IACpB,IAAI,UAAkB,CAAC;IACvB,IAAI,KAAa,CAAC;IAElB,QAAQ,KAAK,CAAC,QAAQ,EAAE,CAAC;QACvB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACxB,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YAC9B,IAAI,OAAO,IAAI,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAC;YACnE,IAAI,UAAU,IAAI,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,6BAA6B,CAAC,CAAC;YACzE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;YAC/B,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;YAC1B,MAAM;QACR,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACxB,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;YAC9B,IAAI,OAAO,GAAG,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;YACtE,IAAI,UAAU,IAAI,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,6BAA6B,CAAC,CAAC;YACzE,OAAO,GAAG,OAAO,GAAG,UAAU,CAAC;YAC/B,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;YAC1B,MAAM;QACR,CAAC;QACD,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACxB,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACxB,IAAI,OAAO,GAAG,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;YACtE,IAAI,OAAO,IAAI,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAC;YACnE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;YAC/B,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;YAC1B,MAAM;QACR,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACxB,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;YACxB,IAAI,OAAO,GAAG,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;YACtE,IAAI,OAAO,IAAI,CAAC;gBAAE,MAAM,IAAI,UAAU,CAAC,0BAA0B,CAAC,CAAC;YACnE,UAAU,GAAG,OAAO,GAAG,OAAO,CAAC;YAC/B,KAAK,GAAG,OAAO,GAAG,OAAO,CAAC;YAC1B,MAAM;QACR,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5B,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;QAClC,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { StencilInput, StencilResult } from './types.js';
|
|
2
2
|
/**
|
|
3
3
|
* Calculate stencil aperture area ratio and aspect ratio
|
|
4
|
+
* @throws {RangeError} Aperture width and stencil thickness must be positive
|
|
5
|
+
* @throws {RangeError} Aperture length must be positive for rectangular apertures
|
|
4
6
|
* @param input - Aperture dimensions, stencil thickness, and component type
|
|
5
7
|
* @returns Area ratio, aspect ratio, and pass/fail status
|
|
6
|
-
* @throws Error if dimensions are invalid
|
|
7
8
|
*/
|
|
8
9
|
export declare function stencilAperture(input: StencilInput): StencilResult;
|
|
9
10
|
//# sourceMappingURL=stencil.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stencil.d.ts","sourceRoot":"","sources":["../../src/electronics/stencil.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAgB7E
|
|
1
|
+
{"version":3,"file":"stencil.d.ts","sourceRoot":"","sources":["../../src/electronics/stencil.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAiB,MAAM,YAAY,CAAC;AAgB7E;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,YAAY,GAAG,aAAa,CA8DlE"}
|
|
@@ -12,18 +12,19 @@ const RECOMMENDATIONS = {
|
|
|
12
12
|
};
|
|
13
13
|
/**
|
|
14
14
|
* Calculate stencil aperture area ratio and aspect ratio
|
|
15
|
+
* @throws {RangeError} Aperture width and stencil thickness must be positive
|
|
16
|
+
* @throws {RangeError} Aperture length must be positive for rectangular apertures
|
|
15
17
|
* @param input - Aperture dimensions, stencil thickness, and component type
|
|
16
18
|
* @returns Area ratio, aspect ratio, and pass/fail status
|
|
17
|
-
* @throws Error if dimensions are invalid
|
|
18
19
|
*/
|
|
19
20
|
export function stencilAperture(input) {
|
|
20
21
|
const { shape, apertureWidth, apertureLength, stencilThickness, componentType } = input;
|
|
21
22
|
// Validate inputs
|
|
22
23
|
if (apertureWidth <= 0 || stencilThickness <= 0) {
|
|
23
|
-
throw new
|
|
24
|
+
throw new RangeError('Aperture width and stencil thickness must be positive');
|
|
24
25
|
}
|
|
25
26
|
if (shape === 'rectangle' && apertureLength <= 0) {
|
|
26
|
-
throw new
|
|
27
|
+
throw new RangeError('Aperture length must be positive for rectangular apertures');
|
|
27
28
|
}
|
|
28
29
|
let apertureArea;
|
|
29
30
|
let perimeter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stencil.js","sourceRoot":"","sources":["../../src/electronics/stencil.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC;;GAEG;AAEH,gEAAgE;AAChE,MAAM,eAAe,GAAsE;IACzF,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,EAAO,iBAAiB;IAClE,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,EAAO,UAAU;IAC3D,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,EAAM,4BAA4B;IAC7E,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,EAAO,WAAW;IAC5D,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,GAAG,EAAE,EAAE,kBAAkB;CACnE,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"stencil.js","sourceRoot":"","sources":["../../src/electronics/stencil.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,10 @@ import type { SolarOutputInput, SolarOutputResult } from './types.js';
|
|
|
7
7
|
*
|
|
8
8
|
* Reference: NREL PVWatts Calculator methodology
|
|
9
9
|
*
|
|
10
|
+
* @throws {RangeError} Panel wattage must be positive
|
|
11
|
+
* @throws {RangeError} Panel count must be positive
|
|
12
|
+
* @throws {RangeError} Peak sun hours must be positive
|
|
13
|
+
* @throws {RangeError} System efficiency must be between 0 and 1
|
|
10
14
|
* @param input - panel specs, sun hours, orientation
|
|
11
15
|
* @returns energy production estimates
|
|
12
16
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solarOutput.d.ts","sourceRoot":"","sources":["../../src/energy/solarOutput.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE
|
|
1
|
+
{"version":3,"file":"solarOutput.d.ts","sourceRoot":"","sources":["../../src/energy/solarOutput.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAEtE;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,iBAAiB,CA+CtE"}
|
|
@@ -7,19 +7,23 @@ import { roundTo } from '../utils.js';
|
|
|
7
7
|
*
|
|
8
8
|
* Reference: NREL PVWatts Calculator methodology
|
|
9
9
|
*
|
|
10
|
+
* @throws {RangeError} Panel wattage must be positive
|
|
11
|
+
* @throws {RangeError} Panel count must be positive
|
|
12
|
+
* @throws {RangeError} Peak sun hours must be positive
|
|
13
|
+
* @throws {RangeError} System efficiency must be between 0 and 1
|
|
10
14
|
* @param input - panel specs, sun hours, orientation
|
|
11
15
|
* @returns energy production estimates
|
|
12
16
|
*/
|
|
13
17
|
export function solarOutput(input) {
|
|
14
18
|
const { panelWattage, panelCount, peakSunHours, systemEfficiency, tiltAngle, latitude, azimuthOffset, } = input;
|
|
15
19
|
if (panelWattage <= 0)
|
|
16
|
-
throw new
|
|
20
|
+
throw new RangeError('Panel wattage must be positive');
|
|
17
21
|
if (panelCount <= 0)
|
|
18
|
-
throw new
|
|
22
|
+
throw new RangeError('Panel count must be positive');
|
|
19
23
|
if (peakSunHours <= 0)
|
|
20
|
-
throw new
|
|
24
|
+
throw new RangeError('Peak sun hours must be positive');
|
|
21
25
|
if (systemEfficiency <= 0 || systemEfficiency > 1)
|
|
22
|
-
throw new
|
|
26
|
+
throw new RangeError('System efficiency must be between 0 and 1');
|
|
23
27
|
// System size in kW
|
|
24
28
|
const systemSizeKw = (panelWattage * panelCount) / 1000;
|
|
25
29
|
// Tilt efficiency factor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"solarOutput.js","sourceRoot":"","sources":["../../src/energy/solarOutput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC
|
|
1
|
+
{"version":3,"file":"solarOutput.js","sourceRoot":"","sources":["../../src/energy/solarOutput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,WAAW,CAAC,KAAuB;IACjD,MAAM,EACJ,YAAY,EAAE,UAAU,EAAE,YAAY,EACtC,gBAAgB,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,GACrD,GAAG,KAAK,CAAC;IAEV,IAAI,YAAY,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,gCAAgC,CAAC,CAAC;IAC9E,IAAI,UAAU,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;IAC1E,IAAI,YAAY,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;IAC/E,IAAI,gBAAgB,IAAI,CAAC,IAAI,gBAAgB,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,2CAA2C,CAAC,CAAC;IAErH,oBAAoB;IACpB,MAAM,YAAY,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,IAAI,CAAC;IAExD,yBAAyB;IACzB,qDAAqD;IACrD,2DAA2D;IAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,WAAW,CAAC,CAAC;IACxD,+DAA+D;IAC/D,6BAA6B;IAC7B,MAAM,gBAAgB,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,GAAG,CAAC,CAAC,CAAC;IAEnE,6DAA6D;IAC7D,oEAAoE;IACpE,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;IAC7D,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC;IAEhE,MAAM,cAAc,GAAG,UAAU,GAAG,aAAa,CAAC;IAElD,8EAA8E;IAC9E,MAAM,cAAc,GAAG,YAAY,GAAG,YAAY,GAAG,gBAAgB,GAAG,cAAc,CAAC;IACvF,MAAM,gBAAgB,GAAG,cAAc,GAAG,EAAE,CAAC;IAC7C,MAAM,eAAe,GAAG,cAAc,GAAG,GAAG,CAAC;IAE7C,yEAAyE;IACzE,MAAM,cAAc,GAAG,cAAc,GAAG,CAAC,YAAY,GAAG,EAAE,CAAC,CAAC;IAE5D,OAAO;QACL,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;QACtC,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAC9C,eAAe,EAAE,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC;QAC5C,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;QAC1C,cAAc,EAAE,OAAO,CAAC,cAAc,EAAE,CAAC,CAAC;KAC3C,CAAC;AACJ,CAAC"}
|
|
@@ -4,6 +4,7 @@ import type { Scope2EmissionsInput, Scope2EmissionsResult } from './types.js';
|
|
|
4
4
|
*
|
|
5
5
|
* @formula CO2(kg) = kWh × gridFactor / 1000
|
|
6
6
|
* @reference GHG Protocol Scope 2, IEA Emission Factors 2023
|
|
7
|
+
* @throws {RangeError} customFactor is required when region is "custom"
|
|
7
8
|
* @param input - Electricity consumption and grid region
|
|
8
9
|
* @returns CO2 emissions in kg and tonnes
|
|
9
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope2Emissions.d.ts","sourceRoot":"","sources":["../../src/environmental/scope2Emissions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAqB1F
|
|
1
|
+
{"version":3,"file":"scope2Emissions.d.ts","sourceRoot":"","sources":["../../src/environmental/scope2Emissions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAc,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAqB1F;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,qBAAqB,CAsBlF"}
|
|
@@ -22,6 +22,7 @@ const GRID_EMISSION_FACTORS = {
|
|
|
22
22
|
*
|
|
23
23
|
* @formula CO2(kg) = kWh × gridFactor / 1000
|
|
24
24
|
* @reference GHG Protocol Scope 2, IEA Emission Factors 2023
|
|
25
|
+
* @throws {RangeError} customFactor is required when region is "custom"
|
|
25
26
|
* @param input - Electricity consumption and grid region
|
|
26
27
|
* @returns CO2 emissions in kg and tonnes
|
|
27
28
|
*/
|
|
@@ -30,7 +31,7 @@ export function scope2Emissions(input) {
|
|
|
30
31
|
let gridFactor;
|
|
31
32
|
if (region === 'custom') {
|
|
32
33
|
if (customFactor == null) {
|
|
33
|
-
throw new
|
|
34
|
+
throw new RangeError('customFactor is required when region is "custom"');
|
|
34
35
|
}
|
|
35
36
|
gridFactor = customFactor;
|
|
36
37
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scope2Emissions.js","sourceRoot":"","sources":["../../src/environmental/scope2Emissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;GAGG;AACH,MAAM,qBAAqB,GAAkD;IAC3E,UAAU,EAAE,GAAG;IACf,UAAU,EAAE,GAAG;IACf,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,EAAE,EAAE,GAAG;IACP,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,GAAG;IACd,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"scope2Emissions.js","sourceRoot":"","sources":["../../src/environmental/scope2Emissions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;;GAGG;AACH,MAAM,qBAAqB,GAAkD;IAC3E,UAAU,EAAE,GAAG;IACf,UAAU,EAAE,GAAG;IACf,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,KAAK,EAAE,GAAG;IACV,EAAE,EAAE,GAAG;IACP,OAAO,EAAE,GAAG;IACZ,MAAM,EAAE,EAAE;IACV,MAAM,EAAE,EAAE;IACV,SAAS,EAAE,GAAG;IACd,MAAM,EAAE,GAAG;CACZ,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,KAA2B;IACzD,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;IAEvD,IAAI,UAAkB,CAAC;IACvB,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,IAAI,UAAU,CAAC,kDAAkD,CAAC,CAAC;QAC3E,CAAC;QACD,UAAU,GAAG,YAAY,CAAC;IAC5B,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,cAAc,GAAG,UAAU,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC;IAE3C,OAAO;QACL,KAAK;QACL,SAAS;QACT,UAAU;QACV,MAAM;KACP,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boringBarDeflection.d.ts","sourceRoot":"","sources":["../../src/machining/boringBarDeflection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,yBAAyB,EAAqB,MAAM,YAAY,CAAC;AAWzG;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,yBAAyB,
|
|
1
|
+
{"version":3,"file":"boringBarDeflection.d.ts","sourceRoot":"","sources":["../../src/machining/boringBarDeflection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,wBAAwB,EAAE,yBAAyB,EAAqB,MAAM,YAAY,CAAC;AAWzG;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,yBAAyB,CAkC9F"}
|
|
@@ -23,11 +23,17 @@ const BAR_MODULUS = {
|
|
|
23
23
|
*/
|
|
24
24
|
export function boringBarDeflection(input) {
|
|
25
25
|
const { barDiameter, overhang, cuttingForce, material = 'steel' } = input;
|
|
26
|
+
if (barDiameter <= 0)
|
|
27
|
+
throw new RangeError('barDiameter must be positive');
|
|
28
|
+
if (overhang <= 0)
|
|
29
|
+
throw new RangeError('overhang must be positive');
|
|
30
|
+
if (cuttingForce < 0)
|
|
31
|
+
throw new RangeError('cuttingForce must be non-negative');
|
|
26
32
|
const E = input.youngsModulus ?? BAR_MODULUS[material];
|
|
27
33
|
const E_MPa = E * 1000; // GPa → MPa
|
|
28
34
|
const I = (Math.PI * Math.pow(barDiameter, 4)) / 64;
|
|
29
35
|
const delta = (cuttingForce * Math.pow(overhang, 3)) / (3 * E_MPa * I);
|
|
30
|
-
const stiffness =
|
|
36
|
+
const stiffness = (3 * E_MPa * I) / Math.pow(overhang, 3);
|
|
31
37
|
const ldRatio = overhang / barDiameter;
|
|
32
38
|
let recommendation;
|
|
33
39
|
if (ldRatio <= 4) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"boringBarDeflection.js","sourceRoot":"","sources":["../../src/machining/boringBarDeflection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;GAEG;AACH,MAAM,WAAW,GAAsC;IACrD,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,UAAU,EAAE,GAAG;CAChB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IACjE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC;IAE1E,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,YAAY;IAEpC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"boringBarDeflection.js","sourceRoot":"","sources":["../../src/machining/boringBarDeflection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;GAEG;AACH,MAAM,WAAW,GAAsC;IACrD,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,UAAU,EAAE,GAAG;CAChB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAA+B;IACjE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC;IAE1E,IAAI,WAAW,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;IAC3E,IAAI,QAAQ,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;IACrE,IAAI,YAAY,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,mCAAmC,CAAC,CAAC;IAEhF,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,YAAY;IAEpC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACpD,MAAM,KAAK,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAC1D,MAAM,OAAO,GAAG,QAAQ,GAAG,WAAW,CAAC;IAEvC,IAAI,cAAsB,CAAC;IAC3B,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACjB,cAAc,GAAG,oBAAoB,CAAC;IACxC,CAAC;SAAM,IAAI,OAAO,IAAI,CAAC,EAAE,CAAC;QACxB,cAAc,GAAG,yBAAyB,CAAC;IAC7C,CAAC;SAAM,IAAI,OAAO,IAAI,EAAE,EAAE,CAAC;QACzB,cAAc,GAAG,uCAAuC,CAAC;IAC3D,CAAC;SAAM,CAAC;QACN,cAAc,GAAG,+CAA+C,CAAC;IACnE,CAAC;IAED,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7B,eAAe,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5B,aAAa,EAAE,CAAC;QAChB,cAAc;KACf,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolDeflection.d.ts","sourceRoot":"","sources":["../../src/machining/toolDeflection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAgB,MAAM,YAAY,CAAC;AAU1F;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,
|
|
1
|
+
{"version":3,"file":"toolDeflection.d.ts","sourceRoot":"","sources":["../../src/machining/toolDeflection.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAgB,MAAM,YAAY,CAAC;AAU1F;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CAoB/E"}
|
|
@@ -21,11 +21,17 @@ const TOOL_MODULUS = {
|
|
|
21
21
|
*/
|
|
22
22
|
export function toolDeflection(input) {
|
|
23
23
|
const { toolDiameter, stickout, cuttingForce, material = 'carbide' } = input;
|
|
24
|
+
if (toolDiameter <= 0)
|
|
25
|
+
throw new RangeError('toolDiameter must be positive');
|
|
26
|
+
if (stickout <= 0)
|
|
27
|
+
throw new RangeError('stickout must be positive');
|
|
28
|
+
if (cuttingForce < 0)
|
|
29
|
+
throw new RangeError('cuttingForce must be non-negative');
|
|
24
30
|
const E = input.youngsModulus ?? TOOL_MODULUS[material];
|
|
25
31
|
const E_MPa = E * 1000; // GPa → MPa (N/mm²)
|
|
26
32
|
const I = (Math.PI * Math.pow(toolDiameter, 4)) / 64;
|
|
27
33
|
const delta = (cuttingForce * Math.pow(stickout, 3)) / (3 * E_MPa * I);
|
|
28
|
-
const stiffness =
|
|
34
|
+
const stiffness = (3 * E_MPa * I) / Math.pow(stickout, 3);
|
|
29
35
|
return {
|
|
30
36
|
deflection: roundTo(delta, 6),
|
|
31
37
|
momentOfInertia: roundTo(I, 4),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"toolDeflection.js","sourceRoot":"","sources":["../../src/machining/toolDeflection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;GAEG;AACH,MAAM,YAAY,GAAiC;IACjD,OAAO,EAAE,GAAG;IACZ,GAAG,EAAE,GAAG;CACT,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAE7E,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,oBAAoB;IAE5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,
|
|
1
|
+
{"version":3,"file":"toolDeflection.js","sourceRoot":"","sources":["../../src/machining/toolDeflection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAGtC;;GAEG;AACH,MAAM,YAAY,GAAiC;IACjD,OAAO,EAAE,GAAG;IACZ,GAAG,EAAE,GAAG;CACT,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,cAAc,CAAC,KAA0B;IACvD,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,GAAG,SAAS,EAAE,GAAG,KAAK,CAAC;IAE7E,IAAI,YAAY,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,+BAA+B,CAAC,CAAC;IAC7E,IAAI,QAAQ,IAAI,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,2BAA2B,CAAC,CAAC;IACrE,IAAI,YAAY,GAAG,CAAC;QAAE,MAAM,IAAI,UAAU,CAAC,mCAAmC,CAAC,CAAC;IAEhF,MAAM,CAAC,GAAG,KAAK,CAAC,aAAa,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,oBAAoB;IAE5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACrD,MAAM,KAAK,GAAG,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;IAE1D,OAAO;QACL,UAAU,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;QAC7B,eAAe,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;QAC9B,SAAS,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;QAChC,aAAa,EAAE,CAAC;KACjB,CAAC;AACJ,CAAC"}
|
|
@@ -13,9 +13,10 @@ import type { TriangleSolverInput, TriangleSolverResult } from './types.js';
|
|
|
13
13
|
* Law of sines: a/sin(A) = b/sin(B) = c/sin(C)
|
|
14
14
|
* Area (Heron): √(s(s−a)(s−b)(s−c)), s = (a+b+c)/2
|
|
15
15
|
*
|
|
16
|
+
* @throws {RangeError} No valid triangle exists
|
|
17
|
+
* @throws {RangeError} Insufficient data to solve triangle
|
|
16
18
|
* @param input - Triangle sides and/or angles (degrees)
|
|
17
19
|
* @returns TriangleSolverResult with all sides, angles, area, and perimeter
|
|
18
|
-
* @throws Error if insufficient or invalid input
|
|
19
20
|
*/
|
|
20
21
|
export declare function triangleSolver(input: TriangleSolverInput): TriangleSolverResult;
|
|
21
22
|
//# sourceMappingURL=triangleSolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"triangleSolver.d.ts","sourceRoot":"","sources":["../../src/machining/triangleSolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAK5E
|
|
1
|
+
{"version":3,"file":"triangleSolver.d.ts","sourceRoot":"","sources":["../../src/machining/triangleSolver.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAK5E;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,oBAAoB,CA2F/E"}
|