@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.
Files changed (241) hide show
  1. package/README.md +10 -0
  2. package/dist/editor/commands.d.ts +48 -0
  3. package/dist/editor/commands.d.ts.map +1 -0
  4. package/{src/editor/commands.ts → dist/editor/commands.js} +44 -91
  5. package/dist/editor/commands.js.map +1 -0
  6. package/dist/editor/factory.d.ts +10 -0
  7. package/dist/editor/factory.d.ts.map +1 -0
  8. package/{src/editor/factory.ts → dist/editor/factory.js} +11 -27
  9. package/dist/editor/factory.js.map +1 -0
  10. package/dist/editor/history.d.ts +29 -0
  11. package/dist/editor/history.d.ts.map +1 -0
  12. package/{src/editor/history.ts → dist/editor/history.js} +12 -42
  13. package/dist/editor/history.js.map +1 -0
  14. package/{src/editor/index.ts → dist/editor/index.d.ts} +1 -3
  15. package/dist/editor/index.d.ts.map +1 -0
  16. package/dist/editor/index.js +5 -0
  17. package/dist/editor/index.js.map +1 -0
  18. package/dist/editor/layout.d.ts +8 -0
  19. package/dist/editor/layout.d.ts.map +1 -0
  20. package/{src/editor/layout.ts → dist/editor/layout.js} +36 -90
  21. package/dist/editor/layout.js.map +1 -0
  22. package/dist/formats/circuit-json/serializer.d.ts +86 -0
  23. package/dist/formats/circuit-json/serializer.d.ts.map +1 -0
  24. package/{src/formats/circuit-json/serializer.ts → dist/formats/circuit-json/serializer.js} +114 -414
  25. package/dist/formats/circuit-json/serializer.js.map +1 -0
  26. package/dist/formats/document.d.ts +64 -0
  27. package/dist/formats/document.d.ts.map +1 -0
  28. package/dist/formats/document.js +300 -0
  29. package/dist/formats/document.js.map +1 -0
  30. package/dist/formats/interchange/parser.d.ts +3 -0
  31. package/dist/formats/interchange/parser.d.ts.map +1 -0
  32. package/{src/formats/interchange/parser.ts → dist/formats/interchange/parser.js} +651 -299
  33. package/dist/formats/interchange/parser.js.map +1 -0
  34. package/dist/formats/interchange/serializer.d.ts +9 -0
  35. package/dist/formats/interchange/serializer.d.ts.map +1 -0
  36. package/{src/formats/interchange/serializer.ts → dist/formats/interchange/serializer.js} +151 -158
  37. package/dist/formats/interchange/serializer.js.map +1 -0
  38. package/dist/formats/ltspice/catalog.d.ts +19 -0
  39. package/dist/formats/ltspice/catalog.d.ts.map +1 -0
  40. package/{src/formats/ltspice/catalog.ts → dist/formats/ltspice/catalog.js} +18 -52
  41. package/dist/formats/ltspice/catalog.js.map +1 -0
  42. package/dist/formats/ltspice/encoding.d.ts +2 -0
  43. package/dist/formats/ltspice/encoding.d.ts.map +1 -0
  44. package/{src/formats/ltspice/encoding.ts → dist/formats/ltspice/encoding.js} +17 -41
  45. package/dist/formats/ltspice/encoding.js.map +1 -0
  46. package/dist/formats/ltspice/parser.d.ts +3 -0
  47. package/dist/formats/ltspice/parser.d.ts.map +1 -0
  48. package/{src/formats/ltspice/parser.ts → dist/formats/ltspice/parser.js} +39 -141
  49. package/dist/formats/ltspice/parser.js.map +1 -0
  50. package/dist/formats/ltspice/serializer.d.ts +7 -0
  51. package/dist/formats/ltspice/serializer.d.ts.map +1 -0
  52. package/{src/formats/ltspice/serializer.ts → dist/formats/ltspice/serializer.js} +18 -45
  53. package/dist/formats/ltspice/serializer.js.map +1 -0
  54. package/dist/formats/schx/catalog.d.ts +19 -0
  55. package/dist/formats/schx/catalog.d.ts.map +1 -0
  56. package/{src/formats/schx/catalog.ts → dist/formats/schx/catalog.js} +48 -101
  57. package/dist/formats/schx/catalog.js.map +1 -0
  58. package/dist/formats/schx/parser.d.ts +3 -0
  59. package/dist/formats/schx/parser.d.ts.map +1 -0
  60. package/{src/formats/schx/parser.ts → dist/formats/schx/parser.js} +31 -86
  61. package/dist/formats/schx/parser.js.map +1 -0
  62. package/dist/formats/schx/runtime-descriptors.d.ts +3 -0
  63. package/dist/formats/schx/runtime-descriptors.d.ts.map +1 -0
  64. package/{src/formats/schx/runtime-descriptors.ts → dist/formats/schx/runtime-descriptors.js} +36 -123
  65. package/dist/formats/schx/runtime-descriptors.js.map +1 -0
  66. package/dist/formats/schx/serializer.d.ts +5 -0
  67. package/dist/formats/schx/serializer.d.ts.map +1 -0
  68. package/{src/formats/schx/serializer.ts → dist/formats/schx/serializer.js} +17 -42
  69. package/dist/formats/schx/serializer.js.map +1 -0
  70. package/dist/formats/schx/transforms.d.ts +4 -0
  71. package/dist/formats/schx/transforms.d.ts.map +1 -0
  72. package/{src/formats/schx/transforms.ts → dist/formats/schx/transforms.js} +6 -10
  73. package/dist/formats/schx/transforms.js.map +1 -0
  74. package/dist/formats/spice/parser.d.ts +3 -0
  75. package/dist/formats/spice/parser.d.ts.map +1 -0
  76. package/{src/formats/spice/parser.ts → dist/formats/spice/parser.js} +50 -96
  77. package/dist/formats/spice/parser.js.map +1 -0
  78. package/dist/formats/spice/serializer.d.ts +3 -0
  79. package/dist/formats/spice/serializer.d.ts.map +1 -0
  80. package/{src/formats/spice/serializer.ts → dist/formats/spice/serializer.js} +8 -13
  81. package/dist/formats/spice/serializer.js.map +1 -0
  82. package/dist/index.d.ts +47 -0
  83. package/dist/index.d.ts.map +1 -0
  84. package/dist/index.js +32 -0
  85. package/dist/index.js.map +1 -0
  86. package/dist/model/connectivity.d.ts +16 -0
  87. package/dist/model/connectivity.d.ts.map +1 -0
  88. package/{src/model/connectivity.ts → dist/model/connectivity.js} +28 -63
  89. package/dist/model/connectivity.js.map +1 -0
  90. package/dist/model/netlist.d.ts +24 -0
  91. package/dist/model/netlist.d.ts.map +1 -0
  92. package/{src/model/netlist.ts → dist/model/netlist.js} +42 -110
  93. package/dist/model/netlist.js.map +1 -0
  94. package/dist/model/properties.d.ts +9 -0
  95. package/dist/model/properties.d.ts.map +1 -0
  96. package/{src/model/properties.ts → dist/model/properties.js} +10 -18
  97. package/dist/model/properties.js.map +1 -0
  98. package/dist/model/quantity.d.ts +3 -0
  99. package/dist/model/quantity.d.ts.map +1 -0
  100. package/{src/model/quantity.ts → dist/model/quantity.js} +7 -30
  101. package/dist/model/quantity.js.map +1 -0
  102. package/dist/model/types.d.ts +431 -0
  103. package/dist/model/types.d.ts.map +1 -0
  104. package/dist/model/types.js +10 -0
  105. package/dist/model/types.js.map +1 -0
  106. package/dist/model/validation.d.ts +32 -0
  107. package/dist/model/validation.d.ts.map +1 -0
  108. package/{src/model/validation.ts → dist/model/validation.js} +420 -323
  109. package/dist/model/validation.js.map +1 -0
  110. package/dist/model/wires.d.ts +3 -0
  111. package/dist/model/wires.d.ts.map +1 -0
  112. package/{src/model/wires.ts → dist/model/wires.js} +10 -16
  113. package/dist/model/wires.js.map +1 -0
  114. package/dist/panel/extract.d.ts +5 -0
  115. package/dist/panel/extract.d.ts.map +1 -0
  116. package/{src/panel/extract.ts → dist/panel/extract.js} +146 -235
  117. package/dist/panel/extract.js.map +1 -0
  118. package/dist/panel/index.d.ts +6 -0
  119. package/dist/panel/index.d.ts.map +1 -0
  120. package/dist/panel/index.js +5 -0
  121. package/dist/panel/index.js.map +1 -0
  122. package/dist/panel/knobs.d.ts +7 -0
  123. package/dist/panel/knobs.d.ts.map +1 -0
  124. package/{src/panel/knobs.ts → dist/panel/knobs.js} +7 -18
  125. package/dist/panel/knobs.js.map +1 -0
  126. package/dist/panel/protocol.d.ts +9 -0
  127. package/dist/panel/protocol.d.ts.map +1 -0
  128. package/{src/panel/protocol.ts → dist/panel/protocol.js} +10 -26
  129. package/dist/panel/protocol.js.map +1 -0
  130. package/{src/panel/types.ts → dist/panel/types.d.ts} +50 -89
  131. package/dist/panel/types.d.ts.map +1 -0
  132. package/dist/panel/types.js +2 -0
  133. package/dist/panel/types.js.map +1 -0
  134. package/dist/preview/bounds.d.ts +12 -0
  135. package/dist/preview/bounds.d.ts.map +1 -0
  136. package/{src/preview/bounds.ts → dist/preview/bounds.js} +15 -29
  137. package/dist/preview/bounds.js.map +1 -0
  138. package/dist/preview/box-layout.d.ts +4 -0
  139. package/dist/preview/box-layout.d.ts.map +1 -0
  140. package/{src/preview/box-layout.ts → dist/preview/box-layout.js} +2 -6
  141. package/dist/preview/box-layout.js.map +1 -0
  142. package/dist/preview/colors.d.ts +3 -0
  143. package/dist/preview/colors.d.ts.map +1 -0
  144. package/{src/preview/colors.ts → dist/preview/colors.js} +3 -5
  145. package/dist/preview/colors.js.map +1 -0
  146. package/dist/preview/hanging.d.ts +8 -0
  147. package/dist/preview/hanging.d.ts.map +1 -0
  148. package/{src/preview/hanging.ts → dist/preview/hanging.js} +9 -28
  149. package/dist/preview/hanging.js.map +1 -0
  150. package/dist/preview/junctions.d.ts +3 -0
  151. package/dist/preview/junctions.d.ts.map +1 -0
  152. package/{src/preview/junctions.ts → dist/preview/junctions.js} +9 -24
  153. package/dist/preview/junctions.js.map +1 -0
  154. package/dist/preview/label-layout.d.ts +12 -0
  155. package/dist/preview/label-layout.d.ts.map +1 -0
  156. package/{src/preview/label-layout.ts → dist/preview/label-layout.js} +15 -36
  157. package/dist/preview/label-layout.js.map +1 -0
  158. package/dist/preview/ports.d.ts +17 -0
  159. package/dist/preview/ports.d.ts.map +1 -0
  160. package/{src/preview/ports.ts → dist/preview/ports.js} +10 -37
  161. package/dist/preview/ports.js.map +1 -0
  162. package/dist/preview/renderable-wires.d.ts +3 -0
  163. package/dist/preview/renderable-wires.d.ts.map +1 -0
  164. package/{src/preview/renderable-wires.ts → dist/preview/renderable-wires.js} +12 -29
  165. package/dist/preview/renderable-wires.js.map +1 -0
  166. package/dist/preview/routing.d.ts +4 -0
  167. package/dist/preview/routing.d.ts.map +1 -0
  168. package/dist/preview/routing.js +13 -0
  169. package/dist/preview/routing.js.map +1 -0
  170. package/dist/preview/snap.d.ts +9 -0
  171. package/dist/preview/snap.d.ts.map +1 -0
  172. package/{src/preview/snap.ts → dist/preview/snap.js} +9 -31
  173. package/dist/preview/snap.js.map +1 -0
  174. package/dist/preview/symbols/svg-content.d.ts +7 -0
  175. package/dist/preview/symbols/svg-content.d.ts.map +1 -0
  176. package/{src/preview/symbols/svg-content.ts → dist/preview/symbols/svg-content.js} +3 -6
  177. package/dist/preview/symbols/svg-content.js.map +1 -0
  178. package/dist/preview/symbols.d.ts +7 -0
  179. package/dist/preview/symbols.d.ts.map +1 -0
  180. package/{src/preview/symbols.ts → dist/preview/symbols.js} +18 -43
  181. package/dist/preview/symbols.js.map +1 -0
  182. package/dist/preview/wire-chains.d.ts +4 -0
  183. package/dist/preview/wire-chains.d.ts.map +1 -0
  184. package/{src/preview/wire-chains.ts → dist/preview/wire-chains.js} +37 -37
  185. package/dist/preview/wire-chains.js.map +1 -0
  186. package/package.json +3 -3
  187. package/src/formats/document.ts +0 -274
  188. package/src/index.ts +0 -205
  189. package/src/model/types.ts +0 -309
  190. package/src/panel/index.ts +0 -39
  191. package/src/preview/routing.ts +0 -15
  192. package/src/preview/symbols/analog-switch.svg +0 -17
  193. package/src/preview/symbols/battery.svg +0 -16
  194. package/src/preview/symbols/bbd.svg +0 -21
  195. package/src/preview/symbols/bjt-npn.svg +0 -16
  196. package/src/preview/symbols/bjt-pnp.svg +0 -17
  197. package/src/preview/symbols/capacitor-electrolytic.svg +0 -13
  198. package/src/preview/symbols/capacitor.svg +0 -12
  199. package/src/preview/symbols/current-source.svg +0 -14
  200. package/src/preview/symbols/delay-ic.svg +0 -22
  201. package/src/preview/symbols/diode-schottky.svg +0 -12
  202. package/src/preview/symbols/diode-zener.svg +0 -12
  203. package/src/preview/symbols/diode.svg +0 -13
  204. package/src/preview/symbols/flipflop.svg +0 -20
  205. package/src/preview/symbols/ground.svg +0 -12
  206. package/src/preview/symbols/ic-block.svg +0 -20
  207. package/src/preview/symbols/ic.svg +0 -19
  208. package/src/preview/symbols/inductor.svg +0 -11
  209. package/src/preview/symbols/jack-input.svg +0 -16
  210. package/src/preview/symbols/jack-output.svg +0 -16
  211. package/src/preview/symbols/jfet-junction-n.svg +0 -17
  212. package/src/preview/symbols/jfet-n.svg +0 -17
  213. package/src/preview/symbols/jfet-p.svg +0 -17
  214. package/src/preview/symbols/label.svg +0 -8
  215. package/src/preview/symbols/led.svg +0 -18
  216. package/src/preview/symbols/mosfet-n.svg +0 -21
  217. package/src/preview/symbols/mosfet-p.svg +0 -21
  218. package/src/preview/symbols/named-wire.svg +0 -11
  219. package/src/preview/symbols/opamp.svg +0 -21
  220. package/src/preview/symbols/optocoupler.svg +0 -30
  221. package/src/preview/symbols/ota.svg +0 -20
  222. package/src/preview/symbols/pentode.svg +0 -25
  223. package/src/preview/symbols/photoresistor.svg +0 -19
  224. package/src/preview/symbols/port.svg +0 -8
  225. package/src/preview/symbols/potentiometer.svg +0 -15
  226. package/src/preview/symbols/power-amp.svg +0 -20
  227. package/src/preview/symbols/rail.svg +0 -11
  228. package/src/preview/symbols/regulator.svg +0 -13
  229. package/src/preview/symbols/relay.svg +0 -20
  230. package/src/preview/symbols/resistor.svg +0 -11
  231. package/src/preview/symbols/switch-3pdt.svg +0 -32
  232. package/src/preview/symbols/switch-rotary.svg +0 -23
  233. package/src/preview/symbols/switch-spdt.svg +0 -16
  234. package/src/preview/symbols/switch-spst.svg +0 -14
  235. package/src/preview/symbols/switch-toggle.svg +0 -14
  236. package/src/preview/symbols/transformer.svg +0 -17
  237. package/src/preview/symbols/triode.svg +0 -17
  238. package/src/preview/symbols/tube-diode.svg +0 -13
  239. package/src/preview/symbols/unsupported.svg +0 -8
  240. package/src/preview/symbols/variable-resistor.svg +0 -13
  241. package/src/preview/symbols/voltage-source.svg +0 -15
@@ -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';