@tscircuit/checks 0.0.145 → 0.0.146

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
@@ -1,5 +1,5 @@
1
1
  import * as circuit_json from 'circuit-json';
2
- import { AnyCircuitElement, PcbPortNotConnectedError, PcbTraceError, PcbPlacementError, PcbComponentOutsideBoardError, PcbViaClearanceError, PcbTraceWarning, PcbTraceMissingError, PcbFootprintOverlapError, PcbPadPadClearanceError, PcbPadTraceClearanceError, PcbViaTraceClearanceError, SourceComponentPinsUnderspecifiedWarning, SourceNoPowerPinDefinedWarning, SourceNoGroundPinDefinedWarning, PcbConnectorNotInAccessibleOrientationWarning } from 'circuit-json';
2
+ import { AnyCircuitElement, PcbPortNotConnectedError, PcbTraceError, PcbPlacementError, PcbComponentOutsideBoardError, PcbViaClearanceError, PcbTraceWarning, PcbTraceMissingError, PcbFootprintOverlapError, PcbTraceTooLongWarning, PcbPadPadClearanceError, PcbPadTraceClearanceError, PcbViaTraceClearanceError, SourceComponentPinsUnderspecifiedWarning, SourceNoPowerPinDefinedWarning, SourceNoGroundPinDefinedWarning, PcbConnectorNotInAccessibleOrientationWarning } from 'circuit-json';
3
3
  import { ConnectivityMap } from 'circuit-json-to-connectivity-map';
4
4
 
5
5
  declare function checkEachPcbPortConnectedToPcbTraces(circuitJson: AnyCircuitElement[]): PcbPortNotConnectedError[];
@@ -63,6 +63,8 @@ declare function checkPcbTracesOutOfBoard(circuitJson: AnyCircuitElement[], conf
63
63
  */
64
64
  declare function checkPcbComponentOverlap(circuitJson: AnyCircuitElement[]): PcbFootprintOverlapError[];
65
65
 
66
+ declare const checkPcbTraceLengths: (circuitJson: AnyCircuitElement[]) => PcbTraceTooLongWarning[];
67
+
66
68
  declare function checkPadPadClearance(circuitJson: AnyCircuitElement[], { connMap, minClearance, }?: {
67
69
  connMap?: ConnectivityMap;
68
70
  minClearance?: number;
@@ -137,8 +139,8 @@ declare function runAllNetlistChecks(circuitJson: AnyCircuitElement[]): Promise<
137
139
  subcircuit_id?: string;
138
140
  }[]>;
139
141
  declare function runAllPinSpecificationChecks(circuitJson: AnyCircuitElement[]): Promise<(circuit_json.SourceComponentPinsUnderspecifiedWarning | circuit_json.SourceNoPowerPinDefinedWarning | circuit_json.SourceNoGroundPinDefinedWarning)[]>;
140
- declare function runAllRoutingChecks(circuitJson: AnyCircuitElement[]): Promise<(circuit_json.PcbPortNotConnectedError | circuit_json.PcbTraceError | circuit_json.PcbViaClearanceError | circuit_json.PcbTraceMissingError | circuit_json.PcbPadTraceClearanceError | circuit_json.PcbViaTraceClearanceError)[]>;
141
- declare function runAllChecks(circuitJson: AnyCircuitElement[]): Promise<(circuit_json.PcbPortNotConnectedError | circuit_json.PcbTraceError | circuit_json.PcbPlacementError | circuit_json.PcbComponentOutsideBoardError | circuit_json.PcbViaClearanceError | circuit_json.PcbTraceMissingError | circuit_json.PcbFootprintOverlapError | circuit_json.PcbPadPadClearanceError | circuit_json.PcbPadTraceClearanceError | circuit_json.PcbViaTraceClearanceError | {
142
+ declare function runAllRoutingChecks(circuitJson: AnyCircuitElement[]): Promise<(circuit_json.PcbPortNotConnectedError | circuit_json.PcbTraceError | circuit_json.PcbViaClearanceError | circuit_json.PcbTraceMissingError | circuit_json.PcbTraceTooLongWarning | circuit_json.PcbPadTraceClearanceError | circuit_json.PcbViaTraceClearanceError)[]>;
143
+ declare function runAllChecks(circuitJson: AnyCircuitElement[]): Promise<(circuit_json.PcbPortNotConnectedError | circuit_json.PcbTraceError | circuit_json.PcbPlacementError | circuit_json.PcbComponentOutsideBoardError | circuit_json.PcbViaClearanceError | circuit_json.PcbTraceMissingError | circuit_json.PcbFootprintOverlapError | circuit_json.PcbTraceTooLongWarning | circuit_json.PcbPadPadClearanceError | circuit_json.PcbPadTraceClearanceError | circuit_json.PcbViaTraceClearanceError | {
142
144
  type: "source_pin_must_be_connected_error";
143
145
  source_pin_must_be_connected_error_id: string;
144
146
  error_type: "source_pin_must_be_connected_error";
@@ -150,4 +152,4 @@ declare function runAllChecks(circuitJson: AnyCircuitElement[]): Promise<(circui
150
152
 
151
153
  declare function checkConnectorAccessibleOrientation(circuitJson: AnyCircuitElement[]): PcbConnectorNotInAccessibleOrientationWarning[];
152
154
 
153
- export { NetManager, checkAllPinsInComponentAreUnderspecified, checkConnectorAccessibleOrientation, checkDifferentNetViaSpacing, checkEachPcbPortConnectedToPcbTraces, checkEachPcbTraceNonOverlapping, checkNoGroundPinDefined, checkNoPowerPinDefined, checkPadPadClearance, checkPadTraceClearance, checkPcbComponentOverlap, checkPcbComponentsOutOfBoard, checkPcbTracesOutOfBoard, checkPinMustBeConnected, checkSameNetViaSpacing, checkSourceTracesHavePcbTraces, checkSourceTracesMatchPcbTraceThickness, checkTracesAreContiguous, checkViaTraceClearance, checkViasOffBoard, dedupePcbDrcErrors, runAllChecks, runAllNetlistChecks, runAllPinSpecificationChecks, runAllPlacementChecks, runAllRoutingChecks };
155
+ export { NetManager, checkAllPinsInComponentAreUnderspecified, checkConnectorAccessibleOrientation, checkDifferentNetViaSpacing, checkEachPcbPortConnectedToPcbTraces, checkEachPcbTraceNonOverlapping, checkNoGroundPinDefined, checkNoPowerPinDefined, checkPadPadClearance, checkPadTraceClearance, checkPcbComponentOverlap, checkPcbComponentsOutOfBoard, checkPcbTraceLengths, checkPcbTracesOutOfBoard, checkPinMustBeConnected, checkSameNetViaSpacing, checkSourceTracesHavePcbTraces, checkSourceTracesMatchPcbTraceThickness, checkTracesAreContiguous, checkViaTraceClearance, checkViasOffBoard, dedupePcbDrcErrors, runAllChecks, runAllNetlistChecks, runAllPinSpecificationChecks, runAllPlacementChecks, runAllRoutingChecks };
package/dist/index.js CHANGED
@@ -2491,6 +2491,68 @@ function checkPcbComponentOverlap(circuitJson) {
2491
2491
  return errors;
2492
2492
  }
2493
2493
 
2494
+ // lib/check-pcb-trace-lengths.ts
2495
+ var DEFAULT_VIA_LENGTH_MM = 1.6;
2496
+ var getRoutePointPosition = (routePoint) => routePoint.route_type === "through_pad" ? routePoint.start : { x: routePoint.x, y: routePoint.y };
2497
+ var getPcbTraceLength = (pcbTrace) => {
2498
+ if (pcbTrace.trace_length !== void 0) return pcbTrace.trace_length;
2499
+ let traceLength = 0;
2500
+ for (let routePointIndex = 0; routePointIndex < pcbTrace.route.length; routePointIndex++) {
2501
+ const routePoint = pcbTrace.route[routePointIndex];
2502
+ if (!routePoint) continue;
2503
+ if (routePoint.route_type === "via") {
2504
+ traceLength += DEFAULT_VIA_LENGTH_MM;
2505
+ continue;
2506
+ }
2507
+ const nextRoutePoint = pcbTrace.route[routePointIndex + 1];
2508
+ if (!nextRoutePoint) continue;
2509
+ const routePointPosition = getRoutePointPosition(routePoint);
2510
+ const nextRoutePointPosition = getRoutePointPosition(nextRoutePoint);
2511
+ traceLength += Math.hypot(
2512
+ nextRoutePointPosition.x - routePointPosition.x,
2513
+ nextRoutePointPosition.y - routePointPosition.y
2514
+ );
2515
+ }
2516
+ return traceLength;
2517
+ };
2518
+ var checkPcbTraceLengths = (circuitJson) => {
2519
+ const sourceTraces = circuitJson.filter(
2520
+ (element) => element.type === "source_trace"
2521
+ );
2522
+ const pcbTraces = circuitJson.filter(
2523
+ (element) => element.type === "pcb_trace"
2524
+ );
2525
+ const sourceTracesById = new Map(
2526
+ sourceTraces.map((sourceTrace) => [
2527
+ sourceTrace.source_trace_id,
2528
+ sourceTrace
2529
+ ])
2530
+ );
2531
+ const warnings = [];
2532
+ for (const pcbTrace of pcbTraces) {
2533
+ if (!pcbTrace.source_trace_id) continue;
2534
+ const sourceTrace = sourceTracesById.get(pcbTrace.source_trace_id);
2535
+ if (!sourceTrace) continue;
2536
+ const maximumTraceLength = sourceTrace.max_length;
2537
+ if (typeof maximumTraceLength !== "number") continue;
2538
+ const actualTraceLength = getPcbTraceLength(pcbTrace);
2539
+ if (actualTraceLength <= maximumTraceLength) continue;
2540
+ warnings.push({
2541
+ type: "pcb_trace_too_long_warning",
2542
+ pcb_trace_too_long_warning_id: `pcb_trace_too_long_warning_${pcbTrace.pcb_trace_id}`,
2543
+ warning_type: "pcb_trace_too_long_warning",
2544
+ message: `PCB trace is ${actualTraceLength.toFixed(2)}mm long, exceeding the ${maximumTraceLength}mm maximum`,
2545
+ pcb_trace_id: pcbTrace.pcb_trace_id,
2546
+ source_trace_id: sourceTrace.source_trace_id,
2547
+ source_net_id: sourceTrace.connected_source_net_ids[0],
2548
+ actual_trace_length: actualTraceLength,
2549
+ maximum_trace_length: maximumTraceLength,
2550
+ subcircuit_id: pcbTrace.subcircuit_id ?? sourceTrace.subcircuit_id
2551
+ });
2552
+ }
2553
+ return warnings;
2554
+ };
2555
+
2494
2556
  // lib/check-pad-pad-clearance.ts
2495
2557
  import {
2496
2558
  getPrimaryId as getPrimaryId3,
@@ -3113,6 +3175,7 @@ async function runAllRoutingChecks(circuitJson) {
3113
3175
  return [
3114
3176
  ...checkEachPcbPortConnectedToPcbTraces(circuitJson),
3115
3177
  ...checkSourceTracesHavePcbTraces(circuitJson),
3178
+ ...checkPcbTraceLengths(circuitJson),
3116
3179
  ...checkEachPcbTraceNonOverlapping(circuitJson),
3117
3180
  ...checkPadTraceClearance(circuitJson),
3118
3181
  ...checkViaTraceClearance(circuitJson),
@@ -3143,6 +3206,7 @@ export {
3143
3206
  checkPadTraceClearance,
3144
3207
  checkPcbComponentOverlap,
3145
3208
  checkPcbComponentsOutOfBoard,
3209
+ checkPcbTraceLengths,
3146
3210
  checkPcbTracesOutOfBoard,
3147
3211
  checkPinMustBeConnected,
3148
3212
  checkSameNetViaSpacing,