@tscircuit/checks 0.0.131 → 0.0.133

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.js CHANGED
@@ -858,11 +858,13 @@ var getRadiusOfCircuitJsonElement = (obj) => {
858
858
  // lib/check-each-pcb-trace-non-overlapping/check-each-pcb-trace-non-overlapping.ts
859
859
  function checkEachPcbTraceNonOverlapping(circuitJson, {
860
860
  connMap,
861
- minClearance = DEFAULT_TRACE_MARGIN
861
+ minClearance
862
862
  } = {}) {
863
863
  const errors = [];
864
864
  addStartAndEndPortIdsIfMissing(circuitJson);
865
865
  connMap ??= getFullConnectivityMapFromCircuitJson2(circuitJson);
866
+ const board = getPcbBoard(circuitJson);
867
+ minClearance ??= getBoardDrcValue(board, "min_trace_to_pad_edge_clearance") ?? DEFAULT_TRACE_MARGIN;
866
868
  const pcbTraces = cju(circuitJson).pcb_trace.list();
867
869
  const pcbTraceSegments = pcbTraces.flatMap((pcbTrace) => {
868
870
  const segments = [];
@@ -1572,11 +1574,7 @@ function checkSourceTracesMatchPcbTraceThickness(circuitJson) {
1572
1574
  }
1573
1575
 
1574
1576
  // lib/check-source-traces-have-pcb-traces.ts
1575
- var getSourceTraceIdsFromPcbTrace = (pcbTraceSourceTraceId) => {
1576
- if (!pcbTraceSourceTraceId) return [];
1577
- if (!pcbTraceSourceTraceId.includes("__")) return [pcbTraceSourceTraceId];
1578
- return pcbTraceSourceTraceId.split("__").filter((part) => part.startsWith("source_trace_"));
1579
- };
1577
+ import { getFullConnectivityMapFromCircuitJson as getFullConnectivityMapFromCircuitJson6 } from "circuit-json-to-connectivity-map";
1580
1578
  function checkSourceTracesHavePcbTraces(circuitJson) {
1581
1579
  const errors = [];
1582
1580
  const sourceTraces = circuitJson.filter(
@@ -1585,19 +1583,25 @@ function checkSourceTracesHavePcbTraces(circuitJson) {
1585
1583
  const pcbTraces = circuitJson.filter(
1586
1584
  (el) => el.type === "pcb_trace"
1587
1585
  );
1586
+ const pcbPorts = circuitJson.filter(
1587
+ (el) => el.type === "pcb_port"
1588
+ );
1589
+ const sourcePortToPcbPort = new Map(
1590
+ pcbPorts.map((pcbPort) => [pcbPort.source_port_id, pcbPort])
1591
+ );
1592
+ const connectivityMap = getFullConnectivityMapFromCircuitJson6(circuitJson);
1588
1593
  for (const sourceTrace of sourceTraces) {
1589
1594
  if (!sourceTrace.connected_source_port_ids?.length) continue;
1590
1595
  if ((sourceTrace.connected_source_net_ids?.length ?? 0) > 0) continue;
1591
1596
  if (sourceTrace.connected_source_port_ids.length < 2) continue;
1592
1597
  const hasPcbTrace = pcbTraces.some(
1593
- (pcbTrace) => getSourceTraceIdsFromPcbTrace(pcbTrace.source_trace_id).includes(
1594
- sourceTrace.source_trace_id
1598
+ (pcbTrace) => connectivityMap.areIdsConnected(
1599
+ sourceTrace.source_trace_id,
1600
+ pcbTrace.pcb_trace_id
1595
1601
  )
1596
1602
  );
1597
1603
  if (!hasPcbTrace) {
1598
- const connectedPcbPorts = circuitJson.filter(
1599
- (el) => el.type === "pcb_port" && sourceTrace.connected_source_port_ids.includes(el.source_port_id)
1600
- );
1604
+ const connectedPcbPorts = sourceTrace.connected_source_port_ids.map((sourcePortId) => sourcePortToPcbPort.get(sourcePortId)).filter((pcbPort) => pcbPort !== void 0);
1601
1605
  const connectedPcbComponentIds = Array.from(
1602
1606
  new Set(
1603
1607
  connectedPcbPorts.map((port) => port.pcb_component_id).filter((id) => id !== void 0)
@@ -1703,7 +1707,7 @@ import {
1703
1707
  getPrimaryId as getPrimaryId2
1704
1708
  } from "@tscircuit/circuit-json-util";
1705
1709
  import { doBoundsOverlap as doBoundsOverlap2 } from "@tscircuit/math-utils";
1706
- import { getFullConnectivityMapFromCircuitJson as getFullConnectivityMapFromCircuitJson6 } from "circuit-json-to-connectivity-map";
1710
+ import { getFullConnectivityMapFromCircuitJson as getFullConnectivityMapFromCircuitJson7 } from "circuit-json-to-connectivity-map";
1707
1711
 
1708
1712
  // lib/check-pcb-components-overlap/doPcbElementsOverlap.ts
1709
1713
  import { getBoundsOfPcbElements as getBoundsOfPcbElements3 } from "@tscircuit/circuit-json-util";
@@ -1739,7 +1743,7 @@ var formatOverlapElementDescription = (circuitJson, element) => {
1739
1743
  };
1740
1744
  function checkPcbComponentOverlap(circuitJson) {
1741
1745
  const errors = [];
1742
- const connMap = getFullConnectivityMapFromCircuitJson6(circuitJson);
1746
+ const connMap = getFullConnectivityMapFromCircuitJson7(circuitJson);
1743
1747
  const smtPads = cju4(circuitJson).pcb_smtpad.list();
1744
1748
  const platedHoles = cju4(circuitJson).pcb_plated_hole.list();
1745
1749
  const holes = cju4(circuitJson).pcb_hole.list();
@@ -1857,7 +1861,7 @@ import {
1857
1861
  getReadableNameForElement as getReadableNameForElement6
1858
1862
  } from "@tscircuit/circuit-json-util";
1859
1863
  import {
1860
- getFullConnectivityMapFromCircuitJson as getFullConnectivityMapFromCircuitJson7
1864
+ getFullConnectivityMapFromCircuitJson as getFullConnectivityMapFromCircuitJson8
1861
1865
  } from "circuit-json-to-connectivity-map";
1862
1866
 
1863
1867
  // lib/check-pad-clearance/common.ts
@@ -1970,7 +1974,7 @@ function checkPadPadClearance(circuitJson, {
1970
1974
  if (pads.length < 2) return [];
1971
1975
  const board = getPcbBoard(circuitJson);
1972
1976
  minClearance ??= getBoardDrcValue(board, "min_pad_edge_to_pad_edge_clearance") ?? jlcMinTolerances.min_pad_edge_to_pad_edge_clearance;
1973
- connMap ??= getFullConnectivityMapFromCircuitJson7(circuitJson);
1977
+ connMap ??= getFullConnectivityMapFromCircuitJson8(circuitJson);
1974
1978
  const spatialIndex = new SpatialObjectIndex({
1975
1979
  objects: pads,
1976
1980
  getBounds: getPadBounds,
@@ -2028,7 +2032,7 @@ import {
2028
2032
  segmentToCircleMinDistance as segmentToCircleMinDistance2
2029
2033
  } from "@tscircuit/math-utils";
2030
2034
  import {
2031
- getFullConnectivityMapFromCircuitJson as getFullConnectivityMapFromCircuitJson8
2035
+ getFullConnectivityMapFromCircuitJson as getFullConnectivityMapFromCircuitJson9
2032
2036
  } from "circuit-json-to-connectivity-map";
2033
2037
  function checkPadTraceClearance(circuitJson, {
2034
2038
  connMap,
@@ -2039,7 +2043,7 @@ function checkPadTraceClearance(circuitJson, {
2039
2043
  if (pads.length === 0 || segments.length === 0) return [];
2040
2044
  const board = getPcbBoard(circuitJson);
2041
2045
  minClearance ??= getBoardDrcValue(board, "min_trace_to_pad_edge_clearance") ?? jlcMinTolerances.min_trace_to_pad_edge_clearance;
2042
- connMap ??= getFullConnectivityMapFromCircuitJson8(circuitJson);
2046
+ connMap ??= getFullConnectivityMapFromCircuitJson9(circuitJson);
2043
2047
  const spatialIndex = new SpatialObjectIndex({
2044
2048
  objects: pads,
2045
2049
  getBounds: getPadBounds,
@@ -2094,7 +2098,7 @@ function checkPadTraceClearance(circuitJson, {
2094
2098
  import { getReadableNameForElement as getReadableNameForElement8 } from "@tscircuit/circuit-json-util";
2095
2099
  import { segmentToCircleMinDistance as segmentToCircleMinDistance3 } from "@tscircuit/math-utils";
2096
2100
  import {
2097
- getFullConnectivityMapFromCircuitJson as getFullConnectivityMapFromCircuitJson9
2101
+ getFullConnectivityMapFromCircuitJson as getFullConnectivityMapFromCircuitJson10
2098
2102
  } from "circuit-json-to-connectivity-map";
2099
2103
  var getClosestPointOnSegment = (point, segmentStart, segmentEnd) => {
2100
2104
  const dx = segmentEnd.x - segmentStart.x;
@@ -2122,7 +2126,7 @@ function checkViaTraceClearance(circuitJson, {
2122
2126
  if (vias.length === 0 || segments.length === 0) return [];
2123
2127
  const board = getPcbBoard(circuitJson);
2124
2128
  minClearance ??= getBoardDrcValue(board, "min_trace_to_pad_edge_clearance") ?? jlcMinTolerances.min_trace_to_pad_edge_clearance;
2125
- connMap ??= getFullConnectivityMapFromCircuitJson9(circuitJson);
2129
+ connMap ??= getFullConnectivityMapFromCircuitJson10(circuitJson);
2126
2130
  const errors = /* @__PURE__ */ new Map();
2127
2131
  for (const via of vias) {
2128
2132
  const viaRadius = via.outer_diameter / 2;
@@ -2649,6 +2653,15 @@ import {
2649
2653
  getReadableNameForPcbPort as getReadableNameForPcbPort2,
2650
2654
  getReadableNameForPcbTrace
2651
2655
  } from "@tscircuit/circuit-json-util";
2656
+ function getRoutePointCenter(point) {
2657
+ if (point.route_type === "through_pad") {
2658
+ return {
2659
+ x: (point.start.x + point.end.x) / 2,
2660
+ y: (point.start.y + point.end.y) / 2
2661
+ };
2662
+ }
2663
+ return { x: point.x, y: point.y };
2664
+ }
2652
2665
  function routePointConnectsToAnotherExpectedPort(point, expectedPorts, missingPcbPortId, padMap) {
2653
2666
  if (point.route_type !== "wire") return false;
2654
2667
  return expectedPorts.some((expectedPort) => {
@@ -2702,9 +2715,11 @@ function getMissingConnectionErrorCenter({
2702
2715
  } else if (lastWirePoint) {
2703
2716
  errorLocation = lastWirePoint;
2704
2717
  }
2718
+ const firstPointCenter = getRoutePointCenter(firstPoint);
2719
+ const lastPointCenter = getRoutePointCenter(lastPoint);
2705
2720
  return errorLocation ? { x: errorLocation.x, y: errorLocation.y } : {
2706
- x: (firstPoint.x + lastPoint.x) / 2,
2707
- y: (firstPoint.y + lastPoint.y) / 2
2721
+ x: (firstPointCenter.x + lastPointCenter.x) / 2,
2722
+ y: (firstPointCenter.y + lastPointCenter.y) / 2
2708
2723
  };
2709
2724
  }
2710
2725
  function checkTracesAreContiguous(circuitJson) {