@atmaticai/agent-tools-core 1.0.0 → 1.0.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.
Files changed (38) hide show
  1. package/dist/index-BKeYao0B.d.mts +320 -0
  2. package/dist/index-BKeYao0B.d.ts +320 -0
  3. package/dist/index-BZDcrPs-.d.mts +316 -0
  4. package/dist/index-BZDcrPs-.d.ts +316 -0
  5. package/dist/{index-RVqNunxE.d.mts → index-Hw4godS8.d.mts} +25 -2
  6. package/dist/{index-RVqNunxE.d.ts → index-Hw4godS8.d.ts} +25 -2
  7. package/dist/index.d.mts +3 -1
  8. package/dist/index.d.ts +3 -1
  9. package/dist/index.js +1161 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/index.mjs +1160 -1
  12. package/dist/index.mjs.map +1 -1
  13. package/dist/pdf/index.d.mts +1 -1
  14. package/dist/pdf/index.d.ts +1 -1
  15. package/dist/pdf/index.js +82 -0
  16. package/dist/pdf/index.js.map +1 -1
  17. package/dist/pdf/index.mjs +81 -1
  18. package/dist/pdf/index.mjs.map +1 -1
  19. package/dist/physics/index.d.mts +1 -0
  20. package/dist/physics/index.d.ts +1 -0
  21. package/dist/physics/index.js +467 -0
  22. package/dist/physics/index.js.map +1 -0
  23. package/dist/physics/index.mjs +435 -0
  24. package/dist/physics/index.mjs.map +1 -0
  25. package/dist/settings/index.d.mts +1 -1
  26. package/dist/settings/index.d.ts +1 -1
  27. package/dist/settings/index.js +6 -2
  28. package/dist/settings/index.js.map +1 -1
  29. package/dist/settings/index.mjs +6 -2
  30. package/dist/settings/index.mjs.map +1 -1
  31. package/dist/structural/index.d.mts +1 -0
  32. package/dist/structural/index.d.ts +1 -0
  33. package/dist/structural/index.js +608 -0
  34. package/dist/structural/index.js.map +1 -0
  35. package/dist/structural/index.mjs +588 -0
  36. package/dist/structural/index.mjs.map +1 -0
  37. package/package.json +12 -2
  38. package/README.md +0 -742
@@ -0,0 +1,435 @@
1
+ // src/physics/constants.ts
2
+ var CONSTANTS = {
3
+ c: { name: "Speed of Light", symbol: "c", value: 299792458, unit: "m/s", category: "universal" },
4
+ G: { name: "Gravitational Constant", symbol: "G", value: 66743e-15, unit: "N\xB7m\xB2/kg\xB2", category: "universal" },
5
+ h: { name: "Planck Constant", symbol: "h", value: 662607015e-42, unit: "J\xB7s", category: "quantum" },
6
+ hbar: { name: "Reduced Planck Constant", symbol: "\u210F", value: 1054571817e-43, unit: "J\xB7s", category: "quantum" },
7
+ k_B: { name: "Boltzmann Constant", symbol: "k_B", value: 1380649e-29, unit: "J/K", category: "thermodynamics" },
8
+ N_A: { name: "Avogadro Number", symbol: "N_A", value: 602214076e15, unit: "1/mol", category: "chemistry" },
9
+ R: { name: "Gas Constant", symbol: "R", value: 8.314462618, unit: "J/(mol\xB7K)", category: "thermodynamics" },
10
+ e: { name: "Elementary Charge", symbol: "e", value: 1602176634e-28, unit: "C", category: "electromagnetic" },
11
+ epsilon_0: { name: "Vacuum Permittivity", symbol: "\u03B5\u2080", value: 88541878128e-22, unit: "F/m", category: "electromagnetic" },
12
+ mu_0: { name: "Vacuum Permeability", symbol: "\u03BC\u2080", value: 125663706212e-17, unit: "N/A\xB2", category: "electromagnetic" },
13
+ m_e: { name: "Electron Mass", symbol: "m_e", value: 91093837015e-41, unit: "kg", category: "atomic" },
14
+ m_p: { name: "Proton Mass", symbol: "m_p", value: 167262192369e-38, unit: "kg", category: "atomic" },
15
+ sigma: { name: "Stefan-Boltzmann Constant", symbol: "\u03C3", value: 5670374419e-17, unit: "W/(m\xB2\xB7K\u2074)", category: "thermodynamics" },
16
+ g: { name: "Standard Gravity", symbol: "g", value: 9.80665, unit: "m/s\xB2", category: "mechanics" },
17
+ atm: { name: "Standard Atmosphere", symbol: "atm", value: 101325, unit: "Pa", category: "mechanics" },
18
+ k_e: { name: "Coulomb Constant", symbol: "k_e", value: 89875517923e-1, unit: "N\xB7m\xB2/C\xB2", category: "electromagnetic" }
19
+ };
20
+ function getConstant(key) {
21
+ const c = CONSTANTS[key];
22
+ if (!c) {
23
+ throw new Error(`Unknown constant: ${key}. Available: ${Object.keys(CONSTANTS).join(", ")}`);
24
+ }
25
+ return { ...c };
26
+ }
27
+ function listConstants(category) {
28
+ const all = Object.values(CONSTANTS).map((c) => ({ ...c }));
29
+ if (category) {
30
+ return all.filter((c) => c.category === category);
31
+ }
32
+ return all;
33
+ }
34
+
35
+ // src/physics/kinematics.ts
36
+ function solveKinematics(params) {
37
+ const known = Object.entries(params).filter(([, v]) => v !== void 0);
38
+ if (known.length < 3) {
39
+ throw new Error("Need at least 3 of: displacement, initialVelocity, finalVelocity, acceleration, time");
40
+ }
41
+ let { displacement, initialVelocity, finalVelocity, acceleration, time } = params;
42
+ if (initialVelocity === void 0) {
43
+ if (finalVelocity !== void 0 && acceleration !== void 0 && time !== void 0) {
44
+ initialVelocity = finalVelocity - acceleration * time;
45
+ } else if (displacement !== void 0 && time !== void 0 && acceleration !== void 0) {
46
+ initialVelocity = (displacement - 0.5 * acceleration * time * time) / time;
47
+ } else if (finalVelocity !== void 0 && acceleration !== void 0 && displacement !== void 0) {
48
+ initialVelocity = Math.sqrt(finalVelocity * finalVelocity - 2 * acceleration * displacement);
49
+ }
50
+ }
51
+ if (displacement === void 0) {
52
+ if (initialVelocity !== void 0 && time !== void 0 && acceleration !== void 0) {
53
+ displacement = initialVelocity * time + 0.5 * acceleration * time * time;
54
+ } else if (initialVelocity !== void 0 && finalVelocity !== void 0 && time !== void 0) {
55
+ displacement = (initialVelocity + finalVelocity) / 2 * time;
56
+ } else if (finalVelocity !== void 0 && initialVelocity !== void 0 && acceleration !== void 0) {
57
+ displacement = (finalVelocity * finalVelocity - initialVelocity * initialVelocity) / (2 * acceleration);
58
+ } else {
59
+ throw new Error("Cannot solve for displacement with the given parameters");
60
+ }
61
+ }
62
+ if (initialVelocity === void 0) {
63
+ if (displacement !== void 0 && time !== void 0 && acceleration !== void 0) {
64
+ initialVelocity = (displacement - 0.5 * acceleration * time * time) / time;
65
+ } else if (finalVelocity !== void 0 && acceleration !== void 0 && displacement !== void 0) {
66
+ initialVelocity = Math.sqrt(finalVelocity * finalVelocity - 2 * acceleration * displacement);
67
+ } else {
68
+ throw new Error("Cannot solve for initialVelocity with the given parameters");
69
+ }
70
+ }
71
+ if (finalVelocity === void 0) {
72
+ if (initialVelocity !== void 0 && acceleration !== void 0 && time !== void 0) {
73
+ finalVelocity = initialVelocity + acceleration * time;
74
+ } else if (initialVelocity !== void 0 && acceleration !== void 0 && displacement !== void 0) {
75
+ finalVelocity = Math.sqrt(initialVelocity * initialVelocity + 2 * acceleration * displacement);
76
+ } else {
77
+ throw new Error("Cannot solve for finalVelocity with the given parameters");
78
+ }
79
+ }
80
+ if (acceleration === void 0) {
81
+ if (initialVelocity !== void 0 && finalVelocity !== void 0 && time !== void 0) {
82
+ acceleration = (finalVelocity - initialVelocity) / time;
83
+ } else if (initialVelocity !== void 0 && finalVelocity !== void 0 && displacement !== void 0) {
84
+ acceleration = (finalVelocity * finalVelocity - initialVelocity * initialVelocity) / (2 * displacement);
85
+ } else {
86
+ throw new Error("Cannot solve for acceleration with the given parameters");
87
+ }
88
+ }
89
+ if (time === void 0) {
90
+ if (initialVelocity !== void 0 && finalVelocity !== void 0 && acceleration !== void 0 && acceleration !== 0) {
91
+ time = (finalVelocity - initialVelocity) / acceleration;
92
+ } else if (displacement !== void 0 && initialVelocity !== void 0 && acceleration !== void 0) {
93
+ const a = 0.5 * acceleration;
94
+ const b = initialVelocity;
95
+ const c = -displacement;
96
+ const discriminant = b * b - 4 * a * c;
97
+ if (discriminant < 0) throw new Error("No real solution for time");
98
+ time = (-b + Math.sqrt(discriminant)) / (2 * a);
99
+ if (time < 0) time = (-b - Math.sqrt(discriminant)) / (2 * a);
100
+ } else {
101
+ throw new Error("Cannot solve for time with the given parameters");
102
+ }
103
+ }
104
+ return {
105
+ displacement,
106
+ initialVelocity,
107
+ finalVelocity,
108
+ acceleration,
109
+ time
110
+ };
111
+ }
112
+ function projectileMotion(initialVelocity, angleDegrees, gravity = 9.80665) {
113
+ if (initialVelocity < 0) throw new Error("Initial velocity must be non-negative");
114
+ if (angleDegrees < 0 || angleDegrees > 90) throw new Error("Angle must be between 0 and 90 degrees");
115
+ const angleRad = angleDegrees * Math.PI / 180;
116
+ const sin = Math.sin(angleRad);
117
+ const cos = Math.cos(angleRad);
118
+ const sin2 = Math.sin(2 * angleRad);
119
+ const range = initialVelocity * initialVelocity * sin2 / gravity;
120
+ const maxHeight = initialVelocity * initialVelocity * sin * sin / (2 * gravity);
121
+ const flightTime = 2 * initialVelocity * sin / gravity;
122
+ const velocityAtPeak = initialVelocity * cos;
123
+ return { range, maxHeight, flightTime, initialVelocity, angle: angleDegrees, velocityAtPeak };
124
+ }
125
+ function freeFall(height, gravity = 9.80665) {
126
+ if (height < 0) throw new Error("Height must be non-negative");
127
+ const time = Math.sqrt(2 * height / gravity);
128
+ const finalVelocity = gravity * time;
129
+ return { height, time, finalVelocity };
130
+ }
131
+
132
+ // src/physics/mechanics.ts
133
+ var G = 66743e-15;
134
+ function calculateForce(mass, acceleration) {
135
+ if (mass < 0) throw new Error("Mass must be non-negative");
136
+ return { force: mass * acceleration, mass, acceleration, unit: "N" };
137
+ }
138
+ function calculateEnergy(mass, velocity, height = 0, gravity = 9.80665) {
139
+ if (mass < 0) throw new Error("Mass must be non-negative");
140
+ const kineticEnergy = 0.5 * mass * velocity * velocity;
141
+ const potentialEnergy = mass * gravity * height;
142
+ return { kineticEnergy, potentialEnergy, totalEnergy: kineticEnergy + potentialEnergy, unit: "J" };
143
+ }
144
+ function gravitationalForce(mass1, mass2, distance) {
145
+ if (distance <= 0) throw new Error("Distance must be positive");
146
+ if (mass1 < 0 || mass2 < 0) throw new Error("Mass must be non-negative");
147
+ const force = G * mass1 * mass2 / (distance * distance);
148
+ return { force, mass1, mass2, distance, unit: "N" };
149
+ }
150
+ function calculateMomentum(mass, velocity) {
151
+ if (mass < 0) throw new Error("Mass must be non-negative");
152
+ return { momentum: mass * velocity, mass, velocity, unit: "kg\xB7m/s" };
153
+ }
154
+ function orbitalMechanics(mass, radius) {
155
+ if (mass < 0) throw new Error("Mass must be non-negative");
156
+ if (radius <= 0) throw new Error("Radius must be positive");
157
+ const orbitalVelocity = Math.sqrt(G * mass / radius);
158
+ const escapeVelocity = Math.sqrt(2 * G * mass / radius);
159
+ return { orbitalVelocity, escapeVelocity, mass, radius, unit: "m/s" };
160
+ }
161
+ function calculateWork(force, distance, angleDegrees = 0) {
162
+ const angleRad = angleDegrees * Math.PI / 180;
163
+ const work = force * distance * Math.cos(angleRad);
164
+ return { work, force, distance, angle: angleDegrees, unit: "J" };
165
+ }
166
+
167
+ // src/physics/electricity.ts
168
+ var K_E = 89875517923e-1;
169
+ function ohmsLaw(params) {
170
+ const known = Object.entries(params).filter(([, v]) => v !== void 0);
171
+ if (known.length < 2) {
172
+ throw new Error("Need at least 2 of: voltage, current, resistance");
173
+ }
174
+ let { voltage, current, resistance } = params;
175
+ if (voltage === void 0) {
176
+ voltage = current * resistance;
177
+ } else if (current === void 0) {
178
+ if (resistance === 0) throw new Error("Resistance cannot be zero when solving for current");
179
+ current = voltage / resistance;
180
+ } else if (resistance === void 0) {
181
+ if (current === 0) throw new Error("Current cannot be zero when solving for resistance");
182
+ resistance = voltage / current;
183
+ }
184
+ const power = voltage * current;
185
+ return { voltage, current, resistance, power };
186
+ }
187
+ function resistors(values, configuration) {
188
+ if (values.length === 0) throw new Error("Need at least one resistor value");
189
+ if (values.some((v) => v < 0)) throw new Error("Resistor values must be non-negative");
190
+ let totalResistance;
191
+ if (configuration === "series") {
192
+ totalResistance = values.reduce((sum, r) => sum + r, 0);
193
+ } else {
194
+ if (values.some((v) => v === 0)) throw new Error("Parallel resistors cannot have zero resistance");
195
+ totalResistance = 1 / values.reduce((sum, r) => sum + 1 / r, 0);
196
+ }
197
+ return { configuration, resistors: values, totalResistance, unit: "\u03A9" };
198
+ }
199
+ function coulombsLaw(charge1, charge2, distance) {
200
+ if (distance <= 0) throw new Error("Distance must be positive");
201
+ const force = K_E * Math.abs(charge1 * charge2) / (distance * distance);
202
+ const isAttractive = charge1 > 0 && charge2 < 0 || charge1 < 0 && charge2 > 0;
203
+ return { force, charge1, charge2, distance, isAttractive, unit: "N" };
204
+ }
205
+ function capacitors(values, configuration) {
206
+ if (values.length === 0) throw new Error("Need at least one capacitor value");
207
+ if (values.some((v) => v <= 0)) throw new Error("Capacitor values must be positive");
208
+ let totalCapacitance;
209
+ if (configuration === "parallel") {
210
+ totalCapacitance = values.reduce((sum, c) => sum + c, 0);
211
+ } else {
212
+ totalCapacitance = 1 / values.reduce((sum, c) => sum + 1 / c, 0);
213
+ }
214
+ return { configuration, capacitors: values, totalCapacitance, unit: "F" };
215
+ }
216
+ function rcCircuit(resistance, capacitance) {
217
+ if (resistance <= 0) throw new Error("Resistance must be positive");
218
+ if (capacitance <= 0) throw new Error("Capacitance must be positive");
219
+ const timeConstant = resistance * capacitance;
220
+ const halfLife = timeConstant * Math.LN2;
221
+ return { resistance, capacitance, timeConstant, halfLife, unit: "s" };
222
+ }
223
+
224
+ // src/physics/waves.ts
225
+ function waveEquation(params) {
226
+ const known = Object.entries(params).filter(([, v]) => v !== void 0);
227
+ if (known.length < 2) {
228
+ throw new Error("Need at least 2 of: frequency, wavelength, speed");
229
+ }
230
+ let { frequency, wavelength, speed } = params;
231
+ if (speed === void 0) {
232
+ speed = frequency * wavelength;
233
+ } else if (frequency === void 0) {
234
+ if (wavelength === 0) throw new Error("Wavelength cannot be zero");
235
+ frequency = speed / wavelength;
236
+ } else if (wavelength === void 0) {
237
+ if (frequency === 0) throw new Error("Frequency cannot be zero");
238
+ wavelength = speed / frequency;
239
+ }
240
+ return { frequency, wavelength, speed, period: 1 / frequency };
241
+ }
242
+ function dopplerEffect(sourceFrequency, sourceVelocity, observerVelocity, mediumSpeed = 343, approaching = true) {
243
+ if (sourceFrequency <= 0) throw new Error("Source frequency must be positive");
244
+ if (Math.abs(sourceVelocity) >= mediumSpeed) throw new Error("Source velocity must be less than medium speed");
245
+ let observedFrequency;
246
+ if (approaching) {
247
+ observedFrequency = sourceFrequency * ((mediumSpeed + observerVelocity) / (mediumSpeed - sourceVelocity));
248
+ } else {
249
+ observedFrequency = sourceFrequency * ((mediumSpeed - observerVelocity) / (mediumSpeed + sourceVelocity));
250
+ }
251
+ return { observedFrequency, sourceFrequency, sourceVelocity, observerVelocity, mediumSpeed, approaching };
252
+ }
253
+ function snellsLaw(n1, n2, angle1Degrees) {
254
+ if (n1 <= 0 || n2 <= 0) throw new Error("Refractive indices must be positive");
255
+ if (angle1Degrees < 0 || angle1Degrees >= 90) throw new Error("Angle must be between 0 and 90 degrees");
256
+ const angle1Rad = angle1Degrees * Math.PI / 180;
257
+ const sinAngle2 = n1 * Math.sin(angle1Rad) / n2;
258
+ let criticalAngle = null;
259
+ if (n1 > n2) {
260
+ criticalAngle = Math.asin(n2 / n1) * 180 / Math.PI;
261
+ }
262
+ if (Math.abs(sinAngle2) > 1) {
263
+ return { n1, n2, angle1: angle1Degrees, angle2: NaN, totalInternalReflection: true, criticalAngle };
264
+ }
265
+ const angle2Degrees = Math.asin(sinAngle2) * 180 / Math.PI;
266
+ return { n1, n2, angle1: angle1Degrees, angle2: angle2Degrees, totalInternalReflection: false, criticalAngle };
267
+ }
268
+ function thinLens(params) {
269
+ const known = Object.entries(params).filter(([, v]) => v !== void 0);
270
+ if (known.length < 2) {
271
+ throw new Error("Need at least 2 of: focalLength, objectDistance, imageDistance");
272
+ }
273
+ let { focalLength, objectDistance, imageDistance } = params;
274
+ if (focalLength === void 0) {
275
+ focalLength = 1 / (1 / objectDistance + 1 / imageDistance);
276
+ } else if (objectDistance === void 0) {
277
+ objectDistance = 1 / (1 / focalLength - 1 / imageDistance);
278
+ } else if (imageDistance === void 0) {
279
+ imageDistance = 1 / (1 / focalLength - 1 / objectDistance);
280
+ }
281
+ const magnification = -imageDistance / objectDistance;
282
+ const imageType = imageDistance > 0 ? "real" : "virtual";
283
+ return { focalLength, objectDistance, imageDistance, magnification, imageType };
284
+ }
285
+ function decibelConversion(intensity1, intensity2) {
286
+ if (intensity1 <= 0 || intensity2 <= 0) throw new Error("Intensities must be positive");
287
+ const decibels = 10 * Math.log10(intensity2 / intensity1);
288
+ return { intensity1, intensity2, decibels };
289
+ }
290
+
291
+ // src/physics/thermodynamics.ts
292
+ var R = 8.314462618;
293
+ function idealGasLaw(params) {
294
+ const known = Object.entries(params).filter(([, v]) => v !== void 0);
295
+ if (known.length < 3) {
296
+ throw new Error("Need at least 3 of: pressure (Pa), volume (m\xB3), moles (mol), temperature (K)");
297
+ }
298
+ let { pressure, volume, moles, temperature } = params;
299
+ if (pressure === void 0) {
300
+ pressure = moles * R * temperature / volume;
301
+ } else if (volume === void 0) {
302
+ volume = moles * R * temperature / pressure;
303
+ } else if (moles === void 0) {
304
+ moles = pressure * volume / (R * temperature);
305
+ } else if (temperature === void 0) {
306
+ temperature = pressure * volume / (moles * R);
307
+ }
308
+ return { pressure, volume, moles, temperature, unit: "SI (Pa, m\xB3, mol, K)" };
309
+ }
310
+ function heatTransfer(mass, specificHeat, temperatureChange) {
311
+ if (mass < 0) throw new Error("Mass must be non-negative");
312
+ if (specificHeat <= 0) throw new Error("Specific heat must be positive");
313
+ const heat = mass * specificHeat * temperatureChange;
314
+ return { heat, mass, specificHeat, temperatureChange, unit: "J" };
315
+ }
316
+ function thermalExpansion(originalLength, coefficient, temperatureChange) {
317
+ if (originalLength < 0) throw new Error("Original length must be non-negative");
318
+ const expansion = originalLength * coefficient * temperatureChange;
319
+ const finalLength = originalLength + expansion;
320
+ return { originalLength, coefficient, temperatureChange, expansion, finalLength };
321
+ }
322
+ function carnotEfficiency(hotTemperature, coldTemperature) {
323
+ if (hotTemperature <= 0 || coldTemperature <= 0) throw new Error("Temperatures must be positive (in Kelvin)");
324
+ if (coldTemperature >= hotTemperature) throw new Error("Hot temperature must be greater than cold temperature");
325
+ const efficiency = 1 - coldTemperature / hotTemperature;
326
+ return { hotTemperature, coldTemperature, efficiency, efficiencyPercent: `${(efficiency * 100).toFixed(2)}%` };
327
+ }
328
+
329
+ // src/physics/relativity.ts
330
+ var C = 299792458;
331
+ function lorentzFactor(velocity) {
332
+ if (Math.abs(velocity) >= C) throw new Error("Velocity must be less than the speed of light");
333
+ const beta = velocity / C;
334
+ const gamma = 1 / Math.sqrt(1 - beta * beta);
335
+ return { velocity, speedOfLight: C, beta, gamma };
336
+ }
337
+ function timeDilation(properTime, velocity) {
338
+ if (properTime < 0) throw new Error("Proper time must be non-negative");
339
+ const { gamma } = lorentzFactor(velocity);
340
+ const dilatedTime = properTime * gamma;
341
+ return { properTime, dilatedTime, velocity, gamma };
342
+ }
343
+ function lengthContraction(properLength, velocity) {
344
+ if (properLength < 0) throw new Error("Proper length must be non-negative");
345
+ const { gamma } = lorentzFactor(velocity);
346
+ const contractedLength = properLength / gamma;
347
+ return { properLength, contractedLength, velocity, gamma };
348
+ }
349
+ function massEnergy(mass) {
350
+ if (mass < 0) throw new Error("Mass must be non-negative");
351
+ const energy = mass * C * C;
352
+ return { mass, energy, unit: "J" };
353
+ }
354
+ function energyToMass(energy) {
355
+ if (energy < 0) throw new Error("Energy must be non-negative");
356
+ const mass = energy / (C * C);
357
+ return { mass, energy, unit: "kg" };
358
+ }
359
+
360
+ // src/physics/units.ts
361
+ var forceFactors = {
362
+ n: 1,
363
+ kn: 1e3,
364
+ dyn: 1e-5,
365
+ lbf: 4.44822,
366
+ kgf: 9.80665
367
+ };
368
+ var energyFactors = {
369
+ j: 1,
370
+ kj: 1e3,
371
+ cal: 4.184,
372
+ kcal: 4184,
373
+ ev: 1602176634e-28,
374
+ kwh: 36e5,
375
+ btu: 1055.06,
376
+ erg: 1e-7
377
+ };
378
+ var powerFactors = {
379
+ w: 1,
380
+ kw: 1e3,
381
+ mw: 1e6,
382
+ hp: 745.7,
383
+ "btu/h": 0.293071
384
+ };
385
+ var pressureFactors = {
386
+ pa: 1,
387
+ kpa: 1e3,
388
+ mpa: 1e6,
389
+ atm: 101325,
390
+ bar: 1e5,
391
+ psi: 6894.76,
392
+ torr: 133.322,
393
+ mmhg: 133.322
394
+ };
395
+ var speedFactors = {
396
+ "m/s": 1,
397
+ "km/h": 1 / 3.6,
398
+ mph: 0.44704,
399
+ knots: 0.514444,
400
+ "ft/s": 0.3048
401
+ };
402
+ function getFactors(category) {
403
+ switch (category) {
404
+ case "force":
405
+ return forceFactors;
406
+ case "energy":
407
+ return energyFactors;
408
+ case "power":
409
+ return powerFactors;
410
+ case "pressure":
411
+ return pressureFactors;
412
+ case "speed":
413
+ return speedFactors;
414
+ default:
415
+ throw new Error(`Unknown physics unit category: ${category}`);
416
+ }
417
+ }
418
+ function convertPhysicsUnit(value, from, to, category) {
419
+ const factors = getFactors(category);
420
+ const fromLower = from.toLowerCase();
421
+ const toLower = to.toLowerCase();
422
+ if (!(fromLower in factors)) {
423
+ throw new Error(`Unknown ${category} unit: ${from}. Available: ${Object.keys(factors).join(", ")}`);
424
+ }
425
+ if (!(toLower in factors)) {
426
+ throw new Error(`Unknown ${category} unit: ${to}. Available: ${Object.keys(factors).join(", ")}`);
427
+ }
428
+ const baseValue = value * factors[fromLower];
429
+ const result = baseValue / factors[toLower];
430
+ return { value, from: fromLower, to: toLower, result, category };
431
+ }
432
+
433
+ export { calculateEnergy, calculateForce, calculateMomentum, calculateWork, capacitors, carnotEfficiency, convertPhysicsUnit, coulombsLaw, decibelConversion, dopplerEffect, energyToMass, freeFall, getConstant, gravitationalForce, heatTransfer, idealGasLaw, lengthContraction, listConstants, lorentzFactor, massEnergy, ohmsLaw, orbitalMechanics, projectileMotion, rcCircuit, resistors, snellsLaw, solveKinematics, thermalExpansion, thinLens, timeDilation, waveEquation };
434
+ //# sourceMappingURL=index.mjs.map
435
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/physics/constants.ts","../../src/physics/kinematics.ts","../../src/physics/mechanics.ts","../../src/physics/electricity.ts","../../src/physics/waves.ts","../../src/physics/thermodynamics.ts","../../src/physics/relativity.ts","../../src/physics/units.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import type { PhysicalConstant } from './types';\n\nconst CONSTANTS: Record<string, PhysicalConstant> = {\n c: { name: 'Speed of Light', symbol: 'c', value: 299792458, unit: 'm/s', category: 'universal' },\n G: { name: 'Gravitational Constant', symbol: 'G', value: 6.67430e-11, unit: 'N·m²/kg²', category: 'universal' },\n h: { name: 'Planck Constant', symbol: 'h', value: 6.62607015e-34, unit: 'J·s', category: 'quantum' },\n hbar: { name: 'Reduced Planck Constant', symbol: 'ℏ', value: 1.054571817e-34, unit: 'J·s', category: 'quantum' },\n k_B: { name: 'Boltzmann Constant', symbol: 'k_B', value: 1.380649e-23, unit: 'J/K', category: 'thermodynamics' },\n N_A: { name: 'Avogadro Number', symbol: 'N_A', value: 6.02214076e23, unit: '1/mol', category: 'chemistry' },\n R: { name: 'Gas Constant', symbol: 'R', value: 8.314462618, unit: 'J/(mol·K)', category: 'thermodynamics' },\n e: { name: 'Elementary Charge', symbol: 'e', value: 1.602176634e-19, unit: 'C', category: 'electromagnetic' },\n epsilon_0: { name: 'Vacuum Permittivity', symbol: 'ε₀', value: 8.8541878128e-12, unit: 'F/m', category: 'electromagnetic' },\n mu_0: { name: 'Vacuum Permeability', symbol: 'μ₀', value: 1.25663706212e-6, unit: 'N/A²', category: 'electromagnetic' },\n m_e: { name: 'Electron Mass', symbol: 'm_e', value: 9.1093837015e-31, unit: 'kg', category: 'atomic' },\n m_p: { name: 'Proton Mass', symbol: 'm_p', value: 1.67262192369e-27, unit: 'kg', category: 'atomic' },\n sigma: { name: 'Stefan-Boltzmann Constant', symbol: 'σ', value: 5.670374419e-8, unit: 'W/(m²·K⁴)', category: 'thermodynamics' },\n g: { name: 'Standard Gravity', symbol: 'g', value: 9.80665, unit: 'm/s²', category: 'mechanics' },\n atm: { name: 'Standard Atmosphere', symbol: 'atm', value: 101325, unit: 'Pa', category: 'mechanics' },\n k_e: { name: 'Coulomb Constant', symbol: 'k_e', value: 8.9875517923e9, unit: 'N·m²/C²', category: 'electromagnetic' },\n};\n\nexport function getConstant(key: string): PhysicalConstant {\n const c = CONSTANTS[key];\n if (!c) {\n throw new Error(`Unknown constant: ${key}. Available: ${Object.keys(CONSTANTS).join(', ')}`);\n }\n return { ...c };\n}\n\nexport function listConstants(category?: string): PhysicalConstant[] {\n const all = Object.values(CONSTANTS).map((c) => ({ ...c }));\n if (category) {\n return all.filter((c) => c.category === category);\n }\n return all;\n}\n","import type { KinematicsResult, ProjectileResult } from './types';\n\nexport function solveKinematics(params: {\n displacement?: number;\n initialVelocity?: number;\n finalVelocity?: number;\n acceleration?: number;\n time?: number;\n}): KinematicsResult {\n const known = Object.entries(params).filter(([, v]) => v !== undefined);\n if (known.length < 3) {\n throw new Error('Need at least 3 of: displacement, initialVelocity, finalVelocity, acceleration, time');\n }\n\n let { displacement, initialVelocity, finalVelocity, acceleration, time } = params;\n\n // Solve for initialVelocity first (before displacement) so that\n // cases like (v, a, t) can derive u, then use u to find s.\n if (initialVelocity === undefined) {\n if (finalVelocity !== undefined && acceleration !== undefined && time !== undefined) {\n initialVelocity = finalVelocity - acceleration * time;\n } else if (displacement !== undefined && time !== undefined && acceleration !== undefined) {\n initialVelocity = (displacement - 0.5 * acceleration * time * time) / time;\n } else if (finalVelocity !== undefined && acceleration !== undefined && displacement !== undefined) {\n initialVelocity = Math.sqrt(finalVelocity * finalVelocity - 2 * acceleration * displacement);\n }\n // If still undefined, displacement section may resolve it later\n }\n\n if (displacement === undefined) {\n if (initialVelocity !== undefined && time !== undefined && acceleration !== undefined) {\n displacement = initialVelocity * time + 0.5 * acceleration * time * time;\n } else if (initialVelocity !== undefined && finalVelocity !== undefined && time !== undefined) {\n displacement = ((initialVelocity + finalVelocity) / 2) * time;\n } else if (finalVelocity !== undefined && initialVelocity !== undefined && acceleration !== undefined) {\n displacement = (finalVelocity * finalVelocity - initialVelocity * initialVelocity) / (2 * acceleration);\n } else {\n throw new Error('Cannot solve for displacement with the given parameters');\n }\n }\n\n // Re-check initialVelocity now that displacement may be known\n if (initialVelocity === undefined) {\n if (displacement !== undefined && time !== undefined && acceleration !== undefined) {\n initialVelocity = (displacement - 0.5 * acceleration * time * time) / time;\n } else if (finalVelocity !== undefined && acceleration !== undefined && displacement !== undefined) {\n initialVelocity = Math.sqrt(finalVelocity * finalVelocity - 2 * acceleration * displacement);\n } else {\n throw new Error('Cannot solve for initialVelocity with the given parameters');\n }\n }\n\n if (finalVelocity === undefined) {\n if (initialVelocity !== undefined && acceleration !== undefined && time !== undefined) {\n finalVelocity = initialVelocity + acceleration * time;\n } else if (initialVelocity !== undefined && acceleration !== undefined && displacement !== undefined) {\n finalVelocity = Math.sqrt(initialVelocity * initialVelocity + 2 * acceleration * displacement);\n } else {\n throw new Error('Cannot solve for finalVelocity with the given parameters');\n }\n }\n\n if (acceleration === undefined) {\n if (initialVelocity !== undefined && finalVelocity !== undefined && time !== undefined) {\n acceleration = (finalVelocity - initialVelocity) / time;\n } else if (initialVelocity !== undefined && finalVelocity !== undefined && displacement !== undefined) {\n acceleration = (finalVelocity * finalVelocity - initialVelocity * initialVelocity) / (2 * displacement);\n } else {\n throw new Error('Cannot solve for acceleration with the given parameters');\n }\n }\n\n if (time === undefined) {\n if (initialVelocity !== undefined && finalVelocity !== undefined && acceleration !== undefined && acceleration !== 0) {\n time = (finalVelocity - initialVelocity) / acceleration;\n } else if (displacement !== undefined && initialVelocity !== undefined && acceleration !== undefined) {\n const a = 0.5 * acceleration;\n const b = initialVelocity;\n const c = -displacement;\n const discriminant = b * b - 4 * a * c;\n if (discriminant < 0) throw new Error('No real solution for time');\n time = (-b + Math.sqrt(discriminant)) / (2 * a);\n if (time < 0) time = (-b - Math.sqrt(discriminant)) / (2 * a);\n } else {\n throw new Error('Cannot solve for time with the given parameters');\n }\n }\n\n return {\n displacement: displacement!,\n initialVelocity: initialVelocity!,\n finalVelocity: finalVelocity!,\n acceleration: acceleration!,\n time: time!,\n };\n}\n\nexport function projectileMotion(\n initialVelocity: number,\n angleDegrees: number,\n gravity: number = 9.80665\n): ProjectileResult {\n if (initialVelocity < 0) throw new Error('Initial velocity must be non-negative');\n if (angleDegrees < 0 || angleDegrees > 90) throw new Error('Angle must be between 0 and 90 degrees');\n\n const angleRad = (angleDegrees * Math.PI) / 180;\n const sin = Math.sin(angleRad);\n const cos = Math.cos(angleRad);\n const sin2 = Math.sin(2 * angleRad);\n\n const range = (initialVelocity * initialVelocity * sin2) / gravity;\n const maxHeight = (initialVelocity * initialVelocity * sin * sin) / (2 * gravity);\n const flightTime = (2 * initialVelocity * sin) / gravity;\n const velocityAtPeak = initialVelocity * cos;\n\n return { range, maxHeight, flightTime, initialVelocity, angle: angleDegrees, velocityAtPeak };\n}\n\nexport function freeFall(\n height: number,\n gravity: number = 9.80665\n): { height: number; time: number; finalVelocity: number } {\n if (height < 0) throw new Error('Height must be non-negative');\n const time = Math.sqrt((2 * height) / gravity);\n const finalVelocity = gravity * time;\n return { height, time, finalVelocity };\n}\n","import type { ForceResult, EnergyResult, GravitationalForceResult, MomentumResult, OrbitalVelocityResult } from './types';\n\nconst G = 6.67430e-11;\n\nexport function calculateForce(mass: number, acceleration: number): ForceResult {\n if (mass < 0) throw new Error('Mass must be non-negative');\n return { force: mass * acceleration, mass, acceleration, unit: 'N' };\n}\n\nexport function calculateEnergy(\n mass: number,\n velocity: number,\n height: number = 0,\n gravity: number = 9.80665\n): EnergyResult {\n if (mass < 0) throw new Error('Mass must be non-negative');\n const kineticEnergy = 0.5 * mass * velocity * velocity;\n const potentialEnergy = mass * gravity * height;\n return { kineticEnergy, potentialEnergy, totalEnergy: kineticEnergy + potentialEnergy, unit: 'J' };\n}\n\nexport function gravitationalForce(mass1: number, mass2: number, distance: number): GravitationalForceResult {\n if (distance <= 0) throw new Error('Distance must be positive');\n if (mass1 < 0 || mass2 < 0) throw new Error('Mass must be non-negative');\n const force = (G * mass1 * mass2) / (distance * distance);\n return { force, mass1, mass2, distance, unit: 'N' };\n}\n\nexport function calculateMomentum(mass: number, velocity: number): MomentumResult {\n if (mass < 0) throw new Error('Mass must be non-negative');\n return { momentum: mass * velocity, mass, velocity, unit: 'kg·m/s' };\n}\n\nexport function orbitalMechanics(mass: number, radius: number): OrbitalVelocityResult {\n if (mass < 0) throw new Error('Mass must be non-negative');\n if (radius <= 0) throw new Error('Radius must be positive');\n const orbitalVelocity = Math.sqrt((G * mass) / radius);\n const escapeVelocity = Math.sqrt((2 * G * mass) / radius);\n return { orbitalVelocity, escapeVelocity, mass, radius, unit: 'm/s' };\n}\n\nexport function calculateWork(\n force: number,\n distance: number,\n angleDegrees: number = 0\n): { work: number; force: number; distance: number; angle: number; unit: string } {\n const angleRad = (angleDegrees * Math.PI) / 180;\n const work = force * distance * Math.cos(angleRad);\n return { work, force, distance, angle: angleDegrees, unit: 'J' };\n}\n","import type { OhmsLawResult, ResistorResult, CoulombResult, CapacitorResult, RCCircuitResult } from './types';\n\nconst K_E = 8.9875517923e9;\n\nexport function ohmsLaw(params: { voltage?: number; current?: number; resistance?: number }): OhmsLawResult {\n const known = Object.entries(params).filter(([, v]) => v !== undefined);\n if (known.length < 2) {\n throw new Error('Need at least 2 of: voltage, current, resistance');\n }\n\n let { voltage, current, resistance } = params;\n\n if (voltage === undefined) {\n voltage = current! * resistance!;\n } else if (current === undefined) {\n if (resistance === 0) throw new Error('Resistance cannot be zero when solving for current');\n current = voltage / resistance!;\n } else if (resistance === undefined) {\n if (current === 0) throw new Error('Current cannot be zero when solving for resistance');\n resistance = voltage / current;\n }\n\n const power = voltage! * current!;\n return { voltage: voltage!, current: current!, resistance: resistance!, power };\n}\n\nexport function resistors(values: number[], configuration: 'series' | 'parallel'): ResistorResult {\n if (values.length === 0) throw new Error('Need at least one resistor value');\n if (values.some((v) => v < 0)) throw new Error('Resistor values must be non-negative');\n\n let totalResistance: number;\n if (configuration === 'series') {\n totalResistance = values.reduce((sum, r) => sum + r, 0);\n } else {\n if (values.some((v) => v === 0)) throw new Error('Parallel resistors cannot have zero resistance');\n totalResistance = 1 / values.reduce((sum, r) => sum + 1 / r, 0);\n }\n\n return { configuration, resistors: values, totalResistance, unit: 'Ω' };\n}\n\nexport function coulombsLaw(charge1: number, charge2: number, distance: number): CoulombResult {\n if (distance <= 0) throw new Error('Distance must be positive');\n const force = (K_E * Math.abs(charge1 * charge2)) / (distance * distance);\n const isAttractive = (charge1 > 0 && charge2 < 0) || (charge1 < 0 && charge2 > 0);\n return { force, charge1, charge2, distance, isAttractive, unit: 'N' };\n}\n\nexport function capacitors(values: number[], configuration: 'series' | 'parallel'): CapacitorResult {\n if (values.length === 0) throw new Error('Need at least one capacitor value');\n if (values.some((v) => v <= 0)) throw new Error('Capacitor values must be positive');\n\n let totalCapacitance: number;\n if (configuration === 'parallel') {\n totalCapacitance = values.reduce((sum, c) => sum + c, 0);\n } else {\n totalCapacitance = 1 / values.reduce((sum, c) => sum + 1 / c, 0);\n }\n\n return { configuration, capacitors: values, totalCapacitance, unit: 'F' };\n}\n\nexport function rcCircuit(resistance: number, capacitance: number): RCCircuitResult {\n if (resistance <= 0) throw new Error('Resistance must be positive');\n if (capacitance <= 0) throw new Error('Capacitance must be positive');\n const timeConstant = resistance * capacitance;\n const halfLife = timeConstant * Math.LN2;\n return { resistance, capacitance, timeConstant, halfLife, unit: 's' };\n}\n","import type { WaveResult, DopplerResult, SnellResult, LensResult, DecibelResult } from './types';\n\nexport function waveEquation(params: { frequency?: number; wavelength?: number; speed?: number }): WaveResult {\n const known = Object.entries(params).filter(([, v]) => v !== undefined);\n if (known.length < 2) {\n throw new Error('Need at least 2 of: frequency, wavelength, speed');\n }\n\n let { frequency, wavelength, speed } = params;\n\n if (speed === undefined) {\n speed = frequency! * wavelength!;\n } else if (frequency === undefined) {\n if (wavelength === 0) throw new Error('Wavelength cannot be zero');\n frequency = speed / wavelength!;\n } else if (wavelength === undefined) {\n if (frequency === 0) throw new Error('Frequency cannot be zero');\n wavelength = speed / frequency;\n }\n\n return { frequency: frequency!, wavelength: wavelength!, speed: speed!, period: 1 / frequency! };\n}\n\nexport function dopplerEffect(\n sourceFrequency: number,\n sourceVelocity: number,\n observerVelocity: number,\n mediumSpeed: number = 343,\n approaching: boolean = true\n): DopplerResult {\n if (sourceFrequency <= 0) throw new Error('Source frequency must be positive');\n if (Math.abs(sourceVelocity) >= mediumSpeed) throw new Error('Source velocity must be less than medium speed');\n\n let observedFrequency: number;\n if (approaching) {\n observedFrequency = sourceFrequency * ((mediumSpeed + observerVelocity) / (mediumSpeed - sourceVelocity));\n } else {\n observedFrequency = sourceFrequency * ((mediumSpeed - observerVelocity) / (mediumSpeed + sourceVelocity));\n }\n\n return { observedFrequency, sourceFrequency, sourceVelocity, observerVelocity, mediumSpeed, approaching };\n}\n\nexport function snellsLaw(n1: number, n2: number, angle1Degrees: number): SnellResult {\n if (n1 <= 0 || n2 <= 0) throw new Error('Refractive indices must be positive');\n if (angle1Degrees < 0 || angle1Degrees >= 90) throw new Error('Angle must be between 0 and 90 degrees');\n\n const angle1Rad = (angle1Degrees * Math.PI) / 180;\n const sinAngle2 = (n1 * Math.sin(angle1Rad)) / n2;\n\n let criticalAngle: number | null = null;\n if (n1 > n2) {\n criticalAngle = (Math.asin(n2 / n1) * 180) / Math.PI;\n }\n\n if (Math.abs(sinAngle2) > 1) {\n return { n1, n2, angle1: angle1Degrees, angle2: NaN, totalInternalReflection: true, criticalAngle };\n }\n\n const angle2Degrees = (Math.asin(sinAngle2) * 180) / Math.PI;\n return { n1, n2, angle1: angle1Degrees, angle2: angle2Degrees, totalInternalReflection: false, criticalAngle };\n}\n\nexport function thinLens(params: { focalLength?: number; objectDistance?: number; imageDistance?: number }): LensResult {\n const known = Object.entries(params).filter(([, v]) => v !== undefined);\n if (known.length < 2) {\n throw new Error('Need at least 2 of: focalLength, objectDistance, imageDistance');\n }\n\n let { focalLength, objectDistance, imageDistance } = params;\n\n if (focalLength === undefined) {\n focalLength = 1 / (1 / objectDistance! + 1 / imageDistance!);\n } else if (objectDistance === undefined) {\n objectDistance = 1 / (1 / focalLength - 1 / imageDistance!);\n } else if (imageDistance === undefined) {\n imageDistance = 1 / (1 / focalLength - 1 / objectDistance);\n }\n\n const magnification = -imageDistance! / objectDistance!;\n const imageType = imageDistance! > 0 ? 'real' : 'virtual';\n\n return { focalLength: focalLength!, objectDistance: objectDistance!, imageDistance: imageDistance!, magnification, imageType };\n}\n\nexport function decibelConversion(intensity1: number, intensity2: number): DecibelResult {\n if (intensity1 <= 0 || intensity2 <= 0) throw new Error('Intensities must be positive');\n const decibels = 10 * Math.log10(intensity2 / intensity1);\n return { intensity1, intensity2, decibels };\n}\n","import type { IdealGasResult, HeatTransferResult, ThermalExpansionResult, CarnotResult } from './types';\n\nconst R = 8.314462618;\n\nexport function idealGasLaw(params: {\n pressure?: number;\n volume?: number;\n moles?: number;\n temperature?: number;\n}): IdealGasResult {\n const known = Object.entries(params).filter(([, v]) => v !== undefined);\n if (known.length < 3) {\n throw new Error('Need at least 3 of: pressure (Pa), volume (m³), moles (mol), temperature (K)');\n }\n\n let { pressure, volume, moles, temperature } = params;\n\n if (pressure === undefined) {\n pressure = (moles! * R * temperature!) / volume!;\n } else if (volume === undefined) {\n volume = (moles! * R * temperature!) / pressure;\n } else if (moles === undefined) {\n moles = (pressure * volume!) / (R * temperature!);\n } else if (temperature === undefined) {\n temperature = (pressure * volume!) / (moles * R);\n }\n\n return { pressure: pressure!, volume: volume!, moles: moles!, temperature: temperature!, unit: 'SI (Pa, m³, mol, K)' };\n}\n\nexport function heatTransfer(mass: number, specificHeat: number, temperatureChange: number): HeatTransferResult {\n if (mass < 0) throw new Error('Mass must be non-negative');\n if (specificHeat <= 0) throw new Error('Specific heat must be positive');\n const heat = mass * specificHeat * temperatureChange;\n return { heat, mass, specificHeat, temperatureChange, unit: 'J' };\n}\n\nexport function thermalExpansion(\n originalLength: number,\n coefficient: number,\n temperatureChange: number\n): ThermalExpansionResult {\n if (originalLength < 0) throw new Error('Original length must be non-negative');\n const expansion = originalLength * coefficient * temperatureChange;\n const finalLength = originalLength + expansion;\n return { originalLength, coefficient, temperatureChange, expansion, finalLength };\n}\n\nexport function carnotEfficiency(hotTemperature: number, coldTemperature: number): CarnotResult {\n if (hotTemperature <= 0 || coldTemperature <= 0) throw new Error('Temperatures must be positive (in Kelvin)');\n if (coldTemperature >= hotTemperature) throw new Error('Hot temperature must be greater than cold temperature');\n const efficiency = 1 - coldTemperature / hotTemperature;\n return { hotTemperature, coldTemperature, efficiency, efficiencyPercent: `${(efficiency * 100).toFixed(2)}%` };\n}\n","import type { LorentzResult, TimeDilationResult, LengthContractionResult, MassEnergyResult } from './types';\n\nconst C = 299792458;\n\nexport function lorentzFactor(velocity: number): LorentzResult {\n if (Math.abs(velocity) >= C) throw new Error('Velocity must be less than the speed of light');\n const beta = velocity / C;\n const gamma = 1 / Math.sqrt(1 - beta * beta);\n return { velocity, speedOfLight: C, beta, gamma };\n}\n\nexport function timeDilation(properTime: number, velocity: number): TimeDilationResult {\n if (properTime < 0) throw new Error('Proper time must be non-negative');\n const { gamma } = lorentzFactor(velocity);\n const dilatedTime = properTime * gamma;\n return { properTime, dilatedTime, velocity, gamma };\n}\n\nexport function lengthContraction(properLength: number, velocity: number): LengthContractionResult {\n if (properLength < 0) throw new Error('Proper length must be non-negative');\n const { gamma } = lorentzFactor(velocity);\n const contractedLength = properLength / gamma;\n return { properLength, contractedLength, velocity, gamma };\n}\n\nexport function massEnergy(mass: number): MassEnergyResult {\n if (mass < 0) throw new Error('Mass must be non-negative');\n const energy = mass * C * C;\n return { mass, energy, unit: 'J' };\n}\n\nexport function energyToMass(energy: number): MassEnergyResult {\n if (energy < 0) throw new Error('Energy must be non-negative');\n const mass = energy / (C * C);\n return { mass, energy, unit: 'kg' };\n}\n","import type { PhysicsUnitCategory, PhysicsUnitResult } from './types';\n\nconst forceFactors: Record<string, number> = {\n n: 1, kn: 1000, dyn: 1e-5, lbf: 4.44822, kgf: 9.80665,\n};\n\nconst energyFactors: Record<string, number> = {\n j: 1, kj: 1000, cal: 4.184, kcal: 4184, ev: 1.602176634e-19, kwh: 3.6e6, btu: 1055.06, erg: 1e-7,\n};\n\nconst powerFactors: Record<string, number> = {\n w: 1, kw: 1000, mw: 1e6, hp: 745.7, 'btu/h': 0.293071,\n};\n\nconst pressureFactors: Record<string, number> = {\n pa: 1, kpa: 1000, mpa: 1e6, atm: 101325, bar: 100000, psi: 6894.76, torr: 133.322, mmhg: 133.322,\n};\n\nconst speedFactors: Record<string, number> = {\n 'm/s': 1, 'km/h': 1 / 3.6, mph: 0.44704, knots: 0.514444, 'ft/s': 0.3048,\n};\n\nfunction getFactors(category: PhysicsUnitCategory): Record<string, number> {\n switch (category) {\n case 'force': return forceFactors;\n case 'energy': return energyFactors;\n case 'power': return powerFactors;\n case 'pressure': return pressureFactors;\n case 'speed': return speedFactors;\n default: throw new Error(`Unknown physics unit category: ${category}`);\n }\n}\n\nexport function convertPhysicsUnit(\n value: number,\n from: string,\n to: string,\n category: PhysicsUnitCategory\n): PhysicsUnitResult {\n const factors = getFactors(category);\n const fromLower = from.toLowerCase();\n const toLower = to.toLowerCase();\n\n if (!(fromLower in factors)) {\n throw new Error(`Unknown ${category} unit: ${from}. Available: ${Object.keys(factors).join(', ')}`);\n }\n if (!(toLower in factors)) {\n throw new Error(`Unknown ${category} unit: ${to}. Available: ${Object.keys(factors).join(', ')}`);\n }\n\n const baseValue = value * factors[fromLower];\n const result = baseValue / factors[toLower];\n\n return { value, from: fromLower, to: toLower, result, category };\n}\n"]}
@@ -1,4 +1,4 @@
1
- type ToolCategory = 'json' | 'csv' | 'pdf' | 'xml' | 'excel' | 'image' | 'markdown' | 'archive' | 'regex' | 'diff' | 'sql' | 'crypto' | 'datetime' | 'text' | 'math' | 'color';
1
+ type ToolCategory = 'json' | 'csv' | 'pdf' | 'xml' | 'excel' | 'image' | 'markdown' | 'archive' | 'regex' | 'diff' | 'sql' | 'crypto' | 'datetime' | 'text' | 'math' | 'color' | 'physics' | 'structural';
2
2
  interface ToolSettings {
3
3
  enabled: Record<ToolCategory, boolean>;
4
4
  version: number;
@@ -1,4 +1,4 @@
1
- type ToolCategory = 'json' | 'csv' | 'pdf' | 'xml' | 'excel' | 'image' | 'markdown' | 'archive' | 'regex' | 'diff' | 'sql' | 'crypto' | 'datetime' | 'text' | 'math' | 'color';
1
+ type ToolCategory = 'json' | 'csv' | 'pdf' | 'xml' | 'excel' | 'image' | 'markdown' | 'archive' | 'regex' | 'diff' | 'sql' | 'crypto' | 'datetime' | 'text' | 'math' | 'color' | 'physics' | 'structural';
2
2
  interface ToolSettings {
3
3
  enabled: Record<ToolCategory, boolean>;
4
4
  version: number;
@@ -21,7 +21,9 @@ var ALL_TOOL_CATEGORIES = [
21
21
  "archive",
22
22
  "text",
23
23
  "math",
24
- "color"
24
+ "color",
25
+ "physics",
26
+ "structural"
25
27
  ];
26
28
  var TOOL_METADATA = [
27
29
  { id: "json", name: "JSON Studio", description: "Format, validate, query, convert, and diff JSON documents" },
@@ -39,7 +41,9 @@ var TOOL_METADATA = [
39
41
  { id: "archive", name: "Archive Manager", description: "Create, extract, and list archive contents" },
40
42
  { id: "text", name: "Text Utilities", description: "Case conversion, slugify, word count, similarity, and template interpolation" },
41
43
  { id: "math", name: "Math Utilities", description: "Unit conversion, base conversion, statistics, and number formatting" },
42
- { id: "color", name: "Color Utilities", description: "Color parsing, conversion, contrast checking, palette generation, and blending" }
44
+ { id: "color", name: "Color Utilities", description: "Color parsing, conversion, contrast checking, palette generation, and blending" },
45
+ { id: "physics", name: "Physics Calculator", description: "Constants, kinematics, mechanics, electricity, waves, thermodynamics, and relativity" },
46
+ { id: "structural", name: "Structural Engineering", description: "Stress analysis, beam design, column buckling, cross-sections, soil mechanics, and materials" }
43
47
  ];
44
48
  var DEFAULT_SETTINGS = {
45
49
  enabled: Object.fromEntries(ALL_TOOL_CATEGORIES.map((c) => [c, true])),
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/settings/defaults.ts","../../src/settings/filesystem-repository.ts","../../src/settings/service.ts"],"names":["join","existsSync","readFile","mkdir","writeFile"],"mappings":"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","file":"index.js","sourcesContent":["import type { ToolCategory, ToolSettings } from './types';\n\nexport const ALL_TOOL_CATEGORIES: ToolCategory[] = [\n 'json',\n 'crypto',\n 'sql',\n 'regex',\n 'diff',\n 'csv',\n 'datetime',\n 'markdown',\n 'xml',\n 'pdf',\n 'excel',\n 'image',\n 'archive',\n 'text',\n 'math',\n 'color',\n];\n\nexport const TOOL_METADATA: { id: ToolCategory; name: string; description: string }[] = [\n { id: 'json', name: 'JSON Studio', description: 'Format, validate, query, convert, and diff JSON documents' },\n { id: 'crypto', name: 'Crypto & Encoding', description: 'Hash, encode, decode, and work with JWTs' },\n { id: 'sql', name: 'SQL Studio', description: 'Format, parse, and validate SQL queries' },\n { id: 'regex', name: 'Regex Tester', description: 'Test, replace, and extract with regular expressions' },\n { id: 'diff', name: 'Diff & Patch', description: 'Compare texts and apply unified diffs' },\n { id: 'csv', name: 'CSV Viewer', description: 'Parse, filter, convert, and analyze CSV data' },\n { id: 'datetime', name: 'Date/Time Tools', description: 'Parse, format, convert timezones, and analyze cron expressions' },\n { id: 'markdown', name: 'Markdown Studio', description: 'Convert, generate TOC, and analyze Markdown documents' },\n { id: 'xml', name: 'XML Studio', description: 'Parse, format, validate, and convert XML documents' },\n { id: 'pdf', name: 'PDF Toolkit', description: 'Merge, split, extract text, and generate PDFs' },\n { id: 'excel', name: 'Excel Viewer', description: 'Parse, convert, and analyze Excel workbooks' },\n { id: 'image', name: 'Image Toolkit', description: 'Resize, convert, and extract metadata from images' },\n { id: 'archive', name: 'Archive Manager', description: 'Create, extract, and list archive contents' },\n { id: 'text', name: 'Text Utilities', description: 'Case conversion, slugify, word count, similarity, and template interpolation' },\n { id: 'math', name: 'Math Utilities', description: 'Unit conversion, base conversion, statistics, and number formatting' },\n { id: 'color', name: 'Color Utilities', description: 'Color parsing, conversion, contrast checking, palette generation, and blending' },\n];\n\nexport const DEFAULT_SETTINGS: ToolSettings = {\n enabled: Object.fromEntries(ALL_TOOL_CATEGORIES.map((c) => [c, true])) as Record<ToolCategory, boolean>,\n version: 1,\n updatedAt: new Date().toISOString(),\n};\n","import { readFile, writeFile, mkdir } from 'fs/promises';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport type { ToolSettings, SettingsRepository, ToolCategory } from './types';\nimport { DEFAULT_SETTINGS, ALL_TOOL_CATEGORIES } from './defaults';\n\nexport class FilesystemSettingsRepository implements SettingsRepository {\n private readonly filePath: string;\n\n constructor(dataDir?: string) {\n const dir = dataDir ?? join(process.cwd(), 'data');\n this.filePath = join(dir, 'settings.json');\n }\n\n getDefaults(): ToolSettings {\n return {\n ...DEFAULT_SETTINGS,\n enabled: { ...DEFAULT_SETTINGS.enabled },\n updatedAt: new Date().toISOString(),\n };\n }\n\n async load(): Promise<ToolSettings> {\n try {\n if (!existsSync(this.filePath)) {\n const defaults = this.getDefaults();\n await this.save(defaults);\n return defaults;\n }\n\n const raw = await readFile(this.filePath, 'utf-8');\n const data = JSON.parse(raw) as Partial<ToolSettings>;\n\n // Merge with defaults to handle newly added tools\n const merged: ToolSettings = {\n version: data.version ?? DEFAULT_SETTINGS.version,\n updatedAt: data.updatedAt ?? new Date().toISOString(),\n enabled: { ...DEFAULT_SETTINGS.enabled },\n };\n\n if (data.enabled) {\n for (const category of ALL_TOOL_CATEGORIES) {\n if (category in data.enabled) {\n merged.enabled[category] = data.enabled[category as ToolCategory]!;\n }\n }\n }\n\n return merged;\n } catch {\n return this.getDefaults();\n }\n }\n\n async save(settings: ToolSettings): Promise<void> {\n const dir = join(this.filePath, '..');\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n await writeFile(this.filePath, JSON.stringify(settings, null, 2), 'utf-8');\n }\n}\n","import type { ToolCategory, ToolSettings, SettingsRepository } from './types';\nimport { FilesystemSettingsRepository } from './filesystem-repository';\n\nconst CACHE_TTL_MS = 5_000;\n\nexport class SettingsService {\n private cache: ToolSettings | null = null;\n private cacheTimestamp = 0;\n private readonly repository: SettingsRepository;\n\n constructor(repository?: SettingsRepository) {\n this.repository = repository ?? new FilesystemSettingsRepository();\n }\n\n async getSettings(): Promise<ToolSettings> {\n const now = Date.now();\n if (this.cache && now - this.cacheTimestamp < CACHE_TTL_MS) {\n return this.cache;\n }\n\n const settings = await this.repository.load();\n this.cache = settings;\n this.cacheTimestamp = now;\n return settings;\n }\n\n async updateSettings(enabled: Partial<Record<ToolCategory, boolean>>): Promise<ToolSettings> {\n const current = await this.repository.load();\n const updated: ToolSettings = {\n ...current,\n enabled: { ...current.enabled, ...enabled },\n updatedAt: new Date().toISOString(),\n };\n await this.repository.save(updated);\n this.cache = updated;\n this.cacheTimestamp = Date.now();\n return updated;\n }\n\n async isToolEnabled(category: ToolCategory): Promise<boolean> {\n const settings = await this.getSettings();\n return settings.enabled[category] ?? true;\n }\n\n invalidateCache(): void {\n this.cache = null;\n this.cacheTimestamp = 0;\n }\n}\n\nexport const settingsService = new SettingsService();\n"]}
1
+ {"version":3,"sources":["../../src/settings/defaults.ts","../../src/settings/filesystem-repository.ts","../../src/settings/service.ts"],"names":["join","existsSync","readFile","mkdir","writeFile"],"mappings":"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","file":"index.js","sourcesContent":["import type { ToolCategory, ToolSettings } from './types';\n\nexport const ALL_TOOL_CATEGORIES: ToolCategory[] = [\n 'json',\n 'crypto',\n 'sql',\n 'regex',\n 'diff',\n 'csv',\n 'datetime',\n 'markdown',\n 'xml',\n 'pdf',\n 'excel',\n 'image',\n 'archive',\n 'text',\n 'math',\n 'color',\n 'physics',\n 'structural',\n];\n\nexport const TOOL_METADATA: { id: ToolCategory; name: string; description: string }[] = [\n { id: 'json', name: 'JSON Studio', description: 'Format, validate, query, convert, and diff JSON documents' },\n { id: 'crypto', name: 'Crypto & Encoding', description: 'Hash, encode, decode, and work with JWTs' },\n { id: 'sql', name: 'SQL Studio', description: 'Format, parse, and validate SQL queries' },\n { id: 'regex', name: 'Regex Tester', description: 'Test, replace, and extract with regular expressions' },\n { id: 'diff', name: 'Diff & Patch', description: 'Compare texts and apply unified diffs' },\n { id: 'csv', name: 'CSV Viewer', description: 'Parse, filter, convert, and analyze CSV data' },\n { id: 'datetime', name: 'Date/Time Tools', description: 'Parse, format, convert timezones, and analyze cron expressions' },\n { id: 'markdown', name: 'Markdown Studio', description: 'Convert, generate TOC, and analyze Markdown documents' },\n { id: 'xml', name: 'XML Studio', description: 'Parse, format, validate, and convert XML documents' },\n { id: 'pdf', name: 'PDF Toolkit', description: 'Merge, split, extract text, and generate PDFs' },\n { id: 'excel', name: 'Excel Viewer', description: 'Parse, convert, and analyze Excel workbooks' },\n { id: 'image', name: 'Image Toolkit', description: 'Resize, convert, and extract metadata from images' },\n { id: 'archive', name: 'Archive Manager', description: 'Create, extract, and list archive contents' },\n { id: 'text', name: 'Text Utilities', description: 'Case conversion, slugify, word count, similarity, and template interpolation' },\n { id: 'math', name: 'Math Utilities', description: 'Unit conversion, base conversion, statistics, and number formatting' },\n { id: 'color', name: 'Color Utilities', description: 'Color parsing, conversion, contrast checking, palette generation, and blending' },\n { id: 'physics', name: 'Physics Calculator', description: 'Constants, kinematics, mechanics, electricity, waves, thermodynamics, and relativity' },\n { id: 'structural', name: 'Structural Engineering', description: 'Stress analysis, beam design, column buckling, cross-sections, soil mechanics, and materials' },\n];\n\nexport const DEFAULT_SETTINGS: ToolSettings = {\n enabled: Object.fromEntries(ALL_TOOL_CATEGORIES.map((c) => [c, true])) as Record<ToolCategory, boolean>,\n version: 1,\n updatedAt: new Date().toISOString(),\n};\n","import { readFile, writeFile, mkdir } from 'fs/promises';\nimport { join } from 'path';\nimport { existsSync } from 'fs';\nimport type { ToolSettings, SettingsRepository, ToolCategory } from './types';\nimport { DEFAULT_SETTINGS, ALL_TOOL_CATEGORIES } from './defaults';\n\nexport class FilesystemSettingsRepository implements SettingsRepository {\n private readonly filePath: string;\n\n constructor(dataDir?: string) {\n const dir = dataDir ?? join(process.cwd(), 'data');\n this.filePath = join(dir, 'settings.json');\n }\n\n getDefaults(): ToolSettings {\n return {\n ...DEFAULT_SETTINGS,\n enabled: { ...DEFAULT_SETTINGS.enabled },\n updatedAt: new Date().toISOString(),\n };\n }\n\n async load(): Promise<ToolSettings> {\n try {\n if (!existsSync(this.filePath)) {\n const defaults = this.getDefaults();\n await this.save(defaults);\n return defaults;\n }\n\n const raw = await readFile(this.filePath, 'utf-8');\n const data = JSON.parse(raw) as Partial<ToolSettings>;\n\n // Merge with defaults to handle newly added tools\n const merged: ToolSettings = {\n version: data.version ?? DEFAULT_SETTINGS.version,\n updatedAt: data.updatedAt ?? new Date().toISOString(),\n enabled: { ...DEFAULT_SETTINGS.enabled },\n };\n\n if (data.enabled) {\n for (const category of ALL_TOOL_CATEGORIES) {\n if (category in data.enabled) {\n merged.enabled[category] = data.enabled[category as ToolCategory]!;\n }\n }\n }\n\n return merged;\n } catch {\n return this.getDefaults();\n }\n }\n\n async save(settings: ToolSettings): Promise<void> {\n const dir = join(this.filePath, '..');\n if (!existsSync(dir)) {\n await mkdir(dir, { recursive: true });\n }\n await writeFile(this.filePath, JSON.stringify(settings, null, 2), 'utf-8');\n }\n}\n","import type { ToolCategory, ToolSettings, SettingsRepository } from './types';\nimport { FilesystemSettingsRepository } from './filesystem-repository';\n\nconst CACHE_TTL_MS = 5_000;\n\nexport class SettingsService {\n private cache: ToolSettings | null = null;\n private cacheTimestamp = 0;\n private readonly repository: SettingsRepository;\n\n constructor(repository?: SettingsRepository) {\n this.repository = repository ?? new FilesystemSettingsRepository();\n }\n\n async getSettings(): Promise<ToolSettings> {\n const now = Date.now();\n if (this.cache && now - this.cacheTimestamp < CACHE_TTL_MS) {\n return this.cache;\n }\n\n const settings = await this.repository.load();\n this.cache = settings;\n this.cacheTimestamp = now;\n return settings;\n }\n\n async updateSettings(enabled: Partial<Record<ToolCategory, boolean>>): Promise<ToolSettings> {\n const current = await this.repository.load();\n const updated: ToolSettings = {\n ...current,\n enabled: { ...current.enabled, ...enabled },\n updatedAt: new Date().toISOString(),\n };\n await this.repository.save(updated);\n this.cache = updated;\n this.cacheTimestamp = Date.now();\n return updated;\n }\n\n async isToolEnabled(category: ToolCategory): Promise<boolean> {\n const settings = await this.getSettings();\n return settings.enabled[category] ?? true;\n }\n\n invalidateCache(): void {\n this.cache = null;\n this.cacheTimestamp = 0;\n }\n}\n\nexport const settingsService = new SettingsService();\n"]}