ShiboSoftwareDev/am625sip-linux-board

This code defines the physical footprint and pin layout for an AM625 System-in-Package (SIP) component, detailing pad positions, pin labels, and package outline for hardware integration.

Version
1.0.24
License
unset
Stars
0

scripts/namespace-cache-pcb-trace-ids.ts

import type { AnyCircuitElement } from "circuit-json"

/**
 * The Circuit JSON importer remaps relational ids, but autorouter-generated
 * pcb_trace_id strings are intentionally preserved. Give each independently
 * built cache its own trace-id namespace and update via references to it.
 */
export const namespaceCachePcbTraceIds = (
  elements: AnyCircuitElement[],
  namespace: string,
): AnyCircuitElement[] => {
  const prefix = `${namespace.replace(/[^A-Za-z0-9_]/g, "_")}__`
  const traceIdMap = new Map(
    elements.flatMap((element) =>
      element.type === "pcb_trace" && element.pcb_trace_id
        ? [[
            element.pcb_trace_id,
            element.pcb_trace_id.startsWith(prefix)
              ? element.pcb_trace_id
              : `${prefix}${element.pcb_trace_id}`,
          ] as const]
        : [],
    ),
  )

  return elements.map((element) => {
    if (!("pcb_trace_id" in element) || !element.pcb_trace_id) return element
    const namespacedTraceId = traceIdMap.get(element.pcb_trace_id)
    if (!namespacedTraceId) return element
    return { ...element, pcb_trace_id: namespacedTraceId } as AnyCircuitElement
  })
}