@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.
- 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 +101 -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} +352 -418
- 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/{src/formats/document.ts → dist/formats/document.js} +43 -159
- 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} +157 -463
- 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} +84 -186
- 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} +20 -16
- 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/{src/model/types.ts → dist/model/types.d.ts} +17 -196
- 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} +172 -653
- 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/index.ts +0 -255
- 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
|
@@ -1,43 +1,8 @@
|
|
|
1
|
-
import { parseQuantity } from '../../model/quantity';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
Point,
|
|
7
|
-
PropertyValue,
|
|
8
|
-
Warning,
|
|
9
|
-
Wire,
|
|
10
|
-
} from '../../model/types';
|
|
11
|
-
import { splitWiresAtJunctions } from '../../model/wires';
|
|
12
|
-
import {
|
|
13
|
-
extractModelFromSymbolPath,
|
|
14
|
-
lookupLtspiceSymbolDef,
|
|
15
|
-
LTSPICE_COORD_SCALE,
|
|
16
|
-
mapLtspiceTerminal,
|
|
17
|
-
normalizeLtspiceSymbolName,
|
|
18
|
-
type LtspiceSymbolDef,
|
|
19
|
-
} from './catalog';
|
|
20
|
-
import { decodeLtspiceBytes } from './encoding';
|
|
21
|
-
|
|
22
|
-
type MutableLtspiceSymbol = {
|
|
23
|
-
readonly sourceName: string;
|
|
24
|
-
readonly placement: Point;
|
|
25
|
-
readonly orientation: string;
|
|
26
|
-
readonly index: number;
|
|
27
|
-
readonly attrs: Map<string, string>;
|
|
28
|
-
};
|
|
29
|
-
|
|
30
|
-
type LtspiceFlag = Readonly<{
|
|
31
|
-
point: Point;
|
|
32
|
-
name: string;
|
|
33
|
-
}>;
|
|
34
|
-
|
|
35
|
-
type LtspiceText = Readonly<{
|
|
36
|
-
point: Point;
|
|
37
|
-
text: string;
|
|
38
|
-
}>;
|
|
39
|
-
|
|
40
|
-
const IGNORED_KEYWORDS = new Set<string>([
|
|
1
|
+
import { parseQuantity } from '../../model/quantity.js';
|
|
2
|
+
import { splitWiresAtJunctions } from '../../model/wires.js';
|
|
3
|
+
import { extractModelFromSymbolPath, lookupLtspiceSymbolDef, LTSPICE_COORD_SCALE, mapLtspiceTerminal, normalizeLtspiceSymbolName, } from './catalog.js';
|
|
4
|
+
import { decodeLtspiceBytes } from './encoding.js';
|
|
5
|
+
const IGNORED_KEYWORDS = new Set([
|
|
41
6
|
'WINDOW',
|
|
42
7
|
'LINE',
|
|
43
8
|
'RECTANGLE',
|
|
@@ -46,8 +11,7 @@ const IGNORED_KEYWORDS = new Set<string>([
|
|
|
46
11
|
'DATAFLAG',
|
|
47
12
|
'BUSTAP',
|
|
48
13
|
]);
|
|
49
|
-
|
|
50
|
-
export function parseLtspiceAsc(source: string | Uint8Array): CircuitDocument {
|
|
14
|
+
export function parseLtspiceAsc(source) {
|
|
51
15
|
const text = typeof source === 'string' ? source : decodeLtspiceBytes(source);
|
|
52
16
|
const normalized = text.replace(/^/, '').replace(/\r\n/g, '\n');
|
|
53
17
|
const lines = normalized.split('\n');
|
|
@@ -55,27 +19,23 @@ export function parseLtspiceAsc(source: string | Uint8Array): CircuitDocument {
|
|
|
55
19
|
if (!firstLine.toUpperCase().startsWith('VERSION ')) {
|
|
56
20
|
throw new Error('not an LTspice ASC schematic: missing Version header');
|
|
57
21
|
}
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
const
|
|
63
|
-
const
|
|
64
|
-
const
|
|
65
|
-
|
|
66
|
-
let currentSymbol: MutableLtspiceSymbol | null = null;
|
|
22
|
+
const warnings = [];
|
|
23
|
+
const wires = [];
|
|
24
|
+
const symbols = [];
|
|
25
|
+
const flags = [];
|
|
26
|
+
const iopins = new Map();
|
|
27
|
+
const directives = [];
|
|
28
|
+
const texts = [];
|
|
29
|
+
let currentSymbol = null;
|
|
67
30
|
let version = '';
|
|
68
31
|
let sheet = '';
|
|
69
|
-
|
|
70
32
|
lines.forEach((line, lineIndex) => {
|
|
71
33
|
const trimmed = line.trim();
|
|
72
34
|
if (trimmed.length === 0) {
|
|
73
35
|
return;
|
|
74
36
|
}
|
|
75
|
-
|
|
76
37
|
const tokens = trimmed.split(/\s+/);
|
|
77
38
|
const keyword = (tokens[0] ?? '').toUpperCase();
|
|
78
|
-
|
|
79
39
|
switch (keyword) {
|
|
80
40
|
case 'VERSION':
|
|
81
41
|
version = tokens.slice(1).join(' ');
|
|
@@ -129,15 +89,13 @@ export function parseLtspiceAsc(source: string | Uint8Array): CircuitDocument {
|
|
|
129
89
|
break;
|
|
130
90
|
}
|
|
131
91
|
});
|
|
132
|
-
|
|
133
|
-
const usedIds = new Map<string, number>();
|
|
92
|
+
const usedIds = new Map();
|
|
134
93
|
const components = [
|
|
135
94
|
...symbols.map((symbol) => buildSymbolComponent(symbol, usedIds, warnings)),
|
|
136
95
|
...flags.map((flag) => buildFlagComponent(flag, iopins.get(pointKey(flag.point)), usedIds)),
|
|
137
96
|
...texts.map((text, index) => buildTextComponent(text, index, usedIds)),
|
|
138
97
|
];
|
|
139
|
-
const metadata
|
|
140
|
-
|
|
98
|
+
const metadata = { name: '', description: '', partNumber: '' };
|
|
141
99
|
return {
|
|
142
100
|
metadata,
|
|
143
101
|
components,
|
|
@@ -147,13 +105,7 @@ export function parseLtspiceAsc(source: string | Uint8Array): CircuitDocument {
|
|
|
147
105
|
rawAttributes: buildRawAttributes(version, sheet),
|
|
148
106
|
};
|
|
149
107
|
}
|
|
150
|
-
|
|
151
|
-
function parseWire(
|
|
152
|
-
tokens: readonly string[],
|
|
153
|
-
wireCount: number,
|
|
154
|
-
lineIndex: number,
|
|
155
|
-
warnings: Warning[],
|
|
156
|
-
): Wire | null {
|
|
108
|
+
function parseWire(tokens, wireCount, lineIndex, warnings) {
|
|
157
109
|
if (tokens.length < 5) {
|
|
158
110
|
warnings.push({ code: 'invalid-wire', message: `Line ${lineIndex + 1}: WIRE requires four coordinates` });
|
|
159
111
|
return null;
|
|
@@ -166,8 +118,7 @@ function parseWire(
|
|
|
166
118
|
}
|
|
167
119
|
return { id: `wire-${wireCount + 1}`, endpoints: [a, b] };
|
|
168
120
|
}
|
|
169
|
-
|
|
170
|
-
function parseFlag(tokens: readonly string[], lineIndex: number, warnings: Warning[]): LtspiceFlag | null {
|
|
121
|
+
function parseFlag(tokens, lineIndex, warnings) {
|
|
171
122
|
if (tokens.length < 4) {
|
|
172
123
|
warnings.push({ code: 'invalid-flag', message: `Line ${lineIndex + 1}: FLAG requires x, y, and name` });
|
|
173
124
|
return null;
|
|
@@ -179,12 +130,7 @@ function parseFlag(tokens: readonly string[], lineIndex: number, warnings: Warni
|
|
|
179
130
|
}
|
|
180
131
|
return { point, name: tokens.slice(3).join(' ') };
|
|
181
132
|
}
|
|
182
|
-
|
|
183
|
-
function parseIoPin(
|
|
184
|
-
tokens: readonly string[],
|
|
185
|
-
lineIndex: number,
|
|
186
|
-
warnings: Warning[],
|
|
187
|
-
): Readonly<{ point: Point; polarity: string }> | null {
|
|
133
|
+
function parseIoPin(tokens, lineIndex, warnings) {
|
|
188
134
|
if (tokens.length < 4) {
|
|
189
135
|
warnings.push({ code: 'invalid-iopin', message: `Line ${lineIndex + 1}: IOPIN requires x, y, and polarity` });
|
|
190
136
|
return null;
|
|
@@ -196,13 +142,7 @@ function parseIoPin(
|
|
|
196
142
|
}
|
|
197
143
|
return { point, polarity: tokens.slice(3).join(' ') };
|
|
198
144
|
}
|
|
199
|
-
|
|
200
|
-
function parseSymbol(
|
|
201
|
-
tokens: readonly string[],
|
|
202
|
-
symbolCount: number,
|
|
203
|
-
lineIndex: number,
|
|
204
|
-
warnings: Warning[],
|
|
205
|
-
): MutableLtspiceSymbol | null {
|
|
145
|
+
function parseSymbol(tokens, symbolCount, lineIndex, warnings) {
|
|
206
146
|
if (tokens.length < 5) {
|
|
207
147
|
warnings.push({ code: 'invalid-symbol', message: `Line ${lineIndex + 1}: SYMBOL requires name, x, y, and orientation` });
|
|
208
148
|
return null;
|
|
@@ -217,16 +157,10 @@ function parseSymbol(
|
|
|
217
157
|
placement,
|
|
218
158
|
orientation: tokens[4] ?? 'R0',
|
|
219
159
|
index: symbolCount,
|
|
220
|
-
attrs: new Map
|
|
160
|
+
attrs: new Map(),
|
|
221
161
|
};
|
|
222
162
|
}
|
|
223
|
-
|
|
224
|
-
function parseSymbolAttribute(
|
|
225
|
-
tokens: readonly string[],
|
|
226
|
-
currentSymbol: MutableLtspiceSymbol | null,
|
|
227
|
-
lineIndex: number,
|
|
228
|
-
warnings: Warning[],
|
|
229
|
-
): void {
|
|
163
|
+
function parseSymbolAttribute(tokens, currentSymbol, lineIndex, warnings) {
|
|
230
164
|
if (currentSymbol === null) {
|
|
231
165
|
warnings.push({ code: 'orphan-symbol-attribute', message: `Line ${lineIndex + 1}: SYMATTR without preceding SYMBOL` });
|
|
232
166
|
return;
|
|
@@ -237,14 +171,7 @@ function parseSymbolAttribute(
|
|
|
237
171
|
}
|
|
238
172
|
currentSymbol.attrs.set(tokens[1] ?? '', tokens.slice(2).join(' '));
|
|
239
173
|
}
|
|
240
|
-
|
|
241
|
-
function parseText(
|
|
242
|
-
tokens: readonly string[],
|
|
243
|
-
lineIndex: number,
|
|
244
|
-
warnings: Warning[],
|
|
245
|
-
directives: string[],
|
|
246
|
-
texts: LtspiceText[],
|
|
247
|
-
): void {
|
|
174
|
+
function parseText(tokens, lineIndex, warnings, directives, texts) {
|
|
248
175
|
if (tokens.length < 6) {
|
|
249
176
|
warnings.push({ code: 'invalid-text', message: `Line ${lineIndex + 1}: TEXT requires x, y, alignment, size, and text` });
|
|
250
177
|
return;
|
|
@@ -261,12 +188,7 @@ function parseText(
|
|
|
261
188
|
}
|
|
262
189
|
texts.push({ point, text: decodeText(raw.startsWith(';') ? raw.slice(1).trim() : raw) });
|
|
263
190
|
}
|
|
264
|
-
|
|
265
|
-
function buildSymbolComponent(
|
|
266
|
-
symbol: MutableLtspiceSymbol,
|
|
267
|
-
usedIds: Map<string, number>,
|
|
268
|
-
warnings: Warning[],
|
|
269
|
-
): Component {
|
|
191
|
+
function buildSymbolComponent(symbol, usedIds, warnings) {
|
|
270
192
|
const normalizedName = normalizeLtspiceSymbolName(symbol.sourceName);
|
|
271
193
|
const def = lookupLtspiceSymbolDef(symbol.sourceName);
|
|
272
194
|
const baseName = getAttr(symbol.attrs, 'InstName') ?? `${normalizedName}${symbol.index + 1}`;
|
|
@@ -275,7 +197,6 @@ function buildSymbolComponent(
|
|
|
275
197
|
name: terminal.name,
|
|
276
198
|
position: mapLtspiceTerminal(terminal.local, symbol.placement, symbol.orientation),
|
|
277
199
|
}));
|
|
278
|
-
|
|
279
200
|
if (def === undefined) {
|
|
280
201
|
warnings.push({
|
|
281
202
|
code: 'unknown-ltspice-symbol',
|
|
@@ -283,7 +204,6 @@ function buildSymbolComponent(
|
|
|
283
204
|
componentId: id,
|
|
284
205
|
});
|
|
285
206
|
}
|
|
286
|
-
|
|
287
207
|
return {
|
|
288
208
|
id,
|
|
289
209
|
kind: def?.kind ?? 'unsupported',
|
|
@@ -296,21 +216,15 @@ function buildSymbolComponent(
|
|
|
296
216
|
sourceTypeName: `ltspice:${normalizedName}`,
|
|
297
217
|
};
|
|
298
218
|
}
|
|
299
|
-
|
|
300
|
-
function buildFlagComponent(
|
|
301
|
-
flag: LtspiceFlag,
|
|
302
|
-
polarity: string | undefined,
|
|
303
|
-
usedIds: Map<string, number>,
|
|
304
|
-
): Component {
|
|
219
|
+
function buildFlagComponent(flag, polarity, usedIds) {
|
|
305
220
|
const isGround = flag.name === '0';
|
|
306
221
|
const isJack = polarity !== undefined;
|
|
307
222
|
const baseName = isGround ? 'GND' : flag.name;
|
|
308
|
-
const properties
|
|
223
|
+
const properties = { Name: flag.name };
|
|
309
224
|
if (polarity !== undefined) {
|
|
310
225
|
properties.polarity = polarity;
|
|
311
226
|
properties.connector = '1/4" TS jack';
|
|
312
227
|
}
|
|
313
|
-
|
|
314
228
|
return {
|
|
315
229
|
id: uniqueId(baseName, usedIds),
|
|
316
230
|
kind: isJack ? 'jack' : isGround ? 'ground' : 'named-wire',
|
|
@@ -323,12 +237,10 @@ function buildFlagComponent(
|
|
|
323
237
|
sourceTypeName: isJack ? ltspiceJackSourceType(polarity) : 'ltspice:FLAG',
|
|
324
238
|
};
|
|
325
239
|
}
|
|
326
|
-
|
|
327
|
-
function ltspiceJackSourceType(polarity: string | undefined): string {
|
|
240
|
+
function ltspiceJackSourceType(polarity) {
|
|
328
241
|
return polarity?.toLowerCase() === 'out' ? 'ltspice:OutputJack' : 'ltspice:InputJack';
|
|
329
242
|
}
|
|
330
|
-
|
|
331
|
-
function buildTextComponent(text: LtspiceText, index: number, usedIds: Map<string, number>): Component {
|
|
243
|
+
function buildTextComponent(text, index, usedIds) {
|
|
332
244
|
const id = uniqueId(`TEXT${index + 1}`, usedIds);
|
|
333
245
|
return {
|
|
334
246
|
id,
|
|
@@ -342,17 +254,11 @@ function buildTextComponent(text: LtspiceText, index: number, usedIds: Map<strin
|
|
|
342
254
|
sourceTypeName: 'ltspice:TEXT',
|
|
343
255
|
};
|
|
344
256
|
}
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
attrs: ReadonlyMap<string, string>,
|
|
348
|
-
def: LtspiceSymbolDef | undefined,
|
|
349
|
-
rawSymbolName: string,
|
|
350
|
-
): Readonly<Record<string, PropertyValue>> {
|
|
351
|
-
const properties: Record<string, PropertyValue> = {};
|
|
257
|
+
function buildProperties(attrs, def, rawSymbolName) {
|
|
258
|
+
const properties = {};
|
|
352
259
|
for (const [key, value] of attrs) {
|
|
353
260
|
properties[key] = value;
|
|
354
261
|
}
|
|
355
|
-
|
|
356
262
|
const value = getAttr(attrs, 'Value');
|
|
357
263
|
if (value !== null && def !== undefined) {
|
|
358
264
|
if (def.valueProperty !== null) {
|
|
@@ -362,15 +268,12 @@ function buildProperties(
|
|
|
362
268
|
properties.model = value;
|
|
363
269
|
}
|
|
364
270
|
}
|
|
365
|
-
|
|
366
271
|
if (def?.modelFromSymbolPath === true && properties.model === undefined) {
|
|
367
272
|
properties.model = extractModelFromSymbolPath(rawSymbolName);
|
|
368
273
|
}
|
|
369
|
-
|
|
370
274
|
return properties;
|
|
371
275
|
}
|
|
372
|
-
|
|
373
|
-
function getAttr(attrs: ReadonlyMap<string, string>, wanted: string): string | null {
|
|
276
|
+
function getAttr(attrs, wanted) {
|
|
374
277
|
for (const [key, value] of attrs) {
|
|
375
278
|
if (key.toLowerCase() === wanted.toLowerCase()) {
|
|
376
279
|
return value;
|
|
@@ -378,9 +281,8 @@ function getAttr(attrs: ReadonlyMap<string, string>, wanted: string): string | n
|
|
|
378
281
|
}
|
|
379
282
|
return null;
|
|
380
283
|
}
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
const attrs: Record<string, string> = { format: 'ltspice-asc' };
|
|
284
|
+
function buildRawAttributes(version, sheet) {
|
|
285
|
+
const attrs = { format: 'ltspice-asc' };
|
|
384
286
|
if (version.length > 0) {
|
|
385
287
|
attrs.version = version;
|
|
386
288
|
}
|
|
@@ -389,8 +291,7 @@ function buildRawAttributes(version: string, sheet: string): Readonly<Record<str
|
|
|
389
291
|
}
|
|
390
292
|
return attrs;
|
|
391
293
|
}
|
|
392
|
-
|
|
393
|
-
function parsePoint(xText: string | undefined, yText: string | undefined): Point | null {
|
|
294
|
+
function parsePoint(xText, yText) {
|
|
394
295
|
const x = Number.parseInt(xText ?? '', 10);
|
|
395
296
|
const y = Number.parseInt(yText ?? '', 10);
|
|
396
297
|
if (!Number.isFinite(x) || !Number.isFinite(y)) {
|
|
@@ -400,24 +301,20 @@ function parsePoint(xText: string | undefined, yText: string | undefined): Point
|
|
|
400
301
|
// of the library — see LTSPICE_COORD_SCALE in catalog.ts for the rationale.
|
|
401
302
|
return { x: x * LTSPICE_COORD_SCALE, y: y * LTSPICE_COORD_SCALE };
|
|
402
303
|
}
|
|
403
|
-
|
|
404
|
-
function pointKey(point: Point): string {
|
|
304
|
+
function pointKey(point) {
|
|
405
305
|
return `${point.x},${point.y}`;
|
|
406
306
|
}
|
|
407
|
-
|
|
408
|
-
function uniqueId(baseName: string, usedIds: Map<string, number>): string {
|
|
307
|
+
function uniqueId(baseName, usedIds) {
|
|
409
308
|
const sanitized = baseName.replace(/\s+/g, '-').replace(/[^A-Za-z0-9_-]/g, '');
|
|
410
309
|
const base = sanitized.length > 0 ? sanitized : 'component';
|
|
411
310
|
const count = usedIds.get(base) ?? 0;
|
|
412
311
|
usedIds.set(base, count + 1);
|
|
413
312
|
return count === 0 ? base : `${base}-${count + 1}`;
|
|
414
313
|
}
|
|
415
|
-
|
|
416
|
-
function decodeText(text: string): string {
|
|
314
|
+
function decodeText(text) {
|
|
417
315
|
return text.replaceAll('\\n', '\n');
|
|
418
316
|
}
|
|
419
|
-
|
|
420
|
-
function rotationFromLtspiceOrientation(orientation: string): Component['rotation'] {
|
|
317
|
+
function rotationFromLtspiceOrientation(orientation) {
|
|
421
318
|
const match = orientation.toUpperCase().match(/[MR](0|90|180|270)$/);
|
|
422
319
|
if (match?.[1] === '90') {
|
|
423
320
|
return 1;
|
|
@@ -430,3 +327,4 @@ function rotationFromLtspiceOrientation(orientation: string): Component['rotatio
|
|
|
430
327
|
}
|
|
431
328
|
return 0;
|
|
432
329
|
}
|
|
330
|
+
//# sourceMappingURL=parser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/formats/ltspice/parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { CircuitDocument } from '../../model/types';
|
|
2
|
+
export type SerializeLtspiceAscOptions = Readonly<{
|
|
3
|
+
version?: string;
|
|
4
|
+
sheet?: string;
|
|
5
|
+
}>;
|
|
6
|
+
export declare function serializeLtspiceAsc(doc: CircuitDocument, options?: SerializeLtspiceAscOptions): string;
|
|
7
|
+
//# sourceMappingURL=serializer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../../src/formats/ltspice/serializer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAmD,MAAM,mBAAmB,CAAC;AAG1G,MAAM,MAAM,0BAA0B,GAAG,QAAQ,CAAC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC,CAAC;AAeH,wBAAgB,mBAAmB,CAC/B,GAAG,EAAE,eAAe,EACpB,OAAO,GAAE,0BAA+B,GACzC,MAAM,CAkBR"}
|
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
import { propertyValueForSourceAttribute } from '../../model/properties';
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export type SerializeLtspiceAscOptions = Readonly<{
|
|
6
|
-
version?: string;
|
|
7
|
-
sheet?: string;
|
|
8
|
-
}>;
|
|
9
|
-
|
|
10
|
-
const KIND_TO_SYMBOL: Readonly<Record<string, string>> = {
|
|
1
|
+
import { propertyValueForSourceAttribute } from '../../model/properties.js';
|
|
2
|
+
import { LTSPICE_COORD_SCALE, normalizeLtspiceSymbolName } from './catalog.js';
|
|
3
|
+
const KIND_TO_SYMBOL = {
|
|
11
4
|
resistor: 'res',
|
|
12
5
|
capacitor: 'cap',
|
|
13
6
|
inductor: 'ind',
|
|
@@ -19,31 +12,22 @@ const KIND_TO_SYMBOL: Readonly<Record<string, string>> = {
|
|
|
19
12
|
jfet: 'njf',
|
|
20
13
|
mosfet: 'nmos',
|
|
21
14
|
};
|
|
22
|
-
|
|
23
|
-
export function serializeLtspiceAsc(
|
|
24
|
-
doc: CircuitDocument,
|
|
25
|
-
options: SerializeLtspiceAscOptions = {},
|
|
26
|
-
): string {
|
|
15
|
+
export function serializeLtspiceAsc(doc, options = {}) {
|
|
27
16
|
const version = options.version ?? doc.rawAttributes.version ?? '4';
|
|
28
17
|
const sheet = options.sheet ?? doc.rawAttributes.sheet ?? '1 880 680';
|
|
29
|
-
const lines
|
|
30
|
-
|
|
18
|
+
const lines = [`Version ${version}`, `SHEET ${sheet}`];
|
|
31
19
|
for (const wire of doc.wires) {
|
|
32
20
|
lines.push(wireLine(wire));
|
|
33
21
|
}
|
|
34
|
-
|
|
35
22
|
for (const component of doc.components) {
|
|
36
23
|
lines.push(...componentLines(component));
|
|
37
24
|
}
|
|
38
|
-
|
|
39
25
|
for (const directive of doc.directives) {
|
|
40
26
|
lines.push(`TEXT 0 0 Left 2 !${encodeText(directive)}`);
|
|
41
27
|
}
|
|
42
|
-
|
|
43
28
|
return `${lines.join('\n')}\n`;
|
|
44
29
|
}
|
|
45
|
-
|
|
46
|
-
function componentLines(component: Component): readonly string[] {
|
|
30
|
+
function componentLines(component) {
|
|
47
31
|
if (component.kind === 'ground' || component.kind === 'named-wire') {
|
|
48
32
|
return flagLines(component);
|
|
49
33
|
}
|
|
@@ -53,7 +37,6 @@ function componentLines(component: Component): readonly string[] {
|
|
|
53
37
|
if (component.kind === 'label') {
|
|
54
38
|
return labelLines(component);
|
|
55
39
|
}
|
|
56
|
-
|
|
57
40
|
const symbolName = ltspiceSymbolName(component);
|
|
58
41
|
const lines = [
|
|
59
42
|
`SYMBOL ${symbolName} ${scaledCoordinate(component.origin.x)} ${scaledCoordinate(component.origin.y)} ${orientation(component.rotation, component.flipped)}`,
|
|
@@ -74,8 +57,7 @@ function componentLines(component: Component): readonly string[] {
|
|
|
74
57
|
}
|
|
75
58
|
return lines;
|
|
76
59
|
}
|
|
77
|
-
|
|
78
|
-
function flagLines(component: Component): readonly string[] {
|
|
60
|
+
function flagLines(component) {
|
|
79
61
|
const terminal = component.terminals[0];
|
|
80
62
|
const point = terminal?.position ?? component.origin;
|
|
81
63
|
const name = component.kind === 'ground'
|
|
@@ -83,8 +65,7 @@ function flagLines(component: Component): readonly string[] {
|
|
|
83
65
|
: propertyText(component.properties.Name) ?? component.name;
|
|
84
66
|
return [`FLAG ${scaledCoordinate(point.x)} ${scaledCoordinate(point.y)} ${name}`];
|
|
85
67
|
}
|
|
86
|
-
|
|
87
|
-
function jackLines(component: Component): readonly string[] {
|
|
68
|
+
function jackLines(component) {
|
|
88
69
|
const terminal = component.terminals[0];
|
|
89
70
|
const point = terminal?.position ?? component.origin;
|
|
90
71
|
const name = propertyText(component.properties.Name) ?? component.name;
|
|
@@ -95,13 +76,11 @@ function jackLines(component: Component): readonly string[] {
|
|
|
95
76
|
`IOPIN ${scaledCoordinate(point.x)} ${scaledCoordinate(point.y)} ${polarity}`,
|
|
96
77
|
];
|
|
97
78
|
}
|
|
98
|
-
|
|
99
|
-
function labelLines(component: Component): readonly string[] {
|
|
79
|
+
function labelLines(component) {
|
|
100
80
|
const text = propertyText(component.properties.Text) ?? component.name;
|
|
101
81
|
return [`TEXT ${scaledCoordinate(component.origin.x)} ${scaledCoordinate(component.origin.y)} Left 2 ;${encodeText(text)}`];
|
|
102
82
|
}
|
|
103
|
-
|
|
104
|
-
function wireLine(wire: Wire): string {
|
|
83
|
+
function wireLine(wire) {
|
|
105
84
|
return [
|
|
106
85
|
'WIRE',
|
|
107
86
|
scaledCoordinate(wire.endpoints[0].x),
|
|
@@ -110,8 +89,7 @@ function wireLine(wire: Wire): string {
|
|
|
110
89
|
scaledCoordinate(wire.endpoints[1].y),
|
|
111
90
|
].join(' ');
|
|
112
91
|
}
|
|
113
|
-
|
|
114
|
-
function ltspiceSymbolName(component: Component): string {
|
|
92
|
+
function ltspiceSymbolName(component) {
|
|
115
93
|
if (component.sourceTypeName?.startsWith('ltspice:') === true) {
|
|
116
94
|
const source = component.sourceTypeName.slice('ltspice:'.length);
|
|
117
95
|
if (source !== 'flag' && source !== 'text' && source.length > 0) {
|
|
@@ -120,8 +98,7 @@ function ltspiceSymbolName(component: Component): string {
|
|
|
120
98
|
}
|
|
121
99
|
return KIND_TO_SYMBOL[component.kind] ?? 'unknown';
|
|
122
100
|
}
|
|
123
|
-
|
|
124
|
-
function componentValue(component: Component): string | null {
|
|
101
|
+
function componentValue(component) {
|
|
125
102
|
const keys = ['Value', 'R', 'Resistance', 'C', 'Capacitance', 'L', 'Inductance', 'V', 'Voltage', 'I', 'Current', 'model', 'Model'];
|
|
126
103
|
for (const key of keys) {
|
|
127
104
|
const value = component.properties[key];
|
|
@@ -132,13 +109,11 @@ function componentValue(component: Component): string | null {
|
|
|
132
109
|
}
|
|
133
110
|
return null;
|
|
134
111
|
}
|
|
135
|
-
|
|
136
|
-
function propertyText(value: PropertyValue | undefined): string | null {
|
|
112
|
+
function propertyText(value) {
|
|
137
113
|
const serialized = value === undefined ? null : propertyValueForSourceAttribute(value);
|
|
138
114
|
return serialized === null || serialized.trim().length === 0 ? null : serialized;
|
|
139
115
|
}
|
|
140
|
-
|
|
141
|
-
function shouldSkipSymattr(key: string): boolean {
|
|
116
|
+
function shouldSkipSymattr(key) {
|
|
142
117
|
return new Set([
|
|
143
118
|
'Name',
|
|
144
119
|
'Value',
|
|
@@ -154,16 +129,14 @@ function shouldSkipSymattr(key: string): boolean {
|
|
|
154
129
|
'Current',
|
|
155
130
|
]).has(key);
|
|
156
131
|
}
|
|
157
|
-
|
|
158
|
-
function orientation(rotation: Rotation, flipped: boolean): string {
|
|
132
|
+
function orientation(rotation, flipped) {
|
|
159
133
|
const prefix = flipped ? 'M' : 'R';
|
|
160
134
|
return `${prefix}${rotation * 90}`;
|
|
161
135
|
}
|
|
162
|
-
|
|
163
|
-
function scaledCoordinate(value: number): number {
|
|
136
|
+
function scaledCoordinate(value) {
|
|
164
137
|
return Math.round(value / LTSPICE_COORD_SCALE);
|
|
165
138
|
}
|
|
166
|
-
|
|
167
|
-
function encodeText(text: string): string {
|
|
139
|
+
function encodeText(text) {
|
|
168
140
|
return text.replaceAll('\n', '\\n');
|
|
169
141
|
}
|
|
142
|
+
//# sourceMappingURL=serializer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../../src/formats/ltspice/serializer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ComponentKind, Point } from '../../model/types';
|
|
2
|
+
export type SchxTerminalLocal = Readonly<{
|
|
3
|
+
name: string;
|
|
4
|
+
local: Point;
|
|
5
|
+
}>;
|
|
6
|
+
export type SchxComponentDef = Readonly<{
|
|
7
|
+
shortType: string;
|
|
8
|
+
kind: ComponentKind;
|
|
9
|
+
terminals: readonly SchxTerminalLocal[];
|
|
10
|
+
quantityProps: readonly string[];
|
|
11
|
+
}>;
|
|
12
|
+
export declare function shortenSchxType(fullType: string): string;
|
|
13
|
+
export declare function lookupSchxDef(shortType: string): SchxComponentDef | undefined;
|
|
14
|
+
export declare function isSchxRuntimeDescriptor(shortType: string): boolean;
|
|
15
|
+
export declare function defaultDefForKind(kind: ComponentKind): SchxComponentDef | undefined;
|
|
16
|
+
export declare const SCHX_SYMBOL_ELEMENT_TYPE = "Circuit.Symbol, Circuit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
|
|
17
|
+
export declare const SCHX_WIRE_ELEMENT_TYPE = "Circuit.Wire, Circuit, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null";
|
|
18
|
+
export declare function fullSchxType(shortType: string): string;
|
|
19
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../../src/formats/schx/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAA;CAAE,CAAC,CAAC;AAEzE,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,EAAE,SAAS,iBAAiB,EAAE,CAAC;IACxC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC,CAAC;AAqXH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAMxD;AAED,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,gBAAgB,GAAG,SAAS,CAI7E;AAED,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAIlE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAEnF;AAGD,eAAO,MAAM,wBAAwB,mFAAwC,CAAC;AAC9E,eAAO,MAAM,sBAAsB,iFAAsC,CAAC;AAE1E,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAMtD"}
|