@tscircuit/checks 0.0.177 → 0.0.178

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
@@ -3383,6 +3383,19 @@ var getPcbTraceLength = (pcbTrace) => {
3383
3383
  }
3384
3384
  return traceLength;
3385
3385
  };
3386
+ var getReferencedPcbPortIds = (pcbTrace) => {
3387
+ const pcbPortIds = /* @__PURE__ */ new Set();
3388
+ for (const routePoint of pcbTrace.route) {
3389
+ if (routePoint.route_type !== "wire") continue;
3390
+ if (routePoint.start_pcb_port_id) {
3391
+ pcbPortIds.add(routePoint.start_pcb_port_id);
3392
+ }
3393
+ if (routePoint.end_pcb_port_id) {
3394
+ pcbPortIds.add(routePoint.end_pcb_port_id);
3395
+ }
3396
+ }
3397
+ return pcbPortIds;
3398
+ };
3386
3399
  var checkPcbTraceLengths = (circuitJson) => {
3387
3400
  const sourceTraces = circuitJson.filter(
3388
3401
  (element) => element.type === "source_trace"
@@ -3390,12 +3403,53 @@ var checkPcbTraceLengths = (circuitJson) => {
3390
3403
  const pcbTraces = circuitJson.filter(
3391
3404
  (element) => element.type === "pcb_trace"
3392
3405
  );
3406
+ const pcbPorts = circuitJson.filter(
3407
+ (element) => element.type === "pcb_port"
3408
+ );
3393
3409
  const sourceTracesById = new Map(
3394
3410
  sourceTraces.map((sourceTrace) => [
3395
3411
  sourceTrace.source_trace_id,
3396
3412
  sourceTrace
3397
3413
  ])
3398
3414
  );
3415
+ const pcbPortIdsBySourcePortId = /* @__PURE__ */ new Map();
3416
+ for (const pcbPort of pcbPorts) {
3417
+ if (!pcbPort.source_port_id) continue;
3418
+ const pcbPortIds = pcbPortIdsBySourcePortId.get(pcbPort.source_port_id) ?? /* @__PURE__ */ new Set();
3419
+ pcbPortIds.add(pcbPort.pcb_port_id);
3420
+ pcbPortIdsBySourcePortId.set(pcbPort.source_port_id, pcbPortIds);
3421
+ }
3422
+ const pcbTracesBySourceTraceId = /* @__PURE__ */ new Map();
3423
+ for (const pcbTrace of pcbTraces) {
3424
+ if (!pcbTrace.source_trace_id) continue;
3425
+ const matchingPcbTraces = pcbTracesBySourceTraceId.get(pcbTrace.source_trace_id) ?? [];
3426
+ matchingPcbTraces.push(pcbTrace);
3427
+ pcbTracesBySourceTraceId.set(pcbTrace.source_trace_id, matchingPcbTraces);
3428
+ }
3429
+ const exactEndpointPcbTraceIdsBySourceTraceId = /* @__PURE__ */ new Map();
3430
+ for (const sourceTrace of sourceTraces) {
3431
+ if (sourceTrace.connected_source_port_ids.length !== 2) continue;
3432
+ const endpointPcbPortIds = sourceTrace.connected_source_port_ids.map(
3433
+ (sourcePortId) => pcbPortIdsBySourcePortId.get(sourcePortId)
3434
+ );
3435
+ if (endpointPcbPortIds.some((pcbPortIds) => !pcbPortIds?.size)) continue;
3436
+ const exactEndpointPcbTraceIds = new Set(
3437
+ (pcbTracesBySourceTraceId.get(sourceTrace.source_trace_id) ?? []).filter((pcbTrace) => {
3438
+ const referencedPcbPortIds = getReferencedPcbPortIds(pcbTrace);
3439
+ return endpointPcbPortIds.every(
3440
+ (pcbPortIds) => [...pcbPortIds].some(
3441
+ (pcbPortId) => referencedPcbPortIds.has(pcbPortId)
3442
+ )
3443
+ );
3444
+ }).map((pcbTrace) => pcbTrace.pcb_trace_id)
3445
+ );
3446
+ if (exactEndpointPcbTraceIds.size > 0) {
3447
+ exactEndpointPcbTraceIdsBySourceTraceId.set(
3448
+ sourceTrace.source_trace_id,
3449
+ exactEndpointPcbTraceIds
3450
+ );
3451
+ }
3452
+ }
3399
3453
  const warnings = [];
3400
3454
  for (const pcbTrace of pcbTraces) {
3401
3455
  if (!pcbTrace.source_trace_id) continue;
@@ -3403,6 +3457,10 @@ var checkPcbTraceLengths = (circuitJson) => {
3403
3457
  if (!sourceTrace) continue;
3404
3458
  const maximumTraceLength = sourceTrace.max_length;
3405
3459
  if (typeof maximumTraceLength !== "number") continue;
3460
+ const exactEndpointPcbTraceIds = exactEndpointPcbTraceIdsBySourceTraceId.get(sourceTrace.source_trace_id);
3461
+ if (exactEndpointPcbTraceIds && !exactEndpointPcbTraceIds.has(pcbTrace.pcb_trace_id)) {
3462
+ continue;
3463
+ }
3406
3464
  const actualTraceLength = getPcbTraceLength(pcbTrace);
3407
3465
  if (actualTraceLength <= maximumTraceLength) continue;
3408
3466
  warnings.push({