@vessel-dsp/core 0.5.0 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/dist/editor/commands.d.ts +48 -0
- package/dist/editor/commands.d.ts.map +1 -0
- package/{src/editor/commands.ts → dist/editor/commands.js} +44 -91
- package/dist/editor/commands.js.map +1 -0
- package/dist/editor/factory.d.ts +10 -0
- package/dist/editor/factory.d.ts.map +1 -0
- package/{src/editor/factory.ts → dist/editor/factory.js} +11 -27
- package/dist/editor/factory.js.map +1 -0
- package/dist/editor/history.d.ts +29 -0
- package/dist/editor/history.d.ts.map +1 -0
- package/{src/editor/history.ts → dist/editor/history.js} +12 -42
- package/dist/editor/history.js.map +1 -0
- package/{src/editor/index.ts → dist/editor/index.d.ts} +1 -3
- package/dist/editor/index.d.ts.map +1 -0
- package/dist/editor/index.js +5 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/editor/layout.d.ts +8 -0
- package/dist/editor/layout.d.ts.map +1 -0
- package/{src/editor/layout.ts → dist/editor/layout.js} +36 -90
- package/dist/editor/layout.js.map +1 -0
- package/dist/formats/circuit-json/serializer.d.ts +86 -0
- package/dist/formats/circuit-json/serializer.d.ts.map +1 -0
- package/{src/formats/circuit-json/serializer.ts → dist/formats/circuit-json/serializer.js} +114 -414
- package/dist/formats/circuit-json/serializer.js.map +1 -0
- package/dist/formats/document.d.ts +64 -0
- package/dist/formats/document.d.ts.map +1 -0
- package/dist/formats/document.js +300 -0
- package/dist/formats/document.js.map +1 -0
- package/dist/formats/interchange/parser.d.ts +3 -0
- package/dist/formats/interchange/parser.d.ts.map +1 -0
- package/{src/formats/interchange/parser.ts → dist/formats/interchange/parser.js} +651 -299
- package/dist/formats/interchange/parser.js.map +1 -0
- package/dist/formats/interchange/serializer.d.ts +9 -0
- package/dist/formats/interchange/serializer.d.ts.map +1 -0
- package/{src/formats/interchange/serializer.ts → dist/formats/interchange/serializer.js} +151 -158
- package/dist/formats/interchange/serializer.js.map +1 -0
- package/dist/formats/ltspice/catalog.d.ts +19 -0
- package/dist/formats/ltspice/catalog.d.ts.map +1 -0
- package/{src/formats/ltspice/catalog.ts → dist/formats/ltspice/catalog.js} +18 -52
- package/dist/formats/ltspice/catalog.js.map +1 -0
- package/dist/formats/ltspice/encoding.d.ts +2 -0
- package/dist/formats/ltspice/encoding.d.ts.map +1 -0
- package/{src/formats/ltspice/encoding.ts → dist/formats/ltspice/encoding.js} +17 -41
- package/dist/formats/ltspice/encoding.js.map +1 -0
- package/dist/formats/ltspice/parser.d.ts +3 -0
- package/dist/formats/ltspice/parser.d.ts.map +1 -0
- package/{src/formats/ltspice/parser.ts → dist/formats/ltspice/parser.js} +39 -141
- package/dist/formats/ltspice/parser.js.map +1 -0
- package/dist/formats/ltspice/serializer.d.ts +7 -0
- package/dist/formats/ltspice/serializer.d.ts.map +1 -0
- package/{src/formats/ltspice/serializer.ts → dist/formats/ltspice/serializer.js} +18 -45
- package/dist/formats/ltspice/serializer.js.map +1 -0
- package/dist/formats/schx/catalog.d.ts +19 -0
- package/dist/formats/schx/catalog.d.ts.map +1 -0
- package/{src/formats/schx/catalog.ts → dist/formats/schx/catalog.js} +48 -101
- package/dist/formats/schx/catalog.js.map +1 -0
- package/dist/formats/schx/parser.d.ts +3 -0
- package/dist/formats/schx/parser.d.ts.map +1 -0
- package/{src/formats/schx/parser.ts → dist/formats/schx/parser.js} +31 -86
- package/dist/formats/schx/parser.js.map +1 -0
- package/dist/formats/schx/runtime-descriptors.d.ts +3 -0
- package/dist/formats/schx/runtime-descriptors.d.ts.map +1 -0
- package/{src/formats/schx/runtime-descriptors.ts → dist/formats/schx/runtime-descriptors.js} +36 -123
- package/dist/formats/schx/runtime-descriptors.js.map +1 -0
- package/dist/formats/schx/serializer.d.ts +5 -0
- package/dist/formats/schx/serializer.d.ts.map +1 -0
- package/{src/formats/schx/serializer.ts → dist/formats/schx/serializer.js} +17 -42
- package/dist/formats/schx/serializer.js.map +1 -0
- package/dist/formats/schx/transforms.d.ts +4 -0
- package/dist/formats/schx/transforms.d.ts.map +1 -0
- package/{src/formats/schx/transforms.ts → dist/formats/schx/transforms.js} +6 -10
- package/dist/formats/schx/transforms.js.map +1 -0
- package/dist/formats/spice/parser.d.ts +3 -0
- package/dist/formats/spice/parser.d.ts.map +1 -0
- package/{src/formats/spice/parser.ts → dist/formats/spice/parser.js} +50 -96
- package/dist/formats/spice/parser.js.map +1 -0
- package/dist/formats/spice/serializer.d.ts +3 -0
- package/dist/formats/spice/serializer.d.ts.map +1 -0
- package/{src/formats/spice/serializer.ts → dist/formats/spice/serializer.js} +8 -13
- package/dist/formats/spice/serializer.js.map +1 -0
- package/dist/index.d.ts +47 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +32 -0
- package/dist/index.js.map +1 -0
- package/dist/model/connectivity.d.ts +16 -0
- package/dist/model/connectivity.d.ts.map +1 -0
- package/{src/model/connectivity.ts → dist/model/connectivity.js} +28 -63
- package/dist/model/connectivity.js.map +1 -0
- package/dist/model/netlist.d.ts +24 -0
- package/dist/model/netlist.d.ts.map +1 -0
- package/{src/model/netlist.ts → dist/model/netlist.js} +42 -110
- package/dist/model/netlist.js.map +1 -0
- package/dist/model/properties.d.ts +9 -0
- package/dist/model/properties.d.ts.map +1 -0
- package/{src/model/properties.ts → dist/model/properties.js} +10 -18
- package/dist/model/properties.js.map +1 -0
- package/dist/model/quantity.d.ts +3 -0
- package/dist/model/quantity.d.ts.map +1 -0
- package/{src/model/quantity.ts → dist/model/quantity.js} +7 -30
- package/dist/model/quantity.js.map +1 -0
- package/dist/model/types.d.ts +431 -0
- package/dist/model/types.d.ts.map +1 -0
- package/dist/model/types.js +10 -0
- package/dist/model/types.js.map +1 -0
- package/dist/model/validation.d.ts +32 -0
- package/dist/model/validation.d.ts.map +1 -0
- package/{src/model/validation.ts → dist/model/validation.js} +420 -323
- package/dist/model/validation.js.map +1 -0
- package/dist/model/wires.d.ts +3 -0
- package/dist/model/wires.d.ts.map +1 -0
- package/{src/model/wires.ts → dist/model/wires.js} +10 -16
- package/dist/model/wires.js.map +1 -0
- package/dist/panel/extract.d.ts +5 -0
- package/dist/panel/extract.d.ts.map +1 -0
- package/{src/panel/extract.ts → dist/panel/extract.js} +146 -235
- package/dist/panel/extract.js.map +1 -0
- package/dist/panel/index.d.ts +6 -0
- package/dist/panel/index.d.ts.map +1 -0
- package/dist/panel/index.js +5 -0
- package/dist/panel/index.js.map +1 -0
- package/dist/panel/knobs.d.ts +7 -0
- package/dist/panel/knobs.d.ts.map +1 -0
- package/{src/panel/knobs.ts → dist/panel/knobs.js} +7 -18
- package/dist/panel/knobs.js.map +1 -0
- package/dist/panel/protocol.d.ts +9 -0
- package/dist/panel/protocol.d.ts.map +1 -0
- package/{src/panel/protocol.ts → dist/panel/protocol.js} +10 -26
- package/dist/panel/protocol.js.map +1 -0
- package/{src/panel/types.ts → dist/panel/types.d.ts} +50 -89
- package/dist/panel/types.d.ts.map +1 -0
- package/dist/panel/types.js +2 -0
- package/dist/panel/types.js.map +1 -0
- package/dist/preview/bounds.d.ts +12 -0
- package/dist/preview/bounds.d.ts.map +1 -0
- package/{src/preview/bounds.ts → dist/preview/bounds.js} +15 -29
- package/dist/preview/bounds.js.map +1 -0
- package/dist/preview/box-layout.d.ts +4 -0
- package/dist/preview/box-layout.d.ts.map +1 -0
- package/{src/preview/box-layout.ts → dist/preview/box-layout.js} +2 -6
- package/dist/preview/box-layout.js.map +1 -0
- package/dist/preview/colors.d.ts +3 -0
- package/dist/preview/colors.d.ts.map +1 -0
- package/{src/preview/colors.ts → dist/preview/colors.js} +3 -5
- package/dist/preview/colors.js.map +1 -0
- package/dist/preview/hanging.d.ts +8 -0
- package/dist/preview/hanging.d.ts.map +1 -0
- package/{src/preview/hanging.ts → dist/preview/hanging.js} +9 -28
- package/dist/preview/hanging.js.map +1 -0
- package/dist/preview/junctions.d.ts +3 -0
- package/dist/preview/junctions.d.ts.map +1 -0
- package/{src/preview/junctions.ts → dist/preview/junctions.js} +9 -24
- package/dist/preview/junctions.js.map +1 -0
- package/dist/preview/label-layout.d.ts +12 -0
- package/dist/preview/label-layout.d.ts.map +1 -0
- package/{src/preview/label-layout.ts → dist/preview/label-layout.js} +15 -36
- package/dist/preview/label-layout.js.map +1 -0
- package/dist/preview/ports.d.ts +17 -0
- package/dist/preview/ports.d.ts.map +1 -0
- package/{src/preview/ports.ts → dist/preview/ports.js} +10 -37
- package/dist/preview/ports.js.map +1 -0
- package/dist/preview/renderable-wires.d.ts +3 -0
- package/dist/preview/renderable-wires.d.ts.map +1 -0
- package/{src/preview/renderable-wires.ts → dist/preview/renderable-wires.js} +12 -29
- package/dist/preview/renderable-wires.js.map +1 -0
- package/dist/preview/routing.d.ts +4 -0
- package/dist/preview/routing.d.ts.map +1 -0
- package/dist/preview/routing.js +13 -0
- package/dist/preview/routing.js.map +1 -0
- package/dist/preview/snap.d.ts +9 -0
- package/dist/preview/snap.d.ts.map +1 -0
- package/{src/preview/snap.ts → dist/preview/snap.js} +9 -31
- package/dist/preview/snap.js.map +1 -0
- package/dist/preview/symbols/svg-content.d.ts +7 -0
- package/dist/preview/symbols/svg-content.d.ts.map +1 -0
- package/{src/preview/symbols/svg-content.ts → dist/preview/symbols/svg-content.js} +3 -6
- package/dist/preview/symbols/svg-content.js.map +1 -0
- package/dist/preview/symbols.d.ts +7 -0
- package/dist/preview/symbols.d.ts.map +1 -0
- package/{src/preview/symbols.ts → dist/preview/symbols.js} +18 -43
- package/dist/preview/symbols.js.map +1 -0
- package/dist/preview/wire-chains.d.ts +4 -0
- package/dist/preview/wire-chains.d.ts.map +1 -0
- package/{src/preview/wire-chains.ts → dist/preview/wire-chains.js} +37 -37
- package/dist/preview/wire-chains.js.map +1 -0
- package/package.json +3 -3
- package/src/formats/document.ts +0 -274
- package/src/index.ts +0 -205
- package/src/model/types.ts +0 -309
- package/src/panel/index.ts +0 -39
- package/src/preview/routing.ts +0 -15
- package/src/preview/symbols/analog-switch.svg +0 -17
- package/src/preview/symbols/battery.svg +0 -16
- package/src/preview/symbols/bbd.svg +0 -21
- package/src/preview/symbols/bjt-npn.svg +0 -16
- package/src/preview/symbols/bjt-pnp.svg +0 -17
- package/src/preview/symbols/capacitor-electrolytic.svg +0 -13
- package/src/preview/symbols/capacitor.svg +0 -12
- package/src/preview/symbols/current-source.svg +0 -14
- package/src/preview/symbols/delay-ic.svg +0 -22
- package/src/preview/symbols/diode-schottky.svg +0 -12
- package/src/preview/symbols/diode-zener.svg +0 -12
- package/src/preview/symbols/diode.svg +0 -13
- package/src/preview/symbols/flipflop.svg +0 -20
- package/src/preview/symbols/ground.svg +0 -12
- package/src/preview/symbols/ic-block.svg +0 -20
- package/src/preview/symbols/ic.svg +0 -19
- package/src/preview/symbols/inductor.svg +0 -11
- package/src/preview/symbols/jack-input.svg +0 -16
- package/src/preview/symbols/jack-output.svg +0 -16
- package/src/preview/symbols/jfet-junction-n.svg +0 -17
- package/src/preview/symbols/jfet-n.svg +0 -17
- package/src/preview/symbols/jfet-p.svg +0 -17
- package/src/preview/symbols/label.svg +0 -8
- package/src/preview/symbols/led.svg +0 -18
- package/src/preview/symbols/mosfet-n.svg +0 -21
- package/src/preview/symbols/mosfet-p.svg +0 -21
- package/src/preview/symbols/named-wire.svg +0 -11
- package/src/preview/symbols/opamp.svg +0 -21
- package/src/preview/symbols/optocoupler.svg +0 -30
- package/src/preview/symbols/ota.svg +0 -20
- package/src/preview/symbols/pentode.svg +0 -25
- package/src/preview/symbols/photoresistor.svg +0 -19
- package/src/preview/symbols/port.svg +0 -8
- package/src/preview/symbols/potentiometer.svg +0 -15
- package/src/preview/symbols/power-amp.svg +0 -20
- package/src/preview/symbols/rail.svg +0 -11
- package/src/preview/symbols/regulator.svg +0 -13
- package/src/preview/symbols/relay.svg +0 -20
- package/src/preview/symbols/resistor.svg +0 -11
- package/src/preview/symbols/switch-3pdt.svg +0 -32
- package/src/preview/symbols/switch-rotary.svg +0 -23
- package/src/preview/symbols/switch-spdt.svg +0 -16
- package/src/preview/symbols/switch-spst.svg +0 -14
- package/src/preview/symbols/switch-toggle.svg +0 -14
- package/src/preview/symbols/transformer.svg +0 -17
- package/src/preview/symbols/triode.svg +0 -17
- package/src/preview/symbols/tube-diode.svg +0 -13
- package/src/preview/symbols/unsupported.svg +0 -8
- package/src/preview/symbols/variable-resistor.svg +0 -13
- package/src/preview/symbols/voltage-source.svg +0 -15
package/src/formats/document.ts
DELETED
|
@@ -1,274 +0,0 @@
|
|
|
1
|
-
import type { CircuitDocument, DocumentSource } from '../model/types';
|
|
2
|
-
import { parseLtspiceAsc } from './ltspice/parser';
|
|
3
|
-
import { serializeLtspiceAsc } from './ltspice/serializer';
|
|
4
|
-
import { parseSchx } from './schx/parser';
|
|
5
|
-
import { serializeSchx } from './schx/serializer';
|
|
6
|
-
import { parseSpiceNetlist } from './spice/parser';
|
|
7
|
-
import { serializeSpiceNetlist } from './spice/serializer';
|
|
8
|
-
import { parseInterchangeYaml } from './interchange/parser';
|
|
9
|
-
import { serializeInterchangeYaml } from './interchange/serializer';
|
|
10
|
-
import { parseCircuitJsonDocument, serializeCircuitJsonDocument } from './circuit-json/serializer';
|
|
11
|
-
|
|
12
|
-
export type CircuitFormat = 'schx' | 'spice' | 'ltspice-asc';
|
|
13
|
-
|
|
14
|
-
export type CircuitDocumentFileFormat = CircuitFormat | 'vdsp' | 'yaml' | 'circuit-json';
|
|
15
|
-
|
|
16
|
-
export type ParseCircuitDocumentOptions = Readonly<{
|
|
17
|
-
filename?: string;
|
|
18
|
-
format?: CircuitFormat;
|
|
19
|
-
}>;
|
|
20
|
-
|
|
21
|
-
export type ParseCircuitDocumentFileOptions = Readonly<{
|
|
22
|
-
filename: string;
|
|
23
|
-
}>;
|
|
24
|
-
|
|
25
|
-
export type SerializeVdspCircuitDocumentOptions = Readonly<{
|
|
26
|
-
filename?: string;
|
|
27
|
-
source?: DocumentSource;
|
|
28
|
-
}>;
|
|
29
|
-
|
|
30
|
-
export type SerializeCircuitDocumentFileOptions = Readonly<{
|
|
31
|
-
format: CircuitDocumentFileFormat;
|
|
32
|
-
filename?: string;
|
|
33
|
-
}>;
|
|
34
|
-
|
|
35
|
-
export type ConvertCircuitDocumentFileOptions = Readonly<{
|
|
36
|
-
inputFilename: string;
|
|
37
|
-
outputFormat: CircuitDocumentFileFormat;
|
|
38
|
-
outputFilename?: string;
|
|
39
|
-
}>;
|
|
40
|
-
|
|
41
|
-
export type VdspSchemaValidationIssue = Readonly<{
|
|
42
|
-
code: 'vdsp-schema-invalid';
|
|
43
|
-
message: string;
|
|
44
|
-
path?: string;
|
|
45
|
-
}>;
|
|
46
|
-
|
|
47
|
-
export type VdspSchemaValidationResult =
|
|
48
|
-
| Readonly<{
|
|
49
|
-
valid: true;
|
|
50
|
-
document: CircuitDocument;
|
|
51
|
-
errors: readonly [];
|
|
52
|
-
}>
|
|
53
|
-
| Readonly<{
|
|
54
|
-
valid: false;
|
|
55
|
-
errors: readonly VdspSchemaValidationIssue[];
|
|
56
|
-
}>;
|
|
57
|
-
|
|
58
|
-
export const vdspFileExtension = '.vdsp';
|
|
59
|
-
|
|
60
|
-
export function detectCircuitFormat(filename: string): CircuitFormat | null {
|
|
61
|
-
const lower = filename.toLowerCase();
|
|
62
|
-
if (lower.endsWith('.schx')) {
|
|
63
|
-
return 'schx';
|
|
64
|
-
}
|
|
65
|
-
if (lower.endsWith('.cir') || lower.endsWith('.net') || lower.endsWith('.spice')) {
|
|
66
|
-
return 'spice';
|
|
67
|
-
}
|
|
68
|
-
if (lower.endsWith('.asc')) {
|
|
69
|
-
return 'ltspice-asc';
|
|
70
|
-
}
|
|
71
|
-
return null;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export function parseCircuitDocument(
|
|
75
|
-
source: string,
|
|
76
|
-
options: ParseCircuitDocumentOptions = {},
|
|
77
|
-
): CircuitDocument {
|
|
78
|
-
const format = options.format ?? detectFormat(source, options.filename);
|
|
79
|
-
if (format === null) {
|
|
80
|
-
throw new Error('unsupported circuit format: provide a supported filename or explicit format');
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
switch (format) {
|
|
84
|
-
case 'schx':
|
|
85
|
-
return parseSchx(source);
|
|
86
|
-
case 'spice':
|
|
87
|
-
return parseSpiceNetlist(source);
|
|
88
|
-
case 'ltspice-asc':
|
|
89
|
-
return parseLtspiceAsc(source);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
function detectFormat(source: string, filename: string | undefined): CircuitFormat | null {
|
|
94
|
-
if (filename !== undefined) {
|
|
95
|
-
return detectCircuitFormat(filename);
|
|
96
|
-
}
|
|
97
|
-
const firstLine = source
|
|
98
|
-
.replace(/^/, '')
|
|
99
|
-
.split(/\r?\n/)
|
|
100
|
-
.find((line) => line.trim().length > 0)
|
|
101
|
-
?.trim() ?? '';
|
|
102
|
-
|
|
103
|
-
if (firstLine.startsWith('<?xml') || firstLine.startsWith('<Schematic')) {
|
|
104
|
-
return 'schx';
|
|
105
|
-
}
|
|
106
|
-
if (firstLine.toUpperCase().startsWith('VERSION ')) {
|
|
107
|
-
return 'ltspice-asc';
|
|
108
|
-
}
|
|
109
|
-
if (firstLine.startsWith('.') || /^[A-Za-z]/.test(firstLine)) {
|
|
110
|
-
return 'spice';
|
|
111
|
-
}
|
|
112
|
-
return null;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export function isVdspFilename(filename: string): boolean {
|
|
116
|
-
return filename.trim().toLowerCase().endsWith(vdspFileExtension);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
export function detectCircuitDocumentFileFormat(filename: string): CircuitDocumentFileFormat | null {
|
|
120
|
-
const lower = filename.trim().toLowerCase();
|
|
121
|
-
if (lower.endsWith('.vdsp')) {
|
|
122
|
-
return 'vdsp';
|
|
123
|
-
}
|
|
124
|
-
if (lower.endsWith('.yaml') || lower.endsWith('.yml')) {
|
|
125
|
-
return 'yaml';
|
|
126
|
-
}
|
|
127
|
-
if (lower.endsWith('.circuit.json')) {
|
|
128
|
-
return 'circuit-json';
|
|
129
|
-
}
|
|
130
|
-
return detectCircuitFormat(filename);
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
export function vdspFilenameFromName(name: string): string {
|
|
134
|
-
const slug = name
|
|
135
|
-
.normalize('NFKD')
|
|
136
|
-
.toLowerCase()
|
|
137
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
138
|
-
.replace(/^-+|-+$/g, '')
|
|
139
|
-
.replace(/-{2,}/g, '-');
|
|
140
|
-
return `${slug || 'untitled-preset'}${vdspFileExtension}`;
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
export function parseVdspCircuitDocument(source: string): CircuitDocument {
|
|
144
|
-
return parseInterchangeYaml(source);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
export function validateVdspCircuitDocumentSchema(source: string): VdspSchemaValidationResult {
|
|
148
|
-
try {
|
|
149
|
-
return {
|
|
150
|
-
valid: true,
|
|
151
|
-
document: parseVdspCircuitDocument(source),
|
|
152
|
-
errors: [],
|
|
153
|
-
};
|
|
154
|
-
} catch (error) {
|
|
155
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
156
|
-
const path = pathFromSchemaMessage(message);
|
|
157
|
-
return {
|
|
158
|
-
valid: false,
|
|
159
|
-
errors: [{
|
|
160
|
-
code: 'vdsp-schema-invalid',
|
|
161
|
-
message,
|
|
162
|
-
...(path === undefined ? {} : { path }),
|
|
163
|
-
}],
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
export function parseCircuitDocumentFile(
|
|
169
|
-
source: string,
|
|
170
|
-
options: ParseCircuitDocumentFileOptions,
|
|
171
|
-
): CircuitDocument {
|
|
172
|
-
const format = detectCircuitDocumentFileFormat(options.filename);
|
|
173
|
-
if (format === null) {
|
|
174
|
-
throw new Error(`unsupported circuit document file extension: ${options.filename}`);
|
|
175
|
-
}
|
|
176
|
-
if (format === 'vdsp' || format === 'yaml') {
|
|
177
|
-
return parseInterchangeYaml(source);
|
|
178
|
-
}
|
|
179
|
-
if (format === 'circuit-json') {
|
|
180
|
-
const parsed: unknown = JSON.parse(source);
|
|
181
|
-
return parseCircuitJsonDocument(parsed, options.filename === undefined ? {} : { filename: options.filename });
|
|
182
|
-
}
|
|
183
|
-
return parseCircuitDocument(source, {
|
|
184
|
-
filename: options.filename,
|
|
185
|
-
format,
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
export function serializeCircuitDocumentFile(
|
|
190
|
-
document: CircuitDocument,
|
|
191
|
-
options: SerializeCircuitDocumentFileOptions,
|
|
192
|
-
): string {
|
|
193
|
-
switch (options.format) {
|
|
194
|
-
case 'vdsp':
|
|
195
|
-
case 'yaml':
|
|
196
|
-
return serializeVdspCircuitDocument(
|
|
197
|
-
document,
|
|
198
|
-
options.filename === undefined ? {} : { filename: options.filename },
|
|
199
|
-
);
|
|
200
|
-
case 'schx':
|
|
201
|
-
return serializeSchx(document);
|
|
202
|
-
case 'ltspice-asc':
|
|
203
|
-
return serializeLtspiceAsc(document);
|
|
204
|
-
case 'spice':
|
|
205
|
-
return serializeSpiceNetlist(document);
|
|
206
|
-
case 'circuit-json':
|
|
207
|
-
return `${JSON.stringify(serializeCircuitJsonDocument(document).elements, null, 2)}\n`;
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
export function convertCircuitDocumentFile(
|
|
212
|
-
source: string,
|
|
213
|
-
options: ConvertCircuitDocumentFileOptions,
|
|
214
|
-
): string {
|
|
215
|
-
return serializeCircuitDocumentFile(parseCircuitDocumentFile(source, {
|
|
216
|
-
filename: options.inputFilename,
|
|
217
|
-
}), {
|
|
218
|
-
format: options.outputFormat,
|
|
219
|
-
...(options.outputFilename === undefined ? {} : { filename: options.outputFilename }),
|
|
220
|
-
});
|
|
221
|
-
}
|
|
222
|
-
|
|
223
|
-
export function serializeVdspCircuitDocument(
|
|
224
|
-
document: CircuitDocument,
|
|
225
|
-
options: SerializeVdspCircuitDocumentOptions = {},
|
|
226
|
-
): string {
|
|
227
|
-
return serializeInterchangeYaml(document, {
|
|
228
|
-
source: vdspSource(document, options),
|
|
229
|
-
});
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
function vdspSource(
|
|
233
|
-
document: CircuitDocument,
|
|
234
|
-
options: SerializeVdspCircuitDocumentOptions,
|
|
235
|
-
): DocumentSource {
|
|
236
|
-
const source: Record<string, string> = {
|
|
237
|
-
...(document.source ?? {}),
|
|
238
|
-
...(options.source ?? {}),
|
|
239
|
-
};
|
|
240
|
-
if (source.format === undefined) {
|
|
241
|
-
source.format = 'interchange';
|
|
242
|
-
}
|
|
243
|
-
if (options.filename !== undefined) {
|
|
244
|
-
source.filename = normalizeVdspFilename(options.filename, document.metadata.name);
|
|
245
|
-
}
|
|
246
|
-
if (source.filename === undefined || source.filename.length === 0) {
|
|
247
|
-
source.filename = vdspFilenameFromName(document.metadata.name);
|
|
248
|
-
}
|
|
249
|
-
return source;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
function normalizeVdspFilename(filename: string | undefined, fallbackName: string): string {
|
|
253
|
-
const trimmed = filename?.trim() ?? '';
|
|
254
|
-
if (trimmed.length === 0) {
|
|
255
|
-
return vdspFilenameFromName(fallbackName);
|
|
256
|
-
}
|
|
257
|
-
if (isVdspFilename(trimmed)) {
|
|
258
|
-
return trimmed;
|
|
259
|
-
}
|
|
260
|
-
const withoutExtension = trimmed.replace(/\.[^.\\\/]+$/, '');
|
|
261
|
-
return `${withoutExtension || 'untitled-preset'}${vdspFileExtension}`;
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
function pathFromSchemaMessage(message: string): string | undefined {
|
|
265
|
-
const colonIndex = message.indexOf(':');
|
|
266
|
-
if (colonIndex <= 0) {
|
|
267
|
-
return undefined;
|
|
268
|
-
}
|
|
269
|
-
const candidate = message.slice(0, colonIndex);
|
|
270
|
-
if (/^[A-Za-z_][A-Za-z0-9_]*(?:\[\d+\])?(?:\.[A-Za-z_][A-Za-z0-9_]*(?:\[\d+\])?)*$/.test(candidate)) {
|
|
271
|
-
return candidate;
|
|
272
|
-
}
|
|
273
|
-
return undefined;
|
|
274
|
-
}
|
package/src/index.ts
DELETED
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
export const VERSION = '0.5.0';
|
|
2
|
-
|
|
3
|
-
export type {
|
|
4
|
-
CircuitDocument,
|
|
5
|
-
CircuitDocumentDevice,
|
|
6
|
-
CircuitDocumentDeviceKind,
|
|
7
|
-
Component,
|
|
8
|
-
ComponentKind,
|
|
9
|
-
ControlApplicabilityPredicate,
|
|
10
|
-
ControlContext,
|
|
11
|
-
ControlGroup,
|
|
12
|
-
ControlInterface,
|
|
13
|
-
ControlInterfaceAssignmentHint,
|
|
14
|
-
ControlInterfaceBinding,
|
|
15
|
-
ControlInterfaceConnector,
|
|
16
|
-
ControlInterfacePolarity,
|
|
17
|
-
ControlInterfaceRole,
|
|
18
|
-
ControlOutput,
|
|
19
|
-
ControlOutputSwitchMode,
|
|
20
|
-
DeviceInterface,
|
|
21
|
-
DeviceInterfaceBinding,
|
|
22
|
-
DeviceInterfaceControl,
|
|
23
|
-
DeviceInterfaceControlKind,
|
|
24
|
-
DocumentMetadata,
|
|
25
|
-
DocumentSource,
|
|
26
|
-
PanelColumnOrder,
|
|
27
|
-
PanelControlKind,
|
|
28
|
-
PanelControlPlacement,
|
|
29
|
-
PanelElementBinding,
|
|
30
|
-
PanelElementPlacement,
|
|
31
|
-
PanelFace,
|
|
32
|
-
PanelGridIndexing,
|
|
33
|
-
PanelGridLayout,
|
|
34
|
-
PanelGridPosition,
|
|
35
|
-
PanelPlacementMetadata,
|
|
36
|
-
PanelRowOrder,
|
|
37
|
-
ParsedQuantity,
|
|
38
|
-
Point,
|
|
39
|
-
PropertyObject,
|
|
40
|
-
PropertyValue,
|
|
41
|
-
Rotation,
|
|
42
|
-
Terminal,
|
|
43
|
-
Warning,
|
|
44
|
-
Wire,
|
|
45
|
-
} from './model/types';
|
|
46
|
-
export { EMPTY_DOCUMENT } from './model/types';
|
|
47
|
-
export {
|
|
48
|
-
isParsedQuantity,
|
|
49
|
-
isPropertyObject,
|
|
50
|
-
propertyBooleanValue,
|
|
51
|
-
propertyNumericValue,
|
|
52
|
-
propertyQuantityValue,
|
|
53
|
-
propertyStringValue,
|
|
54
|
-
propertyValueForSourceAttribute,
|
|
55
|
-
} from './model/properties';
|
|
56
|
-
|
|
57
|
-
export { parseQuantity } from './model/quantity';
|
|
58
|
-
|
|
59
|
-
export type { Connectivity, NodeId, PinRef } from './model/connectivity';
|
|
60
|
-
export { getPinNode, pinKey, resolveConnectivity } from './model/connectivity';
|
|
61
|
-
|
|
62
|
-
export type { NetlistComponent, NetlistView, SpiceLetter } from './model/netlist';
|
|
63
|
-
export { getSpiceLetter, getSpiceNodeOrder, kindForSpiceLetter, toNetlistView } from './model/netlist';
|
|
64
|
-
|
|
65
|
-
export type {
|
|
66
|
-
PropertyRule,
|
|
67
|
-
QuantityRule,
|
|
68
|
-
StringRule,
|
|
69
|
-
ValidationCode,
|
|
70
|
-
ValidationIssue,
|
|
71
|
-
ValidationSeverity,
|
|
72
|
-
} from './model/validation';
|
|
73
|
-
export { getRulesForKind, hasErrors, validateComponent, validateDocument } from './model/validation';
|
|
74
|
-
|
|
75
|
-
export { parseSchx } from './formats/schx/parser';
|
|
76
|
-
export { serializeSchx } from './formats/schx/serializer';
|
|
77
|
-
export { parseSpiceNetlist } from './formats/spice/parser';
|
|
78
|
-
export { serializeSpiceNetlist } from './formats/spice/serializer';
|
|
79
|
-
export type { InterchangeSourceFormat, SerializeInterchangeYamlOptions } from './formats/interchange/serializer';
|
|
80
|
-
export { parseInterchangeYaml } from './formats/interchange/parser';
|
|
81
|
-
export { serializeInterchangeYaml } from './formats/interchange/serializer';
|
|
82
|
-
export type {
|
|
83
|
-
CircuitFormat,
|
|
84
|
-
CircuitDocumentFileFormat,
|
|
85
|
-
ParseCircuitDocumentOptions,
|
|
86
|
-
ParseCircuitDocumentFileOptions,
|
|
87
|
-
SerializeCircuitDocumentFileOptions,
|
|
88
|
-
SerializeVdspCircuitDocumentOptions,
|
|
89
|
-
ConvertCircuitDocumentFileOptions,
|
|
90
|
-
VdspSchemaValidationIssue,
|
|
91
|
-
VdspSchemaValidationResult,
|
|
92
|
-
} from './formats/document';
|
|
93
|
-
export {
|
|
94
|
-
detectCircuitFormat,
|
|
95
|
-
parseCircuitDocument,
|
|
96
|
-
vdspFileExtension,
|
|
97
|
-
isVdspFilename,
|
|
98
|
-
detectCircuitDocumentFileFormat,
|
|
99
|
-
vdspFilenameFromName,
|
|
100
|
-
parseVdspCircuitDocument,
|
|
101
|
-
validateVdspCircuitDocumentSchema,
|
|
102
|
-
parseCircuitDocumentFile,
|
|
103
|
-
serializeCircuitDocumentFile,
|
|
104
|
-
convertCircuitDocumentFile,
|
|
105
|
-
serializeVdspCircuitDocument,
|
|
106
|
-
} from './formats/document';
|
|
107
|
-
export { parseLtspiceAsc } from './formats/ltspice/parser';
|
|
108
|
-
export type { SerializeLtspiceAscOptions } from './formats/ltspice/serializer';
|
|
109
|
-
export { serializeLtspiceAsc } from './formats/ltspice/serializer';
|
|
110
|
-
|
|
111
|
-
export type {
|
|
112
|
-
AnyCircuitElement,
|
|
113
|
-
AnyCircuitElementInput,
|
|
114
|
-
CircuitJson,
|
|
115
|
-
CircuitJsonElement,
|
|
116
|
-
CircuitJsonExport,
|
|
117
|
-
CircuitJsonExportOptions,
|
|
118
|
-
CircuitJsonExportTarget,
|
|
119
|
-
CircuitJsonSchemaValidationIssue,
|
|
120
|
-
CircuitJsonSchemaValidationResult,
|
|
121
|
-
ParseCircuitJsonDocumentOptions,
|
|
122
|
-
CircuitJsonSourceComponent,
|
|
123
|
-
CircuitJsonSourceNet,
|
|
124
|
-
CircuitJsonSourcePort,
|
|
125
|
-
CircuitJsonSourceTrace,
|
|
126
|
-
} from './formats/circuit-json/serializer';
|
|
127
|
-
export {
|
|
128
|
-
parseCircuitJsonDocument,
|
|
129
|
-
serializeCircuitJsonDocument,
|
|
130
|
-
validateCircuitJsonDocument,
|
|
131
|
-
} from './formats/circuit-json/serializer';
|
|
132
|
-
|
|
133
|
-
export type { CreateComponentArgs, DocumentCommand, EditorCommand, EditorState } from './editor';
|
|
134
|
-
export {
|
|
135
|
-
applyDocumentCommand,
|
|
136
|
-
applyEditorCommand,
|
|
137
|
-
buildComponent,
|
|
138
|
-
canRedo,
|
|
139
|
-
canUndo,
|
|
140
|
-
createEditorState,
|
|
141
|
-
resetEditorState,
|
|
142
|
-
tidyDocumentLayout,
|
|
143
|
-
} from './editor';
|
|
144
|
-
export type { TidyLayoutOptions } from './editor';
|
|
145
|
-
|
|
146
|
-
export type { Bounds } from './preview/bounds';
|
|
147
|
-
export { computeComponentBox } from './preview/box-layout';
|
|
148
|
-
export { computeDocumentBounds, viewBoxString } from './preview/bounds';
|
|
149
|
-
export { colorForKind } from './preview/colors';
|
|
150
|
-
export type { SymbolDef } from './preview/symbols';
|
|
151
|
-
export { symbolFor, COMPONENT_KINDS } from './preview/symbols';
|
|
152
|
-
export type { HangingEndpoint } from './preview/hanging';
|
|
153
|
-
export { findHangingEndpoints } from './preview/hanging';
|
|
154
|
-
export { findJunctions } from './preview/junctions';
|
|
155
|
-
export { computeLabelTextBoxLayout, shouldRenderLabelTextBox } from './preview/label-layout';
|
|
156
|
-
export type { Port, WireBodyHit } from './preview/ports';
|
|
157
|
-
export { collectPorts, findNearestPort, findNearestWireBodyHit } from './preview/ports';
|
|
158
|
-
export { buildRenderableWires } from './preview/renderable-wires';
|
|
159
|
-
export { orthogonalPath, pointsToSvg } from './preview/routing';
|
|
160
|
-
export { findSnap } from './preview/snap';
|
|
161
|
-
export { findChainCorners, findWireChain } from './preview/wire-chains';
|
|
162
|
-
|
|
163
|
-
export type {
|
|
164
|
-
ControlState,
|
|
165
|
-
ControlValue,
|
|
166
|
-
DeviceInterfaceProvenance,
|
|
167
|
-
ExternalControlAssignmentHint,
|
|
168
|
-
ExtractedDeviceInterface,
|
|
169
|
-
ExtractedDeviceInterfaceControl,
|
|
170
|
-
JackAudioRole,
|
|
171
|
-
JackPort,
|
|
172
|
-
JackRole,
|
|
173
|
-
Knob,
|
|
174
|
-
KnobControlMode,
|
|
175
|
-
KnobStep,
|
|
176
|
-
KnobTaper,
|
|
177
|
-
KnobValue,
|
|
178
|
-
LedIndicator,
|
|
179
|
-
LedValue,
|
|
180
|
-
Panel,
|
|
181
|
-
PanelMessage,
|
|
182
|
-
SliderControl,
|
|
183
|
-
SliderOrientation,
|
|
184
|
-
SliderRange,
|
|
185
|
-
SliderValue,
|
|
186
|
-
SwitchControl,
|
|
187
|
-
SwitchKind,
|
|
188
|
-
SwitchValue,
|
|
189
|
-
} from './panel';
|
|
190
|
-
export {
|
|
191
|
-
applyControlMessage,
|
|
192
|
-
defaultControlState,
|
|
193
|
-
extractDeviceInterface,
|
|
194
|
-
extractPanel,
|
|
195
|
-
isKnobPositionOnStep,
|
|
196
|
-
isKnob,
|
|
197
|
-
isLed,
|
|
198
|
-
isSlider,
|
|
199
|
-
isSwitch,
|
|
200
|
-
knobStepSize,
|
|
201
|
-
nearestKnobStep,
|
|
202
|
-
PANEL_PROTOCOL_VERSION,
|
|
203
|
-
snapKnobPosition,
|
|
204
|
-
validateMessage,
|
|
205
|
-
} from './panel';
|