abse/gameboy-advance
A tscircuit package created by abse.
- Version
- 0.0.45
- License
- unset
- Stars
- 0
checks/fetch-supplier-orientation.ts
PCB
Schematic
import {getPlatformConfig} from '@tscircuit/eval/platform-config'
import {readFileSync,writeFileSync,mkdirSync,existsSync} from 'node:fs'
import {analyzePcbPin1Location} from '@tscircuit/circuit-json-util'
const dir='checks/supplier-orientation';mkdirSync(dir,{recursive:true})
const c=JSON.parse(readFileSync('dist/index/circuit.json','utf8'))
const ids=[...new Set(c.filter((x:any)=>x.type==='source_component').flatMap((x:any)=>x.supplier_part_numbers?.jlcpcb??[]))] as string[]
const platform=getPlatformConfig()
const request:typeof fetch=async(input:any,init:any)=>{
const url=String(input)
for(let n=0;n<4;n++){
const r=await fetch(input,{...init,signal:AbortSignal.timeout(30000)})
if(r.ok)return r
if(n===3)throw Error(`HTTP ${r.status} ${url}`)
await Bun.sleep(1000*(n+1))
}
throw Error('Unreachable')
}
let completed=0
for(const id of ids){
const path=`${dir}/${id}.json`
if(existsSync(path)){completed++;continue}
try{
const part=await platform.partsEngine!.fetchPartCircuitJson!({supplierPartNumber:id,platformFetch:request,includeDatasheetInformation:false} as any)
if(!part?.length)throw Error('Empty supplier footprint')
writeFileSync(path,JSON.stringify(part));console.log(++completed+'/'+ids.length,id,analyzePcbPin1Location(part))
}catch(e){console.error(id,String(e));throw e}
}