@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 +38 -13
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
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
|
-
|
|
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(
|