seveibar/am3352-dev-board-4layer-dogbone

Defines PCB footprints and pin mappings for a TI AM3352ZCZ100 processor, JST GH connectors, and assembly-part lookup helpers for capacitors, resistors, and headers.

Version
0.1.5
License
unset
Stars
0

scripts/cache-assembly-orientations.mjs

// Compile exact supplier imports as isolated parts and cache their pad orientation.
import fs from 'node:fs'
import path from 'node:path'
import ts from 'typescript'
import {Circuit} from '@tscircuit/core'
import {analyzePcbPin1Location} from '@tscircuit/circuit-json-util'
import React from 'react'
const dir='design/assembly-supplier-imports'
fs.mkdirSync('routing-work',{recursive:true})
const result={}
for(const file of fs.readdirSync(dir).filter(f=>f.endsWith('.tsx'))){
 const original=fs.readFileSync(path.join(dir,file),'utf8'),match=original.match(/"jlcpcb":\s*\[\s*"(C\d+)"/);if(!match)throw Error('Missing supplier '+file)
 const out=path.resolve('routing-work/assembly-part.mjs')
 fs.writeFileSync(out,ts.transpileModule(original,{compilerOptions:{jsx:ts.JsxEmit.ReactJSX,module:ts.ModuleKind.ESNext,target:ts.ScriptTarget.ES2020}}).outputText)
 const mod=await import('file://'+out+'?part='+file)
 const Comp=Object.values(mod)[0]
 const circuit=new Circuit({platform:{partsEngineDisabled:true}})
 circuit.add(React.createElement('board',{width:50,height:50,routingDisabled:true,schematicDisabled:true},React.createElement(Comp,{name:'P',pcbX:0,pcbY:0})))
 await circuit.renderUntilSettled()
 const cj=circuit.getCircuitJson();const pcb=cj.find(e=>e.type==='pcb_component');let location=pcb?.pin1_location??analyzePcbPin1Location(cj); if(!location && match[1]==="C965805") { const pads=cj.filter(e=>e.type==="pcb_smtpad"); if(pads.length!==2 || Math.abs(pads[0].y-pads[1].y)>.01)throw Error("LED supplier pad orientation changed"); location=analyzePcbPin1Location(cj.map(e=>e.type==="pcb_smtpad"?{...e,y:0}:e)) }
 if(!location)throw Error('Cannot resolve supplier orientation '+file)
 fs.mkdirSync('design/assembly-supplier-footprints',{recursive:true});fs.writeFileSync('design/assembly-supplier-footprints/'+match[1]+'.json',JSON.stringify(cj,null,2))
 result[match[1]]={pin1Location:location,importFile:file,source:'https://easyeda.com/api/components; tsci import '+match[1]+' --use-exact-footprint',checkedAt:'2026-09-20'}
 console.log(match[1],location)
}
fs.writeFileSync('design/assembly-orientations.json',JSON.stringify(result,null,2)+'\n')