@tscircuit/checks 0.0.167 → 0.0.169

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
@@ -332,7 +332,10 @@ var addStartAndEndPortIdsIfMissing = (soup) => {
332
332
  };
333
333
 
334
334
  // lib/check-each-pcb-port-connected-to-pcb-trace.ts
335
- import { getFullConnectivityMapFromCircuitJson } from "circuit-json-to-connectivity-map";
335
+ import {
336
+ getFullConnectivityMapFromCircuitJson,
337
+ PcbConnectivityMap
338
+ } from "circuit-json-to-connectivity-map";
336
339
 
337
340
  // lib/util/get-readable-names.ts
338
341
  import {
@@ -470,14 +473,41 @@ function checkEachPcbPortConnectedToPcbTraces(circuitJson) {
470
473
  const pcbPorts = circuitJson.filter(
471
474
  (item) => item.type === "pcb_port"
472
475
  );
476
+ const sourceNets = circuitJson.filter(
477
+ (item) => item.type === "source_net"
478
+ );
473
479
  const errors = [];
474
480
  const connectivityMap = getFullConnectivityMapFromCircuitJson(circuitJson);
481
+ const pcbConnectivityMap = new PcbConnectivityMap(circuitJson);
475
482
  const sourcePortToPcbPort = /* @__PURE__ */ new Map();
476
483
  for (const pcbPort of pcbPorts) {
477
484
  sourcePortToPcbPort.set(pcbPort.source_port_id, pcbPort);
478
485
  }
486
+ const sourceNetNameById = new Map(
487
+ sourceNets.map((sourceNet) => [sourceNet.source_net_id, sourceNet.name])
488
+ );
479
489
  for (const sourceTrace of sourceTraces) {
480
490
  const connectedSourcePortIds = sourceTrace.connected_source_port_ids;
491
+ if (connectedSourcePortIds.length === 1 && sourceTrace.connected_source_net_ids.length > 0) {
492
+ const pcbPort = sourcePortToPcbPort.get(connectedSourcePortIds[0]);
493
+ if (!pcbPort) continue;
494
+ const connectedPcbTraces = pcbConnectivityMap.getAllTracesConnectedToPort(
495
+ pcbPort.pcb_port_id
496
+ );
497
+ if (connectedPcbTraces.length === 0) {
498
+ const connectedNetNames = sourceTrace.connected_source_net_ids.map((sourceNetId) => sourceNetNameById.get(sourceNetId)).filter((name) => Boolean(name));
499
+ const netDescription = connectedNetNames.length > 0 ? `net [${connectedNetNames.join(", ")}]` : "its connected net";
500
+ errors.push({
501
+ type: "pcb_port_not_connected_error",
502
+ message: `Port [${getReadableNameForPort(circuitJson, pcbPort.pcb_port_id)}] is not connected to ${netDescription} by a PCB trace.`,
503
+ error_type: "pcb_port_not_connected_error",
504
+ pcb_port_ids: [pcbPort.pcb_port_id],
505
+ pcb_component_ids: pcbPort.pcb_component_id ? [pcbPort.pcb_component_id] : [],
506
+ pcb_port_not_connected_error_id: `pcb_port_not_connected_error_trace_${sourceTrace.source_trace_id}`
507
+ });
508
+ }
509
+ continue;
510
+ }
481
511
  if (connectedSourcePortIds.length < 2) {
482
512
  continue;
483
513
  }
@@ -2552,7 +2582,7 @@ import {
2552
2582
  getReadableNameForPcbPort as getReadableNameForPcbPort2,
2553
2583
  getReadableNameForPcbTrace
2554
2584
  } from "@tscircuit/circuit-json-util";
2555
- import { PcbConnectivityMap } from "circuit-json-to-connectivity-map";
2585
+ import { PcbConnectivityMap as PcbConnectivityMap2 } from "circuit-json-to-connectivity-map";
2556
2586
  function getRoutePointCenter(point) {
2557
2587
  if (point.route_type === "through_pad") {
2558
2588
  return {
@@ -2640,7 +2670,7 @@ function checkTracesAreContiguous(circuitJson) {
2640
2670
  (el) => el.type === "pcb_plated_hole"
2641
2671
  );
2642
2672
  const padMap = /* @__PURE__ */ new Map();
2643
- const pcbConnectivityMap = new PcbConnectivityMap(circuitJson);
2673
+ const pcbConnectivityMap = new PcbConnectivityMap2(circuitJson);
2644
2674
  const checkedSourceTraceIds = /* @__PURE__ */ new Set();
2645
2675
  for (const pad of pcbSmtPads) {
2646
2676
  if (pad.pcb_port_id) {