@vessel-dsp/core 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +10 -0
- package/package.json +1 -1
- package/src/formats/document.ts +145 -3
- package/src/formats/interchange/parser.ts +667 -9
- package/src/formats/interchange/serializer.ts +96 -1
- package/src/index.ts +51 -1
- package/src/model/types.ts +302 -1
- package/src/model/validation.ts +579 -1
|
@@ -15,14 +15,19 @@ import type {
|
|
|
15
15
|
ControlOutput,
|
|
16
16
|
DocumentSource,
|
|
17
17
|
PanelElementBinding,
|
|
18
|
+
PanelElementPhysicalPlacement,
|
|
18
19
|
PanelElementPlacement,
|
|
19
20
|
PanelFace,
|
|
21
|
+
PanelFaceGeometry,
|
|
20
22
|
PanelGridLayout,
|
|
21
23
|
PanelGridPosition,
|
|
22
24
|
PanelPlacementMetadata,
|
|
23
25
|
Point,
|
|
24
26
|
PropertyValue,
|
|
25
27
|
Terminal,
|
|
28
|
+
VdspBuildDataObject,
|
|
29
|
+
VdspBuildDataScalar,
|
|
30
|
+
VdspBuildDataValue,
|
|
26
31
|
Warning,
|
|
27
32
|
Wire,
|
|
28
33
|
} from '../../model/types';
|
|
@@ -44,8 +49,9 @@ export function serializeInterchangeYaml(
|
|
|
44
49
|
options: SerializeInterchangeYamlOptions = {},
|
|
45
50
|
): string {
|
|
46
51
|
const connectivity = resolveConnectivity(doc);
|
|
52
|
+
const schema = hasV3OnlyFields(doc) ? 'circuit-interchange/v3' : 'circuit-interchange/v2';
|
|
47
53
|
const root: MutableYamlObject = {
|
|
48
|
-
schema
|
|
54
|
+
schema,
|
|
49
55
|
metadata: {
|
|
50
56
|
name: doc.metadata.name,
|
|
51
57
|
description: doc.metadata.description,
|
|
@@ -62,6 +68,21 @@ export function serializeInterchangeYaml(
|
|
|
62
68
|
if (doc.controlContexts !== undefined) {
|
|
63
69
|
root.controlContexts = doc.controlContexts.map(controlContextBlock);
|
|
64
70
|
}
|
|
71
|
+
if (doc.mechanical !== undefined) {
|
|
72
|
+
root.mechanical = buildDataObjectBlock(doc.mechanical);
|
|
73
|
+
}
|
|
74
|
+
if (doc.build !== undefined) {
|
|
75
|
+
root.build = buildDataObjectBlock(doc.build);
|
|
76
|
+
}
|
|
77
|
+
if (doc.bom !== undefined) {
|
|
78
|
+
root.bom = buildDataObjectBlock(doc.bom);
|
|
79
|
+
}
|
|
80
|
+
if (doc.partProfiles !== undefined) {
|
|
81
|
+
root.partProfiles = buildDataObjectBlock(doc.partProfiles);
|
|
82
|
+
}
|
|
83
|
+
if (doc.footprints !== undefined) {
|
|
84
|
+
root.footprints = buildDataObjectBlock(doc.footprints);
|
|
85
|
+
}
|
|
65
86
|
if (doc.deviceInterface !== undefined) {
|
|
66
87
|
root.deviceInterface = deviceInterfaceBlock(doc.deviceInterface);
|
|
67
88
|
}
|
|
@@ -74,6 +95,9 @@ export function serializeInterchangeYaml(
|
|
|
74
95
|
if (doc.controlOutputs !== undefined) {
|
|
75
96
|
root.controlOutputs = doc.controlOutputs.map(controlOutputBlock);
|
|
76
97
|
}
|
|
98
|
+
if (doc.offBoardWiring !== undefined) {
|
|
99
|
+
root.offBoardWiring = buildDataObjectBlock(doc.offBoardWiring);
|
|
100
|
+
}
|
|
77
101
|
Object.assign(root, {
|
|
78
102
|
components: doc.components.map((component) => componentBlock(component, connectivity)),
|
|
79
103
|
nodes: nodeBlocks(connectivity),
|
|
@@ -82,10 +106,36 @@ export function serializeInterchangeYaml(
|
|
|
82
106
|
diagnostics: doc.warnings.map(warningBlock),
|
|
83
107
|
rawAttributes: doc.rawAttributes,
|
|
84
108
|
});
|
|
109
|
+
if (doc.boards !== undefined) {
|
|
110
|
+
root.boards = doc.boards.map(buildDataObjectBlock);
|
|
111
|
+
}
|
|
85
112
|
|
|
86
113
|
return `${emitYaml(root, 0)}\n`;
|
|
87
114
|
}
|
|
88
115
|
|
|
116
|
+
function hasV3OnlyFields(doc: CircuitDocument): boolean {
|
|
117
|
+
return doc.mechanical !== undefined
|
|
118
|
+
|| doc.build !== undefined
|
|
119
|
+
|| doc.bom !== undefined
|
|
120
|
+
|| doc.partProfiles !== undefined
|
|
121
|
+
|| doc.footprints !== undefined
|
|
122
|
+
|| doc.offBoardWiring !== undefined
|
|
123
|
+
|| doc.boards !== undefined
|
|
124
|
+
|| hasV3PanelFields(doc.panel);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
function hasV3PanelFields(panel: PanelPlacementMetadata | undefined): boolean {
|
|
128
|
+
return panel?.faces.some((face) =>
|
|
129
|
+
face.geometry !== undefined
|
|
130
|
+
|| face.elements.some((element) =>
|
|
131
|
+
element.id !== undefined
|
|
132
|
+
|| element.physical !== undefined
|
|
133
|
+
|| element.kind === 'selector'
|
|
134
|
+
|| element.kind === 'footswitch'
|
|
135
|
+
)
|
|
136
|
+
) ?? false;
|
|
137
|
+
}
|
|
138
|
+
|
|
89
139
|
function deviceBlock(device: CircuitDocumentDevice): MutableYamlObject {
|
|
90
140
|
const out: MutableYamlObject = {
|
|
91
141
|
kind: device.kind,
|
|
@@ -313,6 +363,9 @@ function panelFaceBlock(face: PanelFace): MutableYamlObject {
|
|
|
313
363
|
out.label = face.label;
|
|
314
364
|
}
|
|
315
365
|
out.layout = panelLayoutBlock(face.layout);
|
|
366
|
+
if (face.geometry !== undefined) {
|
|
367
|
+
out.geometry = panelFaceGeometryBlock(face.geometry);
|
|
368
|
+
}
|
|
316
369
|
out.elements = face.elements.map(panelElementBlock);
|
|
317
370
|
return out;
|
|
318
371
|
}
|
|
@@ -339,15 +392,29 @@ function panelElementBlock(element: PanelElementPlacement): MutableYamlObject {
|
|
|
339
392
|
kind: element.kind,
|
|
340
393
|
grid: panelGridPositionBlock(element.grid),
|
|
341
394
|
};
|
|
395
|
+
if (element.id !== undefined) {
|
|
396
|
+
out.id = element.id;
|
|
397
|
+
}
|
|
342
398
|
if (element.label !== undefined) {
|
|
343
399
|
out.label = element.label;
|
|
344
400
|
}
|
|
345
401
|
if (element.interfaceControlId !== undefined) {
|
|
346
402
|
out.interfaceControlId = element.interfaceControlId;
|
|
347
403
|
}
|
|
404
|
+
if (element.physical !== undefined) {
|
|
405
|
+
out.physical = panelElementPhysicalBlock(element.physical);
|
|
406
|
+
}
|
|
348
407
|
return out;
|
|
349
408
|
}
|
|
350
409
|
|
|
410
|
+
function panelFaceGeometryBlock(geometry: PanelFaceGeometry): MutableYamlObject {
|
|
411
|
+
return buildDataObjectBlock(geometry);
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
function panelElementPhysicalBlock(physical: PanelElementPhysicalPlacement): MutableYamlObject {
|
|
415
|
+
return buildDataObjectBlock(physical);
|
|
416
|
+
}
|
|
417
|
+
|
|
351
418
|
function panelElementBindingBlock(binding: PanelElementBinding): MutableYamlObject {
|
|
352
419
|
const out: MutableYamlObject = {
|
|
353
420
|
componentId: binding.componentId,
|
|
@@ -476,6 +543,26 @@ function pointBlock(point: Point): MutableYamlObject {
|
|
|
476
543
|
};
|
|
477
544
|
}
|
|
478
545
|
|
|
546
|
+
function buildDataObjectBlock(value: VdspBuildDataObject): MutableYamlObject {
|
|
547
|
+
const out: MutableYamlObject = {};
|
|
548
|
+
for (const [key, child] of Object.entries(value)) {
|
|
549
|
+
if (child !== undefined) {
|
|
550
|
+
out[key] = buildDataValueBlock(child);
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
return out;
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
function buildDataValueBlock(value: VdspBuildDataValue): YamlValue {
|
|
557
|
+
if (isBuildDataScalar(value)) {
|
|
558
|
+
return value;
|
|
559
|
+
}
|
|
560
|
+
if (isBuildDataArray(value)) {
|
|
561
|
+
return value.map(buildDataValueBlock);
|
|
562
|
+
}
|
|
563
|
+
return buildDataObjectBlock(value);
|
|
564
|
+
}
|
|
565
|
+
|
|
479
566
|
function emitYaml(value: YamlValue, indent: number): string {
|
|
480
567
|
if (isScalar(value)) {
|
|
481
568
|
return `${spaces(indent)}${formatScalar(value)}`;
|
|
@@ -556,6 +643,14 @@ function isYamlArray(value: YamlValue): value is readonly YamlValue[] {
|
|
|
556
643
|
return Array.isArray(value);
|
|
557
644
|
}
|
|
558
645
|
|
|
646
|
+
function isBuildDataScalar(value: VdspBuildDataValue): value is VdspBuildDataScalar {
|
|
647
|
+
return value === null || typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean';
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
function isBuildDataArray(value: VdspBuildDataValue): value is readonly VdspBuildDataValue[] {
|
|
651
|
+
return Array.isArray(value);
|
|
652
|
+
}
|
|
653
|
+
|
|
559
654
|
function formatKey(key: string): string {
|
|
560
655
|
return isPlainScalar(key) ? key : JSON.stringify(key);
|
|
561
656
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,11 +1,40 @@
|
|
|
1
|
-
export const VERSION = '0.
|
|
1
|
+
export const VERSION = '0.6.0';
|
|
2
2
|
|
|
3
3
|
export type {
|
|
4
|
+
BoardApplicability,
|
|
5
|
+
BoardEdgeTerminal,
|
|
6
|
+
BoardFamily,
|
|
7
|
+
BoardFootprint,
|
|
8
|
+
BoardFootprintCatalog,
|
|
9
|
+
BoardFootprintPlacement,
|
|
10
|
+
BoardHole,
|
|
11
|
+
BoardKind,
|
|
12
|
+
BoardNet,
|
|
13
|
+
BoardNetlist,
|
|
14
|
+
BoardNetMember,
|
|
15
|
+
BoardNetRef,
|
|
16
|
+
BoardPlacedPad,
|
|
17
|
+
BoardRealization,
|
|
18
|
+
BoardReview,
|
|
19
|
+
BoardRoute,
|
|
20
|
+
BoardSourceCircuitHash,
|
|
21
|
+
BoardSubtype,
|
|
22
|
+
BuildBom,
|
|
23
|
+
BuildBomItem,
|
|
24
|
+
BuildBomRef,
|
|
25
|
+
BuildBomRefKind,
|
|
26
|
+
BuildCompleteness,
|
|
27
|
+
BuildIntent,
|
|
28
|
+
BuildPartProfile,
|
|
29
|
+
BuildPartProfileCatalog,
|
|
30
|
+
BuildScope,
|
|
31
|
+
CanonicalCircuitNetRef,
|
|
4
32
|
CircuitDocument,
|
|
5
33
|
CircuitDocumentDevice,
|
|
6
34
|
CircuitDocumentDeviceKind,
|
|
7
35
|
Component,
|
|
8
36
|
ComponentKind,
|
|
37
|
+
ComponentTerminalRef,
|
|
9
38
|
ControlApplicabilityPredicate,
|
|
10
39
|
ControlContext,
|
|
11
40
|
ControlGroup,
|
|
@@ -23,12 +52,25 @@ export type {
|
|
|
23
52
|
DeviceInterfaceControlKind,
|
|
24
53
|
DocumentMetadata,
|
|
25
54
|
DocumentSource,
|
|
55
|
+
MechanicalBuildMetadata,
|
|
56
|
+
MillimeterRect,
|
|
57
|
+
OffBoardSignalRef,
|
|
58
|
+
OffBoardWireAttributes,
|
|
59
|
+
OffBoardWiringConnection,
|
|
60
|
+
OffBoardWiringCoverage,
|
|
61
|
+
OffBoardWiringEndpoint,
|
|
62
|
+
OffBoardWiringEndpointKind,
|
|
63
|
+
OffBoardWiringHarness,
|
|
64
|
+
OffBoardWiringHarnessStatus,
|
|
65
|
+
OffBoardWiringPlan,
|
|
26
66
|
PanelColumnOrder,
|
|
27
67
|
PanelControlKind,
|
|
28
68
|
PanelControlPlacement,
|
|
29
69
|
PanelElementBinding,
|
|
70
|
+
PanelElementPhysicalPlacement,
|
|
30
71
|
PanelElementPlacement,
|
|
31
72
|
PanelFace,
|
|
73
|
+
PanelFaceGeometry,
|
|
32
74
|
PanelGridIndexing,
|
|
33
75
|
PanelGridLayout,
|
|
34
76
|
PanelGridPosition,
|
|
@@ -40,6 +82,9 @@ export type {
|
|
|
40
82
|
PropertyValue,
|
|
41
83
|
Rotation,
|
|
42
84
|
Terminal,
|
|
85
|
+
VdspBuildDataObject,
|
|
86
|
+
VdspBuildDataScalar,
|
|
87
|
+
VdspBuildDataValue,
|
|
43
88
|
Warning,
|
|
44
89
|
Wire,
|
|
45
90
|
} from './model/types';
|
|
@@ -87,6 +132,10 @@ export type {
|
|
|
87
132
|
SerializeCircuitDocumentFileOptions,
|
|
88
133
|
SerializeVdspCircuitDocumentOptions,
|
|
89
134
|
ConvertCircuitDocumentFileOptions,
|
|
135
|
+
ConvertCircuitDocumentFileWithReportOptions,
|
|
136
|
+
CircuitDocumentConversionDiagnostic,
|
|
137
|
+
CircuitDocumentConversionLossPolicy,
|
|
138
|
+
CircuitDocumentFileConversionReport,
|
|
90
139
|
VdspSchemaValidationIssue,
|
|
91
140
|
VdspSchemaValidationResult,
|
|
92
141
|
} from './formats/document';
|
|
@@ -102,6 +151,7 @@ export {
|
|
|
102
151
|
parseCircuitDocumentFile,
|
|
103
152
|
serializeCircuitDocumentFile,
|
|
104
153
|
convertCircuitDocumentFile,
|
|
154
|
+
convertCircuitDocumentFileWithReport,
|
|
105
155
|
serializeVdspCircuitDocument,
|
|
106
156
|
} from './formats/document';
|
|
107
157
|
export { parseLtspiceAsc } from './formats/ltspice/parser';
|
package/src/model/types.ts
CHANGED
|
@@ -236,7 +236,7 @@ export type PanelGridLayout = Readonly<{
|
|
|
236
236
|
columnOrder?: PanelColumnOrder;
|
|
237
237
|
}>;
|
|
238
238
|
|
|
239
|
-
export type PanelControlKind = 'knob' | 'slider' | 'switch' | 'led' | 'jack';
|
|
239
|
+
export type PanelControlKind = 'knob' | 'slider' | 'switch' | 'selector' | 'footswitch' | 'led' | 'jack';
|
|
240
240
|
|
|
241
241
|
export type PanelGridPosition = Readonly<{
|
|
242
242
|
row: number;
|
|
@@ -253,11 +253,13 @@ export type PanelElementBinding = Readonly<{
|
|
|
253
253
|
}>;
|
|
254
254
|
|
|
255
255
|
export type PanelElementPlacement = Readonly<{
|
|
256
|
+
id?: string;
|
|
256
257
|
bind: PanelElementBinding;
|
|
257
258
|
kind: PanelControlKind;
|
|
258
259
|
grid: PanelGridPosition;
|
|
259
260
|
label?: string;
|
|
260
261
|
interfaceControlId?: string;
|
|
262
|
+
physical?: PanelElementPhysicalPlacement;
|
|
261
263
|
}>;
|
|
262
264
|
|
|
263
265
|
/** @deprecated Use PanelElementPlacement. */
|
|
@@ -267,6 +269,7 @@ export type PanelFace = Readonly<{
|
|
|
267
269
|
id: string;
|
|
268
270
|
label?: string;
|
|
269
271
|
layout: PanelGridLayout;
|
|
272
|
+
geometry?: PanelFaceGeometry;
|
|
270
273
|
elements: readonly PanelElementPlacement[];
|
|
271
274
|
}>;
|
|
272
275
|
|
|
@@ -274,6 +277,297 @@ export type PanelPlacementMetadata = Readonly<{
|
|
|
274
277
|
faces: readonly PanelFace[];
|
|
275
278
|
}>;
|
|
276
279
|
|
|
280
|
+
export type VdspBuildDataScalar = string | number | boolean | null;
|
|
281
|
+
|
|
282
|
+
export type VdspBuildDataValue = VdspBuildDataScalar | readonly VdspBuildDataValue[] | VdspBuildDataObject;
|
|
283
|
+
|
|
284
|
+
export type VdspBuildDataObject = Readonly<{
|
|
285
|
+
readonly [key: string]: VdspBuildDataValue | undefined;
|
|
286
|
+
}>;
|
|
287
|
+
|
|
288
|
+
export type MillimeterRect = Readonly<{
|
|
289
|
+
x: number;
|
|
290
|
+
y: number;
|
|
291
|
+
width: number;
|
|
292
|
+
height: number;
|
|
293
|
+
}>;
|
|
294
|
+
|
|
295
|
+
export type PanelFaceGeometry = VdspBuildDataObject & Readonly<{
|
|
296
|
+
units?: string;
|
|
297
|
+
surface?: string;
|
|
298
|
+
usableRectMm?: MillimeterRect;
|
|
299
|
+
}>;
|
|
300
|
+
|
|
301
|
+
export type PanelElementPhysicalPlacement = VdspBuildDataObject & Readonly<{
|
|
302
|
+
units?: string;
|
|
303
|
+
centerMm?: Point;
|
|
304
|
+
drillDiameterMm?: number;
|
|
305
|
+
partProfileId?: string;
|
|
306
|
+
locked?: boolean;
|
|
307
|
+
}>;
|
|
308
|
+
|
|
309
|
+
export type BuildIntent = 'diy-build-artifact' | 'schema-review-sample';
|
|
310
|
+
|
|
311
|
+
export type BuildCompleteness = 'complete-selected-build' | 'partial-offboard-wiring';
|
|
312
|
+
|
|
313
|
+
export type BuildScope = VdspBuildDataObject & Readonly<{
|
|
314
|
+
schema: 'build-scope/v1';
|
|
315
|
+
intent?: BuildIntent;
|
|
316
|
+
completeness?: BuildCompleteness;
|
|
317
|
+
selectedBoardId?: string;
|
|
318
|
+
selectedOffBoardWiringHarnessIds?: readonly string[];
|
|
319
|
+
alternateBoardIds?: readonly string[];
|
|
320
|
+
bomScope?: string;
|
|
321
|
+
}>;
|
|
322
|
+
|
|
323
|
+
export type MechanicalBuildMetadata = VdspBuildDataObject & Readonly<{
|
|
324
|
+
schema?: string;
|
|
325
|
+
units?: string;
|
|
326
|
+
coordinateSystem?: VdspBuildDataObject;
|
|
327
|
+
enclosure?: VdspBuildDataObject & Readonly<{
|
|
328
|
+
profileId?: string;
|
|
329
|
+
label?: string;
|
|
330
|
+
outerSizeMm?: VdspBuildDataObject;
|
|
331
|
+
wallThicknessMm?: number;
|
|
332
|
+
}>;
|
|
333
|
+
internalBoard?: VdspBuildDataObject & Readonly<{
|
|
334
|
+
preferredBoardId?: string;
|
|
335
|
+
usableRectMm?: MillimeterRect;
|
|
336
|
+
keepoutRectsMm?: readonly VdspBuildDataObject[];
|
|
337
|
+
}>;
|
|
338
|
+
}>;
|
|
339
|
+
|
|
340
|
+
export type BuildBomRefKind =
|
|
341
|
+
| 'component'
|
|
342
|
+
| 'device-interface-control'
|
|
343
|
+
| 'panel-element'
|
|
344
|
+
| 'board'
|
|
345
|
+
| 'freeform-build-item';
|
|
346
|
+
|
|
347
|
+
export type BuildBomRef = VdspBuildDataObject & Readonly<{
|
|
348
|
+
kind: BuildBomRefKind;
|
|
349
|
+
componentId?: string;
|
|
350
|
+
controlId?: string;
|
|
351
|
+
panelElementId?: string;
|
|
352
|
+
boardId?: string;
|
|
353
|
+
label?: string;
|
|
354
|
+
}>;
|
|
355
|
+
|
|
356
|
+
export type BuildBomItem = VdspBuildDataObject & Readonly<{
|
|
357
|
+
id: string;
|
|
358
|
+
refs: readonly BuildBomRef[];
|
|
359
|
+
quantity: number;
|
|
360
|
+
value?: string;
|
|
361
|
+
partProfileId?: string;
|
|
362
|
+
category?: string;
|
|
363
|
+
sku?: string;
|
|
364
|
+
}>;
|
|
365
|
+
|
|
366
|
+
export type BuildBom = VdspBuildDataObject & Readonly<{
|
|
367
|
+
schema: 'build-bom/v1';
|
|
368
|
+
items: readonly BuildBomItem[];
|
|
369
|
+
}>;
|
|
370
|
+
|
|
371
|
+
export type BuildPartProfile = VdspBuildDataObject & Readonly<{
|
|
372
|
+
id: string;
|
|
373
|
+
kind?: string;
|
|
374
|
+
}>;
|
|
375
|
+
|
|
376
|
+
export type BuildPartProfileCatalog = VdspBuildDataObject & Readonly<{
|
|
377
|
+
schema: 'part-profile-catalog/v1';
|
|
378
|
+
resolution?: string;
|
|
379
|
+
units?: string;
|
|
380
|
+
profiles: readonly BuildPartProfile[];
|
|
381
|
+
}>;
|
|
382
|
+
|
|
383
|
+
export type BoardFootprint = VdspBuildDataObject & Readonly<{
|
|
384
|
+
id: string;
|
|
385
|
+
boardApplicability?: BoardApplicability;
|
|
386
|
+
}>;
|
|
387
|
+
|
|
388
|
+
export type BoardFootprintCatalog = VdspBuildDataObject & Readonly<{
|
|
389
|
+
schema: 'board-footprint-catalog/v1';
|
|
390
|
+
resolution?: string;
|
|
391
|
+
units?: string;
|
|
392
|
+
footprints: readonly BoardFootprint[];
|
|
393
|
+
}>;
|
|
394
|
+
|
|
395
|
+
export type OffBoardWiringCoverage = 'selected-build-complete' | 'representative-selected-build-endpoints';
|
|
396
|
+
|
|
397
|
+
export type OffBoardWiringHarnessStatus = 'complete' | 'partial' | 'candidate';
|
|
398
|
+
|
|
399
|
+
export type OffBoardWiringEndpointKind =
|
|
400
|
+
| 'panel-component-terminal'
|
|
401
|
+
| 'board-terminal'
|
|
402
|
+
| 'power-terminal'
|
|
403
|
+
| 'footswitch-terminal'
|
|
404
|
+
| 'free-wire-label';
|
|
405
|
+
|
|
406
|
+
export type OffBoardWiringEndpoint = VdspBuildDataObject & Readonly<{
|
|
407
|
+
id: string;
|
|
408
|
+
kind: OffBoardWiringEndpointKind;
|
|
409
|
+
componentId?: string;
|
|
410
|
+
terminalName?: string;
|
|
411
|
+
panelElementId?: string;
|
|
412
|
+
boardId?: string;
|
|
413
|
+
terminalId?: string;
|
|
414
|
+
label?: string;
|
|
415
|
+
}>;
|
|
416
|
+
|
|
417
|
+
export type BoardNetRef = VdspBuildDataObject & Readonly<{
|
|
418
|
+
source: 'board-netlist';
|
|
419
|
+
boardId?: string;
|
|
420
|
+
netId: string;
|
|
421
|
+
}>;
|
|
422
|
+
|
|
423
|
+
export type CanonicalCircuitNetRef = VdspBuildDataObject & Readonly<{
|
|
424
|
+
source: 'canonical-circuit';
|
|
425
|
+
member?: ComponentTerminalRef;
|
|
426
|
+
}>;
|
|
427
|
+
|
|
428
|
+
export type OffBoardSignalRef = BoardNetRef | CanonicalCircuitNetRef | VdspBuildDataObject;
|
|
429
|
+
|
|
430
|
+
export type OffBoardWireAttributes = VdspBuildDataObject & Readonly<{
|
|
431
|
+
color?: string;
|
|
432
|
+
gaugeAwg?: number;
|
|
433
|
+
reviewedLengthMm?: number;
|
|
434
|
+
groupId?: string;
|
|
435
|
+
}>;
|
|
436
|
+
|
|
437
|
+
export type OffBoardWiringConnection = VdspBuildDataObject & Readonly<{
|
|
438
|
+
id: string;
|
|
439
|
+
fromEndpointId: string;
|
|
440
|
+
toEndpointId: string;
|
|
441
|
+
signalRef?: OffBoardSignalRef;
|
|
442
|
+
wire?: OffBoardWireAttributes;
|
|
443
|
+
}>;
|
|
444
|
+
|
|
445
|
+
export type OffBoardWiringHarness = VdspBuildDataObject & Readonly<{
|
|
446
|
+
id: string;
|
|
447
|
+
status?: OffBoardWiringHarnessStatus;
|
|
448
|
+
notes?: string;
|
|
449
|
+
endpoints: readonly OffBoardWiringEndpoint[];
|
|
450
|
+
connections: readonly OffBoardWiringConnection[];
|
|
451
|
+
}>;
|
|
452
|
+
|
|
453
|
+
export type OffBoardWiringPlan = VdspBuildDataObject & Readonly<{
|
|
454
|
+
schema: 'offboard-wiring/v1';
|
|
455
|
+
source?: string;
|
|
456
|
+
coverage?: OffBoardWiringCoverage;
|
|
457
|
+
harnesses: readonly OffBoardWiringHarness[];
|
|
458
|
+
}>;
|
|
459
|
+
|
|
460
|
+
export type BoardFamily = 'prototype-board' | 'fabricated-board';
|
|
461
|
+
|
|
462
|
+
export type BoardKind = 'stripboard' | 'perfboard' | 'breadboard-pattern' | 'pcb';
|
|
463
|
+
|
|
464
|
+
export type BoardSubtype =
|
|
465
|
+
| 'veroboard'
|
|
466
|
+
| 'isolated-pad'
|
|
467
|
+
| 'solderable-half-breadboard'
|
|
468
|
+
| 'single-sided-through-hole'
|
|
469
|
+
| 'two-layer-through-hole';
|
|
470
|
+
|
|
471
|
+
export type BoardApplicability = VdspBuildDataObject & Readonly<{
|
|
472
|
+
family: BoardFamily;
|
|
473
|
+
kind: BoardKind;
|
|
474
|
+
subtype?: BoardSubtype;
|
|
475
|
+
}>;
|
|
476
|
+
|
|
477
|
+
export type ComponentTerminalRef = VdspBuildDataObject & Readonly<{
|
|
478
|
+
componentId: string;
|
|
479
|
+
terminalName: string;
|
|
480
|
+
}>;
|
|
481
|
+
|
|
482
|
+
export type BoardSourceCircuitHash = VdspBuildDataObject & Readonly<{
|
|
483
|
+
schema: 'canonical-circuit-facts-hash/v1';
|
|
484
|
+
hashAlgorithm: 'sha256';
|
|
485
|
+
hash: string;
|
|
486
|
+
}>;
|
|
487
|
+
|
|
488
|
+
export type BoardHole = VdspBuildDataObject & Readonly<{
|
|
489
|
+
row: number;
|
|
490
|
+
column: number;
|
|
491
|
+
}>;
|
|
492
|
+
|
|
493
|
+
export type BoardEdgeTerminal = VdspBuildDataObject & Readonly<{
|
|
494
|
+
id: string;
|
|
495
|
+
role?: string;
|
|
496
|
+
terminalRef?: ComponentTerminalRef;
|
|
497
|
+
hole?: BoardHole;
|
|
498
|
+
}>;
|
|
499
|
+
|
|
500
|
+
export type BoardPlacedPad = VdspBuildDataObject & Readonly<{
|
|
501
|
+
padId: string;
|
|
502
|
+
terminalName?: string;
|
|
503
|
+
hole?: BoardHole;
|
|
504
|
+
positionMm?: Point;
|
|
505
|
+
}>;
|
|
506
|
+
|
|
507
|
+
export type BoardFootprintPlacement = VdspBuildDataObject & Readonly<{
|
|
508
|
+
componentId: string;
|
|
509
|
+
footprintId: string;
|
|
510
|
+
atGrid?: BoardHole;
|
|
511
|
+
atMm?: Point;
|
|
512
|
+
rotationDeg?: number;
|
|
513
|
+
pads: readonly BoardPlacedPad[];
|
|
514
|
+
}>;
|
|
515
|
+
|
|
516
|
+
export type BoardNetMember = VdspBuildDataObject & Readonly<{
|
|
517
|
+
componentId: string;
|
|
518
|
+
terminalName: string;
|
|
519
|
+
padId?: string;
|
|
520
|
+
terminalId?: string;
|
|
521
|
+
}>;
|
|
522
|
+
|
|
523
|
+
export type BoardNet = VdspBuildDataObject & Readonly<{
|
|
524
|
+
id: string;
|
|
525
|
+
name?: string;
|
|
526
|
+
members: readonly BoardNetMember[];
|
|
527
|
+
}>;
|
|
528
|
+
|
|
529
|
+
export type BoardNetlist = VdspBuildDataObject & Readonly<{
|
|
530
|
+
source?: string;
|
|
531
|
+
nets: readonly BoardNet[];
|
|
532
|
+
}>;
|
|
533
|
+
|
|
534
|
+
export type BoardRoute = VdspBuildDataObject & Readonly<{
|
|
535
|
+
id: string;
|
|
536
|
+
netRef?: BoardNetRef | CanonicalCircuitNetRef | VdspBuildDataObject;
|
|
537
|
+
locked?: boolean;
|
|
538
|
+
conductors?: readonly VdspBuildDataObject[];
|
|
539
|
+
copper?: readonly VdspBuildDataObject[];
|
|
540
|
+
vias?: readonly VdspBuildDataObject[];
|
|
541
|
+
zones?: readonly VdspBuildDataObject[];
|
|
542
|
+
drills?: readonly VdspBuildDataObject[];
|
|
543
|
+
}>;
|
|
544
|
+
|
|
545
|
+
export type BoardReview = VdspBuildDataObject & Readonly<{
|
|
546
|
+
status?: 'buildable' | 'candidate' | 'stale' | string;
|
|
547
|
+
reviewedBy?: string;
|
|
548
|
+
reviewedAt?: string;
|
|
549
|
+
notes?: string;
|
|
550
|
+
}>;
|
|
551
|
+
|
|
552
|
+
export type BoardRealization = VdspBuildDataObject & Readonly<{
|
|
553
|
+
id: string;
|
|
554
|
+
schema: 'circuit-board/v1';
|
|
555
|
+
family: BoardFamily;
|
|
556
|
+
kind: BoardKind;
|
|
557
|
+
subtype?: BoardSubtype;
|
|
558
|
+
source?: string;
|
|
559
|
+
units?: string;
|
|
560
|
+
locked?: boolean;
|
|
561
|
+
sourceCircuit?: BoardSourceCircuitHash;
|
|
562
|
+
edgeTerminals: readonly BoardEdgeTerminal[];
|
|
563
|
+
footprintPlacements: readonly BoardFootprintPlacement[];
|
|
564
|
+
netlist?: BoardNetlist;
|
|
565
|
+
routes: readonly BoardRoute[];
|
|
566
|
+
zones?: readonly VdspBuildDataObject[];
|
|
567
|
+
drills?: readonly VdspBuildDataObject[];
|
|
568
|
+
review?: BoardReview;
|
|
569
|
+
}>;
|
|
570
|
+
|
|
277
571
|
export type Warning = Readonly<{
|
|
278
572
|
code: string;
|
|
279
573
|
message: string;
|
|
@@ -287,6 +581,13 @@ export type CircuitDocument = Readonly<{
|
|
|
287
581
|
device?: CircuitDocumentDevice;
|
|
288
582
|
controlGroups?: readonly ControlGroup[];
|
|
289
583
|
controlContexts?: readonly ControlContext[];
|
|
584
|
+
mechanical?: MechanicalBuildMetadata;
|
|
585
|
+
build?: BuildScope;
|
|
586
|
+
bom?: BuildBom;
|
|
587
|
+
partProfiles?: BuildPartProfileCatalog;
|
|
588
|
+
footprints?: BoardFootprintCatalog;
|
|
589
|
+
offBoardWiring?: OffBoardWiringPlan;
|
|
590
|
+
boards?: readonly BoardRealization[];
|
|
290
591
|
deviceInterface?: DeviceInterface;
|
|
291
592
|
panel?: PanelPlacementMetadata;
|
|
292
593
|
controlInterfaces?: readonly ControlInterface[];
|