@vessel-dsp/core 0.6.0 → 0.6.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 (238) hide show
  1. package/dist/editor/commands.d.ts +48 -0
  2. package/dist/editor/commands.d.ts.map +1 -0
  3. package/{src/editor/commands.ts → dist/editor/commands.js} +44 -91
  4. package/dist/editor/commands.js.map +1 -0
  5. package/dist/editor/factory.d.ts +10 -0
  6. package/dist/editor/factory.d.ts.map +1 -0
  7. package/{src/editor/factory.ts → dist/editor/factory.js} +11 -27
  8. package/dist/editor/factory.js.map +1 -0
  9. package/dist/editor/history.d.ts +29 -0
  10. package/dist/editor/history.d.ts.map +1 -0
  11. package/{src/editor/history.ts → dist/editor/history.js} +12 -42
  12. package/dist/editor/history.js.map +1 -0
  13. package/{src/editor/index.ts → dist/editor/index.d.ts} +1 -3
  14. package/dist/editor/index.d.ts.map +1 -0
  15. package/dist/editor/index.js +5 -0
  16. package/dist/editor/index.js.map +1 -0
  17. package/dist/editor/layout.d.ts +8 -0
  18. package/dist/editor/layout.d.ts.map +1 -0
  19. package/{src/editor/layout.ts → dist/editor/layout.js} +36 -90
  20. package/dist/editor/layout.js.map +1 -0
  21. package/dist/formats/circuit-json/serializer.d.ts +101 -0
  22. package/dist/formats/circuit-json/serializer.d.ts.map +1 -0
  23. package/{src/formats/circuit-json/serializer.ts → dist/formats/circuit-json/serializer.js} +352 -418
  24. package/dist/formats/circuit-json/serializer.js.map +1 -0
  25. package/dist/formats/document.d.ts +64 -0
  26. package/dist/formats/document.d.ts.map +1 -0
  27. package/{src/formats/document.ts → dist/formats/document.js} +43 -159
  28. package/dist/formats/document.js.map +1 -0
  29. package/dist/formats/interchange/parser.d.ts +3 -0
  30. package/dist/formats/interchange/parser.d.ts.map +1 -0
  31. package/{src/formats/interchange/parser.ts → dist/formats/interchange/parser.js} +157 -463
  32. package/dist/formats/interchange/parser.js.map +1 -0
  33. package/dist/formats/interchange/serializer.d.ts +9 -0
  34. package/dist/formats/interchange/serializer.d.ts.map +1 -0
  35. package/{src/formats/interchange/serializer.ts → dist/formats/interchange/serializer.js} +84 -186
  36. package/dist/formats/interchange/serializer.js.map +1 -0
  37. package/dist/formats/ltspice/catalog.d.ts +19 -0
  38. package/dist/formats/ltspice/catalog.d.ts.map +1 -0
  39. package/{src/formats/ltspice/catalog.ts → dist/formats/ltspice/catalog.js} +18 -52
  40. package/dist/formats/ltspice/catalog.js.map +1 -0
  41. package/dist/formats/ltspice/encoding.d.ts +2 -0
  42. package/dist/formats/ltspice/encoding.d.ts.map +1 -0
  43. package/{src/formats/ltspice/encoding.ts → dist/formats/ltspice/encoding.js} +17 -41
  44. package/dist/formats/ltspice/encoding.js.map +1 -0
  45. package/dist/formats/ltspice/parser.d.ts +3 -0
  46. package/dist/formats/ltspice/parser.d.ts.map +1 -0
  47. package/{src/formats/ltspice/parser.ts → dist/formats/ltspice/parser.js} +39 -141
  48. package/dist/formats/ltspice/parser.js.map +1 -0
  49. package/dist/formats/ltspice/serializer.d.ts +7 -0
  50. package/dist/formats/ltspice/serializer.d.ts.map +1 -0
  51. package/{src/formats/ltspice/serializer.ts → dist/formats/ltspice/serializer.js} +18 -45
  52. package/dist/formats/ltspice/serializer.js.map +1 -0
  53. package/dist/formats/schx/catalog.d.ts +19 -0
  54. package/dist/formats/schx/catalog.d.ts.map +1 -0
  55. package/{src/formats/schx/catalog.ts → dist/formats/schx/catalog.js} +48 -101
  56. package/dist/formats/schx/catalog.js.map +1 -0
  57. package/dist/formats/schx/parser.d.ts +3 -0
  58. package/dist/formats/schx/parser.d.ts.map +1 -0
  59. package/{src/formats/schx/parser.ts → dist/formats/schx/parser.js} +31 -86
  60. package/dist/formats/schx/parser.js.map +1 -0
  61. package/dist/formats/schx/runtime-descriptors.d.ts +3 -0
  62. package/dist/formats/schx/runtime-descriptors.d.ts.map +1 -0
  63. package/{src/formats/schx/runtime-descriptors.ts → dist/formats/schx/runtime-descriptors.js} +36 -123
  64. package/dist/formats/schx/runtime-descriptors.js.map +1 -0
  65. package/dist/formats/schx/serializer.d.ts +5 -0
  66. package/dist/formats/schx/serializer.d.ts.map +1 -0
  67. package/{src/formats/schx/serializer.ts → dist/formats/schx/serializer.js} +17 -42
  68. package/dist/formats/schx/serializer.js.map +1 -0
  69. package/dist/formats/schx/transforms.d.ts +4 -0
  70. package/dist/formats/schx/transforms.d.ts.map +1 -0
  71. package/{src/formats/schx/transforms.ts → dist/formats/schx/transforms.js} +6 -10
  72. package/dist/formats/schx/transforms.js.map +1 -0
  73. package/dist/formats/spice/parser.d.ts +3 -0
  74. package/dist/formats/spice/parser.d.ts.map +1 -0
  75. package/{src/formats/spice/parser.ts → dist/formats/spice/parser.js} +50 -96
  76. package/dist/formats/spice/parser.js.map +1 -0
  77. package/dist/formats/spice/serializer.d.ts +3 -0
  78. package/dist/formats/spice/serializer.d.ts.map +1 -0
  79. package/{src/formats/spice/serializer.ts → dist/formats/spice/serializer.js} +20 -16
  80. package/dist/formats/spice/serializer.js.map +1 -0
  81. package/dist/index.d.ts +47 -0
  82. package/dist/index.d.ts.map +1 -0
  83. package/dist/index.js +32 -0
  84. package/dist/index.js.map +1 -0
  85. package/dist/model/connectivity.d.ts +16 -0
  86. package/dist/model/connectivity.d.ts.map +1 -0
  87. package/{src/model/connectivity.ts → dist/model/connectivity.js} +28 -63
  88. package/dist/model/connectivity.js.map +1 -0
  89. package/dist/model/netlist.d.ts +24 -0
  90. package/dist/model/netlist.d.ts.map +1 -0
  91. package/{src/model/netlist.ts → dist/model/netlist.js} +42 -110
  92. package/dist/model/netlist.js.map +1 -0
  93. package/dist/model/properties.d.ts +9 -0
  94. package/dist/model/properties.d.ts.map +1 -0
  95. package/{src/model/properties.ts → dist/model/properties.js} +10 -18
  96. package/dist/model/properties.js.map +1 -0
  97. package/dist/model/quantity.d.ts +3 -0
  98. package/dist/model/quantity.d.ts.map +1 -0
  99. package/{src/model/quantity.ts → dist/model/quantity.js} +7 -30
  100. package/dist/model/quantity.js.map +1 -0
  101. package/{src/model/types.ts → dist/model/types.d.ts} +17 -196
  102. package/dist/model/types.d.ts.map +1 -0
  103. package/dist/model/types.js +10 -0
  104. package/dist/model/types.js.map +1 -0
  105. package/dist/model/validation.d.ts +32 -0
  106. package/dist/model/validation.d.ts.map +1 -0
  107. package/{src/model/validation.ts → dist/model/validation.js} +172 -653
  108. package/dist/model/validation.js.map +1 -0
  109. package/dist/model/wires.d.ts +3 -0
  110. package/dist/model/wires.d.ts.map +1 -0
  111. package/{src/model/wires.ts → dist/model/wires.js} +10 -16
  112. package/dist/model/wires.js.map +1 -0
  113. package/dist/panel/extract.d.ts +5 -0
  114. package/dist/panel/extract.d.ts.map +1 -0
  115. package/{src/panel/extract.ts → dist/panel/extract.js} +146 -235
  116. package/dist/panel/extract.js.map +1 -0
  117. package/dist/panel/index.d.ts +6 -0
  118. package/dist/panel/index.d.ts.map +1 -0
  119. package/dist/panel/index.js +5 -0
  120. package/dist/panel/index.js.map +1 -0
  121. package/dist/panel/knobs.d.ts +7 -0
  122. package/dist/panel/knobs.d.ts.map +1 -0
  123. package/{src/panel/knobs.ts → dist/panel/knobs.js} +7 -18
  124. package/dist/panel/knobs.js.map +1 -0
  125. package/dist/panel/protocol.d.ts +9 -0
  126. package/dist/panel/protocol.d.ts.map +1 -0
  127. package/{src/panel/protocol.ts → dist/panel/protocol.js} +10 -26
  128. package/dist/panel/protocol.js.map +1 -0
  129. package/{src/panel/types.ts → dist/panel/types.d.ts} +50 -89
  130. package/dist/panel/types.d.ts.map +1 -0
  131. package/dist/panel/types.js +2 -0
  132. package/dist/panel/types.js.map +1 -0
  133. package/dist/preview/bounds.d.ts +12 -0
  134. package/dist/preview/bounds.d.ts.map +1 -0
  135. package/{src/preview/bounds.ts → dist/preview/bounds.js} +15 -29
  136. package/dist/preview/bounds.js.map +1 -0
  137. package/dist/preview/box-layout.d.ts +4 -0
  138. package/dist/preview/box-layout.d.ts.map +1 -0
  139. package/{src/preview/box-layout.ts → dist/preview/box-layout.js} +2 -6
  140. package/dist/preview/box-layout.js.map +1 -0
  141. package/dist/preview/colors.d.ts +3 -0
  142. package/dist/preview/colors.d.ts.map +1 -0
  143. package/{src/preview/colors.ts → dist/preview/colors.js} +3 -5
  144. package/dist/preview/colors.js.map +1 -0
  145. package/dist/preview/hanging.d.ts +8 -0
  146. package/dist/preview/hanging.d.ts.map +1 -0
  147. package/{src/preview/hanging.ts → dist/preview/hanging.js} +9 -28
  148. package/dist/preview/hanging.js.map +1 -0
  149. package/dist/preview/junctions.d.ts +3 -0
  150. package/dist/preview/junctions.d.ts.map +1 -0
  151. package/{src/preview/junctions.ts → dist/preview/junctions.js} +9 -24
  152. package/dist/preview/junctions.js.map +1 -0
  153. package/dist/preview/label-layout.d.ts +12 -0
  154. package/dist/preview/label-layout.d.ts.map +1 -0
  155. package/{src/preview/label-layout.ts → dist/preview/label-layout.js} +15 -36
  156. package/dist/preview/label-layout.js.map +1 -0
  157. package/dist/preview/ports.d.ts +17 -0
  158. package/dist/preview/ports.d.ts.map +1 -0
  159. package/{src/preview/ports.ts → dist/preview/ports.js} +10 -37
  160. package/dist/preview/ports.js.map +1 -0
  161. package/dist/preview/renderable-wires.d.ts +3 -0
  162. package/dist/preview/renderable-wires.d.ts.map +1 -0
  163. package/{src/preview/renderable-wires.ts → dist/preview/renderable-wires.js} +12 -29
  164. package/dist/preview/renderable-wires.js.map +1 -0
  165. package/dist/preview/routing.d.ts +4 -0
  166. package/dist/preview/routing.d.ts.map +1 -0
  167. package/dist/preview/routing.js +13 -0
  168. package/dist/preview/routing.js.map +1 -0
  169. package/dist/preview/snap.d.ts +9 -0
  170. package/dist/preview/snap.d.ts.map +1 -0
  171. package/{src/preview/snap.ts → dist/preview/snap.js} +9 -31
  172. package/dist/preview/snap.js.map +1 -0
  173. package/dist/preview/symbols/svg-content.d.ts +7 -0
  174. package/dist/preview/symbols/svg-content.d.ts.map +1 -0
  175. package/{src/preview/symbols/svg-content.ts → dist/preview/symbols/svg-content.js} +3 -6
  176. package/dist/preview/symbols/svg-content.js.map +1 -0
  177. package/dist/preview/symbols.d.ts +7 -0
  178. package/dist/preview/symbols.d.ts.map +1 -0
  179. package/{src/preview/symbols.ts → dist/preview/symbols.js} +18 -43
  180. package/dist/preview/symbols.js.map +1 -0
  181. package/dist/preview/wire-chains.d.ts +4 -0
  182. package/dist/preview/wire-chains.d.ts.map +1 -0
  183. package/{src/preview/wire-chains.ts → dist/preview/wire-chains.js} +37 -37
  184. package/dist/preview/wire-chains.js.map +1 -0
  185. package/package.json +3 -3
  186. package/src/index.ts +0 -255
  187. package/src/panel/index.ts +0 -39
  188. package/src/preview/routing.ts +0 -15
  189. package/src/preview/symbols/analog-switch.svg +0 -17
  190. package/src/preview/symbols/battery.svg +0 -16
  191. package/src/preview/symbols/bbd.svg +0 -21
  192. package/src/preview/symbols/bjt-npn.svg +0 -16
  193. package/src/preview/symbols/bjt-pnp.svg +0 -17
  194. package/src/preview/symbols/capacitor-electrolytic.svg +0 -13
  195. package/src/preview/symbols/capacitor.svg +0 -12
  196. package/src/preview/symbols/current-source.svg +0 -14
  197. package/src/preview/symbols/delay-ic.svg +0 -22
  198. package/src/preview/symbols/diode-schottky.svg +0 -12
  199. package/src/preview/symbols/diode-zener.svg +0 -12
  200. package/src/preview/symbols/diode.svg +0 -13
  201. package/src/preview/symbols/flipflop.svg +0 -20
  202. package/src/preview/symbols/ground.svg +0 -12
  203. package/src/preview/symbols/ic-block.svg +0 -20
  204. package/src/preview/symbols/ic.svg +0 -19
  205. package/src/preview/symbols/inductor.svg +0 -11
  206. package/src/preview/symbols/jack-input.svg +0 -16
  207. package/src/preview/symbols/jack-output.svg +0 -16
  208. package/src/preview/symbols/jfet-junction-n.svg +0 -17
  209. package/src/preview/symbols/jfet-n.svg +0 -17
  210. package/src/preview/symbols/jfet-p.svg +0 -17
  211. package/src/preview/symbols/label.svg +0 -8
  212. package/src/preview/symbols/led.svg +0 -18
  213. package/src/preview/symbols/mosfet-n.svg +0 -21
  214. package/src/preview/symbols/mosfet-p.svg +0 -21
  215. package/src/preview/symbols/named-wire.svg +0 -11
  216. package/src/preview/symbols/opamp.svg +0 -21
  217. package/src/preview/symbols/optocoupler.svg +0 -30
  218. package/src/preview/symbols/ota.svg +0 -20
  219. package/src/preview/symbols/pentode.svg +0 -25
  220. package/src/preview/symbols/photoresistor.svg +0 -19
  221. package/src/preview/symbols/port.svg +0 -8
  222. package/src/preview/symbols/potentiometer.svg +0 -15
  223. package/src/preview/symbols/power-amp.svg +0 -20
  224. package/src/preview/symbols/rail.svg +0 -11
  225. package/src/preview/symbols/regulator.svg +0 -13
  226. package/src/preview/symbols/relay.svg +0 -20
  227. package/src/preview/symbols/resistor.svg +0 -11
  228. package/src/preview/symbols/switch-3pdt.svg +0 -32
  229. package/src/preview/symbols/switch-rotary.svg +0 -23
  230. package/src/preview/symbols/switch-spdt.svg +0 -16
  231. package/src/preview/symbols/switch-spst.svg +0 -14
  232. package/src/preview/symbols/switch-toggle.svg +0 -14
  233. package/src/preview/symbols/transformer.svg +0 -17
  234. package/src/preview/symbols/triode.svg +0 -17
  235. package/src/preview/symbols/tube-diode.svg +0 -13
  236. package/src/preview/symbols/unsupported.svg +0 -8
  237. package/src/preview/symbols/variable-resistor.svg +0 -13
  238. package/src/preview/symbols/voltage-source.svg +0 -15
@@ -1,29 +1,7 @@
1
- import { getPinNode, resolveConnectivity, type Connectivity, type NodeId } from './connectivity';
2
- import { parseQuantity } from './quantity';
3
- import { propertyQuantityValue, propertyStringValue } from './properties';
4
- import type { CircuitDocument, Component, ComponentKind, ParsedQuantity } from './types';
5
-
6
- export type SpiceLetter = 'R' | 'C' | 'L' | 'D' | 'Q' | 'J' | 'M' | 'V' | 'I';
7
-
8
- export type NetlistComponent = Readonly<{
9
- id: string;
10
- kind: ComponentKind;
11
- spiceLetter: SpiceLetter | null;
12
- value: ParsedQuantity | null;
13
- nodes: readonly NodeId[];
14
- model: string | null;
15
- extras: Readonly<Record<string, string>>;
16
- }>;
17
-
18
- export type NetlistView = Readonly<{
19
- components: readonly NetlistComponent[];
20
- nodeCount: number;
21
- groundNodeId: NodeId | null;
22
- directives: readonly string[];
23
- warnings: readonly string[];
24
- }>;
25
-
26
- const SPICE_LETTER: Partial<Record<ComponentKind, SpiceLetter>> = {
1
+ import { getPinNode, resolveConnectivity } from './connectivity.js';
2
+ import { parseQuantity } from './quantity.js';
3
+ import { propertyQuantityValue, propertyStringValue } from './properties.js';
4
+ const SPICE_LETTER = {
27
5
  resistor: 'R',
28
6
  'variable-resistor': 'R',
29
7
  capacitor: 'C',
@@ -38,8 +16,7 @@ const SPICE_LETTER: Partial<Record<ComponentKind, SpiceLetter>> = {
38
16
  battery: 'V',
39
17
  rail: 'V',
40
18
  };
41
-
42
- const NODE_ORDER: Partial<Record<ComponentKind, readonly string[]>> = {
19
+ const NODE_ORDER = {
43
20
  resistor: ['a', 'b'],
44
21
  'variable-resistor': ['a', 'b'],
45
22
  capacitor: ['a', 'b'],
@@ -60,8 +37,7 @@ const NODE_ORDER: Partial<Record<ComponentKind, readonly string[]>> = {
60
37
  triode: ['plate', 'grid', 'cathode'],
61
38
  pentode: ['plate', 'screen', 'grid', 'cathode', 'suppressor'],
62
39
  };
63
-
64
- const VALUE_PROPERTY: Partial<Record<ComponentKind, string>> = {
40
+ const VALUE_PROPERTY = {
65
41
  resistor: 'R',
66
42
  'variable-resistor': 'R',
67
43
  capacitor: 'C',
@@ -71,10 +47,9 @@ const VALUE_PROPERTY: Partial<Record<ComponentKind, string>> = {
71
47
  battery: 'V',
72
48
  rail: 'V',
73
49
  };
74
-
75
50
  // Source-format aliases for the value property (e.g. LiveSPICE stores R as "Resistance").
76
51
  // Keep in sync with the alias lists in src/model/validation.ts until both fold into the catalog.
77
- const VALUE_PROPERTY_ALIASES: Partial<Record<ComponentKind, readonly string[]>> = {
52
+ const VALUE_PROPERTY_ALIASES = {
78
53
  resistor: ['Resistance', 'resistance'],
79
54
  'variable-resistor': ['Resistance', 'resistance'],
80
55
  capacitor: ['Capacitance', 'capacitance'],
@@ -84,8 +59,7 @@ const VALUE_PROPERTY_ALIASES: Partial<Record<ComponentKind, readonly string[]>>
84
59
  battery: ['Voltage', 'voltage'],
85
60
  rail: ['Voltage', 'voltage'],
86
61
  };
87
-
88
- const REQUIRES_VALUE: ReadonlySet<ComponentKind> = new Set<ComponentKind>([
62
+ const REQUIRES_VALUE = new Set([
89
63
  'resistor',
90
64
  'capacitor',
91
65
  'inductor',
@@ -94,8 +68,7 @@ const REQUIRES_VALUE: ReadonlySet<ComponentKind> = new Set<ComponentKind>([
94
68
  'battery',
95
69
  'rail',
96
70
  ]);
97
-
98
- const HAS_MODEL: ReadonlySet<ComponentKind> = new Set<ComponentKind>([
71
+ const HAS_MODEL = new Set([
99
72
  'diode',
100
73
  'led',
101
74
  'bjt',
@@ -106,16 +79,14 @@ const HAS_MODEL: ReadonlySet<ComponentKind> = new Set<ComponentKind>([
106
79
  'pentode',
107
80
  'tube-diode',
108
81
  ]);
109
-
110
- const SKIP_KINDS: ReadonlySet<ComponentKind> = new Set<ComponentKind>([
82
+ const SKIP_KINDS = new Set([
111
83
  'ground',
112
84
  'label',
113
85
  'named-wire',
114
86
  'port',
115
87
  'jack',
116
88
  ]);
117
-
118
- const MODEL_PROPERTY_NAMES: readonly string[] = [
89
+ const MODEL_PROPERTY_NAMES = [
119
90
  'model',
120
91
  'Model',
121
92
  'modelName',
@@ -124,16 +95,13 @@ const MODEL_PROPERTY_NAMES: readonly string[] = [
124
95
  'PartNumber',
125
96
  'Type',
126
97
  ];
127
-
128
- export function getSpiceLetter(kind: ComponentKind): SpiceLetter | null {
98
+ export function getSpiceLetter(kind) {
129
99
  return SPICE_LETTER[kind] ?? null;
130
100
  }
131
-
132
- export function getSpiceNodeOrder(kind: ComponentKind): readonly string[] | null {
101
+ export function getSpiceNodeOrder(kind) {
133
102
  return NODE_ORDER[kind] ?? null;
134
103
  }
135
-
136
- export function kindForSpiceLetter(letter: SpiceLetter): ComponentKind {
104
+ export function kindForSpiceLetter(letter) {
137
105
  switch (letter) {
138
106
  case 'R': return 'resistor';
139
107
  case 'C': return 'capacitor';
@@ -146,54 +114,44 @@ export function kindForSpiceLetter(letter: SpiceLetter): ComponentKind {
146
114
  case 'I': return 'current-source';
147
115
  }
148
116
  }
149
-
150
- export function toNetlistView(doc: CircuitDocument, precomputed?: Connectivity): NetlistView {
117
+ export function toNetlistView(doc, precomputed) {
151
118
  const connectivity = precomputed ?? resolveConnectivity(doc);
152
- const components: NetlistComponent[] = [];
153
- const warnings: string[] = [];
154
-
119
+ const components = [];
120
+ const warnings = [];
155
121
  for (const component of doc.components) {
156
122
  if (SKIP_KINDS.has(component.kind)) {
157
123
  continue;
158
124
  }
159
-
160
125
  if (component.kind === 'unsupported') {
161
- warnings.push(
162
- `${component.id}: unsupported source type ${component.sourceTypeName ?? 'unknown'} — skipped from netlist`,
163
- );
126
+ warnings.push(`${component.id}: unsupported source type ${component.sourceTypeName ?? 'unknown'} — skipped from netlist`);
164
127
  continue;
165
128
  }
166
-
167
129
  // Components that need a SPICE subcircuit (opamps, pots, tubes, etc.) are signaled
168
130
  // structurally via `spiceLetter: null` — no per-component warning needed.
169
-
170
131
  const spiceLetter = SPICE_LETTER[component.kind] ?? null;
171
132
  const expectedOrder = spiceLetter === null && component.terminals.length === 0
172
133
  ? null
173
134
  : NODE_ORDER[component.kind] ?? null;
174
135
  const ordered = orderedNodes(component, connectivity, expectedOrder);
175
136
  warnings.push(...ordered.warnings);
176
-
177
137
  let nodes = ordered.nodes;
178
138
  if (component.kind === 'rail') {
179
139
  // Append implicit ground as the negative terminal so the SPICE row is well-shaped.
180
140
  if (connectivity.groundNodeId === null) {
181
141
  warnings.push(`${component.id} (rail): no ground node in document — cannot anchor implicit return`);
182
- } else {
142
+ }
143
+ else {
183
144
  nodes = [...nodes, connectivity.groundNodeId];
184
145
  }
185
146
  }
186
-
187
147
  const valueResult = extractValue(component);
188
148
  const value = valueResult.value;
189
149
  if (value === null && REQUIRES_VALUE.has(component.kind) && !valueResult.present) {
190
150
  warnings.push(`${component.id} (${component.kind}): missing required value property`);
191
151
  }
192
-
193
152
  const model = extractModel(component);
194
153
  const consumed = consumedPropertyKeys(component.kind);
195
154
  const extras = extractExtras(component, consumed);
196
-
197
155
  components.push({
198
156
  id: component.id,
199
157
  kind: component.kind,
@@ -204,7 +162,6 @@ export function toNetlistView(doc: CircuitDocument, precomputed?: Connectivity):
204
162
  extras,
205
163
  });
206
164
  }
207
-
208
165
  return {
209
166
  components,
210
167
  nodeCount: connectivity.nodeCount,
@@ -213,23 +170,15 @@ export function toNetlistView(doc: CircuitDocument, precomputed?: Connectivity):
213
170
  warnings,
214
171
  };
215
172
  }
216
-
217
- function orderedNodes(
218
- component: Component,
219
- connectivity: Connectivity,
220
- expected: readonly string[] | null,
221
- ): { nodes: readonly NodeId[]; warnings: readonly string[] } {
222
- const warnings: string[] = [];
223
-
173
+ function orderedNodes(component, connectivity, expected) {
174
+ const warnings = [];
224
175
  if (expected === null) {
225
176
  const nodes = collectDeclarationOrder(component, connectivity, warnings);
226
177
  return { nodes, warnings };
227
178
  }
228
-
229
179
  const byName = new Map(component.terminals.map((t) => [t.name, t]));
230
- const missing: string[] = [];
231
- const ordered: NodeId[] = [];
232
-
180
+ const missing = [];
181
+ const ordered = [];
233
182
  for (const name of expected) {
234
183
  const terminal = byName.get(name);
235
184
  if (terminal === undefined) {
@@ -239,45 +188,36 @@ function orderedNodes(
239
188
  const node = getPinNode(connectivity, { componentId: component.id, terminalName: name });
240
189
  if (node === undefined) {
241
190
  warnings.push(`${component.id}: terminal "${name}" has no resolved node`);
242
- } else {
191
+ }
192
+ else {
243
193
  ordered.push(node);
244
194
  }
245
195
  }
246
-
247
196
  if (missing.length > 0) {
248
- warnings.push(
249
- `${component.id} (${component.kind}): expected terminals [${expected.join(', ')}], missing [${missing.join(', ')}] — falling back to declaration order`,
250
- );
197
+ warnings.push(`${component.id} (${component.kind}): expected terminals [${expected.join(', ')}], missing [${missing.join(', ')}] — falling back to declaration order`);
251
198
  const fallback = collectDeclarationOrder(component, connectivity, warnings);
252
199
  return { nodes: fallback, warnings };
253
200
  }
254
-
255
201
  return { nodes: ordered, warnings };
256
202
  }
257
-
258
- function collectDeclarationOrder(
259
- component: Component,
260
- connectivity: Connectivity,
261
- warnings: string[],
262
- ): readonly NodeId[] {
263
- const nodes: NodeId[] = [];
203
+ function collectDeclarationOrder(component, connectivity, warnings) {
204
+ const nodes = [];
264
205
  for (const terminal of component.terminals) {
265
206
  const node = getPinNode(connectivity, { componentId: component.id, terminalName: terminal.name });
266
207
  if (node === undefined) {
267
208
  warnings.push(`${component.id}: terminal "${terminal.name}" has no resolved node`);
268
- } else {
209
+ }
210
+ else {
269
211
  nodes.push(node);
270
212
  }
271
213
  }
272
214
  return nodes;
273
215
  }
274
-
275
- function extractValue(component: Component): { value: ParsedQuantity | null; present: boolean } {
216
+ function extractValue(component) {
276
217
  const baseName = VALUE_PROPERTY[component.kind];
277
218
  if (baseName === undefined) {
278
219
  return { value: null, present: false };
279
220
  }
280
-
281
221
  const aliases = VALUE_PROPERTY_ALIASES[component.kind] ?? [];
282
222
  const variants = uniqueVariants([
283
223
  baseName,
@@ -288,7 +228,6 @@ function extractValue(component: Component): { value: ParsedQuantity | null; pre
288
228
  'value',
289
229
  'Value',
290
230
  ]);
291
-
292
231
  for (const name of variants) {
293
232
  const raw = component.properties[name];
294
233
  if (raw === undefined) {
@@ -301,8 +240,7 @@ function extractValue(component: Component): { value: ParsedQuantity | null; pre
301
240
  }
302
241
  return { value: null, present: false };
303
242
  }
304
-
305
- function extractModel(component: Component): string | null {
243
+ function extractModel(component) {
306
244
  if (!HAS_MODEL.has(component.kind)) {
307
245
  return null;
308
246
  }
@@ -314,9 +252,8 @@ function extractModel(component: Component): string | null {
314
252
  }
315
253
  return null;
316
254
  }
317
-
318
- function consumedPropertyKeys(kind: ComponentKind): ReadonlySet<string> {
319
- const consumed = new Set<string>();
255
+ function consumedPropertyKeys(kind) {
256
+ const consumed = new Set();
320
257
  const baseName = VALUE_PROPERTY[kind];
321
258
  if (baseName !== undefined) {
322
259
  consumed.add(baseName);
@@ -336,12 +273,8 @@ function consumedPropertyKeys(kind: ComponentKind): ReadonlySet<string> {
336
273
  }
337
274
  return consumed;
338
275
  }
339
-
340
- function extractExtras(
341
- component: Component,
342
- consumed: ReadonlySet<string>,
343
- ): Readonly<Record<string, string>> {
344
- const extras: Record<string, string> = {};
276
+ function extractExtras(component, consumed) {
277
+ const extras = {};
345
278
  for (const [key, value] of Object.entries(component.properties)) {
346
279
  if (consumed.has(key)) {
347
280
  continue;
@@ -353,10 +286,9 @@ function extractExtras(
353
286
  }
354
287
  return extras;
355
288
  }
356
-
357
- function uniqueVariants(input: readonly string[]): readonly string[] {
358
- const seen = new Set<string>();
359
- const out: string[] = [];
289
+ function uniqueVariants(input) {
290
+ const seen = new Set();
291
+ const out = [];
360
292
  for (const name of input) {
361
293
  if (seen.has(name)) {
362
294
  continue;
@@ -366,10 +298,10 @@ function uniqueVariants(input: readonly string[]): readonly string[] {
366
298
  }
367
299
  return out;
368
300
  }
369
-
370
- function capitalize(s: string): string {
301
+ function capitalize(s) {
371
302
  if (s.length === 0) {
372
303
  return s;
373
304
  }
374
305
  return s.charAt(0).toUpperCase() + s.slice(1);
375
306
  }
307
+ //# sourceMappingURL=netlist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"netlist.js","sourceRoot":"","sources":["../../src/model/netlist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ParsedQuantity, PropertyObject, PropertyValue } from './types';
2
+ export declare function isParsedQuantity(value: unknown): value is ParsedQuantity;
3
+ export declare function isPropertyObject(value: PropertyValue | undefined): value is PropertyObject;
4
+ export declare function propertyStringValue(value: PropertyValue | undefined): string | null;
5
+ export declare function propertyQuantityValue(value: PropertyValue | undefined): ParsedQuantity | null;
6
+ export declare function propertyNumericValue(value: PropertyValue | undefined): number | undefined;
7
+ export declare function propertyBooleanValue(value: PropertyValue | undefined): boolean | undefined;
8
+ export declare function propertyValueForSourceAttribute(value: PropertyValue): string | null;
9
+ //# sourceMappingURL=properties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../src/model/properties.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7E,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAOxE;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,KAAK,IAAI,cAAc,CAE1F;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAcnF;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,cAAc,GAAG,IAAI,CAkB7F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAmBzF;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAe1F;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAMnF"}
@@ -1,7 +1,5 @@
1
- import { parseQuantity } from './quantity';
2
- import type { ParsedQuantity, PropertyObject, PropertyValue } from './types';
3
-
4
- export function isParsedQuantity(value: unknown): value is ParsedQuantity {
1
+ import { parseQuantity } from './quantity.js';
2
+ export function isParsedQuantity(value) {
5
3
  if (!isUnknownRecord(value)) {
6
4
  return false;
7
5
  }
@@ -9,12 +7,10 @@ export function isParsedQuantity(value: unknown): value is ParsedQuantity {
9
7
  typeof value['value'] === 'number' &&
10
8
  typeof value['unit'] === 'string';
11
9
  }
12
-
13
- export function isPropertyObject(value: PropertyValue | undefined): value is PropertyObject {
10
+ export function isPropertyObject(value) {
14
11
  return isUnknownRecord(value) && !Array.isArray(value) && !isParsedQuantity(value);
15
12
  }
16
-
17
- export function propertyStringValue(value: PropertyValue | undefined): string | null {
13
+ export function propertyStringValue(value) {
18
14
  if (value === undefined || value === null) {
19
15
  return null;
20
16
  }
@@ -29,8 +25,7 @@ export function propertyStringValue(value: PropertyValue | undefined): string |
29
25
  }
30
26
  return null;
31
27
  }
32
-
33
- export function propertyQuantityValue(value: PropertyValue | undefined): ParsedQuantity | null {
28
+ export function propertyQuantityValue(value) {
34
29
  if (value === undefined || value === null) {
35
30
  return null;
36
31
  }
@@ -49,8 +44,7 @@ export function propertyQuantityValue(value: PropertyValue | undefined): ParsedQ
49
44
  }
50
45
  return null;
51
46
  }
52
-
53
- export function propertyNumericValue(value: PropertyValue | undefined): number | undefined {
47
+ export function propertyNumericValue(value) {
54
48
  if (value === undefined || value === null) {
55
49
  return undefined;
56
50
  }
@@ -70,8 +64,7 @@ export function propertyNumericValue(value: PropertyValue | undefined): number |
70
64
  }
71
65
  return undefined;
72
66
  }
73
-
74
- export function propertyBooleanValue(value: PropertyValue | undefined): boolean | undefined {
67
+ export function propertyBooleanValue(value) {
75
68
  if (value === undefined || value === null) {
76
69
  return undefined;
77
70
  }
@@ -87,15 +80,14 @@ export function propertyBooleanValue(value: PropertyValue | undefined): boolean
87
80
  }
88
81
  return undefined;
89
82
  }
90
-
91
- export function propertyValueForSourceAttribute(value: PropertyValue): string | null {
83
+ export function propertyValueForSourceAttribute(value) {
92
84
  const scalar = propertyStringValue(value);
93
85
  if (scalar !== null) {
94
86
  return scalar;
95
87
  }
96
88
  return null;
97
89
  }
98
-
99
- function isUnknownRecord(value: unknown): value is Record<string, unknown> {
90
+ function isUnknownRecord(value) {
100
91
  return typeof value === 'object' && value !== null && !Array.isArray(value);
101
92
  }
93
+ //# sourceMappingURL=properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../src/model/properties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC3C,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,OAAO,KAAK,CAAC,KAAK,CAAC,KAAK,QAAQ;QACnC,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,QAAQ;QAClC,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC;AAC1C,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAgC;IAC7D,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAgC;IAChE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC1D,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC;IACD,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC,GAAG,CAAC;IACrB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAgC;IAClE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO;YACH,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC;YAClB,KAAK;YACL,IAAI,EAAE,EAAE;SACX,CAAC;IACN,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAgC;IACjE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACtD,CAAC;IACD,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IAClE,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;QAC7B,IAAI,CAAC,2CAA2C,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC7D,OAAO,SAAS,CAAC;QACrB,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IACxD,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAgC;IACjE,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QACxC,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9D,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,KAAK,EAAE,CAAC;QACpD,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,IAAI,IAAI,KAAK,OAAO,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,+BAA+B,CAAC,KAAoB;IAChE,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC1C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACnC,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAChF,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { ParsedQuantity } from './types';
2
+ export declare function parseQuantity(input: string): ParsedQuantity | null;
3
+ //# sourceMappingURL=quantity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quantity.d.ts","sourceRoot":"","sources":["../../src/model/quantity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AA8D9C,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAmClE"}
@@ -1,6 +1,4 @@
1
- import type { ParsedQuantity } from './types';
2
-
3
- const SI_PREFIXES: Readonly<Record<string, number>> = {
1
+ const SI_PREFIXES = {
4
2
  f: 1e-15,
5
3
  p: 1e-12,
6
4
  n: 1e-9,
@@ -14,8 +12,7 @@ const SI_PREFIXES: Readonly<Record<string, number>> = {
14
12
  G: 1e9,
15
13
  T: 1e12,
16
14
  };
17
-
18
- const SHORTHAND_MARKERS: Readonly<Record<string, { readonly multiplier: number; readonly impliedUnit?: string }>> = {
15
+ const SHORTHAND_MARKERS = {
19
16
  f: { multiplier: 1e-15 },
20
17
  p: { multiplier: 1e-12 },
21
18
  n: { multiplier: 1e-9 },
@@ -31,8 +28,7 @@ const SHORTHAND_MARKERS: Readonly<Record<string, { readonly multiplier: number;
31
28
  R: { multiplier: 1, impliedUnit: 'Ω' },
32
29
  r: { multiplier: 1, impliedUnit: 'Ω' },
33
30
  };
34
-
35
- const UNIT_ALIASES: Readonly<Record<string, string>> = {
31
+ const UNIT_ALIASES = {
36
32
  F: 'F',
37
33
  f: 'F',
38
34
  H: 'H',
@@ -55,54 +51,44 @@ const UNIT_ALIASES: Readonly<Record<string, string>> = {
55
51
  s: 's',
56
52
  S: 's',
57
53
  };
58
-
59
54
  const QUANTITY_REGEX = /^([+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:[eE][+-]?\d+)?)([A-Za-zµμΩΩ]*)$/;
60
55
  const SHORTHAND_QUANTITY_REGEX = /^([+-]?\d+)([fFpPnNuUµμmMkKGTRr])(\d+)([A-Za-zµμΩΩ]*)$/;
61
56
  const SPICE_MEG = /^(?:Meg|MEG|meg)/;
62
-
63
- export function parseQuantity(input: string): ParsedQuantity | null {
57
+ export function parseQuantity(input) {
64
58
  const raw = input.trim();
65
59
  if (raw.length === 0) {
66
60
  return null;
67
61
  }
68
-
69
62
  const compact = raw.replace(/\s+/g, '');
70
63
  const shorthand = parseShorthandQuantity(raw, compact);
71
64
  if (shorthand !== null) {
72
65
  return shorthand;
73
66
  }
74
-
75
67
  const match = compact.match(QUANTITY_REGEX);
76
68
  if (!match) {
77
69
  return null;
78
70
  }
79
-
80
71
  const numStr = match[1];
81
72
  const suffix = match[2] ?? '';
82
73
  if (numStr === undefined) {
83
74
  return null;
84
75
  }
85
-
86
76
  const baseValue = Number.parseFloat(numStr);
87
77
  if (!Number.isFinite(baseValue)) {
88
78
  return null;
89
79
  }
90
-
91
80
  const parsed = parseSuffix(suffix);
92
-
93
81
  return {
94
82
  raw,
95
83
  value: baseValue * parsed.multiplier,
96
84
  unit: parsed.unit,
97
85
  };
98
86
  }
99
-
100
- function parseShorthandQuantity(raw: string, compact: string): ParsedQuantity | null {
87
+ function parseShorthandQuantity(raw, compact) {
101
88
  const match = compact.match(SHORTHAND_QUANTITY_REGEX);
102
89
  if (match === null) {
103
90
  return null;
104
91
  }
105
-
106
92
  const whole = match[1];
107
93
  const marker = match[2];
108
94
  const fractional = match[3];
@@ -110,34 +96,28 @@ function parseShorthandQuantity(raw: string, compact: string): ParsedQuantity |
110
96
  if (whole === undefined || marker === undefined || fractional === undefined) {
111
97
  return null;
112
98
  }
113
-
114
99
  const markerDef = SHORTHAND_MARKERS[marker];
115
100
  if (markerDef === undefined) {
116
101
  return null;
117
102
  }
118
-
119
103
  const value = Number.parseFloat(`${whole}.${fractional}`);
120
104
  if (!Number.isFinite(value)) {
121
105
  return null;
122
106
  }
123
-
124
107
  const aliasedTrailingUnit = UNIT_ALIASES[trailingUnit];
125
108
  const unit = trailingUnit.length > 0
126
109
  ? aliasedTrailingUnit ?? trailingUnit
127
110
  : markerDef.impliedUnit ?? '';
128
-
129
111
  return {
130
112
  raw,
131
113
  value: value * markerDef.multiplier,
132
114
  unit,
133
115
  };
134
116
  }
135
-
136
- function parseSuffix(suffix: string): { multiplier: number; unit: string } {
117
+ function parseSuffix(suffix) {
137
118
  if (suffix.length === 0) {
138
119
  return { multiplier: 1, unit: '' };
139
120
  }
140
-
141
121
  // SPICE convention: "Meg" / "MEG" / "meg" = 1e6, distinct from milli "m".
142
122
  // Match before the single-char prefix loop so "meg" doesn't get read as milli + "eg".
143
123
  const megMatch = SPICE_MEG.exec(suffix);
@@ -149,11 +129,9 @@ function parseSuffix(suffix: string): { multiplier: number; unit: string } {
149
129
  const restUnit = UNIT_ALIASES[rest];
150
130
  return { multiplier: 1e6, unit: restUnit ?? rest };
151
131
  }
152
-
153
132
  const first = suffix.charAt(0);
154
133
  const rest = suffix.slice(1);
155
134
  const prefixMultiplier = SI_PREFIXES[first];
156
-
157
135
  if (prefixMultiplier !== undefined) {
158
136
  if (rest.length === 0) {
159
137
  return { multiplier: prefixMultiplier, unit: '' };
@@ -163,11 +141,10 @@ function parseSuffix(suffix: string): { multiplier: number; unit: string } {
163
141
  return { multiplier: prefixMultiplier, unit: restUnit };
164
142
  }
165
143
  }
166
-
167
144
  const fullUnit = UNIT_ALIASES[suffix];
168
145
  if (fullUnit !== undefined) {
169
146
  return { multiplier: 1, unit: fullUnit };
170
147
  }
171
-
172
148
  return { multiplier: 1, unit: suffix };
173
149
  }
150
+ //# sourceMappingURL=quantity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"quantity.js","sourceRoot":"","sources":["../../src/model/quantity.ts"],"names":[],"mappings":"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"}