hrithik18k/punck-tscircuit-recreation

A four-layer Eurorack drum/sampler controller PCB built around an STM32H743, dual QSPI flash, PCM5100 stereo DAC, TL074 analog audio circuitry, input clamps, 12V-to-3.3V power regulation, MIDI/USB/SWD connectors, controls, LEDs, and trigger/audio I/O.

Version
1.0.3
License
unset
Stars
0

scripts/reproduce.ts

import fs from 'node:fs'
import {KicadToCircuitJsonConverter} from 'kicad-to-circuit-json'
import {source_port} from 'circuit-json'
const results:any[]=[]
for(const n of ['Components','Controls','Panel']) {
 const c=new KicadToCircuitJsonConverter()
 c.addFile(`${n}.kicad_pcb`,fs.readFileSync(`source/Punck_${n}.kicad_pcb`,'utf8'))
 try{c.runUntilFinished();results.push({name:n,rawParse:'pass'})}catch(e){results.push({name:n,rawParse:String(e)})}
 const j=JSON.parse(fs.readFileSync(`boards/${n.toLowerCase()}.pcb.circuit.json`,'utf8'))
 const combo=JSON.parse(fs.readFileSync(`boards/${n.toLowerCase()}.combined.circuit.json`,'utf8'))
 const pcbIds=new Set(combo.filter((e:any)=>e.type==='pcb_component').map((e:any)=>e.source_component_id))
 const schIds=new Set(combo.filter((e:any)=>e.type==='schematic_component').map((e:any)=>e.source_component_id))
 results.push({name:n,sharedSchematicPcbComponentIds:[...pcbIds].filter(id=>schIds.has(id)).length,pcbComponentCount:pcbIds.size,schematicComponentCount:schIds.size,zeroSizeComponents:j.filter((e:any)=>e.type==='pcb_component'&&(!e.width||!e.height)).length,poursMissingNetIds:j.filter((e:any)=>e.type==='pcb_copper_pour'&&e.net_name&&!e.source_net_id).length,invalidPorts:j.filter((e:any)=>e.type==='source_port').flatMap((e:any)=>{const p=source_port.safeParse(e);return p.success?[]:[{port:e,issues:p.error.issues}]})})
}
fs.writeFileSync('evidence/reproductions.json',JSON.stringify(results,null,2));console.log(JSON.stringify(results,null,2))