@tscircuit/parts-engine 0.0.21 → 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 +43 -17
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -9191,13 +9191,14 @@ var handleHoleCutout = (hole, index) => {
|
|
|
9191
9191
|
});
|
|
9192
9192
|
};
|
|
9193
9193
|
var handleVia = (via, index) => {
|
|
9194
|
+
const holeDiameter = via.holeRadius * 2;
|
|
9194
9195
|
return pcb_via.parse({
|
|
9195
9196
|
type: "pcb_via",
|
|
9196
9197
|
pcb_via_id: `pcb_via_${index + 1}`,
|
|
9197
9198
|
x: milx10(via.center.x),
|
|
9198
9199
|
y: milx10(via.center.y),
|
|
9199
9200
|
outer_diameter: milx10(via.outerDiameter),
|
|
9200
|
-
hole_diameter: milx10(
|
|
9201
|
+
hole_diameter: milx10(holeDiameter),
|
|
9201
9202
|
layers: ["top", "bottom"]
|
|
9202
9203
|
});
|
|
9203
9204
|
};
|
|
@@ -9753,7 +9754,7 @@ var ViaSchema = BaseShapeSchema.extend({
|
|
|
9753
9754
|
type: external_exports.literal("VIA"),
|
|
9754
9755
|
center: PointSchema,
|
|
9755
9756
|
outerDiameter: external_exports.number(),
|
|
9756
|
-
|
|
9757
|
+
holeRadius: external_exports.number()
|
|
9757
9758
|
});
|
|
9758
9759
|
var RectSchema = BaseShapeSchema.extend({
|
|
9759
9760
|
type: external_exports.literal("RECT"),
|
|
@@ -9903,13 +9904,13 @@ var ShapeItemSchema = external_exports.object({
|
|
|
9903
9904
|
});
|
|
9904
9905
|
}
|
|
9905
9906
|
case "VIA": {
|
|
9906
|
-
const [x, y, outerDiameter, ,
|
|
9907
|
+
const [x, y, outerDiameter, , holeRadius, id] = shape.data.split("~");
|
|
9907
9908
|
const center = [Number(x), Number(y)];
|
|
9908
9909
|
return ViaSchema.parse({
|
|
9909
9910
|
type: "VIA",
|
|
9910
9911
|
center,
|
|
9911
9912
|
outerDiameter: Number(outerDiameter),
|
|
9912
|
-
|
|
9913
|
+
holeRadius: Number(holeRadius),
|
|
9913
9914
|
id
|
|
9914
9915
|
});
|
|
9915
9916
|
}
|
|
@@ -10656,6 +10657,34 @@ var getFetchWithEasyEdaProxy = ({
|
|
|
10656
10657
|
};
|
|
10657
10658
|
};
|
|
10658
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
|
+
|
|
10659
10688
|
// lib/jlc-parts-engine/jlc-parts-cache.ts
|
|
10660
10689
|
var cache = /* @__PURE__ */ new Map();
|
|
10661
10690
|
var getJlcPartsCached = async (name, params) => {
|
|
@@ -10681,6 +10710,7 @@ var withBasicPartPreference = (parts) => {
|
|
|
10681
10710
|
};
|
|
10682
10711
|
|
|
10683
10712
|
// lib/jlc-parts-engine/JlcPartsEngine.ts
|
|
10713
|
+
var normalizePartNumber = (partNumber) => typeof partNumber === "string" ? partNumber.trim().toLowerCase() : void 0;
|
|
10684
10714
|
var JlcPcbPartsEngine = class {
|
|
10685
10715
|
defaultPlatformFetch;
|
|
10686
10716
|
easyEdaProxyConfig;
|
|
@@ -10724,20 +10754,9 @@ var JlcPcbPartsEngine = class {
|
|
|
10724
10754
|
jlcpcb: withBasicPartPreference(capacitors).map((c) => `C${c.lcsc}`).slice(0, 3)
|
|
10725
10755
|
};
|
|
10726
10756
|
} else if (sourceComponent.type === "source_component" && sourceComponent.ftype === "simple_pin_header") {
|
|
10727
|
-
let pitch;
|
|
10728
|
-
if (footprinterString?.includes("_p")) {
|
|
10729
|
-
pitch = Number(footprinterString.split("_p")[1]);
|
|
10730
|
-
}
|
|
10731
10757
|
const { headers } = await getJlcPartsCached(
|
|
10732
10758
|
"headers",
|
|
10733
|
-
|
|
10734
|
-
pitch,
|
|
10735
|
-
num_pins: sourceComponent.pin_count,
|
|
10736
|
-
gender: sourceComponent.gender
|
|
10737
|
-
} : {
|
|
10738
|
-
num_pins: sourceComponent.pin_count,
|
|
10739
|
-
gender: sourceComponent.gender
|
|
10740
|
-
}
|
|
10759
|
+
getPinHeaderSearchParams(sourceComponent, footprinterString)
|
|
10741
10760
|
);
|
|
10742
10761
|
return {
|
|
10743
10762
|
jlcpcb: withBasicPartPreference(headers).map((h) => `C${h.lcsc}`).slice(0, 3)
|
|
@@ -10863,7 +10882,14 @@ var JlcPcbPartsEngine = class {
|
|
|
10863
10882
|
const { components } = await getJlcPartsCached("components", {
|
|
10864
10883
|
search: manufacturerPartNumber
|
|
10865
10884
|
});
|
|
10866
|
-
|
|
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;
|
|
10867
10893
|
}
|
|
10868
10894
|
if (!resolvedSupplierPartNumber) return void 0;
|
|
10869
10895
|
const rawEasyEdaJson = await fetchEasyEDAComponent(
|