circuit-json 0.0.433 → 0.0.435
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/README.md +26 -0
- package/dist/index.d.mts +564 -183
- package/dist/index.mjs +42 -216
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -1
package/dist/index.mjs
CHANGED
|
@@ -1,221 +1,19 @@
|
|
|
1
|
-
// src/utils/convert-si-unit-to-number.ts
|
|
2
|
-
var unitMappings = {
|
|
3
|
-
Hz: {
|
|
4
|
-
baseUnit: "Hz",
|
|
5
|
-
variants: {
|
|
6
|
-
MHz: 1e6,
|
|
7
|
-
kHz: 1e3,
|
|
8
|
-
Hz: 1
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
g: {
|
|
12
|
-
baseUnit: "g",
|
|
13
|
-
variants: {
|
|
14
|
-
kg: 1e3,
|
|
15
|
-
g: 1
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
\u03A9: {
|
|
19
|
-
baseUnit: "\u03A9",
|
|
20
|
-
variants: {
|
|
21
|
-
m\u03A9: 1e-3,
|
|
22
|
-
\u03A9: 1,
|
|
23
|
-
k\u03A9: 1e3,
|
|
24
|
-
K\u03A9: 1e3,
|
|
25
|
-
kohm: 1e3,
|
|
26
|
-
M\u03A9: 1e6,
|
|
27
|
-
G\u03A9: 1e9,
|
|
28
|
-
T\u03A9: 1e12
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
V: {
|
|
32
|
-
baseUnit: "V",
|
|
33
|
-
variants: {
|
|
34
|
-
mV: 1e-3,
|
|
35
|
-
V: 1,
|
|
36
|
-
kV: 1e3,
|
|
37
|
-
KV: 1e3,
|
|
38
|
-
MV: 1e6,
|
|
39
|
-
GV: 1e9,
|
|
40
|
-
TV: 1e12
|
|
41
|
-
}
|
|
42
|
-
},
|
|
43
|
-
A: {
|
|
44
|
-
baseUnit: "A",
|
|
45
|
-
variants: {
|
|
46
|
-
\u00B5A: 1e-6,
|
|
47
|
-
mA: 1e-3,
|
|
48
|
-
ma: 1e-3,
|
|
49
|
-
A: 1,
|
|
50
|
-
kA: 1e3,
|
|
51
|
-
MA: 1e6
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
F: {
|
|
55
|
-
baseUnit: "F",
|
|
56
|
-
variants: {
|
|
57
|
-
pF: 1e-12,
|
|
58
|
-
nF: 1e-9,
|
|
59
|
-
\u00B5F: 1e-6,
|
|
60
|
-
uF: 1e-6,
|
|
61
|
-
mF: 1e-3,
|
|
62
|
-
F: 1
|
|
63
|
-
}
|
|
64
|
-
},
|
|
65
|
-
ml: {
|
|
66
|
-
baseUnit: "ml",
|
|
67
|
-
variants: {
|
|
68
|
-
ml: 1,
|
|
69
|
-
mL: 1,
|
|
70
|
-
l: 1e3,
|
|
71
|
-
L: 1e3
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
deg: {
|
|
75
|
-
baseUnit: "deg",
|
|
76
|
-
variants: {
|
|
77
|
-
rad: 180 / Math.PI
|
|
78
|
-
}
|
|
79
|
-
},
|
|
80
|
-
ms: {
|
|
81
|
-
baseUnit: "ms",
|
|
82
|
-
variants: {
|
|
83
|
-
fs: 1e-12,
|
|
84
|
-
ps: 1e-9,
|
|
85
|
-
ns: 1e-6,
|
|
86
|
-
us: 1e-3,
|
|
87
|
-
\u00B5s: 1e-3,
|
|
88
|
-
ms: 1,
|
|
89
|
-
s: 1e3
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
mm: {
|
|
93
|
-
baseUnit: "mm",
|
|
94
|
-
variants: {
|
|
95
|
-
nm: 1e-6,
|
|
96
|
-
\u00B5m: 1e-3,
|
|
97
|
-
um: 1e-3,
|
|
98
|
-
mm: 1,
|
|
99
|
-
cm: 10,
|
|
100
|
-
dm: 100,
|
|
101
|
-
m: 1e3,
|
|
102
|
-
km: 1e6,
|
|
103
|
-
in: 25.4,
|
|
104
|
-
ft: 304.8,
|
|
105
|
-
IN: 25.4,
|
|
106
|
-
FT: 304.8,
|
|
107
|
-
yd: 914.4,
|
|
108
|
-
mi: 1609344,
|
|
109
|
-
mil: 0.0254
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
var unitMappingAndVariantSuffixes = /* @__PURE__ */ new Set();
|
|
114
|
-
for (const [baseUnit, info] of Object.entries(unitMappings)) {
|
|
115
|
-
unitMappingAndVariantSuffixes.add(baseUnit);
|
|
116
|
-
for (const variant of Object.keys(info.variants)) {
|
|
117
|
-
unitMappingAndVariantSuffixes.add(variant);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
function getBaseTscircuitUnit(unit) {
|
|
121
|
-
for (const [baseUnit, info] of Object.entries(unitMappings)) {
|
|
122
|
-
if (unit in info.variants) {
|
|
123
|
-
return {
|
|
124
|
-
baseUnit: info.baseUnit,
|
|
125
|
-
conversionFactor: info.variants[unit]
|
|
126
|
-
};
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
return {
|
|
130
|
-
baseUnit: unit,
|
|
131
|
-
conversionFactor: 1
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
var si_prefix_multiplier = {
|
|
135
|
-
tera: 1e12,
|
|
136
|
-
T: 1e12,
|
|
137
|
-
giga: 1e9,
|
|
138
|
-
G: 1e9,
|
|
139
|
-
mega: 1e6,
|
|
140
|
-
M: 1e6,
|
|
141
|
-
kilo: 1e3,
|
|
142
|
-
k: 1e3,
|
|
143
|
-
deci: 0.1,
|
|
144
|
-
d: 0.1,
|
|
145
|
-
centi: 0.01,
|
|
146
|
-
c: 0.01,
|
|
147
|
-
milli: 1e-3,
|
|
148
|
-
m: 1e-3,
|
|
149
|
-
micro: 1e-6,
|
|
150
|
-
u: 1e-6,
|
|
151
|
-
\u00B5: 1e-6,
|
|
152
|
-
nano: 1e-9,
|
|
153
|
-
n: 1e-9,
|
|
154
|
-
pico: 1e-12,
|
|
155
|
-
p: 1e-12
|
|
156
|
-
};
|
|
157
|
-
function parseAndConvertSiUnit(v) {
|
|
158
|
-
if (v === void 0 || v === null)
|
|
159
|
-
return { parsedUnit: null, unitOfValue: null, value: null };
|
|
160
|
-
if (typeof v === "string" && v.match(/^-?[\d\.]+$/))
|
|
161
|
-
return {
|
|
162
|
-
value: Number.parseFloat(v),
|
|
163
|
-
parsedUnit: null,
|
|
164
|
-
unitOfValue: null
|
|
165
|
-
};
|
|
166
|
-
if (typeof v === "number")
|
|
167
|
-
return { value: v, parsedUnit: null, unitOfValue: null };
|
|
168
|
-
if (typeof v === "object" && "x" in v && "y" in v) {
|
|
169
|
-
const { parsedUnit, unitOfValue } = parseAndConvertSiUnit(v.x);
|
|
170
|
-
const xResult = parseAndConvertSiUnit(v.x);
|
|
171
|
-
const yResult = parseAndConvertSiUnit(v.y);
|
|
172
|
-
if (xResult.value === null || yResult.value === null) {
|
|
173
|
-
return { parsedUnit: null, unitOfValue: null, value: null };
|
|
174
|
-
}
|
|
175
|
-
return {
|
|
176
|
-
parsedUnit,
|
|
177
|
-
unitOfValue,
|
|
178
|
-
value: {
|
|
179
|
-
x: xResult.value,
|
|
180
|
-
y: yResult.value
|
|
181
|
-
}
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
const reversed_input_string = v.toString().split("").reverse().join("");
|
|
185
|
-
const unit_reversed = reversed_input_string.match(/[^\d\s]+/)?.[0];
|
|
186
|
-
if (!unit_reversed) {
|
|
187
|
-
throw new Error(`Could not determine unit: "${v}"`);
|
|
188
|
-
}
|
|
189
|
-
const unit = unit_reversed.split("").reverse().join("");
|
|
190
|
-
const numberPart = v.slice(0, -unit.length);
|
|
191
|
-
if (unit in si_prefix_multiplier && !unitMappingAndVariantSuffixes.has(unit)) {
|
|
192
|
-
const siMultiplier = si_prefix_multiplier[unit];
|
|
193
|
-
return {
|
|
194
|
-
parsedUnit: null,
|
|
195
|
-
unitOfValue: null,
|
|
196
|
-
value: Number.parseFloat(numberPart) * siMultiplier
|
|
197
|
-
};
|
|
198
|
-
}
|
|
199
|
-
const { baseUnit, conversionFactor } = getBaseTscircuitUnit(unit);
|
|
200
|
-
return {
|
|
201
|
-
parsedUnit: unit,
|
|
202
|
-
unitOfValue: baseUnit,
|
|
203
|
-
value: conversionFactor * Number.parseFloat(numberPart)
|
|
204
|
-
};
|
|
205
|
-
}
|
|
206
|
-
|
|
207
1
|
// src/units/index.ts
|
|
2
|
+
import { parseAndConvertSiUnit } from "format-si-unit";
|
|
208
3
|
import { z } from "zod";
|
|
209
|
-
|
|
210
|
-
|
|
4
|
+
import {
|
|
5
|
+
parseAndConvertSiUnit as parseAndConvertSiUnit2
|
|
6
|
+
} from "format-si-unit";
|
|
7
|
+
var resistance = z.string().or(z.number()).transform((v) => parseAndConvertSiUnit(v, "\u03A9").value);
|
|
8
|
+
var capacitance = z.string().or(z.number()).transform((v) => parseAndConvertSiUnit(v, "F").value).transform((value) => {
|
|
211
9
|
return Number.parseFloat(value.toPrecision(12));
|
|
212
10
|
});
|
|
213
|
-
var inductance = z.string().or(z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
214
|
-
var voltage = z.string().or(z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
11
|
+
var inductance = z.string().or(z.number()).transform((v) => parseAndConvertSiUnit(v, "H").value);
|
|
12
|
+
var voltage = z.string().or(z.number()).transform((v) => parseAndConvertSiUnit(v, "V").value);
|
|
215
13
|
var length = z.string().or(z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
216
|
-
var frequency = z.string().or(z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
14
|
+
var frequency = z.string().or(z.number()).transform((v) => parseAndConvertSiUnit(v, "Hz").value);
|
|
217
15
|
var distance = length;
|
|
218
|
-
var current = z.string().or(z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
16
|
+
var current = z.string().or(z.number()).transform((v) => parseAndConvertSiUnit(v, "A").value);
|
|
219
17
|
var duration_ms = z.string().or(z.number()).transform((v) => parseAndConvertSiUnit(v).value);
|
|
220
18
|
var time = duration_ms;
|
|
221
19
|
var ms = duration_ms;
|
|
@@ -959,7 +757,12 @@ var source_simple_voltage_source = source_component_base.extend({
|
|
|
959
757
|
peak_to_peak_voltage: voltage.optional(),
|
|
960
758
|
wave_shape: z51.enum(["sinewave", "square", "triangle", "sawtooth"]).optional(),
|
|
961
759
|
phase: rotation.optional(),
|
|
962
|
-
duty_cycle: z51.number().optional().describe("Duty cycle as a fraction (0 to 1)")
|
|
760
|
+
duty_cycle: z51.number().optional().describe("Duty cycle as a fraction (0 to 1)"),
|
|
761
|
+
pulse_delay: ms.optional(),
|
|
762
|
+
rise_time: ms.optional(),
|
|
763
|
+
fall_time: ms.optional(),
|
|
764
|
+
pulse_width: ms.optional(),
|
|
765
|
+
period: ms.optional()
|
|
963
766
|
});
|
|
964
767
|
expectTypesMatch(
|
|
965
768
|
true
|
|
@@ -3650,7 +3453,12 @@ var simulation_ac_voltage_source = z162.object({
|
|
|
3650
3453
|
peak_to_peak_voltage: voltage.optional(),
|
|
3651
3454
|
wave_shape: wave_shape.optional(),
|
|
3652
3455
|
phase: rotation.optional(),
|
|
3653
|
-
duty_cycle: percentage.optional()
|
|
3456
|
+
duty_cycle: percentage.optional(),
|
|
3457
|
+
pulse_delay: ms.optional(),
|
|
3458
|
+
rise_time: ms.optional(),
|
|
3459
|
+
fall_time: ms.optional(),
|
|
3460
|
+
pulse_width: ms.optional(),
|
|
3461
|
+
period: ms.optional()
|
|
3654
3462
|
}).describe("Defines an AC voltage source for simulation");
|
|
3655
3463
|
var simulation_voltage_source = z162.union([simulation_dc_voltage_source, simulation_ac_voltage_source]).describe("Defines a voltage source for simulation");
|
|
3656
3464
|
expectTypesMatch(true);
|
|
@@ -3712,6 +3520,12 @@ var experiment_type = z164.union([
|
|
|
3712
3520
|
z164.literal("spice_transient_analysis"),
|
|
3713
3521
|
z164.literal("spice_ac_analysis")
|
|
3714
3522
|
]);
|
|
3523
|
+
var spice_simulation_options = z164.object({
|
|
3524
|
+
method: z164.enum(["trap", "gear"]).optional(),
|
|
3525
|
+
reltol: z164.union([z164.number(), z164.string()]).optional(),
|
|
3526
|
+
abstol: z164.union([z164.number(), z164.string()]).optional(),
|
|
3527
|
+
vntol: z164.union([z164.number(), z164.string()]).optional()
|
|
3528
|
+
}).describe("SPICE solver options for a simulation experiment");
|
|
3715
3529
|
var simulation_experiment = z164.object({
|
|
3716
3530
|
type: z164.literal("simulation_experiment"),
|
|
3717
3531
|
simulation_experiment_id: getZodPrefixedIdWithDefault(
|
|
@@ -3721,7 +3535,8 @@ var simulation_experiment = z164.object({
|
|
|
3721
3535
|
experiment_type,
|
|
3722
3536
|
time_per_step: duration_ms.optional(),
|
|
3723
3537
|
start_time_ms: ms.optional(),
|
|
3724
|
-
end_time_ms: ms.optional()
|
|
3538
|
+
end_time_ms: ms.optional(),
|
|
3539
|
+
spice_options: spice_simulation_options.optional()
|
|
3725
3540
|
}).describe("Defines a simulation experiment configuration");
|
|
3726
3541
|
expectTypesMatch(true);
|
|
3727
3542
|
|
|
@@ -3760,6 +3575,12 @@ expectTypesMatch(true);
|
|
|
3760
3575
|
|
|
3761
3576
|
// src/simulation/simulation_voltage_probe.ts
|
|
3762
3577
|
import { z as z167 } from "zod";
|
|
3578
|
+
var simulation_voltage_probe_display_options = z167.object({
|
|
3579
|
+
label: z167.string().optional(),
|
|
3580
|
+
center: z167.number().optional(),
|
|
3581
|
+
offset_divs: z167.number().optional(),
|
|
3582
|
+
units_per_div: z167.number().optional()
|
|
3583
|
+
});
|
|
3763
3584
|
var simulation_voltage_probe = z167.object({
|
|
3764
3585
|
type: z167.literal("simulation_voltage_probe"),
|
|
3765
3586
|
simulation_voltage_probe_id: getZodPrefixedIdWithDefault(
|
|
@@ -3772,7 +3593,8 @@ var simulation_voltage_probe = z167.object({
|
|
|
3772
3593
|
reference_input_source_port_id: z167.string().optional(),
|
|
3773
3594
|
reference_input_source_net_id: z167.string().optional(),
|
|
3774
3595
|
subcircuit_id: z167.string().optional(),
|
|
3775
|
-
color: z167.string().optional()
|
|
3596
|
+
color: z167.string().optional(),
|
|
3597
|
+
display_options: simulation_voltage_probe_display_options.optional()
|
|
3776
3598
|
}).describe(
|
|
3777
3599
|
"Defines a voltage probe for simulation. If a reference input is not provided, it measures against ground. If a reference input is provided, it measures the differential voltage between two points."
|
|
3778
3600
|
).superRefine((data, ctx) => {
|
|
@@ -3810,6 +3632,7 @@ var simulation_voltage_probe = z167.object({
|
|
|
3810
3632
|
}
|
|
3811
3633
|
});
|
|
3812
3634
|
expectTypesMatch(true);
|
|
3635
|
+
expectTypesMatch(true);
|
|
3813
3636
|
|
|
3814
3637
|
// src/simulation/simulation_unknown_experiment_error.ts
|
|
3815
3638
|
import { z as z168 } from "zod";
|
|
@@ -4042,6 +3865,7 @@ export {
|
|
|
4042
3865
|
manufacturing_drc_properties,
|
|
4043
3866
|
ms,
|
|
4044
3867
|
ninePointAnchor,
|
|
3868
|
+
parseAndConvertSiUnit2 as parseAndConvertSiUnit,
|
|
4045
3869
|
pcbRenderLayer,
|
|
4046
3870
|
pcb_autorouting_error,
|
|
4047
3871
|
pcb_board,
|
|
@@ -4178,6 +4002,7 @@ export {
|
|
|
4178
4002
|
simulation_transient_voltage_graph,
|
|
4179
4003
|
simulation_unknown_experiment_error,
|
|
4180
4004
|
simulation_voltage_probe,
|
|
4005
|
+
simulation_voltage_probe_display_options,
|
|
4181
4006
|
simulation_voltage_source,
|
|
4182
4007
|
size,
|
|
4183
4008
|
source_ambiguous_port_reference,
|
|
@@ -4231,6 +4056,7 @@ export {
|
|
|
4231
4056
|
source_simple_voltage_source,
|
|
4232
4057
|
source_trace,
|
|
4233
4058
|
source_trace_not_connected_error,
|
|
4059
|
+
spice_simulation_options,
|
|
4234
4060
|
supplier_footprint_mismatch_warning,
|
|
4235
4061
|
supplier_name,
|
|
4236
4062
|
time,
|