@tscircuit/parts-engine 0.0.22 → 0.0.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -10657,6 +10657,34 @@ var getFetchWithEasyEdaProxy = ({
10657
10657
  };
10658
10658
  };
10659
10659
 
10660
+ // lib/jlc-parts-engine/get-pin-header-search-params.ts
10661
+ var parseMillimeters = (value) => {
10662
+ if (typeof value === "number" && Number.isFinite(value)) return value;
10663
+ if (typeof value !== "string") return void 0;
10664
+ const match = value.trim().match(/^(\d+(?:\.\d+)?)(?:\s*mm)?$/i);
10665
+ if (!match) return void 0;
10666
+ return Number(match[1]);
10667
+ };
10668
+ var parsePinHeaderPitchFromFootprinterString = (footprinterString) => {
10669
+ const match = footprinterString?.match(
10670
+ /(?:^|_)p(\d+(?:\.\d+)?)(?:mm)?(?:_|$)/i
10671
+ );
10672
+ return match ? Number(match[1]) : void 0;
10673
+ };
10674
+ var isKnownPinHeaderGender = (gender) => gender === "male" || gender === "female";
10675
+ var getPinHeaderSearchParams = (sourceComponent, footprinterString) => {
10676
+ const pitch = parseMillimeters(sourceComponent.pitch) ?? parsePinHeaderPitchFromFootprinterString(footprinterString);
10677
+ const numPins = sourceComponent.pin_count ?? sourceComponent.pinCount ?? sourceComponent.num_pins;
10678
+ const gender = isKnownPinHeaderGender(sourceComponent.gender) ? sourceComponent.gender : void 0;
10679
+ const isRightAngle = sourceComponent.is_right_angle ?? sourceComponent.right_angle ?? sourceComponent.rightAngle;
10680
+ return {
10681
+ ...pitch ? { pitch } : {},
10682
+ ...typeof numPins === "number" ? { num_pins: numPins } : {},
10683
+ ...gender ? { gender } : {},
10684
+ ...typeof isRightAngle === "boolean" ? { is_right_angle: isRightAngle } : {}
10685
+ };
10686
+ };
10687
+
10660
10688
  // lib/jlc-parts-engine/jlc-parts-cache.ts
10661
10689
  var cache = /* @__PURE__ */ new Map();
10662
10690
  var getJlcPartsCached = async (name, params) => {
@@ -10682,6 +10710,7 @@ var withBasicPartPreference = (parts) => {
10682
10710
  };
10683
10711
 
10684
10712
  // lib/jlc-parts-engine/JlcPartsEngine.ts
10713
+ var normalizePartNumber = (partNumber) => typeof partNumber === "string" ? partNumber.trim().toLowerCase() : void 0;
10685
10714
  var JlcPcbPartsEngine = class {
10686
10715
  defaultPlatformFetch;
10687
10716
  easyEdaProxyConfig;
@@ -10725,20 +10754,9 @@ var JlcPcbPartsEngine = class {
10725
10754
  jlcpcb: withBasicPartPreference(capacitors).map((c) => `C${c.lcsc}`).slice(0, 3)
10726
10755
  };
10727
10756
  } else if (sourceComponent.type === "source_component" && sourceComponent.ftype === "simple_pin_header") {
10728
- let pitch;
10729
- if (footprinterString?.includes("_p")) {
10730
- pitch = Number(footprinterString.split("_p")[1]);
10731
- }
10732
10757
  const { headers } = await getJlcPartsCached(
10733
10758
  "headers",
10734
- pitch ? {
10735
- pitch,
10736
- num_pins: sourceComponent.pin_count,
10737
- gender: sourceComponent.gender
10738
- } : {
10739
- num_pins: sourceComponent.pin_count,
10740
- gender: sourceComponent.gender
10741
- }
10759
+ getPinHeaderSearchParams(sourceComponent, footprinterString)
10742
10760
  );
10743
10761
  return {
10744
10762
  jlcpcb: withBasicPartPreference(headers).map((h) => `C${h.lcsc}`).slice(0, 3)
@@ -10864,7 +10882,14 @@ var JlcPcbPartsEngine = class {
10864
10882
  const { components } = await getJlcPartsCached("components", {
10865
10883
  search: manufacturerPartNumber
10866
10884
  });
10867
- resolvedSupplierPartNumber = components?.[0] ? `C${components[0].lcsc}` : void 0;
10885
+ const normalizedManufacturerPartNumber = normalizePartNumber(
10886
+ manufacturerPartNumber
10887
+ );
10888
+ const exactManufacturerPartMatch = components?.find(
10889
+ (component) => normalizePartNumber(component.mfr) === normalizedManufacturerPartNumber
10890
+ );
10891
+ const componentMatch = exactManufacturerPartMatch ?? components?.[0];
10892
+ resolvedSupplierPartNumber = componentMatch ? `C${componentMatch.lcsc}` : void 0;
10868
10893
  }
10869
10894
  if (!resolvedSupplierPartNumber) return void 0;
10870
10895
  const rawEasyEdaJson = await fetchEasyEDAComponent(