diff --git a/lib/common/footprintProp.ts b/lib/common/footprintProp.ts index 9c078c5d..1565160c 100644 --- a/lib/common/footprintProp.ts +++ b/lib/common/footprintProp.ts @@ -3,6 +3,7 @@ import type { ReactElement } from "react" import { z } from "zod" import { type AutocompleteString } from "./autocomplete" import type { KicadAutocompleteStringPath } from "../generated/kicad-autocomplete" +import type { JlcpcbAutocompleteStringPath } from "../generated/jlcpcb-autocomplete" import type { FootprinterStringExample } from "../generated/footprinter-autocomplete" /** @@ -51,6 +52,7 @@ type FootprinterStringAutocomplete = BasicFootprint | FootprinterStringExample export type FootprintProp = | AutocompleteString | KicadAutocompleteStringPath + | JlcpcbAutocompleteStringPath | ReactElement | FootprintSoupElements[] diff --git a/lib/common/pcbSx.ts b/lib/common/pcbSx.ts index 11e80698..71a58cfd 100644 --- a/lib/common/pcbSx.ts +++ b/lib/common/pcbSx.ts @@ -5,6 +5,7 @@ import { z } from "zod" export type PcbSxSelector = | "& footprint[src^='kicad:'] silkscreentext" + | "& footprint[src^='jlcpcb:'] silkscreentext" | "& silkscreentext" | "& fabricationnotetext" diff --git a/lib/generated/jlcpcb-autocomplete.ts b/lib/generated/jlcpcb-autocomplete.ts new file mode 100644 index 00000000..ad09357c --- /dev/null +++ b/lib/generated/jlcpcb-autocomplete.ts @@ -0,0 +1,2493 @@ +import type { AutocompleteString } from "../common/autocomplete" + +/** + * Generated from the public jlcsearch in-stock API. + * Source: https://jlcsearch.tscircuit.com/api/search?limit=50000 + * Filter: stock >= 50000 + * Excludes: common passive package shapes (chip passives, arrays, can caps, tantalum cases) + * Ordering: source order (jlcsearch sorts by stock descending) + * Generated at: 2026-05-14T20:05:18.101Z + * Known part numbers: 2477 + */ +export type JlcpcbKnownPartNumber = + | "C22446827" + | "C7420372" + | "C2128" + | "C95872" + | "C2902912" + | "C8678" + | "C2150" + | "C2145" + | "C64898" + | "C191023" + | "C347222" + | "C81598" + | "C347476" + | "C7543" + | "C2902910" + | "C8545" + | "C916392" + | "C7420318" + | "C20526" + | "C6186" + | "C347376" + | "C113952" + | "C347475" + | "C20917" + | "C437156" + | "C917117" + | "C2837271" + | "C2099" + | "C2146" + | "C14996" + | "C347258" + | "C15127" + | "C181158" + | "C2985945" + | "C8542" + | "C181118" + | "C13460" + | "C7420365" + | "C8598" + | "C8326" + | "C727081" + | "C916421" + | "C318884" + | "C364312" + | "C42441446" + | "C2891324" + | "C917006" + | "C84367" + | "C20615801" + | "C2891733" + | "C916390" + | "C347186" + | "C398543" + | "C84138" + | "C5446" + | "C444720" + | "C6749" + | "C7420353" + | "C140573" + | "C2832124" + | "C42379244" + | "C909967" + | "C2765186" + | "C2976072" + | "C20069125" + | "C41371420" + | "C963381" + | "C2480" + | "C727082" + | "C426571" + | "C19077549" + | "C408392" + | "C111765" + | "C112239" + | "C347278" + | "C24280" + | "C2938367" + | "C314264" + | "C916370" + | "C60580" + | "C22448022" + | "C725794" + | "C2837270" + | "C513472" + | "C165614" + | "C49257" + | "C2904852" + | "C727060" + | "C431710" + | "C6855" + | "C727111" + | "C47891" + | "C7420370" + | "C110694" + | "C2891804" + | "C2835428" + | "C18221467" + | "C2909920" + | "C22461793" + | "C2914415" + | "C19829539" + | "C7429634" + | "C916396" + | "C22452" + | "C85047" + | "C495693" + | "C181133" + | "C2687120" + | "C2927280" + | "C78395" + | "C113947" + | "C727076" + | "C263995" + | "C347386" + | "C5213653" + | "C41371422" + | "C412437" + | "C100114" + | "C22466367" + | "C92243" + | "C917030" + | "C720477" + | "C2891808" + | "C68883" + | "C193404" + | "C916374" + | "C2891809" + | "C82460" + | "C2500" + | "C114014" + | "C19077515" + | "C2926165" + | "C68983" + | "C7420356" + | "C105432" + | "C111514" + | "C64885" + | "C727112" + | "C7429633" + | "C727156" + | "C3018495" + | "C7420371" + | "C158012" + | "C412436" + | "C412438" + | "C5349954" + | "C78162" + | "C7528871" + | "C5137195" + | "C7420348" + | "C411563" + | "C2691448" + | "C2982194" + | "C7420357" + | "C20079" + | "C908828" + | "C15759" + | "C5563735" + | "C7512" + | "C2926167" + | "C5305" + | "C181119" + | "C595051" + | "C725790" + | "C57759" + | "C2836396" + | "C318938" + | "C181091" + | "C5249630" + | "C496552" + | "C414015" + | "C908252" + | "C347189" + | "C7497480" + | "C42413865" + | "C118316" + | "C181136" + | "C285995" + | "C5670" + | "C492401" + | "C82544" + | "C2943878" + | "C908809" + | "C482013" + | "C2891800" + | "C82480" + | "C189897" + | "C316041" + | "C20628872" + | "C3025164" + | "C354904" + | "C5350986" + | "C110695" + | "C558418" + | "C916424" + | "C20615791" + | "C7420319" + | "C20628873" + | "C181204" + | "C2926160" + | "C2926163" + | "C965555" + | "C2926162" + | "C7420336" + | "C181090" + | "C246755" + | "C160354" + | "C64886" + | "C246760" + | "C18199101" + | "C908830" + | "C13762" + | "C113979" + | "C347371" + | "C5120765" + | "C181890" + | "C2836319" + | "C2858707" + | "C2985028" + | "C81464" + | "C114581" + | "C190475" + | "C165948" + | "C19077402" + | "C40574672" + | "C259786" + | "C8490" + | "C10487" + | "C193012" + | "C7470157" + | "C50645" + | "C8963" + | "C521963" + | "C181783" + | "C2147" + | "C3008369" + | "C7593" + | "C347223" + | "C18229" + | "C33221" + | "C2886734" + | "C316043" + | "C2912100" + | "C248339" + | "C181730" + | "C2905006" + | "C3014306" + | "C7420369" + | "C284108" + | "C19077410" + | "C668215" + | "C115450" + | "C34376175" + | "C9864" + | "C61063" + | "C238199" + | "C5451629" + | "C115218" + | "C7420321" + | "C7420354" + | "C68978" + | "C141769" + | "C965840" + | "C426841" + | "C2827733" + | "C19272793" + | "C2979596" + | "C347256" + | "C339188" + | "C20628875" + | "C108803" + | "C167874" + | "C668208" + | "C7420334" + | "C284101" + | "C3038094" + | "C398515" + | "C22466370" + | "C22448047" + | "C65009" + | "C2858716" + | "C151984" + | "C20628874" + | "C2891805" + | "C13879" + | "C6961" + | "C9865" + | "C435829" + | "C2895476" + | "C383161" + | "C84817" + | "C232529" + | "C2891731" + | "C7528872" + | "C3113" + | "C5120796" + | "C181103" + | "C727050" + | "C398453" + | "C2937625" + | "C444722" + | "C434069" + | "C511866" + | "C19357" + | "C2988638" + | "C2841442" + | "C131337" + | "C392013" + | "C963380" + | "C16106" + | "C160398" + | "C5190199" + | "C75882" + | "C5148692" + | "C20628877" + | "C7420376" + | "C242639" + | "C2915112" + | "C7426" + | "C20612591" + | "C7420355" + | "C2149" + | "C41029" + | "C5250992" + | "C7950" + | "C12674" + | "C85181" + | "C2836609" + | "C5140036" + | "C2837531" + | "C146335" + | "C339052" + | "C109227" + | "C78088" + | "C695838" + | "C364313" + | "C43803" + | "C5185918" + | "C908655" + | "C172430" + | "C19077516" + | "C7420329" + | "C908680" + | "C2802295" + | "C424499" + | "C2932326" + | "C9634" + | "C22466373" + | "C727131" + | "C727140" + | "C18723612" + | "C37815" + | "C111122" + | "C8548" + | "C22624" + | "C5353" + | "C7420338" + | "C5184407" + | "C5296726" + | "C481447" + | "C43349" + | "C19077448" + | "C7955" + | "C7928" + | "C2895470" + | "C7420320" + | "C20069126" + | "C16015" + | "C2687116" + | "C2488" + | "C20612582" + | "C19077401" + | "C314269" + | "C12740" + | "C18199114" + | "C7420350" + | "C22375293" + | "C2891806" + | "C2914407" + | "C2892673" + | "C86206" + | "C19077440" + | "C426570" + | "C22466351" + | "C14332" + | "C907837" + | "C110499" + | "C173406" + | "C2986110" + | "C161884" + | "C7420360" + | "C41371421" + | "C5252899" + | "C181134" + | "C511868" + | "C106903" + | "C181140" + | "C7420327" + | "C20069127" + | "C5280502" + | "C105759" + | "C2892681" + | "C19077507" + | "C5423" + | "C111515" + | "C181200" + | "C8734" + | "C19077392" + | "C246759" + | "C45075" + | "C388375" + | "C22466350" + | "C5296727" + | "C42391662" + | "C18124" + | "C7420375" + | "C5199850" + | "C68948" + | "C408258" + | "C151981" + | "C52717" + | "C172409" + | "C4748728" + | "C49188" + | "C277648" + | "C173429" + | "C5125083" + | "C18164475" + | "C7420349" + | "C353271" + | "C2845379" + | "C20609300" + | "C502564" + | "C18077951" + | "C339218" + | "C43832" + | "C431712" + | "C19019" + | "C96459" + | "C42381015" + | "C7420330" + | "C20069129" + | "C908233" + | "C427390" + | "C5345992" + | "C5184427" + | "C34376211" + | "C18906017" + | "C727135" + | "C602032" + | "C360338" + | "C5180294" + | "C5184404" + | "C11130" + | "C5947" + | "C19077497" + | "C2908121" + | "C185250" + | "C82254" + | "C2718488" + | "C19077566" + | "C7420333" + | "C181093" + | "C181138" + | "C157952" + | "C2827682" + | "C2988774" + | "C160350" + | "C7433" + | "C408259" + | "C339244" + | "C83528" + | "C909968" + | "C3014012" + | "C7466385" + | "C601076" + | "C42371093" + | "C13799" + | "C254085" + | "C177245" + | "C43692" + | "C173413" + | "C127353" + | "C41376092" + | "C2683482" + | "C12779" + | "C347367" + | "C3001986" + | "C408389" + | "C15874" + | "C167879" + | "C293966" + | "C7420377" + | "C385114" + | "C7473196" + | "C167223" + | "C81142" + | "C601074" + | "C353367" + | "C181186" + | "C106697" + | "C181207" + | "C7495256" + | "C7470756" + | "C385120" + | "C388374" + | "C7430473" + | "C51953479" + | "C51953471" + | "C311983" + | "C51953466" + | "C51953486" + | "C2873979" + | "C51953476" + | "C2566" + | "C51953469" + | "C51953472" + | "C314254" + | "C51953477" + | "C6165153" + | "C8492" + | "C20615811" + | "C2932746" + | "C51953480" + | "C22379475" + | "C7420328" + | "C444726" + | "C388295" + | "C437199" + | "C58069" + | "C85098" + | "C141282" + | "C2894919" + | "C7429636" + | "C51953475" + | "C88791" + | "C316020" + | "C2902909" + | "C51953470" + | "C306862" + | "C3014023" + | "C779429" + | "C90061" + | "C18199088" + | "C3008120" + | "C116592" + | "C42443403" + | "C51953467" + | "C19077437" + | "C51953483" + | "C125058" + | "C5370980" + | "C305438" + | "C7429635" + | "C19077412" + | "C2886580" + | "C38663" + | "C7420344" + | "C49581" + | "C51953485" + | "C5148691" + | "C122857" + | "C51953474" + | "C67470" + | "C51953468" + | "C91145" + | "C193402" + | "C9418" + | "C481988" + | "C2905009" + | "C119339" + | "C19077501" + | "C5190214" + | "C2926166" + | "C8512" + | "C3001972" + | "C3025068" + | "C293965" + | "C76584" + | "C2974845" + | "C5224194" + | "C456012" + | "C10429" + | "C909754" + | "C63268" + | "C99771" + | "C42738" + | "C909744" + | "C2857181" + | "C42442692" + | "C94625" + | "C277634" + | "C105411" + | "C177248" + | "C339108" + | "C442281" + | "C48676" + | "C5261083" + | "C3018540" + | "C122426" + | "C41095" + | "C113667" + | "C2832506" + | "C90471" + | "C602031" + | "C7420368" + | "C277895" + | "C35799" + | "C3008119" + | "C2316" + | "C8667" + | "C344010" + | "C2761720" + | "C2148" + | "C19077498" + | "C12091" + | "C39159" + | "C2890035" + | "C2902368" + | "C5665" + | "C478011" + | "C14289" + | "C5149201" + | "C5273798" + | "C22463594" + | "C443142" + | "C707194" + | "C2749" + | "C64982" + | "C189555" + | "C316037" + | "C5205141" + | "C727120" + | "C22448055" + | "C2685704" + | "C22632" + | "C51953478" + | "C140826" + | "C42380996" + | "C18199202" + | "C262661" + | "C362273" + | "C296295" + | "C369130" + | "C7429641" + | "C172421" + | "C181159" + | "C5296725" + | "C135262" + | "C916372" + | "C2943996" + | "C496536" + | "C139797" + | "C2079" + | "C12777" + | "C42391660" + | "C42441798" + | "C41384537" + | "C393939" + | "C2981185" + | "C266550" + | "C181167" + | "C916373" + | "C8396" + | "C845537" + | "C155244" + | "C965863" + | "C19077455" + | "C2903232" + | "C3029254" + | "C131339" + | "C32677" + | "C15310" + | "C41371419" + | "C909746" + | "C177246" + | "C76509" + | "C181114" + | "C908211" + | "C155171" + | "C475913" + | "C18159" + | "C18077744" + | "C2908601" + | "C727061" + | "C2898709" + | "C8543" + | "C7496853" + | "C6187" + | "C2974819" + | "C167747" + | "C2888201" + | "C51953482" + | "C406812" + | "C2905011" + | "C64872" + | "C5261052" + | "C161362" + | "C41384540" + | "C7430446" + | "C122862" + | "C3015531" + | "C79015" + | "C181135" + | "C965839" + | "C2895492" + | "C2837532" + | "C181731" + | "C18078021" + | "C5380697" + | "C668205" + | "C151982" + | "C2886436" + | "C7465178" + | "C41371418" + | "C7502714" + | "C7430451" + | "C123196" + | "C2874113" + | "C10802" + | "C5451628" + | "C495663" + | "C173752" + | "C2836395" + | "C907854" + | "C49215445" + | "C502526" + | "C71121" + | "C20612660" + | "C2568" + | "C265412" + | "C2482" + | "C3025163" + | "C87270" + | "C489079" + | "C2681476" + | "C2936977" + | "C15903" + | "C2827654" + | "C33068" + | "C158017" + | "C779430" + | "C22469448" + | "C9055" + | "C36498960" + | "C5123971" + | "C8465" + | "C7429671" + | "C169530" + | "C189961" + | "C122445" + | "C20615816" + | "C22462728" + | "C398547" + | "C21263" + | "C2891732" + | "C113974" + | "C2681224" + | "C84343" + | "C347356" + | "C20615817" + | "C2762211" + | "C2681220" + | "C7502692" + | "C136171" + | "C28067" + | "C119091" + | "C442299" + | "C47190" + | "C7420340" + | "C50950" + | "C8760" + | "C94832" + | "C105313" + | "C668214" + | "C7972" + | "C726941" + | "C15236" + | "C393941" + | "C114002" + | "C5224260" + | "C7501273" + | "C3131" + | "C353517" + | "C3011180" + | "C5345993" + | "C5180263" + | "C511884" + | "C908681" + | "C2835465" + | "C40960" + | "C49215444" + | "C21565" + | "C7926" + | "C113990" + | "C20615790" + | "C22466355" + | "C177226" + | "C318889" + | "C51953481" + | "C131781" + | "C112509" + | "C393938" + | "C181127" + | "C511885" + | "C269866" + | "C493099" + | "C1884584" + | "C157968" + | "C2894721" + | "C5446692" + | "C19077531" + | "C10800" + | "C36138" + | "C118141" + | "C7541493" + | "C7562" + | "C2833151" + | "C2903905" + | "C2900593" + | "C192583" + | "C7420317" + | "C726853" + | "C22379456" + | "C167208" + | "C7420322" + | "C19077532" + | "C20615808" + | "C2894722" + | "C7432682" + | "C128692" + | "C492400" + | "C22392482" + | "C880752" + | "C239558" + | "C167221" + | "C57316" + | "C404969" + | "C7420339" + | "C19077521" + | "C2932744" + | "C2980400" + | "C5345965" + | "C265425" + | "C495185" + | "C31776" + | "C339286" + | "C2874118" + | "C123904" + | "C3008061" + | "C85049" + | "C161723" + | "C8547" + | "C5184403" + | "C5377" + | "C2917195" + | "C5296722" + | "C2687118" + | "C38388" + | "C86610" + | "C78591" + | "C185248" + | "C963379" + | "C38695" + | "C2133" + | "C492421" + | "C6067447" + | "C3874028" + | "C105433" + | "C2685454" + | "C20069131" + | "C909757" + | "C259763" + | "C2923923" + | "C110692" + | "C431496" + | "C2903903" + | "C5345966" + | "C2828426" + | "C3040452" + | "C7472903" + | "C726952" + | "C505063" + | "C167888" + | "C253311" + | "C42385002" + | "C52878" + | "C80670" + | "C2319" + | "C2929943" + | "C525748" + | "C52082" + | "C7420326" + | "C18077833" + | "C78613" + | "C150470" + | "C916425" + | "C41376086" + | "C157527" + | "C2875160" + | "C2971307" + | "C193381" + | "C700953" + | "C347372" + | "C338954" + | "C293648" + | "C255812" + | "C2457" + | "C455280" + | "C23397292" + | "C727129" + | "C293377" + | "C7420341" + | "C347282" + | "C726876" + | "C161690" + | "C96093" + | "C65189" + | "C475673" + | "C20003452" + | "C78439" + | "C173431" + | "C5204710" + | "C41384542" + | "C293573" + | "C908438" + | "C18199095" + | "C2593" + | "C239187" + | "C249166" + | "C29780122" + | "C18723572" + | "C908219" + | "C908213" + | "C5299440" + | "C5299419" + | "C7943" + | "C339254" + | "C50848" + | "C6705483" + | "C83053" + | "C2827735" + | "C19077413" + | "C164886" + | "C128694" + | "C43924067" + | "C23398778" + | "C2687395" + | "C358380" + | "C2844025" + | "C151983" + | "C122416" + | "C225120" + | "C20648" + | "C78440" + | "C2856803" + | "C70381" + | "C96493" + | "C41411781" + | "C961484" + | "C5117602" + | "C113962" + | "C124375" + | "C7420331" + | "C172405" + | "C19077450" + | "C82443" + | "C88726" + | "C502546" + | "C20069149" + | "C511874" + | "C16728" + | "C83852" + | "C2765055" + | "C318887" + | "C908214" + | "C316033" + | "C2892576" + | "C2962304" + | "C97521" + | "C908662" + | "C277599" + | "C191000" + | "C2836402" + | "C2681570" + | "C22395521" + | "C64915" + | "C77335" + | "C20069146" + | "C19077541" + | "C2988637" + | "C84410" + | "C167219" + | "C24378" + | "C65010" + | "C169449" + | "C2962356" + | "C3008053" + | "C960666" + | "C6423741" + | "C99333" + | "C2135" + | "C18199137" + | "C89358" + | "C151520" + | "C908230" + | "C107711" + | "C2901330" + | "C3038104" + | "C177243" + | "C668623" + | "C19077397" + | "C113975" + | "C78864" + | "C455109" + | "C2923890" + | "C7502694" + | "C181164" + | "C2922787" + | "C2848687" + | "C7502687" + | "C153721" + | "C314265" + | "C7440" + | "C34376196" + | "C138714" + | "C558436" + | "C5345963" + | "C2944066" + | "C2909831" + | "C2826469" + | "C2932735" + | "C181141" + | "C412367" + | "C908665" + | "C20615813" + | "C383713" + | "C21706" + | "C20615781" + | "C505323" + | "C908424" + | "C2144" + | "C94389" + | "C2064" + | "C7430450" + | "C353453" + | "C707189" + | "C22466376" + | "C3033296" + | "C7432363" + | "C109203" + | "C3013756" + | "C691124" + | "C2586" + | "C86590" + | "C709357" + | "C502551" + | "C2845349" + | "C2491" + | "C238200" + | "C18199158" + | "C475917" + | "C314260" + | "C3294444" + | "C99761" + | "C968559" + | "C45101" + | "C402311" + | "C432537" + | "C108815" + | "C64877" + | "C347215" + | "C20617919" + | "C78426" + | "C3130" + | "C111699" + | "C2903912" + | "C169540" + | "C19077400" + | "C8592" + | "C19726" + | "C146217" + | "C595279" + | "C45406500" + | "C2923894" + | "C64909" + | "C377862" + | "C3697" + | "C726875" + | "C140583" + | "C2143" + | "C265456" + | "C331032" + | "C5605" + | "C2983743" + | "C47546" + | "C31774" + | "C381039" + | "C282477" + | "C7502726" + | "C19192975" + | "C3038065" + | "C7429672" + | "C605446" + | "C173407" + | "C529330" + | "C71370" + | "C126888" + | "C172411" + | "C128785" + | "C157736" + | "C20612579" + | "C7502716" + | "C2760867" + | "C505128" + | "C493435" + | "C2938369" + | "C177242" + | "C135802" + | "C185244" + | "C42441811" + | "C132810" + | "C347373" + | "C727139" + | "C106703" + | "C5184425" + | "C18469" + | "C71035" + | "C41413180" + | "C27237" + | "C18088" + | "C238203" + | "C156283" + | "C57668" + | "C111203" + | "C85161" + | "C10640" + | "C5199191" + | "C20617915" + | "C127509" + | "C2857183" + | "C2891801" + | "C19077443" + | "C2844731" + | "C78089" + | "C2836312" + | "C54879" + | "C385123" + | "C22379459" + | "C431540" + | "C426708" + | "C393516" + | "C81632" + | "C284078" + | "C332367" + | "C501335" + | "C5345988" + | "C125113" + | "C4748724" + | "C353292" + | "C2858724" + | "C19077499" + | "C110704" + | "C7462681" + | "C4944008" + | "C700954" + | "C41376090" + | "C27438" + | "C558648" + | "C43346" + | "C86469" + | "C12767" + | "C382805" + | "C177244" + | "C18199102" + | "C402260" + | "C5451630" + | "C150982" + | "C84036" + | "C168855" + | "C502527" + | "C475527" + | "C408396" + | "C7420316" + | "C19077446" + | "C249151" + | "C916399" + | "C18078011" + | "C177739" + | "C82942" + | "C151442" + | "C119304" + | "C77950" + | "C440523" + | "C915673" + | "C80529" + | "C2857263" + | "C52034637" + | "C427380" + | "C49215446" + | "C394901" + | "C18199200" + | "C22448078" + | "C49215449" + | "C49215448" + | "C167220" + | "C496549" + | "C115251" + | "C2760486" + | "C7549" + | "C169448" + | "C52034646" + | "C39828" + | "C20069137" + | "C5156716" + | "C722763" + | "C916366" + | "C5349934" + | "C5177" + | "C28756" + | "C513470" + | "C565244" + | "C727122" + | "C908810" + | "C47297" + | "C916371" + | "C2939726" + | "C123791" + | "C5261067" + | "C20547" + | "C181116" + | "C2926174" + | "C3008060" + | "C41430893" + | "C37049" + | "C444721" + | "C727133" + | "C20069148" + | "C106919" + | "C5300004" + | "C4748714" + | "C20617925" + | "C5175230" + | "C19077394" + | "C965860" + | "C71136" + | "C28646275" + | "C727056" + | "C44956" + | "C727134" + | "C96102" + | "C505017" + | "C2762931" + | "C106335" + | "C263232" + | "C111272" + | "C242260" + | "C5252902" + | "C123900" + | "C2892567" + | "C25503879" + | "C18077991" + | "C249154" + | "C343993" + | "C225807" + | "C489085" + | "C587332" + | "C19077441" + | "C190608" + | "C2236" + | "C431548" + | "C479076" + | "C2842352" + | "C78421" + | "C269871" + | "C354996" + | "C5126804" + | "C2845390" + | "C2843778" + | "C24278" + | "C160200" + | "C347217" + | "C2845388" + | "C19077598" + | "C19077447" + | "C5137779" + | "C7063" + | "C42441445" + | "C86148" + | "C595377" + | "C353288" + | "C426566" + | "C109226" + | "C99824" + | "C353315" + | "C668204" + | "C7467" + | "C3011962" + | "C498656" + | "C908678" + | "C74192" + | "C15134" + | "C19077574" + | "C496551" + | "C305435" + | "C347370" + | "C5180279" + | "C916365" + | "C965557" + | "C2923958" + | "C94917" + | "C23654" + | "C22379468" + | "C2909965" + | "C19077438" + | "C509976" + | "C162764" + | "C2985478" + | "C10804" + | "C353066" + | "C47344185" + | "C99420" + | "C106665" + | "C727121" + | "C511865" + | "C2761721" + | "C8515" + | "C112545" + | "C5359610" + | "C110042" + | "C5278868" + | "C88732" + | "C841796" + | "C2318" + | "C5204950" + | "C19077482" + | "C2875959" + | "C7502724" + | "C47346" + | "C2487" + | "C61616" + | "C5449363" + | "C66405" + | "C5296723" + | "C106650" + | "C779813" + | "C181199" + | "C157993" + | "C19077559" + | "C550559" + | "C72124" + | "C389059" + | "C293336" + | "C442300" + | "C283866" + | "C107404" + | "C840839" + | "C86815" + | "C263744" + | "C18199203" + | "C5296738" + | "C6820" + | "C41432122" + | "C406209" + | "C22395558" + | "C116712" + | "C167753" + | "C40488" + | "C28646260" + | "C7430445" + | "C231329" + | "C385105" + | "C908811" + | "C392159" + | "C2761722" + | "C7948" + | "C111695" + | "C5180" + | "C581416" + | "C63813" + | "C22379471" + | "C7118" + | "C402212" + | "C41431973" + | "C5331115" + | "C19077434" + | "C2856796" + | "C7420359" + | "C2886577" + | "C7420335" + | "C574399" + | "C908822" + | "C115451" + | "C21353" + | "C2481" + | "C18723438" + | "C19077488" + | "C414017" + | "C93229" + | "C359106" + | "C46550844" + | "C43340" + | "C116099" + | "C40912" + | "C7429642" + | "C5359601" + | "C725791" + | "C7543836" + | "C3790" + | "C20069155" + | "C5345968" + | "C28310463" + | "C779438" + | "C965835" + | "C277892" + | "C225714" + | "C9378" + | "C385112" + | "C5197386" + | "C79988" + | "C5190152" + | "C53444" + | "C22395787" + | "C18199176" + | "C5189252" + | "C2685703" + | "C492404" + | "C495195" + | "C7433468" + | "C89272" + | "C22375294" + | "C5224195" + | "C293566" + | "C5180312" + | "C353451" + | "C22375291" + | "C412375" + | "C2976624" + | "C113236" + | "C2890118" + | "C19738" + | "C107639" + | "C17179590" + | "C263765" + | "C47888" + | "C347482" + | "C92506" + | "C2938578" + | "C350460" + | "C2925441" + | "C146048" + | "C7722" + | "C442301" + | "C916436" + | "C2827694" + | "C107644" + | "C727115" + | "C398835" + | "C5200096" + | "C347478" + | "C78988" + | "C513478" + | "C64890" + | "C347289" + | "C22466620" + | "C7666" + | "C3008054" + | "C19077594" + | "C42421005" + | "C86234" + | "C339475" + | "C280706" + | "C7429643" + | "C7429680" + | "C7502702" + | "C505088" + | "C400839" + | "C23848" + | "C2764185" + | "C106328" + | "C5451663" + | "C178259" + | "C2931144" + | "C17271" + | "C22448027" + | "C277682" + | "C105312" + | "C93623" + | "C727090" + | "C916992" + | "C7502707" + | "C61277" + | "C7420364" + | "C157452" + | "C144156" + | "C19077534" + | "C2687867" + | "C7420352" + | "C7240" + | "C20615807" + | "C727110" + | "C2561" + | "C41375130" + | "C5190156" + | "C167896" + | "C455095" + | "C479074" + | "C130910" + | "C34376182" + | "C882167" + | "C19077411" + | "C15077" + | "C20219821" + | "C5261026" + | "C402213" + | "C19972" + | "C41410776" + | "C7420362" + | "C18199087" + | "C78402" + | "C78545" + | "C392380" + | "C5373430" + | "C5246818" + | "C2891744" + | "C916393" + | "C332369" + | "C308683" + | "C2848680" + | "C42384996" + | "C11334" + | "C5199205" + | "C157960" + | "C7502711" + | "C69743" + | "C49215451" + | "C2962332" + | "C13482" + | "C509261" + | "C151872" + | "C7502706" + | "C19077423" + | "C18723540" + | "C8523" + | "C7462721" + | "C402264" + | "C112471" + | "C167206" + | "C558419" + | "C520388" + | "C312029" + | "C11337" + | "C49215459" + | "C398358" + | "C18199160" + | "C19077514" + | "C7436" + | "C45105" + | "C108820" + | "C42391661" + | "C585842" + | "C88308" + | "C2891718" + | "C78410" + | "C2892324" + | "C916376" + | "C5345962" + | "C353442" + | "C364296" + | "C20512" + | "C2758563" + | "C96256" + | "C78413" + | "C23396992" + | "C59389" + | "C113977" + | "C259735" + | "C52748356" + | "C473912" + | "C908827" + | "C12742" + | "C22395517" + | "C20417177" + | "C601756" + | "C505206" + | "C108687" + | "C7832" + | "C5277086" + | "C965848" + | "C49375317" + | "C19077494" + | "C113980" + | "C5180211" + | "C908227" + | "C7420342" + | "C20069140" + | "C475222" + | "C167828" + | "C567082" + | "C43332" + | "C267117" + | "C181117" + | "C350420" + | "C2841485" + | "C908837" + | "C353427" + | "C22466365" + | "C112482" + | "C2826370" + | "C114502" + | "C404279" + | "C496619" + | "C5144558" + | "C84774" + | "C7470170" + | "C2891810" + | "C148357" + | "C3874034" + | "C106666" + | "C110474" + | "C34758" + | "C136169" + | "C427395" + | "C19077476" + | "C475526" + | "C18723570" + | "C240814" + | "C192894" + | "C20615802" + | "C2337" + | "C59488" + | "C532213" + | "C668207" + | "C84062" + | "C353317" + | "C185227" + | "C119324" + | "C965865" + | "C602030" + | "C22466428" + | "C259772" + | "C41370734" + | "C347268" + | "C587806" + | "C908818" + | "C242640" + | "C492410" + | "C64987" + | "C20617923" + | "C84133" + | "C112497" + | "C727130" + | "C485338" + | "C7502695" + | "C5612" + | "C20069154" + | "C354900" + | "C19271469" + | "C545326" + | "C19077403" + | "C53670" + | "C249150" + | "C343992" + | "C7429614" + | "C5358569" + | "C3039295" + | "C7502690" + | "C2321" + | "C91447" + | "C909756" + | "C2914231" + | "C19077513" + | "C492419" + | "C2923383" + | "C118873" + | "C3011199" + | "C48260" + | "C81360" + | "C2912543" + | "C157934" + | "C486069" + | "C2904991" + | "C78420" + | "C5224263" + | "C192925" + | "C20069139" + | "C86598" + | "C146106" + | "C698608" + | "C385104" + | "C142297" + | "C48997863" + | "C22395570" + | "C20069135" + | "C2969807" + | "C160146" + | "C85364" + | "C19077502" + | "C8410" + | "C5181465" + | "C5381438" + | "C7502713" + | "C22448041" + | "C47779" + | "C2063" + | "C18077834" + | "C49991" + | "C49215450" + | "C7462724" + | "C2904989" + | "C719176" + | "C316038" + | "C19189893" + | "C428884" + | "C5289387" + | "C294018" + | "C5124179" + | "C81276" + | "C119347" + | "C265079" + | "C242615" + | "C445494" + | "C564727" + | "C916391" + | "C129120" + | "C2849575" + | "C2986105" + | "C94515" + | "C22374376" + | "C11215" + | "C2832505" + | "C5379868" + | "C347191" + | "C353378" + | "C19077546" + | "C5199242" + | "C5664" + | "C14347" + | "C7603322" + | "C266553" + | "C110254" + | "C5156477" + | "C479075" + | "C5184419" + | "C717030" + | "C2909055" + | "C2960639" + | "C908776" + | "C265111" + | "C82049" + | "C30734" + | "C211890" + | "C41410795" + | "C23398777" + | "C20612682" + | "C908853" + | "C7420332" + | "C5224175" + | "C18199196" + | "C28646289" + | "C115427" + | "C2891815" + | "C717237" + | "C70426" + | "C12749" + | "C427391" + | "C508181" + | "C113998" + | "C5137774" + | "C7462671" + | "C84772" + | "C7836" + | "C529355" + | "C106897" + | "C497831" + | "C19192982" + | "C21488" + | "C42422438" + | "C149588" + | "C473812" + | "C2474" + | "C30431" + | "C19077553" + | "C87271" + | "C21107" + | "C116112" + | "C390072" + | "C2682268" + | "C507163" + | "C2908662" + | "C24253" + | "C67473" + | "C108833" + | "C6079" + | "C7420337" + | "C112669" + | "C181087" + | "C2830311" + | "C353285" + | "C113948" + | "C2992430" + | "C161709" + | "C841288" + | "C19271395" + | "C8513" + | "C392101" + | "C12744" + | "C163032" + | "C108735" + | "C344008" + | "C408260" + | "C262655" + | "C190473" + | "C20617920" + | "C5375966" + | "C7420324" + | "C2906290" + | "C2681227" + | "C43838" + | "C5240370" + | "C106914" + | "C474881" + | "C29781278" + | "C5123972" + | "C2761758" + | "C5380694" + | "C915663" + | "C105430" + | "C151498" + | "C8595" + | "C83333" + | "C19077585" + | "C78284" + | "C18077835" + | "C173439" + | "C18723600" + | "C16428" + | "C493101" + | "C108795" + | "C54888" + | "C9400" + | "C59352" + | "C59414" + | "C16581" + | "C5172939" + | "C505242" + | "C194460" + | "C14281" + | "C47741" + | "C5180216" + | "C727146" + | "C2758501" + | "C5446700" + | "C713997" + | "C2841841" + | "C780034" + | "C314255" + | "C386757" + | "C8956" + | "C111269" + | "C181163" + | "C173141" + | "C57435" + | "C545360" + | "C182966" + | "C7473158" + | "C19077558" + | "C42368114" + | "C81147" + | "C485336" + | "C19078769" + | "C161675" + | "C2687129" + | "C2112" + | "C7433648" + | "C43352" + | "C5359599" + | "C2117" + | "C181172" + | "C22380728" + | "C122243" + | "C386756" + | "C59135" + | "C2857180" + | "C14651" + | "C7502705" + | "C81004" + | "C19271988" + | "C177247" + | "C908653" + | "C185247" + | "C2923360" + | "C189893" + | "C2103" + | "C2874697" + | "C2827688" + | "C908229" + | "C59371" + | "C779408" + | "C181722" + | "C35253" + | "C19078354" + | "C513479" + | "C78424" + | "C970030" + | "C157920" + | "C2943845" + | "C113976" + | "C5199184" + | "C265313" + | "C6966" + | "C2856799" + | "C394021" + | "C269864" + | "C84931" + | "C19829629" + | "C113954" + | "C398523" + | "C567059" + | "C595046" + | "C5632431" + | "C294052" + | "C266585" + | "C88743" + | "C250130" + | "C181086" + | "C2845682" + | "C165701" + | "C727095" + | "C27748" + | "C125330" + | "C541857" + | "C908757" + | "C294056" + | "C47873" + | "C965877" + | "C7470221" + | "C44588" + | "C68817" + | "C12765" + | "C18199123" + | "C19077506" + | "C2827823" + | "C2848698" + | "C19504" + | "C133575" + | "C18077930" + | "C12594" + | "C150183" + | "C2848693" + | "C727128" + | "C34376217" + | "C131334" + | "C19077568" + | "C13424" + | "C4154420" + | "C19213" + | "C248335" + | "C47524" + | "C160745" + | "C381615" + | "C5359631" + | "C339329" + | "C5331095" + | "C500755" + | "C96222" + | "C2827729" + | "C262659" + | "C225326" + | "C3018525" + | "C5140024" + | "C721283" + | "C509048" + | "C71371" + | "C3270762" + | "C7431448" + | "C26350" + | "C34376198" + | "C19829626" + | "C116492" + | "C43837" + | "C33129555" + | "C49396348" + | "C78433" + | "C492429" + | "C19077597" + | "C157926" + | "C19077483" + | "C353477" + | "C7835" + | "C2857295" + | "C249167" + | "C8445" + | "C316040" + | "C18723542" + | "C427382" + | "C246762" + | "C2829423" + | "C113968" + | "C5261080" + | "C19077520" + | "C127374" + | "C727065" + | "C7461125" + | "C99102" + | "C20607736" + | "C23398776" + | "C962342" + | "C42463382" + | "C2908613" + | "C169472" + | "C406198" + | "C915316" + | "C7420345" + | "C5832949" + | "C224198" + | "C2943882" + | "C19077542" + | "C185232" + | "C34376195" + | "C564549" + | "C567100" + | "C3267574" + | "C118956" + | "C505084" + | "C26761" + | "C491445" + | "C209640" + | "C19077530" + | "C392421" + | "C19077526" + | "C28646263" + | "C51949445" + | "C18199544" + | "C7502709" + | "C55136" + | "C908845" + | "C2923966" + | "C44586" + | "C8670" + | "C7827" + | "C2943739" + | "C129905" + | "C2832269" + | "C2932773" + | "C471471" + | "C81445" + | "C8549" + | "C19170933" + | "C477928" + | "C169423" + | "C2903245" + | "C262643" + | "C492420" + | "C22466368" + | "C5380710" + | "C587141" + | "C595229" + | "C18199163" + | "C5180236" + | "C545576" + | "C14238" + | "C114089" + | "C28088" + | "C564560" + | "C7502691" + | "C7429700" + | "C2762214" + | "C49215460" + | "C347421" + | "C557917" + | "C6067465" + | "C192922" + | "C702874" + | "C353369" + | "C113999" + | "C3001958" + | "C49215454" + | "C161870" + | "C277412" + | "C264994" + | "C909965" + | "C727006" + | "C274394" + | "C2943744" + | "C293613" + | "C595233" + | "C167216" + | "C2873975" + | "C108360" + | "C19170902" + | "C150492" + | "C266588" + | "C97717" + | "C212083" + | "C22396243" + | "C2997265" + | "C843674" + | "C167761" + | "C2842363" + | "C16992" + | "C5292060" + | "C167963" + | "C57981" + | "C503217" + | "C5359632" + | "C474952" + | "C22383373" + | "C22395581" + | "C879344" + | "C7420351" + | "C169433" + | "C86475" + | "C22379458" + | "C908663" + | "C12620" + | "C43116" + | "C427602" + | "C3038064" + | "C28646291" + | "C492403" + | "C10428" + | "C73013" + | "C167971" + | "C2906288" + | "C2982033" + | "C22448091" + | "C908253" + | "C440524" + | "C7719" + | "C2842723" + | "C266888" + | "C7439" + | "C347220" + | "C385122" + | "C2904734" + | "C16338" + | "C7528875" + | "C16369" + | "C18199172" + | "C13871" + | "C2932743" + | "C20628876" + | "C695629" + | "C727125" + | "C908679" + | "C21882720" + | "C53849" + | "C393945" + | "C2980406" + | "C41376400" + | "C456015" + | "C111267" + | "C5337991" + | "C146104" + | "C668588" + | "C21882715" + | "C497873" + | "C72264" + | "C239451" + | "C8389" + | "C2909056" + | "C80100" + | "C353083" + | "C2928737" + | "C42384997" + | "C9990" + | "C86613" + | "C167203" + | "C2857325" + | "C15578" + | "C17206" + | "C353368" + | "C42384998" + | "C567084" + | "C123922" + | "C382329" + | "C88728" + | "C358684" + | "C135243" + | "C2833712" + | "C5379870" + | "C106670" + | "C2845345" + | "C20615829" + | "C70991" + | "C5359634" + | "C79111" + | "C493081" + | "C23396997" + | "C3029431" + | "C23380873" + | "C41371266" + | "C383696" + | "C43389" + | "C29174" + | "C19829630" + | "C404322" + | "C5279052" + | "C347272" + | "C727137" + | "C2986239" + | "C5390" + | "C19271386" + | "C5126794" + | "C122228" + | "C2932747" + | "C36936538" + | "C315567" + | "C5175" + | "C2845520" + | "C10426" + | "C504197" + | "C505236" + | "C18212698" + | "C22461781" + | "C20612661" + | "C27643" + | "C22466361" + | "C49215447" + | "C191355" + | "C2932927" + | "C43804" + | "C319148" + | "C410374" + | "C7498147" + | "C111633" + | "C108453" + | "C60568" + | "C61060" + | "C85623" + | "C18718" + | "C434426" + | "C35449" + | "C29275" + | "C347224" + | "C50144" + | "C181098" + | "C115456" + | "C185241" + | "C7420343" + | "C19077576" + | "C8062" + | "C181088" + | "C131237" + | "C5354012" + | "C14486" + | "C7466430" + | "C314263" + | "C727007" + | "C18863" + | "C2922192" + | "C2833582" + | "C2840173" + | "C2940621" + | "C108537" + | "C556168" + | "C86361" + | "C239604" + | "C171434" + | "C14385" + | "C2689176" + | "C2346" + | "C2987696" + | "C221495" + | "C2936982" + | "C908829" + | "C5345987" + | "C5360456" + | "C339082" + | "C2829442" + | "C274404" + | "C89347" + | "C3003215" + | "C390130" + | "C907838" + | "C541858" + | "C2909059" + | "C19077551" + | "C19077480" + | "C7473310" + | "C20069136" + | "C570857" + | "C19267783" + | "C7519" + | "C2886385" + | "C393942" + | "C7420363" + | "C545558" + | "C23396991" + | "C2908611" + | "C20417829" + | "C305484" + | "C319050" + | "C177241" + | "C5199225" + | "C558448" + | "C225119" + | "C2892680" + | "C188391" + | "C14758" + | "C22435093" + | "C15651" + | "C128697" + | "C46388" + | "C34376181" + | "C41376401" + | "C505005" + | "C779416" + | "C19271413" + | "C2931147" + | "C19077452" + | "C45044" + | "C41376402" + | "C88474" + | "C6396162" + | "C668206" + | "C722829" + | "C18199169" + | "C2827633" + | "C3011139" + | "C172881" + | "C5155166" + | "C52895" + | "C23397052" + | "C189998" + | "C2826532" + | "C2943881" + | "C55144" + | "C601686" + | "C42416254" + | "C460977" + | "C124205" + | "C23380830" + | "C2908600" + | "C521962" + | "C369599" + | "C2843305" + | "C23397290" + | "C173524" + | "C19398" + | "C21235" + | "C7868" + | "C173408" + | "C19077570" + | "C7833" + | "C110041" + | "C61742" + | "C131792" + | "C19077519" + | "C2976675" + | "C9842" + | "C97262" + | "C353174" + | "C7462711" + | "C915458" + | "C295459" + | "C528014" + | "C5180311" + | "C8852" + | "C779431" + | "C167967" + | "C908228" + | "C22395786" + | "C5447658" + | "C20617922" + | "C2889258" + | "C19267604" + | "C2982555" + | "C179414" + | "C8413" + | "C123932" + | "C726995" + | "C19077445" + | "C113989" + | "C188205" + | "C2985031" + | "C225316" + | "C47021214" + | "C14491" + | "C21713981" + | "C3406" + | "C717322" + | "C211853" + | "C7462691" + | "C7500572" + | "C19077439" + | "C42382332" + | "C707824" + | "C2840443" + | "C395455" + | "C20069130" + | "C307994" + | "C5252906" + | "C111566" + | "C431541" + | "C8491" + | "C64950" + | "C2492" + | "C65028" + | "C27543" + | "C19829657" + | "C2927688" + | "C112510" + | "C151924" + | "C381614" + | "C3902316" + | "C5199164" + | "C2987152" + | "C144401" + | "C20615822" + | "C15237" + | "C488408" + | "C8589" + | "C34376213" + | "C22395565" + | "C2845550" + | "C125626" + | "C20615795" + | "C505024" + | "C471590" + | "C46956351" + | "C7469099" + | "C7502730" + | "C111264" + | "C514175" + | "C395459" + | "C916394" + | "C481866" + | "C114425" + | "C167974" + | "C2905637" + | "C72048" + | "C125118" + | "C8466" + | "C2847671" + | "C293967" + | "C7430460" + | "C18199159" + | "C23397291" + | "C22435139" + | "C5273790" + | "C138388" + | "C128776" + | "C347375" + | "C9070" + | "C122492" + | "C345957" + | "C564672" + | "C714140" + | "C3008547" + | "C41413182" + | "C5345986" + | "C341059" + | "C5224202" + | "C113967" + | "C19077518" + | "C157929" + | "C7502729" + | "C41375125" + | "C18199173" + | "C398526" + | "C492414" + | "C5632426" + | "C2925451" + | "C112446" + | "C88851" + | "C19077487" + | "C456018" + | "C41376502" + | "C2874421" + | "C167218" + | "C22461780" + | "C7501270" + | "C141419" + | "C783588" + | "C3265019" + +export type JlcpcbAutocompleteStringPath = AutocompleteString< + `jlcpcb:${JlcpcbKnownPartNumber}` | `jlcpcb:C${number}` +> diff --git a/lib/index.ts b/lib/index.ts index 2a2f9056..d0f56ca7 100644 --- a/lib/index.ts +++ b/lib/index.ts @@ -9,6 +9,7 @@ export * from "./common/symbolProp" export * from "./common/autocomplete" export * from "./generated/kicad-autocomplete" export * from "./generated/kicad-footprint-strings" +export * from "./generated/jlcpcb-autocomplete" export * from "./generated/footprinter-autocomplete" export * from "./common/schematicOrientation" export * from "./common/schematicPinDefinitions" diff --git a/package.json b/package.json index 15098390..2c71b331 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "format:check": "biome format .", "generate:manual-edits-docs": "tsx scripts/generate-manual-edits-docs.ts", "generate:component-types": "tsx scripts/generate-component-types.ts", + "generate:jlcpcb-autocomplete": "tsx scripts/generate-jlcpcb-autocomplete.ts", "generate:readme-docs": "tsx scripts/generate-readme-docs.ts" }, "keywords": [], diff --git a/scripts/generate-jlcpcb-autocomplete.ts b/scripts/generate-jlcpcb-autocomplete.ts new file mode 100644 index 00000000..8bcd58ed --- /dev/null +++ b/scripts/generate-jlcpcb-autocomplete.ts @@ -0,0 +1,133 @@ +import fs from "node:fs" +import path from "node:path" +import { fileURLToPath } from "node:url" + +const __dirname = path.dirname(fileURLToPath(import.meta.url)) + +const JLCSEARCH_API = "https://jlcsearch.tscircuit.com/api/search" +const limit = Number(process.env.JLCPCB_AUTOCOMPLETE_LIMIT ?? "50000") +const minStock = Number(process.env.JLCPCB_AUTOCOMPLETE_MIN_STOCK ?? "50000") +const maxRetries = Number(process.env.JLCPCB_AUTOCOMPLETE_MAX_RETRIES ?? "5") + +type JlcsearchResponse = { + components?: Array<{ + lcsc?: number + package?: string + stock?: number + }> +} + +function formatKnownPartNumbers(knownPartNumbers: string[]) { + return knownPartNumbers.map((partNumber) => ` | "${partNumber}"`).join("\n") +} + +function isPassiveLikePackage(packageName: string | undefined) { + const normalizedPackageName = packageName?.trim().toUpperCase() ?? "" + + return ( + /^\d{4}(X\d+)?$/.test(normalizedPackageName) || + /^CASE-[A-Z0-9-]+(\(MM\))?$/.test(normalizedPackageName) || + /^SMD,D[\d.]+XL[\d.]+MM$/.test(normalizedPackageName) || + /^SMD\d{4}-\d+P$/.test(normalizedPackageName) + ) +} + +function generateAutocompleteContent(knownPartNumbers: string[]) { + const knownPartNumberEntries = formatKnownPartNumbers(knownPartNumbers) + + return `import type { AutocompleteString } from "../common/autocomplete" + +/** + * Generated from the public jlcsearch in-stock API. + * Source: ${JLCSEARCH_API}?limit=${limit} + * Filter: stock >= ${minStock} + * Excludes: common passive package shapes (chip passives, arrays, can caps, tantalum cases) + * Ordering: source order (jlcsearch sorts by stock descending) + * Generated at: ${new Date().toISOString()} + * Known part numbers: ${knownPartNumbers.length} + */ +export type JlcpcbKnownPartNumber = +${knownPartNumberEntries} + +export type JlcpcbAutocompleteStringPath = AutocompleteString< + \`jlcpcb:\${JlcpcbKnownPartNumber}\` | \`jlcpcb:C\${number}\` +> +` +} + +async function fetchKnownPartNumbers() { + const url = new URL(JLCSEARCH_API) + url.searchParams.set("limit", String(limit)) + + for (let attempt = 0; attempt <= maxRetries; attempt += 1) { + try { + const res = await fetch(url, { + headers: { + "User-Agent": "Mozilla/5.0", + }, + }) + + if (!res.ok) { + throw new Error(`Unexpected response status: ${res.status}`) + } + + const json = (await res.json()) as JlcsearchResponse + const knownPartNumbers: string[] = [] + const seenPartNumbers = new Set() + + for (const component of json.components ?? []) { + const lcsc = component.lcsc + const packageName = component.package + const stock = component.stock ?? 0 + + if (!Number.isInteger(lcsc) || stock < minStock) continue + if (isPassiveLikePackage(packageName)) continue + + const partNumber = `C${lcsc}` + if (seenPartNumbers.has(partNumber)) continue + + seenPartNumbers.add(partNumber) + knownPartNumbers.push(partNumber) + } + + return knownPartNumbers + } catch (error) { + if (attempt >= maxRetries) throw error + + const retryDelayMs = 500 * 2 ** attempt + console.warn( + `Failed to fetch JLC autocomplete dataset, retrying in ${retryDelayMs}ms (attempt ${attempt + 1}/${maxRetries + 1})`, + ) + await new Promise((resolve) => setTimeout(resolve, retryDelayMs)) + } + } + + throw new Error("Failed to fetch JLC autocomplete dataset") +} + +async function main() { + if (!Number.isInteger(limit) || limit <= 0) { + throw new Error(`Invalid JLCPCB_AUTOCOMPLETE_LIMIT: ${limit}`) + } + if (!Number.isInteger(minStock) || minStock < 0) { + throw new Error(`Invalid JLCPCB_AUTOCOMPLETE_MIN_STOCK: ${minStock}`) + } + if (!Number.isInteger(maxRetries) || maxRetries < 0) { + throw new Error(`Invalid JLCPCB_AUTOCOMPLETE_MAX_RETRIES: ${maxRetries}`) + } + + const knownPartNumbers = await fetchKnownPartNumbers() + const autocompleteContent = generateAutocompleteContent(knownPartNumbers) + + const outDir = path.join(__dirname, "../lib/generated") + fs.mkdirSync(outDir, { recursive: true }) + fs.writeFileSync( + path.join(outDir, "jlcpcb-autocomplete.ts"), + autocompleteContent, + ) +} + +main().catch((err) => { + console.error(err) + process.exit(1) +}) diff --git a/tests/footprint-autocomplete.test.ts b/tests/footprint-autocomplete.test.ts index bd9f2fd4..d5c0518f 100644 --- a/tests/footprint-autocomplete.test.ts +++ b/tests/footprint-autocomplete.test.ts @@ -6,6 +6,7 @@ import type { } from "lib/common/footprintProp" import type { AutocompleteString } from "lib/common/autocomplete" import type { KicadAutocompleteStringPath } from "lib/generated/kicad-autocomplete" +import type { JlcpcbAutocompleteStringPath } from "lib/generated/jlcpcb-autocomplete" import type { FootprinterStringExample } from "lib/generated/footprinter-autocomplete" import { expectTypesMatch } from "lib/typecheck" @@ -15,6 +16,7 @@ expectTypesMatch< FootprintProp, | AutocompleteString | KicadAutocompleteStringPath + | JlcpcbAutocompleteStringPath | React.ReactElement | FootprintSoupElements[] >(true)