tscircuit/autorouting-dataset-01

This code manages the hardware and electronic components for circuit design and PCB layout, defining components like resistors, capacitors, transistors, connectors, and footprints, and providing tools for component placement, PCB topology, and electrical connections.

Version
1.0.102
License
unset
Stars
4

scripts/validate-circuit-json/index.tsx

import { existsSync } from "node:fs"
import { readFile } from "node:fs/promises"
import { runAllPlacementChecks } from "@tscircuit/checks"
import { RootCircuit } from "@tscircuit/core"

type TscircuitConfig = {
  mainEntrypoint?: string
  ignoredFiles?: string[]
  includeBoardFiles?: string[]
}

const main = async (): Promise<void> => {
  const config = JSON.parse(
    await readFile("tscircuit.config.json", "utf8"),
  ) as TscircuitConfig
  const ignoredFiles = new Set(config.ignoredFiles ?? [])
  const circuitFiles = Array.from(
    new Set(
      [config.mainEntrypoint, ...(config.includeBoardFiles ?? [])].filter(
        (file): file is string => Boolean(file),
      ),
    ),
  ).filter(
    (file) =>
      !ignoredFiles.has(file) &&
      existsSync(file) &&
      /lib\/circuit\/circuit\d{3}\.tsx$/.test(file),
  )
  const failures: string[] = []

  process.env.TSCIRCUIT_DATASET_DISABLE_AUTOROUTER = "true"

  for (const circuitFile of circuitFiles) {
    const { default: Circuit } = await import(`../../${circuitFile}`)
    const circuit = new RootCircuit()
    circuit.schematicDisabled = true
    circuit.add(<Circuit />)
    await circuit.renderUntilSettled()

    const blockingErrors = (
      await runAllPlacementChecks(circuit.getCircuitJson())
    ).filter(
      (error) =>
        error.type === "pcb_footprint_overlap_error" ||
        error.type === "pcb_component_outside_board_error",
    )
    for (const error of blockingErrors) {
      failures.push(`${circuitFile}: ${error.message}`)
    }
  }

  if (failures.length > 0) {
    console.error(
      [
        "tscircuit placement check found invalid PCB placement:",
        ...failures.map((failure) => `- ${failure}`),
      ].join("\n"),
    )
    process.exit(1)
  }

  console.log(
    `Validated ${circuitFiles.length} generated circuits with tscircuit placement checks`,
  )
}

void main()