@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 +36 -21
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
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
|
|
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
|
-
|
|
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) =>
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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 ??=
|
|
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
|
|
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 ??=
|
|
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
|
|
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 ??=
|
|
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: (
|
|
2707
|
-
y: (
|
|
2721
|
+
x: (firstPointCenter.x + lastPointCenter.x) / 2,
|
|
2722
|
+
y: (firstPointCenter.y + lastPointCenter.y) / 2
|
|
2708
2723
|
};
|
|
2709
2724
|
}
|
|
2710
2725
|
function checkTracesAreContiguous(circuitJson) {
|