abse/gameboy-advance

A tscircuit package created by abse.

Version
0.0.45
License
unset
Stars
0

checks/fetch-supplier-orientation.ts

PCBPCB preview for checks/fetch-supplier-orientation.ts
SchematicSchematic preview for checks/fetch-supplier-orientation.ts
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}
}