@tscircuit/checks 0.0.166 → 0.0.168

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/index.d.ts CHANGED
@@ -86,6 +86,9 @@ declare function checkPcbComponentsMissingCourtyard(circuitJson: AnyCircuitEleme
86
86
 
87
87
  declare const checkPcbTraceLengths: (circuitJson: AnyCircuitElement[]) => PcbTraceTooLongWarning[];
88
88
 
89
+ /** Return a routing error when a source trace exceeds its maximum via count. */
90
+ declare const checkPcbTraceViaCounts: (circuitJson: AnyCircuitElement[]) => PcbTraceError[];
91
+
89
92
  declare function checkPadPadClearance(circuitJson: AnyCircuitElement[], { connMap, minClearance, }?: {
90
93
  connMap?: ConnectivityMap;
91
94
  minClearance?: number;
@@ -195,4 +198,4 @@ declare function checkConnectorAccessibleOrientation(circuitJson: AnyCircuitElem
195
198
  */
196
199
  declare function checkTestPointAccessibility(circuitJson: AnyCircuitElement[]): PcbPlacementError[];
197
200
 
198
- export { NetManager, checkAllPinsInComponentAreUnderspecified, checkConnectorAccessibleOrientation, checkCopperToBoardEdgeClearance, checkDifferentNetViaSpacing, checkEachPcbPortConnectedToPcbTraces, checkEachPcbTraceNonOverlapping, checkNoGroundPinDefined, checkNoPowerPinDefined, checkPadPadClearance, checkPadTraceClearance, checkPcbComponentOverCutout, checkPcbComponentOverlap, checkPcbComponentsMissingCourtyard, checkPcbComponentsOutOfBoard, checkPcbTraceLengths, checkPcbTracesOutOfBoard, checkPinMustBeConnected, checkSameNetViaSpacing, checkSchematicComponentExcessiveVerticalPadding, checkSourceTracesHavePcbTraces, checkSourceTracesMatchPcbTraceThickness, checkTestPointAccessibility, checkTracesAreContiguous, checkViaPadClearance, checkViaTraceClearance, checkViasInPads, checkViasOffBoard, dedupePcbDrcErrors, runAllChecks, runAllNetlistChecks, runAllPinSpecificationChecks, runAllPlacementChecks, runAllRoutingChecks, runAllSchematicChecks };
201
+ export { NetManager, checkAllPinsInComponentAreUnderspecified, checkConnectorAccessibleOrientation, checkCopperToBoardEdgeClearance, checkDifferentNetViaSpacing, checkEachPcbPortConnectedToPcbTraces, checkEachPcbTraceNonOverlapping, checkNoGroundPinDefined, checkNoPowerPinDefined, checkPadPadClearance, checkPadTraceClearance, checkPcbComponentOverCutout, checkPcbComponentOverlap, checkPcbComponentsMissingCourtyard, checkPcbComponentsOutOfBoard, checkPcbTraceLengths, checkPcbTraceViaCounts, checkPcbTracesOutOfBoard, checkPinMustBeConnected, checkSameNetViaSpacing, checkSchematicComponentExcessiveVerticalPadding, checkSourceTracesHavePcbTraces, checkSourceTracesMatchPcbTraceThickness, checkTestPointAccessibility, checkTracesAreContiguous, checkViaPadClearance, checkViaTraceClearance, checkViasInPads, checkViasOffBoard, dedupePcbDrcErrors, runAllChecks, runAllNetlistChecks, runAllPinSpecificationChecks, runAllPlacementChecks, runAllRoutingChecks, runAllSchematicChecks };
package/dist/index.js CHANGED
@@ -3147,6 +3147,54 @@ var checkPcbTraceLengths = (circuitJson) => {
3147
3147
  return warnings;
3148
3148
  };
3149
3149
 
3150
+ // lib/check-pcb-trace-via-counts.ts
3151
+ var checkPcbTraceViaCounts = (circuitJson) => {
3152
+ const sourceTraces = circuitJson.filter(
3153
+ (element) => element.type === "source_trace"
3154
+ );
3155
+ const pcbTraces = circuitJson.filter(
3156
+ (element) => element.type === "pcb_trace"
3157
+ );
3158
+ const pcbPorts = circuitJson.filter(
3159
+ (element) => element.type === "pcb_port"
3160
+ );
3161
+ const errors = [];
3162
+ for (const sourceTrace of sourceTraces) {
3163
+ const maximumViaCount = sourceTrace.max_via_count;
3164
+ if (typeof maximumViaCount !== "number") continue;
3165
+ const routedPcbTraces = pcbTraces.filter(
3166
+ (pcbTrace) => pcbTrace.source_trace_id === sourceTrace.source_trace_id
3167
+ );
3168
+ if (routedPcbTraces.length === 0) continue;
3169
+ const actualViaCount = routedPcbTraces.reduce(
3170
+ (viaCount, pcbTrace) => viaCount + pcbTrace.route.filter((routePoint) => routePoint.route_type === "via").length,
3171
+ 0
3172
+ );
3173
+ if (actualViaCount <= maximumViaCount) continue;
3174
+ const connectedPcbPorts = pcbPorts.filter(
3175
+ (pcbPort) => pcbPort.source_port_id !== void 0 && sourceTrace.connected_source_port_ids.includes(pcbPort.source_port_id)
3176
+ );
3177
+ errors.push({
3178
+ type: "pcb_trace_error",
3179
+ pcb_trace_error_id: `max_via_count_exceeded_${sourceTrace.source_trace_id}`,
3180
+ error_type: "pcb_trace_error",
3181
+ message: `PCB trace uses ${actualViaCount} vias, exceeding the ${maximumViaCount} maximum`,
3182
+ pcb_trace_id: routedPcbTraces[0].pcb_trace_id,
3183
+ source_trace_id: sourceTrace.source_trace_id,
3184
+ pcb_component_ids: [
3185
+ ...new Set(
3186
+ connectedPcbPorts.map((pcbPort) => pcbPort.pcb_component_id).filter(
3187
+ (pcbComponentId) => pcbComponentId !== void 0
3188
+ )
3189
+ )
3190
+ ],
3191
+ pcb_port_ids: connectedPcbPorts.map((pcbPort) => pcbPort.pcb_port_id),
3192
+ subcircuit_id: routedPcbTraces[0].subcircuit_id ?? sourceTrace.subcircuit_id
3193
+ });
3194
+ }
3195
+ return errors;
3196
+ };
3197
+
3150
3198
  // lib/check-pad-pad-clearance.ts
3151
3199
  import {
3152
3200
  getPrimaryId as getPrimaryId3,
@@ -4039,6 +4087,7 @@ async function runAllRoutingChecks(circuitJson) {
4039
4087
  ...checkEachPcbPortConnectedToPcbTraces(circuitJson),
4040
4088
  ...checkSourceTracesHavePcbTraces(circuitJson),
4041
4089
  ...checkPcbTraceLengths(circuitJson),
4090
+ ...checkPcbTraceViaCounts(circuitJson),
4042
4091
  ...checkEachPcbTraceNonOverlapping(circuitJson),
4043
4092
  ...checkPadTraceClearance(circuitJson),
4044
4093
  ...checkViaTraceClearance(circuitJson),
@@ -4075,6 +4124,7 @@ export {
4075
4124
  checkPcbComponentsMissingCourtyard,
4076
4125
  checkPcbComponentsOutOfBoard,
4077
4126
  checkPcbTraceLengths,
4127
+ checkPcbTraceViaCounts,
4078
4128
  checkPcbTracesOutOfBoard,
4079
4129
  checkPinMustBeConnected,
4080
4130
  checkSameNetViaSpacing,