easyeda 0.0.251 → 0.0.253
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/browser/index.d.ts +6 -7
- package/dist/browser/index.js +126 -41
- package/dist/browser/index.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.js +123 -40
- package/dist/index.js.map +1 -1
- package/dist/main.cjs +125 -42
- package/dist/main.cjs.map +1 -1
- package/package.json +2 -2
package/dist/main.cjs
CHANGED
|
@@ -846,14 +846,19 @@ var require_commander = __commonJS({
|
|
|
846
846
|
var import_commander = __toESM(require_commander(), 1);
|
|
847
847
|
|
|
848
848
|
// lib/websafe/get-model-cdn-url.ts
|
|
849
|
-
var
|
|
849
|
+
var getModelObjCdnUrl = ({
|
|
850
850
|
easyedaModelUuid,
|
|
851
|
-
easyedaPartNumber
|
|
852
|
-
format = "obj"
|
|
851
|
+
easyedaPartNumber
|
|
853
852
|
}) => {
|
|
854
|
-
|
|
855
|
-
return `https://modelcdn.tscircuit.com/easyeda_models/assets/${easyedaPartNumber}.${extension}?uuid=${easyedaModelUuid}`;
|
|
853
|
+
return `https://modelcdn.tscircuit.com/easyeda_models/assets/${easyedaPartNumber}.obj?uuid=${easyedaModelUuid}`;
|
|
856
854
|
};
|
|
855
|
+
var getModelStepCdnUrl = ({
|
|
856
|
+
easyedaModelUuid,
|
|
857
|
+
easyedaPartNumber
|
|
858
|
+
}) => {
|
|
859
|
+
return `https://modelcdn.tscircuit.com/easyeda_models/assets/${easyedaPartNumber}.step?uuid=${easyedaModelUuid}`;
|
|
860
|
+
};
|
|
861
|
+
var getModelCdnUrl = getModelObjCdnUrl;
|
|
857
862
|
|
|
858
863
|
// lib/websafe/fetch-easyeda-json.ts
|
|
859
864
|
var getModelUuidFromRawPackageDetail = (result) => {
|
|
@@ -992,7 +997,7 @@ var import_promises2 = __toESM(require("fs/promises"), 1);
|
|
|
992
997
|
var package_default = {
|
|
993
998
|
name: "easyeda",
|
|
994
999
|
type: "module",
|
|
995
|
-
version: "0.0.
|
|
1000
|
+
version: "0.0.252",
|
|
996
1001
|
files: [
|
|
997
1002
|
"dist"
|
|
998
1003
|
],
|
|
@@ -1033,7 +1038,7 @@ var package_default = {
|
|
|
1033
1038
|
"@tscircuit/mm": "^0.0.8",
|
|
1034
1039
|
"@types/bun": "latest",
|
|
1035
1040
|
"bun-match-svg": "^0.0.13",
|
|
1036
|
-
"circuit-json-to-gltf": "^0.0.
|
|
1041
|
+
"circuit-json-to-gltf": "^0.0.87",
|
|
1037
1042
|
"circuit-to-svg": "^0.0.337",
|
|
1038
1043
|
"looks-same": "^9.0.1",
|
|
1039
1044
|
poppygl: "^0.0.19",
|
|
@@ -6319,7 +6324,13 @@ var getCadPositionZMmFromMetadata = (easyEdaJson) => {
|
|
|
6319
6324
|
const minZ = Math.abs(bounds.min.z) < 1e-6 ? 0 : bounds.min.z;
|
|
6320
6325
|
return minZ - mil10ToMm(svgNodeZ);
|
|
6321
6326
|
};
|
|
6322
|
-
var convertEasyEdaJsonToCircuitJson = (easyEdaJson, {
|
|
6327
|
+
var convertEasyEdaJsonToCircuitJson = (easyEdaJson, {
|
|
6328
|
+
useModelCdn,
|
|
6329
|
+
shouldRecenter = true,
|
|
6330
|
+
cadPositionXMm,
|
|
6331
|
+
cadPositionYMm,
|
|
6332
|
+
cadPositionZMm
|
|
6333
|
+
} = {}) => {
|
|
6323
6334
|
const resolvedCadPositionZMm = cadPositionZMm ?? getCadPositionZMmFromMetadata(easyEdaJson);
|
|
6324
6335
|
const circuitElements = [];
|
|
6325
6336
|
const source_component = any_source_component.parse({
|
|
@@ -6564,8 +6575,8 @@ var convertEasyEdaJsonToCircuitJson = (easyEdaJson, { useModelCdn, shouldRecente
|
|
|
6564
6575
|
anchor_alignment: "center_of_component_on_board_surface",
|
|
6565
6576
|
model_origin_alignment: "center_of_component_on_board_surface",
|
|
6566
6577
|
model_origin_position: {
|
|
6567
|
-
x: 0,
|
|
6568
|
-
y: 0,
|
|
6578
|
+
x: cadPositionXMm ?? 0,
|
|
6579
|
+
y: cadPositionYMm ?? 0,
|
|
6569
6580
|
z: resolvedCadPositionZMm ?? position2.z
|
|
6570
6581
|
},
|
|
6571
6582
|
position: { x: 0, y: 0, z: 0 },
|
|
@@ -7461,6 +7472,92 @@ function normalizeManufacturerPartNumber(partNumber) {
|
|
|
7461
7472
|
return normalized;
|
|
7462
7473
|
}
|
|
7463
7474
|
|
|
7475
|
+
// lib/websafe/get-easyeda-cad-placement-helpers.ts
|
|
7476
|
+
var milToMm = (mil) => mil * 0.0254;
|
|
7477
|
+
var getBoundsCenter = (bounds) => ({
|
|
7478
|
+
x: (bounds.min.x + bounds.max.x) / 2,
|
|
7479
|
+
y: (bounds.min.y + bounds.max.y) / 2
|
|
7480
|
+
});
|
|
7481
|
+
var getCadSvgNode = (easyEdaJson) => {
|
|
7482
|
+
const svgNode = easyEdaJson.packageDetail.dataStr.shape.find(
|
|
7483
|
+
(shape) => shape.type === "SVGNODE" && shape.svgData.attrs?.uuid
|
|
7484
|
+
);
|
|
7485
|
+
return svgNode?.type === "SVGNODE" ? svgNode : null;
|
|
7486
|
+
};
|
|
7487
|
+
var parseMil10Value = (value) => Number(String(value).replace("mil", "")) / 10;
|
|
7488
|
+
var isZeroishModelCenter = (value) => Math.abs(value) < 1e-6;
|
|
7489
|
+
var isZeroishFootprintDelta = (value) => Math.abs(value) < 1e-3;
|
|
7490
|
+
var getPadCenter = (easyEdaJson) => {
|
|
7491
|
+
const pads = easyEdaJson.packageDetail.dataStr.shape.filter(
|
|
7492
|
+
(shape) => shape.type === "PAD"
|
|
7493
|
+
);
|
|
7494
|
+
if (pads.length === 0) return null;
|
|
7495
|
+
const xs = pads.map((pad) => parseMil10Value(pad.center.x));
|
|
7496
|
+
const ys = pads.map((pad) => parseMil10Value(pad.center.y));
|
|
7497
|
+
return {
|
|
7498
|
+
x: (Math.min(...xs) + Math.max(...xs)) / 2,
|
|
7499
|
+
y: (Math.min(...ys) + Math.max(...ys)) / 2
|
|
7500
|
+
};
|
|
7501
|
+
};
|
|
7502
|
+
var getRotatedOffsetMm = ({
|
|
7503
|
+
bounds,
|
|
7504
|
+
rawOffsetMil,
|
|
7505
|
+
rotationDeg
|
|
7506
|
+
}) => {
|
|
7507
|
+
const center = getBoundsCenter(bounds);
|
|
7508
|
+
const offsetX = milToMm(rawOffsetMil.x);
|
|
7509
|
+
const offsetY = milToMm(rawOffsetMil.y);
|
|
7510
|
+
switch (rotationDeg) {
|
|
7511
|
+
case 0:
|
|
7512
|
+
return { x: center.x + offsetX, y: center.y + offsetY };
|
|
7513
|
+
case 90:
|
|
7514
|
+
return { x: center.x + offsetY, y: center.y + offsetX };
|
|
7515
|
+
case 180:
|
|
7516
|
+
return { x: center.x - offsetX, y: center.y - offsetY };
|
|
7517
|
+
case 270:
|
|
7518
|
+
return { x: center.x - offsetY, y: center.y - offsetX };
|
|
7519
|
+
}
|
|
7520
|
+
};
|
|
7521
|
+
var getCadModelOffsetMm = (easyEdaJson) => {
|
|
7522
|
+
const svgNode = getCadSvgNode(easyEdaJson);
|
|
7523
|
+
const bounds = easyEdaJson._objMetadata?.bounds;
|
|
7524
|
+
if (!svgNode || !bounds) return null;
|
|
7525
|
+
const [originX, originY] = String(svgNode.svgData.attrs?.c_origin ?? "0,0").split(",").map((value) => Number(value.trim()));
|
|
7526
|
+
if (!Number.isFinite(originX) || !Number.isFinite(originY)) return null;
|
|
7527
|
+
const [, , rotationZRaw] = String(
|
|
7528
|
+
svgNode.svgData.attrs?.c_rotation ?? "0,0,0"
|
|
7529
|
+
).split(",").map((value) => Number(value.trim()));
|
|
7530
|
+
const rotationDeg = (rotationZRaw % 360 + 360) % 360;
|
|
7531
|
+
if (![0, 90, 180, 270].includes(rotationDeg)) return null;
|
|
7532
|
+
const modelCenter = getBoundsCenter(bounds);
|
|
7533
|
+
const footprintCenter = easyEdaJson.packageDetail.dataStr.head;
|
|
7534
|
+
const padCenter = getPadCenter(easyEdaJson);
|
|
7535
|
+
const padCenterDelta = padCenter ? {
|
|
7536
|
+
x: padCenter.x - footprintCenter.x,
|
|
7537
|
+
y: padCenter.y - footprintCenter.y
|
|
7538
|
+
} : null;
|
|
7539
|
+
const rawOffsetMil = {
|
|
7540
|
+
x: (originX - footprintCenter.x) * 10,
|
|
7541
|
+
y: (originY - footprintCenter.y) * 10
|
|
7542
|
+
};
|
|
7543
|
+
if (padCenter && padCenterDelta && isZeroishModelCenter(modelCenter.x) && isZeroishModelCenter(modelCenter.y) && isZeroishFootprintDelta(padCenterDelta.x) && isZeroishFootprintDelta(padCenterDelta.y)) {
|
|
7544
|
+
return { x: 0, y: 0 };
|
|
7545
|
+
}
|
|
7546
|
+
return getRotatedOffsetMm({
|
|
7547
|
+
bounds,
|
|
7548
|
+
rawOffsetMil,
|
|
7549
|
+
rotationDeg
|
|
7550
|
+
});
|
|
7551
|
+
};
|
|
7552
|
+
var getCadSvgNodeZOffsetMm = (easyEdaJson) => {
|
|
7553
|
+
const svgNode = getCadSvgNode(easyEdaJson);
|
|
7554
|
+
if (!svgNode) return null;
|
|
7555
|
+
const svgNodeZ = Number(svgNode.svgData.attrs?.z ?? 0);
|
|
7556
|
+
if (!Number.isFinite(svgNodeZ)) return null;
|
|
7557
|
+
return mil10ToMm(svgNodeZ);
|
|
7558
|
+
};
|
|
7559
|
+
var getCadSvgNodeModelUuid = (easyEdaJson) => getCadSvgNode(easyEdaJson)?.svgData.attrs?.uuid ?? null;
|
|
7560
|
+
|
|
7464
7561
|
// lib/websafe/get-easyeda-cad-model-placement.ts
|
|
7465
7562
|
var placementCache = /* @__PURE__ */ new Map();
|
|
7466
7563
|
var parseObjBounds2 = (objText) => {
|
|
@@ -7495,43 +7592,32 @@ var parseObjBounds2 = (objText) => {
|
|
|
7495
7592
|
max: { x: maxX, y: maxY, z: maxZ }
|
|
7496
7593
|
};
|
|
7497
7594
|
};
|
|
7498
|
-
var getSvgNodeZOffsetMm = (easyEdaJson) => {
|
|
7499
|
-
const svgNode = easyEdaJson.packageDetail.dataStr.shape.find(
|
|
7500
|
-
(shape) => shape.type === "SVGNODE" && shape.svgData.attrs?.uuid
|
|
7501
|
-
);
|
|
7502
|
-
if (!svgNode || svgNode.type !== "SVGNODE") return null;
|
|
7503
|
-
const svgNodeZ = Number(svgNode.svgData.attrs?.z ?? 0);
|
|
7504
|
-
if (!Number.isFinite(svgNodeZ)) return null;
|
|
7505
|
-
return mil10ToMm(svgNodeZ);
|
|
7506
|
-
};
|
|
7507
7595
|
var getPositionZMmFromBounds = (bounds, svgNodeZOffsetMm) => {
|
|
7508
7596
|
const minZ = Math.abs(bounds.min.z) < 1e-6 ? 0 : bounds.min.z;
|
|
7509
7597
|
return minZ - svgNodeZOffsetMm;
|
|
7510
7598
|
};
|
|
7511
7599
|
var getEasyEdaCadModelPlacement = async (easyEdaJson, { fetch: fetch2 = globalThis.fetch } = {}) => {
|
|
7512
|
-
const
|
|
7513
|
-
(shape) => shape.type === "SVGNODE" && shape.svgData.attrs?.uuid
|
|
7514
|
-
);
|
|
7515
|
-
if (!svgNode || svgNode.type !== "SVGNODE") return null;
|
|
7516
|
-
const modelUuid = svgNode.svgData.attrs?.uuid;
|
|
7600
|
+
const modelUuid = getCadSvgNodeModelUuid(easyEdaJson);
|
|
7517
7601
|
const partNumber = easyEdaJson.lcsc.number;
|
|
7518
|
-
const
|
|
7519
|
-
|
|
7602
|
+
const derivedOffsetMm = getCadModelOffsetMm(easyEdaJson);
|
|
7603
|
+
const svgNodeZOffsetMm = getCadSvgNodeZOffsetMm(easyEdaJson);
|
|
7604
|
+
if (!modelUuid || !partNumber || svgNodeZOffsetMm == null || !derivedOffsetMm || !fetch2) {
|
|
7520
7605
|
return null;
|
|
7521
7606
|
}
|
|
7522
|
-
const modelObjUrl =
|
|
7607
|
+
const modelObjUrl = getModelObjCdnUrl({
|
|
7523
7608
|
easyedaModelUuid: modelUuid,
|
|
7524
7609
|
easyedaPartNumber: partNumber
|
|
7525
7610
|
});
|
|
7526
|
-
const modelStepUrl =
|
|
7611
|
+
const modelStepUrl = getModelStepCdnUrl({
|
|
7527
7612
|
easyedaModelUuid: modelUuid,
|
|
7528
|
-
easyedaPartNumber: partNumber
|
|
7529
|
-
format: "step"
|
|
7613
|
+
easyedaPartNumber: partNumber
|
|
7530
7614
|
});
|
|
7531
7615
|
const metadataBounds = easyEdaJson._objMetadata?.bounds;
|
|
7532
7616
|
if (metadataBounds) {
|
|
7533
7617
|
return {
|
|
7534
7618
|
modelObjUrl,
|
|
7619
|
+
positionXMm: derivedOffsetMm.x,
|
|
7620
|
+
positionYMm: derivedOffsetMm.y,
|
|
7535
7621
|
modelStepUrl,
|
|
7536
7622
|
bounds: metadataBounds,
|
|
7537
7623
|
positionZMm: getPositionZMmFromBounds(metadataBounds, svgNodeZOffsetMm)
|
|
@@ -7549,6 +7635,8 @@ var getEasyEdaCadModelPlacement = async (easyEdaJson, { fetch: fetch2 = globalTh
|
|
|
7549
7635
|
if (!bounds) return null;
|
|
7550
7636
|
return {
|
|
7551
7637
|
modelObjUrl,
|
|
7638
|
+
positionXMm: derivedOffsetMm.x,
|
|
7639
|
+
positionYMm: derivedOffsetMm.y,
|
|
7552
7640
|
modelStepUrl,
|
|
7553
7641
|
bounds,
|
|
7554
7642
|
// Align the EasyEDA SVG-node Z against the model's minimum Z.
|
|
@@ -7697,25 +7785,22 @@ ${cadModelLines}
|
|
|
7697
7785
|
};
|
|
7698
7786
|
|
|
7699
7787
|
// lib/websafe/convert-to-typescript-component/index.tsx
|
|
7700
|
-
var convertRawEasyToTsx = async ({
|
|
7701
|
-
rawEasy,
|
|
7702
|
-
format = "obj"
|
|
7703
|
-
}) => {
|
|
7788
|
+
var convertRawEasyToTsx = async ({ rawEasy }) => {
|
|
7704
7789
|
const betterEasy = EasyEdaJsonSchema.parse(rawEasy);
|
|
7705
7790
|
const result = await convertBetterEasyToTsx({
|
|
7706
|
-
betterEasy
|
|
7707
|
-
format
|
|
7791
|
+
betterEasy
|
|
7708
7792
|
});
|
|
7709
7793
|
return result;
|
|
7710
7794
|
};
|
|
7711
7795
|
var convertBetterEasyToTsx = async ({
|
|
7712
|
-
betterEasy
|
|
7713
|
-
format = "obj"
|
|
7796
|
+
betterEasy
|
|
7714
7797
|
}) => {
|
|
7715
7798
|
const cadPlacement = await getEasyEdaCadModelPlacement(betterEasy);
|
|
7716
7799
|
const circuitJson = convertEasyEdaJsonToCircuitJson(betterEasy, {
|
|
7717
7800
|
useModelCdn: true,
|
|
7718
7801
|
shouldRecenter: true,
|
|
7802
|
+
cadPositionXMm: cadPlacement?.positionXMm,
|
|
7803
|
+
cadPositionYMm: cadPlacement?.positionYMm,
|
|
7719
7804
|
cadPositionZMm: cadPlacement?.positionZMm
|
|
7720
7805
|
});
|
|
7721
7806
|
const [cadComponent] = su(circuitJson).cad_component.list();
|
|
@@ -7752,8 +7837,6 @@ var convertBetterEasyToTsx = async ({
|
|
|
7752
7837
|
modelStepUrl = cadComponent.model_step_url;
|
|
7753
7838
|
}
|
|
7754
7839
|
}
|
|
7755
|
-
const selectedObjUrl = format === "obj" ? modelObjUrl : void 0;
|
|
7756
|
-
const selectedStepUrl = format === "step" ? modelStepUrl : void 0;
|
|
7757
7840
|
const supplierPartNumbers = {
|
|
7758
7841
|
jlcpcb: [betterEasy.lcsc.number]
|
|
7759
7842
|
};
|
|
@@ -7761,8 +7844,8 @@ var convertBetterEasyToTsx = async ({
|
|
|
7761
7844
|
componentName: pn,
|
|
7762
7845
|
manufacturerPartNumber: pn,
|
|
7763
7846
|
pinLabels,
|
|
7764
|
-
objUrl:
|
|
7765
|
-
stepUrl:
|
|
7847
|
+
objUrl: modelObjUrl,
|
|
7848
|
+
stepUrl: modelStepUrl,
|
|
7766
7849
|
circuitJson,
|
|
7767
7850
|
supplierPartNumbers
|
|
7768
7851
|
});
|