@circuit-forge/eda-core 1.0.0

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 (75) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +50 -0
  3. package/dist/erc/checker.d.ts +15 -0
  4. package/dist/erc/checker.d.ts.map +1 -0
  5. package/dist/erc/checker.js +267 -0
  6. package/dist/erc/checker.js.map +1 -0
  7. package/dist/erc/codes.d.ts +15 -0
  8. package/dist/erc/codes.d.ts.map +1 -0
  9. package/dist/erc/codes.js +48 -0
  10. package/dist/erc/codes.js.map +1 -0
  11. package/dist/erc/index.d.ts +7 -0
  12. package/dist/erc/index.d.ts.map +1 -0
  13. package/dist/erc/index.js +14 -0
  14. package/dist/erc/index.js.map +1 -0
  15. package/dist/index.d.ts +20 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +79 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/netlist/generator.d.ts +32 -0
  20. package/dist/netlist/generator.d.ts.map +1 -0
  21. package/dist/netlist/generator.js +183 -0
  22. package/dist/netlist/generator.js.map +1 -0
  23. package/dist/netlist/index.d.ts +6 -0
  24. package/dist/netlist/index.d.ts.map +1 -0
  25. package/dist/netlist/index.js +20 -0
  26. package/dist/netlist/index.js.map +1 -0
  27. package/dist/netlist/sanitizer.d.ts +45 -0
  28. package/dist/netlist/sanitizer.d.ts.map +1 -0
  29. package/dist/netlist/sanitizer.js +145 -0
  30. package/dist/netlist/sanitizer.js.map +1 -0
  31. package/dist/parser/csv-parser.d.ts +27 -0
  32. package/dist/parser/csv-parser.d.ts.map +1 -0
  33. package/dist/parser/csv-parser.js +198 -0
  34. package/dist/parser/csv-parser.js.map +1 -0
  35. package/dist/parser/index.d.ts +6 -0
  36. package/dist/parser/index.d.ts.map +1 -0
  37. package/dist/parser/index.js +15 -0
  38. package/dist/parser/index.js.map +1 -0
  39. package/dist/parser/netlist-parser.d.ts +25 -0
  40. package/dist/parser/netlist-parser.d.ts.map +1 -0
  41. package/dist/parser/netlist-parser.js +260 -0
  42. package/dist/parser/netlist-parser.js.map +1 -0
  43. package/dist/schemas/analysis.schema.d.ts +298 -0
  44. package/dist/schemas/analysis.schema.d.ts.map +1 -0
  45. package/dist/schemas/analysis.schema.js +91 -0
  46. package/dist/schemas/analysis.schema.js.map +1 -0
  47. package/dist/schemas/circuit.schema.d.ts +405 -0
  48. package/dist/schemas/circuit.schema.d.ts.map +1 -0
  49. package/dist/schemas/circuit.schema.js +121 -0
  50. package/dist/schemas/circuit.schema.js.map +1 -0
  51. package/dist/types/analysis.d.ts +61 -0
  52. package/dist/types/analysis.d.ts.map +1 -0
  53. package/dist/types/analysis.js +119 -0
  54. package/dist/types/analysis.js.map +1 -0
  55. package/dist/types/circuit.d.ts +94 -0
  56. package/dist/types/circuit.d.ts.map +1 -0
  57. package/dist/types/circuit.js +32 -0
  58. package/dist/types/circuit.js.map +1 -0
  59. package/dist/types/erc.d.ts +68 -0
  60. package/dist/types/erc.d.ts.map +1 -0
  61. package/dist/types/erc.js +33 -0
  62. package/dist/types/erc.js.map +1 -0
  63. package/dist/types/simulation.d.ts +61 -0
  64. package/dist/types/simulation.d.ts.map +1 -0
  65. package/dist/types/simulation.js +43 -0
  66. package/dist/types/simulation.js.map +1 -0
  67. package/dist/utils/index.d.ts +5 -0
  68. package/dist/utils/index.d.ts.map +1 -0
  69. package/dist/utils/index.js +14 -0
  70. package/dist/utils/index.js.map +1 -0
  71. package/dist/utils/unit-parser.d.ts +47 -0
  72. package/dist/utils/unit-parser.d.ts.map +1 -0
  73. package/dist/utils/unit-parser.js +229 -0
  74. package/dist/utils/unit-parser.js.map +1 -0
  75. package/package.json +58 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Abdulberk
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,50 @@
1
+ # @circuit-forge/eda-core
2
+
3
+ Circuit manipulation, netlist generation, and SPICE parsing for the **Circuit Forge** EDA
4
+ platform. This package is the **single source of truth** for the `CircuitJson` schema shared
5
+ between the backend, the simulation worker, and the web frontend — reuse it instead of
6
+ re-declaring circuit types.
7
+
8
+ Pure TypeScript, browser-safe (only runtime dependency is [Zod](https://zod.dev) v3).
9
+
10
+ ## Install
11
+
12
+ ```bash
13
+ npm install @circuit-forge/eda-core
14
+ # or: pnpm add @circuit-forge/eda-core
15
+ ```
16
+
17
+ ## What's inside
18
+
19
+ - **Types** — `CircuitJson`, `Component`, `Net`, `PinConnection`, `UiJson`, `AnalysisConfig`,
20
+ `SimulationResult`, `DataSeries`, `DataPoint`, `ErcResult`, and the constants
21
+ `COMPONENT_PINS` / `SPICE_PREFIXES`.
22
+ - **Validation (Zod)** — `CircuitJsonSchema`, `UiJsonSchema`, `AnalysisConfigSchema`,
23
+ `SpiceValueSchema`, `ProbeSchema`, plus `validate*` (throwing) and `safeValidate*`
24
+ (result-returning) helpers.
25
+ - **Netlist** — `generateNetlist(circuit, analysisConfig, opts)` and `parseNetlist(text)`.
26
+ - **ERC** — `runErc(circuit)` returns `ErcIssue[]` (e.g. `NO_GROUND`, `MISSING_VALUE`).
27
+ - **SPICE values** — `parseSpiceValue`, `parseTimeValue`, `parseFrequencyValue`
28
+ (remember: `M`/`m` = milli, `MEG` = mega).
29
+
30
+ ## Example
31
+
32
+ ```ts
33
+ import { safeValidateCircuitJson, generateNetlist, runErc } from '@circuit-forge/eda-core';
34
+
35
+ const result = safeValidateCircuitJson(circuitJsonFromApi);
36
+ if (!result.success) throw new Error('Invalid circuit');
37
+
38
+ const issues = runErc(result.data); // electrical-rule check
39
+ const netlist = generateNetlist(result.data, { type: 'tran', stopTime: '5m', stepTime: '50u' });
40
+ ```
41
+
42
+ ## Notes
43
+
44
+ - Component `designator` must match `^[A-Z][A-Z0-9]*[0-9]+$` (must end in a digit, e.g. `R1`, `GND1`).
45
+ - Connectivity lives only in `Component.pins[].netId` → `Net.id`; there is no flat node list.
46
+ - Diodes should omit `model` — a built-in default (`DDEFAULT`) is supplied during netlist generation.
47
+
48
+ ## License
49
+
50
+ MIT
@@ -0,0 +1,15 @@
1
+ /**
2
+ * ERC (Electrical Rule Check) Checker
3
+ * Validates circuits for common electrical issues
4
+ */
5
+ import type { CircuitJson } from '../types/circuit';
6
+ import { ErcResult } from '../types/erc';
7
+ /**
8
+ * Run all ERC checks on a circuit
9
+ */
10
+ export declare function runErc(circuit: CircuitJson): ErcResult;
11
+ /**
12
+ * Quick check - returns true if circuit passes basic ERC
13
+ */
14
+ export declare function quickCheck(circuit: CircuitJson): boolean;
15
+ //# sourceMappingURL=checker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checker.d.ts","sourceRoot":"","sources":["../../src/erc/checker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAwB,SAAS,EAAY,MAAM,cAAc,CAAC;AAqBzE;;GAEG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,CA2BtD;AAgTD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAGxD"}
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.runErc = runErc;
4
+ exports.quickCheck = quickCheck;
5
+ const erc_1 = require("../types/erc");
6
+ const codes_1 = require("./codes");
7
+ /**
8
+ * Expected pin counts for each component type
9
+ */
10
+ const EXPECTED_PIN_COUNTS = {
11
+ resistor: 2,
12
+ capacitor: 2,
13
+ inductor: 2,
14
+ voltage_source: 2,
15
+ current_source: 2,
16
+ diode: 2,
17
+ ground: 1,
18
+ };
19
+ /**
20
+ * Components that are considered active sources
21
+ */
22
+ const ACTIVE_SOURCES = ['voltage_source', 'current_source'];
23
+ /**
24
+ * Run all ERC checks on a circuit
25
+ */
26
+ function runErc(circuit) {
27
+ const issues = [];
28
+ // Run all checks
29
+ issues.push(...checkEmptyCircuit(circuit));
30
+ issues.push(...checkGround(circuit));
31
+ issues.push(...checkFloatingNodes(circuit));
32
+ issues.push(...checkPinCounts(circuit));
33
+ issues.push(...checkComponentValues(circuit));
34
+ issues.push(...checkVoltageSourceShorts(circuit));
35
+ issues.push(...checkNetConnections(circuit));
36
+ issues.push(...checkActiveSources(circuit));
37
+ // Categorize by severity
38
+ const errors = issues.filter((i) => i.severity === 'error');
39
+ const warnings = issues.filter((i) => i.severity === 'warning');
40
+ const infos = issues.filter((i) => i.severity === 'info');
41
+ return {
42
+ passed: errors.length === 0,
43
+ issues,
44
+ summary: {
45
+ errors: errors.length,
46
+ warnings: warnings.length,
47
+ infos: infos.length,
48
+ },
49
+ };
50
+ }
51
+ /**
52
+ * Create an ERC issue
53
+ */
54
+ function createIssue(code, relatedIds, details, severityOverride) {
55
+ return {
56
+ code,
57
+ severity: severityOverride || codes_1.ERC_SEVERITIES[code],
58
+ message: details ? `${codes_1.ERC_DESCRIPTIONS[code]}: ${details}` : codes_1.ERC_DESCRIPTIONS[code],
59
+ relatedIds,
60
+ };
61
+ }
62
+ /**
63
+ * Check if circuit is empty
64
+ */
65
+ function checkEmptyCircuit(circuit) {
66
+ const issues = [];
67
+ // Filter out ground components for this check
68
+ const nonGroundComponents = circuit.components.filter((c) => c.type !== 'ground');
69
+ if (nonGroundComponents.length === 0) {
70
+ issues.push(createIssue(erc_1.ErcCode.EMPTY_CIRCUIT, []));
71
+ }
72
+ return issues;
73
+ }
74
+ /**
75
+ * Check for ground reference
76
+ */
77
+ function checkGround(circuit) {
78
+ const issues = [];
79
+ // Find ground components
80
+ const groundComponents = circuit.components.filter((c) => c.type === 'ground');
81
+ // Find nets marked as ground
82
+ const groundNets = circuit.nets.filter((n) => n.isGround);
83
+ // Check if there's at least one ground reference
84
+ const hasNodeZero = circuit.nets.some((n) => n.id === '0' || n.name === '0');
85
+ const hasGround = groundComponents.length > 0 || groundNets.length > 0 || hasNodeZero;
86
+ if (!hasGround) {
87
+ issues.push(createIssue(erc_1.ErcCode.NO_GROUND, []));
88
+ }
89
+ // Check for multiple grounds on different nets
90
+ if (groundComponents.length > 1) {
91
+ const groundNetIds = new Set();
92
+ for (const gnd of groundComponents) {
93
+ const pin = gnd.pins[0];
94
+ if (pin?.netId) {
95
+ groundNetIds.add(pin.netId);
96
+ }
97
+ }
98
+ if (groundNetIds.size > 1) {
99
+ issues.push(createIssue(erc_1.ErcCode.MULTIPLE_GROUNDS, groundComponents.map((c) => c.id), `Found on nets: ${Array.from(groundNetIds).join(', ')}`));
100
+ }
101
+ }
102
+ return issues;
103
+ }
104
+ /**
105
+ * Check for floating nodes
106
+ */
107
+ function checkFloatingNodes(circuit) {
108
+ const issues = [];
109
+ // Build net connection map
110
+ const netPinCount = new Map();
111
+ const netComponents = new Map();
112
+ for (const component of circuit.components) {
113
+ for (const pin of component.pins) {
114
+ if (pin.netId) {
115
+ netPinCount.set(pin.netId, (netPinCount.get(pin.netId) || 0) + 1);
116
+ const components = netComponents.get(pin.netId) || [];
117
+ components.push(component.id);
118
+ netComponents.set(pin.netId, components);
119
+ }
120
+ }
121
+ }
122
+ // Check each net
123
+ for (const net of circuit.nets) {
124
+ const pinCount = netPinCount.get(net.id) || 0;
125
+ const connectedComponents = netComponents.get(net.id) || [];
126
+ // Skip ground nets
127
+ if (net.isGround || net.id === '0' || net.name === '0') {
128
+ continue;
129
+ }
130
+ if (pinCount === 0) {
131
+ issues.push(createIssue(erc_1.ErcCode.UNCONNECTED_NET, [net.id], `Net "${net.name || net.id}"`));
132
+ }
133
+ else if (pinCount === 1) {
134
+ issues.push(createIssue(erc_1.ErcCode.NET_HAS_SINGLE_PIN, [net.id, ...connectedComponents], `Net "${net.name || net.id}" connected to only ${connectedComponents.join(', ')}`));
135
+ }
136
+ }
137
+ return issues;
138
+ }
139
+ /**
140
+ * Check component pin counts
141
+ */
142
+ function checkPinCounts(circuit) {
143
+ const issues = [];
144
+ for (const component of circuit.components) {
145
+ const expected = EXPECTED_PIN_COUNTS[component.type];
146
+ if (expected !== undefined && component.pins.length !== expected) {
147
+ issues.push(createIssue(erc_1.ErcCode.PIN_COUNT_MISMATCH, [component.id], `${component.designator || component.id}: expected ${expected} pins, got ${component.pins.length}`));
148
+ }
149
+ }
150
+ return issues;
151
+ }
152
+ /**
153
+ * Check component values
154
+ */
155
+ function checkComponentValues(circuit) {
156
+ const issues = [];
157
+ // Components that require values
158
+ const requiresValue = ['resistor', 'capacitor', 'inductor', 'voltage_source', 'current_source'];
159
+ // Components that require models
160
+ const requiresModel = ['diode'];
161
+ for (const component of circuit.components) {
162
+ // Check for missing values
163
+ if (requiresValue.includes(component.type) && !component.value) {
164
+ issues.push(createIssue(erc_1.ErcCode.MISSING_VALUE, [component.id], `${component.designator || component.id} (${component.type})`));
165
+ }
166
+ // Check for missing models (warning level)
167
+ if (requiresModel.includes(component.type) && !component.model) {
168
+ issues.push(createIssue(erc_1.ErcCode.MISSING_MODEL, [component.id], `${component.designator || component.id} will use default model`));
169
+ }
170
+ }
171
+ return issues;
172
+ }
173
+ /**
174
+ * Check for voltage source shorts
175
+ */
176
+ function checkVoltageSourceShorts(circuit) {
177
+ const issues = [];
178
+ // Find all voltage sources
179
+ const voltageSources = circuit.components.filter((c) => c.type === 'voltage_source');
180
+ // Find ground net ids
181
+ const groundNetIds = new Set();
182
+ groundNetIds.add('0');
183
+ for (const net of circuit.nets) {
184
+ if (net.isGround) {
185
+ groundNetIds.add(net.id);
186
+ }
187
+ }
188
+ for (const gnd of circuit.components.filter((c) => c.type === 'ground')) {
189
+ const pin = gnd.pins[0];
190
+ if (pin?.netId) {
191
+ groundNetIds.add(pin.netId);
192
+ }
193
+ }
194
+ for (const vs of voltageSources) {
195
+ const posPin = vs.pins.find((p) => p.pinId === '+');
196
+ const negPin = vs.pins.find((p) => p.pinId === '-');
197
+ // Check for short (both pins on same net)
198
+ if (posPin?.netId && posPin.netId === negPin?.netId) {
199
+ issues.push(createIssue(erc_1.ErcCode.VOLTAGE_SOURCE_SHORT, [vs.id], `${vs.designator || vs.id} has both terminals on same net`));
200
+ }
201
+ }
202
+ // Check for parallel voltage sources with different values
203
+ const netVoltages = new Map();
204
+ for (const vs of voltageSources) {
205
+ const posPin = vs.pins.find((p) => p.pinId === '+');
206
+ const negPin = vs.pins.find((p) => p.pinId === '-');
207
+ // Only check DC sources
208
+ if (vs.value && posPin?.netId && negPin?.netId) {
209
+ const key = `${posPin.netId}:${negPin.netId}`;
210
+ const reverseKey = `${negPin.netId}:${posPin.netId}`;
211
+ const existing = netVoltages.get(key) || netVoltages.get(reverseKey) || [];
212
+ existing.push({ source: vs, value: vs.value });
213
+ netVoltages.set(key, existing);
214
+ }
215
+ }
216
+ for (const [, sources] of netVoltages) {
217
+ if (sources.length > 1) {
218
+ const values = sources.map((s) => s.value);
219
+ const uniqueValues = new Set(values);
220
+ if (uniqueValues.size > 1) {
221
+ issues.push(createIssue(erc_1.ErcCode.PARALLEL_VOLTAGE_SOURCES, sources.map((s) => s.source.id), `Conflicting values: ${values.join(', ')}`));
222
+ }
223
+ }
224
+ }
225
+ return issues;
226
+ }
227
+ /**
228
+ * Check net connections
229
+ */
230
+ function checkNetConnections(circuit) {
231
+ const issues = [];
232
+ // Build set of nets referenced by components
233
+ const referencedNets = new Set();
234
+ for (const component of circuit.components) {
235
+ for (const pin of component.pins) {
236
+ if (pin.netId) {
237
+ referencedNets.add(pin.netId);
238
+ }
239
+ }
240
+ }
241
+ // Check for defined but unreferenced nets
242
+ for (const net of circuit.nets) {
243
+ if (!referencedNets.has(net.id) && !net.isGround && net.id !== '0') {
244
+ issues.push(createIssue(erc_1.ErcCode.UNCONNECTED_NET, [net.id], `Net "${net.name || net.id}"`));
245
+ }
246
+ }
247
+ return issues;
248
+ }
249
+ /**
250
+ * Check for active sources
251
+ */
252
+ function checkActiveSources(circuit) {
253
+ const issues = [];
254
+ const hasActiveSources = circuit.components.some((c) => ACTIVE_SOURCES.includes(c.type));
255
+ if (!hasActiveSources && circuit.components.length > 0) {
256
+ issues.push(createIssue(erc_1.ErcCode.NO_ACTIVE_COMPONENTS, []));
257
+ }
258
+ return issues;
259
+ }
260
+ /**
261
+ * Quick check - returns true if circuit passes basic ERC
262
+ */
263
+ function quickCheck(circuit) {
264
+ const result = runErc(circuit);
265
+ return result.passed;
266
+ }
267
+ //# sourceMappingURL=checker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checker.js","sourceRoot":"","sources":["../../src/erc/checker.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * ERC (Electrical Rule Check) Error Codes
3
+ * Re-exports from types and provides descriptions
4
+ */
5
+ import { ErcCode, ErcSeverity } from '../types/erc';
6
+ export { ErcCode, ErcSeverity };
7
+ /**
8
+ * ERC code descriptions for user-friendly messages
9
+ */
10
+ export declare const ERC_DESCRIPTIONS: Record<ErcCode, string>;
11
+ /**
12
+ * Default severities for each ERC code
13
+ */
14
+ export declare const ERC_SEVERITIES: Record<ErcCode, ErcSeverity>;
15
+ //# sourceMappingURL=codes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codes.d.ts","sourceRoot":"","sources":["../../src/erc/codes.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGpD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;AAEhC;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAepD,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,EAAE,WAAW,CAevD,CAAC"}
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ERC_SEVERITIES = exports.ERC_DESCRIPTIONS = exports.ErcCode = void 0;
4
+ /**
5
+ * ERC (Electrical Rule Check) Error Codes
6
+ * Re-exports from types and provides descriptions
7
+ */
8
+ const erc_1 = require("../types/erc");
9
+ Object.defineProperty(exports, "ErcCode", { enumerable: true, get: function () { return erc_1.ErcCode; } });
10
+ /**
11
+ * ERC code descriptions for user-friendly messages
12
+ */
13
+ exports.ERC_DESCRIPTIONS = {
14
+ [erc_1.ErcCode.NO_GROUND]: 'Circuit has no ground reference (node 0)',
15
+ [erc_1.ErcCode.MULTIPLE_GROUNDS]: 'Circuit has multiple ground components on different nets',
16
+ [erc_1.ErcCode.FLOATING_NODE]: 'Node is not connected to any power or ground path',
17
+ [erc_1.ErcCode.FLOATING_INPUT]: 'Component input pin is floating',
18
+ [erc_1.ErcCode.VOLTAGE_SOURCE_SHORT]: 'Voltage source output is shorted to ground',
19
+ [erc_1.ErcCode.PARALLEL_VOLTAGE_SOURCES]: 'Parallel voltage sources with different values',
20
+ [erc_1.ErcCode.MISSING_VALUE]: 'Component is missing required value',
21
+ [erc_1.ErcCode.INVALID_VALUE]: 'Component has invalid or unparseable value',
22
+ [erc_1.ErcCode.PIN_COUNT_MISMATCH]: 'Component has incorrect number of pins for its type',
23
+ [erc_1.ErcCode.MISSING_MODEL]: 'Component requires a model but none specified',
24
+ [erc_1.ErcCode.UNCONNECTED_NET]: 'Net defined but not connected to any components',
25
+ [erc_1.ErcCode.NET_HAS_SINGLE_PIN]: 'Net has only one pin connection (dead end)',
26
+ [erc_1.ErcCode.EMPTY_CIRCUIT]: 'Circuit contains no components',
27
+ [erc_1.ErcCode.NO_ACTIVE_COMPONENTS]: 'Circuit has no active sources or inputs',
28
+ };
29
+ /**
30
+ * Default severities for each ERC code
31
+ */
32
+ exports.ERC_SEVERITIES = {
33
+ [erc_1.ErcCode.NO_GROUND]: 'error',
34
+ [erc_1.ErcCode.MULTIPLE_GROUNDS]: 'warning',
35
+ [erc_1.ErcCode.FLOATING_NODE]: 'warning',
36
+ [erc_1.ErcCode.FLOATING_INPUT]: 'warning',
37
+ [erc_1.ErcCode.VOLTAGE_SOURCE_SHORT]: 'error',
38
+ [erc_1.ErcCode.PARALLEL_VOLTAGE_SOURCES]: 'error',
39
+ [erc_1.ErcCode.MISSING_VALUE]: 'error',
40
+ [erc_1.ErcCode.INVALID_VALUE]: 'error',
41
+ [erc_1.ErcCode.PIN_COUNT_MISMATCH]: 'error',
42
+ [erc_1.ErcCode.MISSING_MODEL]: 'warning',
43
+ [erc_1.ErcCode.UNCONNECTED_NET]: 'info',
44
+ [erc_1.ErcCode.NET_HAS_SINGLE_PIN]: 'warning',
45
+ [erc_1.ErcCode.EMPTY_CIRCUIT]: 'error',
46
+ [erc_1.ErcCode.NO_ACTIVE_COMPONENTS]: 'warning',
47
+ };
48
+ //# sourceMappingURL=codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codes.js","sourceRoot":"","sources":["../../src/erc/codes.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACH,sCAAoD;AAG3C,wFAHA,aAAO,OAGA;AAEhB;;GAEG;AACU,QAAA,gBAAgB,GAA4B;IACrD,CAAC,aAAO,CAAC,SAAS,CAAC,EAAE,0CAA0C;IAC/D,CAAC,aAAO,CAAC,gBAAgB,CAAC,EAAE,0DAA0D;IACtF,CAAC,aAAO,CAAC,aAAa,CAAC,EAAE,mDAAmD;IAC5E,CAAC,aAAO,CAAC,cAAc,CAAC,EAAE,iCAAiC;IAC3D,CAAC,aAAO,CAAC,oBAAoB,CAAC,EAAE,4CAA4C;IAC5E,CAAC,aAAO,CAAC,wBAAwB,CAAC,EAAE,gDAAgD;IACpF,CAAC,aAAO,CAAC,aAAa,CAAC,EAAE,qCAAqC;IAC9D,CAAC,aAAO,CAAC,aAAa,CAAC,EAAE,4CAA4C;IACrE,CAAC,aAAO,CAAC,kBAAkB,CAAC,EAAE,qDAAqD;IACnF,CAAC,aAAO,CAAC,aAAa,CAAC,EAAE,+CAA+C;IACxE,CAAC,aAAO,CAAC,eAAe,CAAC,EAAE,iDAAiD;IAC5E,CAAC,aAAO,CAAC,kBAAkB,CAAC,EAAE,4CAA4C;IAC1E,CAAC,aAAO,CAAC,aAAa,CAAC,EAAE,gCAAgC;IACzD,CAAC,aAAO,CAAC,oBAAoB,CAAC,EAAE,yCAAyC;CAC5E,CAAC;AAEF;;GAEG;AACU,QAAA,cAAc,GAAiC;IACxD,CAAC,aAAO,CAAC,SAAS,CAAC,EAAE,OAAO;IAC5B,CAAC,aAAO,CAAC,gBAAgB,CAAC,EAAE,SAAS;IACrC,CAAC,aAAO,CAAC,aAAa,CAAC,EAAE,SAAS;IAClC,CAAC,aAAO,CAAC,cAAc,CAAC,EAAE,SAAS;IACnC,CAAC,aAAO,CAAC,oBAAoB,CAAC,EAAE,OAAO;IACvC,CAAC,aAAO,CAAC,wBAAwB,CAAC,EAAE,OAAO;IAC3C,CAAC,aAAO,CAAC,aAAa,CAAC,EAAE,OAAO;IAChC,CAAC,aAAO,CAAC,aAAa,CAAC,EAAE,OAAO;IAChC,CAAC,aAAO,CAAC,kBAAkB,CAAC,EAAE,OAAO;IACrC,CAAC,aAAO,CAAC,aAAa,CAAC,EAAE,SAAS;IAClC,CAAC,aAAO,CAAC,eAAe,CAAC,EAAE,MAAM;IACjC,CAAC,aAAO,CAAC,kBAAkB,CAAC,EAAE,SAAS;IACvC,CAAC,aAAO,CAAC,aAAa,CAAC,EAAE,OAAO;IAChC,CAAC,aAAO,CAAC,oBAAoB,CAAC,EAAE,SAAS;CAC5C,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * ERC Module Exports
3
+ */
4
+ export { runErc, quickCheck } from './checker';
5
+ export { ErcCode, ErcSeverity, ERC_DESCRIPTIONS, ERC_SEVERITIES } from './codes';
6
+ export type { ErcResult, ErcIssue, ErcConfig } from '../types/erc';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/erc/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACjF,YAAY,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ERC_SEVERITIES = exports.ERC_DESCRIPTIONS = exports.ErcCode = exports.quickCheck = exports.runErc = void 0;
4
+ /**
5
+ * ERC Module Exports
6
+ */
7
+ var checker_1 = require("./checker");
8
+ Object.defineProperty(exports, "runErc", { enumerable: true, get: function () { return checker_1.runErc; } });
9
+ Object.defineProperty(exports, "quickCheck", { enumerable: true, get: function () { return checker_1.quickCheck; } });
10
+ var codes_1 = require("./codes");
11
+ Object.defineProperty(exports, "ErcCode", { enumerable: true, get: function () { return codes_1.ErcCode; } });
12
+ Object.defineProperty(exports, "ERC_DESCRIPTIONS", { enumerable: true, get: function () { return codes_1.ERC_DESCRIPTIONS; } });
13
+ Object.defineProperty(exports, "ERC_SEVERITIES", { enumerable: true, get: function () { return codes_1.ERC_SEVERITIES; } });
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/erc/index.ts"],"names":[],"mappings":";;;AAAA;;GAEG;AACH,qCAA+C;AAAtC,iGAAA,MAAM,OAAA;AAAE,qGAAA,UAAU,OAAA;AAC3B,iCAAiF;AAAxE,gGAAA,OAAO,OAAA;AAAe,yGAAA,gBAAgB,OAAA;AAAE,uGAAA,cAAc,OAAA"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * EDA-Core Library
3
+ * Core EDA functionality for circuit manipulation, netlist generation, and simulation output parsing
4
+ */
5
+ export type { CircuitJson, Component, Net, PinConnection, ComponentType, CircuitMetadata, UiJson, Viewport, Position, Wire, } from './types/circuit';
6
+ export { COMPONENT_PINS, SPICE_PREFIXES } from './types/circuit';
7
+ export type { AnalysisConfig, TranAnalysis, AcAnalysis, DcAnalysis, OpAnalysis, } from './types/analysis';
8
+ export type { SimulationResult, DataSeries, DataPoint, ResultMeta, } from './types/simulation';
9
+ export type { ErcResult, ErcIssue, ErcConfig, } from './types/erc';
10
+ export { ErcCode } from './types/erc';
11
+ export type { ErcSeverity } from './types/erc';
12
+ export { CircuitJsonSchema, ComponentSchema, NetSchema, ComponentTypeSchema, PinConnectionSchema, CircuitMetadataSchema, ViewportSchema, PositionSchema, WireSchema, UiJsonSchema, validateCircuitJson, safeValidateCircuitJson, validateUiJson, type CircuitJsonInput, type CircuitJsonOutput, type ComponentInput, type NetInput, type UiJsonInput, } from './schemas/circuit.schema';
13
+ export { AnalysisConfigSchema, TranAnalysisSchema, AcAnalysisSchema, DcAnalysisSchema, OpAnalysisSchema, SpiceValueSchema, ProbeSchema, SimulationRequestSchema, validateAnalysisConfig, safeValidateAnalysisConfig, validateSimulationRequest, type AnalysisConfigInput, type AnalysisConfigOutput, type SimulationRequestInput, } from './schemas/analysis.schema';
14
+ export { generateNetlist, getNodeNames, validateNetlist, type NetlistOptions, } from './netlist';
15
+ export { sanitizeNodeName, validateIncludePaths, validateIncludePath, sanitizeNetlist, sanitizeValue, validateDesignator, hasShellMetacharacters, SecurityError, } from './netlist';
16
+ export { parseCsv, parseRawAscii, detectOutputFormat, parseSimulationOutput, } from './parser';
17
+ export { parseNetlist, extractProbes, type NetlistParseResult, } from './parser';
18
+ export { runErc, quickCheck, ERC_DESCRIPTIONS, ERC_SEVERITIES, } from './erc';
19
+ export { parseSpiceValue, formatSpiceValue, normalizeValue, valuesEqual, parseTimeValue, parseFrequencyValue, type ParsedValue, } from './utils';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,YAAY,EACR,WAAW,EACX,SAAS,EACT,GAAG,EACH,aAAa,EACb,aAAa,EACb,eAAe,EACf,MAAM,EACN,QAAQ,EACR,QAAQ,EACR,IAAI,GACP,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjE,YAAY,EACR,cAAc,EACd,YAAY,EACZ,UAAU,EACV,UAAU,EACV,UAAU,GACb,MAAM,kBAAkB,CAAC;AAE1B,YAAY,EACR,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,UAAU,GACb,MAAM,oBAAoB,CAAC;AAE5B,YAAY,EACR,SAAS,EACT,QAAQ,EACR,SAAS,GACZ,MAAM,aAAa,CAAC;AAErB,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EACH,iBAAiB,EACjB,eAAe,EACf,SAAS,EACT,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,cAAc,EACd,cAAc,EACd,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,QAAQ,EACb,KAAK,WAAW,GACnB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EACH,oBAAoB,EACpB,kBAAkB,EAClB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EACX,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,EAC1B,yBAAyB,EACzB,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,GAC9B,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EACH,eAAe,EACf,YAAY,EACZ,eAAe,EACf,KAAK,cAAc,GACtB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACH,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EACH,QAAQ,EACR,aAAa,EACb,kBAAkB,EAClB,qBAAqB,GACxB,MAAM,UAAU,CAAC;AAElB,OAAO,EACH,YAAY,EACZ,aAAa,EACb,KAAK,kBAAkB,GAC1B,MAAM,UAAU,CAAC;AAGlB,OAAO,EACH,MAAM,EACN,UAAU,EACV,gBAAgB,EAChB,cAAc,GACjB,MAAM,OAAO,CAAC;AAGf,OAAO,EACH,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,KAAK,WAAW,GACnB,MAAM,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ /**
3
+ * EDA-Core Library
4
+ * Core EDA functionality for circuit manipulation, netlist generation, and simulation output parsing
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.formatSpiceValue = exports.parseSpiceValue = exports.ERC_SEVERITIES = exports.ERC_DESCRIPTIONS = exports.quickCheck = exports.runErc = exports.extractProbes = exports.parseNetlist = exports.parseSimulationOutput = exports.detectOutputFormat = exports.parseRawAscii = exports.parseCsv = exports.SecurityError = exports.hasShellMetacharacters = exports.validateDesignator = exports.sanitizeValue = exports.sanitizeNetlist = exports.validateIncludePath = exports.validateIncludePaths = exports.sanitizeNodeName = exports.validateNetlist = exports.getNodeNames = exports.generateNetlist = exports.validateSimulationRequest = exports.safeValidateAnalysisConfig = exports.validateAnalysisConfig = exports.SimulationRequestSchema = exports.ProbeSchema = exports.SpiceValueSchema = exports.OpAnalysisSchema = exports.DcAnalysisSchema = exports.AcAnalysisSchema = exports.TranAnalysisSchema = exports.AnalysisConfigSchema = exports.validateUiJson = exports.safeValidateCircuitJson = exports.validateCircuitJson = exports.UiJsonSchema = exports.WireSchema = exports.PositionSchema = exports.ViewportSchema = exports.CircuitMetadataSchema = exports.PinConnectionSchema = exports.ComponentTypeSchema = exports.NetSchema = exports.ComponentSchema = exports.CircuitJsonSchema = exports.ErcCode = exports.SPICE_PREFIXES = exports.COMPONENT_PINS = void 0;
8
+ exports.parseFrequencyValue = exports.parseTimeValue = exports.valuesEqual = exports.normalizeValue = void 0;
9
+ var circuit_1 = require("./types/circuit");
10
+ Object.defineProperty(exports, "COMPONENT_PINS", { enumerable: true, get: function () { return circuit_1.COMPONENT_PINS; } });
11
+ Object.defineProperty(exports, "SPICE_PREFIXES", { enumerable: true, get: function () { return circuit_1.SPICE_PREFIXES; } });
12
+ var erc_1 = require("./types/erc");
13
+ Object.defineProperty(exports, "ErcCode", { enumerable: true, get: function () { return erc_1.ErcCode; } });
14
+ // Schemas
15
+ var circuit_schema_1 = require("./schemas/circuit.schema");
16
+ Object.defineProperty(exports, "CircuitJsonSchema", { enumerable: true, get: function () { return circuit_schema_1.CircuitJsonSchema; } });
17
+ Object.defineProperty(exports, "ComponentSchema", { enumerable: true, get: function () { return circuit_schema_1.ComponentSchema; } });
18
+ Object.defineProperty(exports, "NetSchema", { enumerable: true, get: function () { return circuit_schema_1.NetSchema; } });
19
+ Object.defineProperty(exports, "ComponentTypeSchema", { enumerable: true, get: function () { return circuit_schema_1.ComponentTypeSchema; } });
20
+ Object.defineProperty(exports, "PinConnectionSchema", { enumerable: true, get: function () { return circuit_schema_1.PinConnectionSchema; } });
21
+ Object.defineProperty(exports, "CircuitMetadataSchema", { enumerable: true, get: function () { return circuit_schema_1.CircuitMetadataSchema; } });
22
+ Object.defineProperty(exports, "ViewportSchema", { enumerable: true, get: function () { return circuit_schema_1.ViewportSchema; } });
23
+ Object.defineProperty(exports, "PositionSchema", { enumerable: true, get: function () { return circuit_schema_1.PositionSchema; } });
24
+ Object.defineProperty(exports, "WireSchema", { enumerable: true, get: function () { return circuit_schema_1.WireSchema; } });
25
+ Object.defineProperty(exports, "UiJsonSchema", { enumerable: true, get: function () { return circuit_schema_1.UiJsonSchema; } });
26
+ Object.defineProperty(exports, "validateCircuitJson", { enumerable: true, get: function () { return circuit_schema_1.validateCircuitJson; } });
27
+ Object.defineProperty(exports, "safeValidateCircuitJson", { enumerable: true, get: function () { return circuit_schema_1.safeValidateCircuitJson; } });
28
+ Object.defineProperty(exports, "validateUiJson", { enumerable: true, get: function () { return circuit_schema_1.validateUiJson; } });
29
+ var analysis_schema_1 = require("./schemas/analysis.schema");
30
+ Object.defineProperty(exports, "AnalysisConfigSchema", { enumerable: true, get: function () { return analysis_schema_1.AnalysisConfigSchema; } });
31
+ Object.defineProperty(exports, "TranAnalysisSchema", { enumerable: true, get: function () { return analysis_schema_1.TranAnalysisSchema; } });
32
+ Object.defineProperty(exports, "AcAnalysisSchema", { enumerable: true, get: function () { return analysis_schema_1.AcAnalysisSchema; } });
33
+ Object.defineProperty(exports, "DcAnalysisSchema", { enumerable: true, get: function () { return analysis_schema_1.DcAnalysisSchema; } });
34
+ Object.defineProperty(exports, "OpAnalysisSchema", { enumerable: true, get: function () { return analysis_schema_1.OpAnalysisSchema; } });
35
+ Object.defineProperty(exports, "SpiceValueSchema", { enumerable: true, get: function () { return analysis_schema_1.SpiceValueSchema; } });
36
+ Object.defineProperty(exports, "ProbeSchema", { enumerable: true, get: function () { return analysis_schema_1.ProbeSchema; } });
37
+ Object.defineProperty(exports, "SimulationRequestSchema", { enumerable: true, get: function () { return analysis_schema_1.SimulationRequestSchema; } });
38
+ Object.defineProperty(exports, "validateAnalysisConfig", { enumerable: true, get: function () { return analysis_schema_1.validateAnalysisConfig; } });
39
+ Object.defineProperty(exports, "safeValidateAnalysisConfig", { enumerable: true, get: function () { return analysis_schema_1.safeValidateAnalysisConfig; } });
40
+ Object.defineProperty(exports, "validateSimulationRequest", { enumerable: true, get: function () { return analysis_schema_1.validateSimulationRequest; } });
41
+ // Netlist generation
42
+ var netlist_1 = require("./netlist");
43
+ Object.defineProperty(exports, "generateNetlist", { enumerable: true, get: function () { return netlist_1.generateNetlist; } });
44
+ Object.defineProperty(exports, "getNodeNames", { enumerable: true, get: function () { return netlist_1.getNodeNames; } });
45
+ Object.defineProperty(exports, "validateNetlist", { enumerable: true, get: function () { return netlist_1.validateNetlist; } });
46
+ // Netlist sanitization
47
+ var netlist_2 = require("./netlist");
48
+ Object.defineProperty(exports, "sanitizeNodeName", { enumerable: true, get: function () { return netlist_2.sanitizeNodeName; } });
49
+ Object.defineProperty(exports, "validateIncludePaths", { enumerable: true, get: function () { return netlist_2.validateIncludePaths; } });
50
+ Object.defineProperty(exports, "validateIncludePath", { enumerable: true, get: function () { return netlist_2.validateIncludePath; } });
51
+ Object.defineProperty(exports, "sanitizeNetlist", { enumerable: true, get: function () { return netlist_2.sanitizeNetlist; } });
52
+ Object.defineProperty(exports, "sanitizeValue", { enumerable: true, get: function () { return netlist_2.sanitizeValue; } });
53
+ Object.defineProperty(exports, "validateDesignator", { enumerable: true, get: function () { return netlist_2.validateDesignator; } });
54
+ Object.defineProperty(exports, "hasShellMetacharacters", { enumerable: true, get: function () { return netlist_2.hasShellMetacharacters; } });
55
+ Object.defineProperty(exports, "SecurityError", { enumerable: true, get: function () { return netlist_2.SecurityError; } });
56
+ // Parsing
57
+ var parser_1 = require("./parser");
58
+ Object.defineProperty(exports, "parseCsv", { enumerable: true, get: function () { return parser_1.parseCsv; } });
59
+ Object.defineProperty(exports, "parseRawAscii", { enumerable: true, get: function () { return parser_1.parseRawAscii; } });
60
+ Object.defineProperty(exports, "detectOutputFormat", { enumerable: true, get: function () { return parser_1.detectOutputFormat; } });
61
+ Object.defineProperty(exports, "parseSimulationOutput", { enumerable: true, get: function () { return parser_1.parseSimulationOutput; } });
62
+ var parser_2 = require("./parser");
63
+ Object.defineProperty(exports, "parseNetlist", { enumerable: true, get: function () { return parser_2.parseNetlist; } });
64
+ Object.defineProperty(exports, "extractProbes", { enumerable: true, get: function () { return parser_2.extractProbes; } });
65
+ // ERC
66
+ var erc_2 = require("./erc");
67
+ Object.defineProperty(exports, "runErc", { enumerable: true, get: function () { return erc_2.runErc; } });
68
+ Object.defineProperty(exports, "quickCheck", { enumerable: true, get: function () { return erc_2.quickCheck; } });
69
+ Object.defineProperty(exports, "ERC_DESCRIPTIONS", { enumerable: true, get: function () { return erc_2.ERC_DESCRIPTIONS; } });
70
+ Object.defineProperty(exports, "ERC_SEVERITIES", { enumerable: true, get: function () { return erc_2.ERC_SEVERITIES; } });
71
+ // Utilities
72
+ var utils_1 = require("./utils");
73
+ Object.defineProperty(exports, "parseSpiceValue", { enumerable: true, get: function () { return utils_1.parseSpiceValue; } });
74
+ Object.defineProperty(exports, "formatSpiceValue", { enumerable: true, get: function () { return utils_1.formatSpiceValue; } });
75
+ Object.defineProperty(exports, "normalizeValue", { enumerable: true, get: function () { return utils_1.normalizeValue; } });
76
+ Object.defineProperty(exports, "valuesEqual", { enumerable: true, get: function () { return utils_1.valuesEqual; } });
77
+ Object.defineProperty(exports, "parseTimeValue", { enumerable: true, get: function () { return utils_1.parseTimeValue; } });
78
+ Object.defineProperty(exports, "parseFrequencyValue", { enumerable: true, get: function () { return utils_1.parseFrequencyValue; } });
79
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;AAgBH,2CAAiE;AAAxD,yGAAA,cAAc,OAAA;AAAE,yGAAA,cAAc,OAAA;AAuBvC,mCAAsC;AAA7B,8FAAA,OAAO,OAAA;AAGhB,UAAU;AACV,2DAmBkC;AAlB9B,mHAAA,iBAAiB,OAAA;AACjB,iHAAA,eAAe,OAAA;AACf,2GAAA,SAAS,OAAA;AACT,qHAAA,mBAAmB,OAAA;AACnB,qHAAA,mBAAmB,OAAA;AACnB,uHAAA,qBAAqB,OAAA;AACrB,gHAAA,cAAc,OAAA;AACd,gHAAA,cAAc,OAAA;AACd,4GAAA,UAAU,OAAA;AACV,8GAAA,YAAY,OAAA;AACZ,qHAAA,mBAAmB,OAAA;AACnB,yHAAA,uBAAuB,OAAA;AACvB,gHAAA,cAAc,OAAA;AAQlB,6DAemC;AAd/B,uHAAA,oBAAoB,OAAA;AACpB,qHAAA,kBAAkB,OAAA;AAClB,mHAAA,gBAAgB,OAAA;AAChB,mHAAA,gBAAgB,OAAA;AAChB,mHAAA,gBAAgB,OAAA;AAChB,mHAAA,gBAAgB,OAAA;AAChB,8GAAA,WAAW,OAAA;AACX,0HAAA,uBAAuB,OAAA;AACvB,yHAAA,sBAAsB,OAAA;AACtB,6HAAA,0BAA0B,OAAA;AAC1B,4HAAA,yBAAyB,OAAA;AAM7B,qBAAqB;AACrB,qCAKmB;AAJf,0GAAA,eAAe,OAAA;AACf,uGAAA,YAAY,OAAA;AACZ,0GAAA,eAAe,OAAA;AAInB,uBAAuB;AACvB,qCASmB;AARf,2GAAA,gBAAgB,OAAA;AAChB,+GAAA,oBAAoB,OAAA;AACpB,8GAAA,mBAAmB,OAAA;AACnB,0GAAA,eAAe,OAAA;AACf,wGAAA,aAAa,OAAA;AACb,6GAAA,kBAAkB,OAAA;AAClB,iHAAA,sBAAsB,OAAA;AACtB,wGAAA,aAAa,OAAA;AAGjB,UAAU;AACV,mCAKkB;AAJd,kGAAA,QAAQ,OAAA;AACR,uGAAA,aAAa,OAAA;AACb,4GAAA,kBAAkB,OAAA;AAClB,+GAAA,qBAAqB,OAAA;AAGzB,mCAIkB;AAHd,sGAAA,YAAY,OAAA;AACZ,uGAAA,aAAa,OAAA;AAIjB,MAAM;AACN,6BAKe;AAJX,6FAAA,MAAM,OAAA;AACN,iGAAA,UAAU,OAAA;AACV,uGAAA,gBAAgB,OAAA;AAChB,qGAAA,cAAc,OAAA;AAGlB,YAAY;AACZ,iCAQiB;AAPb,wGAAA,eAAe,OAAA;AACf,yGAAA,gBAAgB,OAAA;AAChB,uGAAA,cAAc,OAAA;AACd,oGAAA,WAAW,OAAA;AACX,uGAAA,cAAc,OAAA;AACd,4GAAA,mBAAmB,OAAA"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * SPICE Netlist Generator
3
+ * Converts CircuitJson to ngspice-compatible netlist format
4
+ */
5
+ import type { CircuitJson } from '../types/circuit';
6
+ import type { AnalysisConfig } from '../types/analysis';
7
+ /**
8
+ * Netlist generation options
9
+ */
10
+ export interface NetlistOptions {
11
+ title?: string;
12
+ probes?: string[];
13
+ includeFiles?: string[];
14
+ outputFormat?: 'csv' | 'raw';
15
+ jobDir?: string;
16
+ }
17
+ /**
18
+ * Generate a complete SPICE netlist from circuit JSON
19
+ */
20
+ export declare function generateNetlist(circuit: CircuitJson, analysis: AnalysisConfig, options?: NetlistOptions): string;
21
+ /**
22
+ * Get all unique node names from a circuit
23
+ */
24
+ export declare function getNodeNames(circuit: CircuitJson): string[];
25
+ /**
26
+ * Validate that a netlist is syntactically correct (basic check)
27
+ */
28
+ export declare function validateNetlist(netlist: string): {
29
+ valid: boolean;
30
+ errors: string[];
31
+ };
32
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/netlist/generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAkB,MAAM,kBAAkB,CAAC;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKxD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAOD;;GAEG;AACH,wBAAgB,eAAe,CAC3B,OAAO,EAAE,WAAW,EACpB,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,cAAmB,GAC7B,MAAM,CAoER;AAuFD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,EAAE,CAG3D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAyCrF"}