easyeda 0.0.262 → 0.0.264
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 +13 -1
- package/dist/browser/index.js +206 -98
- package/dist/browser/index.js.map +1 -1
- package/dist/index.d.ts +13 -1
- package/dist/index.js +206 -98
- package/dist/index.js.map +1 -1
- package/dist/main.cjs +238 -124
- package/dist/main.cjs.map +1 -1
- package/package.json +27 -26
package/dist/main.cjs
CHANGED
|
@@ -997,7 +997,7 @@ var import_promises = __toESM(require("fs/promises"), 1);
|
|
|
997
997
|
var package_default = {
|
|
998
998
|
name: "easyeda",
|
|
999
999
|
type: "module",
|
|
1000
|
-
version: "0.0.
|
|
1000
|
+
version: "0.0.263",
|
|
1001
1001
|
files: [
|
|
1002
1002
|
"dist"
|
|
1003
1003
|
],
|
|
@@ -1006,35 +1006,12 @@ var package_default = {
|
|
|
1006
1006
|
type: "git",
|
|
1007
1007
|
url: "https://github.com/tscircuit/easyeda-converter"
|
|
1008
1008
|
},
|
|
1009
|
-
scripts: {
|
|
1010
|
-
test: "bun test",
|
|
1011
|
-
cli: "bun cli/main.ts",
|
|
1012
|
-
build: "tsup",
|
|
1013
|
-
aider: "aider",
|
|
1014
|
-
"format:check": "biome format .",
|
|
1015
|
-
format: "biome format . --write",
|
|
1016
|
-
"add-test-for-part": "bun run scripts/add-test-for-part.ts"
|
|
1017
|
-
},
|
|
1018
1009
|
main: "./dist/index.js",
|
|
1019
|
-
types: "./dist/index.d.ts",
|
|
1020
|
-
exports: {
|
|
1021
|
-
".": {
|
|
1022
|
-
types: "./dist/index.d.ts",
|
|
1023
|
-
default: "./dist/index.js"
|
|
1024
|
-
},
|
|
1025
|
-
"./browser": {
|
|
1026
|
-
types: "./dist/browser/index.d.ts",
|
|
1027
|
-
default: "./dist/browser/index.js"
|
|
1028
|
-
}
|
|
1029
|
-
},
|
|
1030
|
-
bin: {
|
|
1031
|
-
"easyeda-converter": "./dist/main.cjs",
|
|
1032
|
-
easyeda: "./dist/main.cjs"
|
|
1033
|
-
},
|
|
1034
1010
|
devDependencies: {
|
|
1035
1011
|
"@biomejs/biome": "^1.9.4",
|
|
1036
1012
|
"@tscircuit/alphabet": "^0.0.22",
|
|
1037
1013
|
"@tscircuit/circuit-json-util": "^0.0.90",
|
|
1014
|
+
"@tscircuit/math-utils": "^0.0.36",
|
|
1038
1015
|
"@tscircuit/mm": "^0.0.9",
|
|
1039
1016
|
"@types/bun": "latest",
|
|
1040
1017
|
"bun-match-svg": "^0.0.13",
|
|
@@ -1049,7 +1026,36 @@ var package_default = {
|
|
|
1049
1026
|
peerDependencies: {
|
|
1050
1027
|
typescript: "^5.5.2",
|
|
1051
1028
|
zod: "3"
|
|
1052
|
-
}
|
|
1029
|
+
},
|
|
1030
|
+
exports: {
|
|
1031
|
+
".": {
|
|
1032
|
+
types: "./dist/index.d.ts",
|
|
1033
|
+
default: "./dist/index.js"
|
|
1034
|
+
},
|
|
1035
|
+
"./browser": {
|
|
1036
|
+
types: "./dist/browser/index.d.ts",
|
|
1037
|
+
default: "./dist/browser/index.js"
|
|
1038
|
+
}
|
|
1039
|
+
},
|
|
1040
|
+
bin: {
|
|
1041
|
+
"easyeda-converter": "./dist/main.cjs",
|
|
1042
|
+
easyeda: "./dist/main.cjs"
|
|
1043
|
+
},
|
|
1044
|
+
files: [
|
|
1045
|
+
"dist"
|
|
1046
|
+
],
|
|
1047
|
+
license: "MIT",
|
|
1048
|
+
scripts: {
|
|
1049
|
+
test: "bun test",
|
|
1050
|
+
cli: "bun cli/main.ts",
|
|
1051
|
+
build: "tsup",
|
|
1052
|
+
aider: "aider",
|
|
1053
|
+
"format:check": "biome format .",
|
|
1054
|
+
format: "biome format . --write",
|
|
1055
|
+
"add-test-for-part": "bun run scripts/add-test-for-part.ts"
|
|
1056
|
+
},
|
|
1057
|
+
type: "module",
|
|
1058
|
+
types: "./dist/index.d.ts"
|
|
1053
1059
|
};
|
|
1054
1060
|
|
|
1055
1061
|
// node_modules/circuit-json/dist/index.mjs
|
|
@@ -6081,11 +6087,11 @@ function generateArcFromSweep(startX, startY, endX, endY, radius, largeArcFlag,
|
|
|
6081
6087
|
const midY = (startY + endY) / 2;
|
|
6082
6088
|
const dx = endX - startX;
|
|
6083
6089
|
const dy = endY - startY;
|
|
6084
|
-
const
|
|
6085
|
-
if (
|
|
6090
|
+
const distance3 = Math.sqrt(dx * dx + dy * dy);
|
|
6091
|
+
if (distance3 === 0 || radius < distance3 / 2) {
|
|
6086
6092
|
return [start, end];
|
|
6087
6093
|
}
|
|
6088
|
-
const h = Math.sqrt(radius * radius -
|
|
6094
|
+
const h = Math.sqrt(radius * radius - distance3 * distance3 / 4);
|
|
6089
6095
|
const angle = Math.atan2(dy, dx);
|
|
6090
6096
|
const centerX = midX + h * Math.sin(angle) * (sweepFlag ? -1 : 1);
|
|
6091
6097
|
const centerY = midY - h * Math.cos(angle) * (sweepFlag ? -1 : 1);
|
|
@@ -6121,6 +6127,142 @@ function generateArcFromSweep(startX, startY, endX, endY, radius, largeArcFlag,
|
|
|
6121
6127
|
// lib/utils/easyeda-unit-to-mm.ts
|
|
6122
6128
|
var mil10ToMm = (value) => value * 10 * 0.0254;
|
|
6123
6129
|
|
|
6130
|
+
// node_modules/@tscircuit/math-utils/dist/chunk-3WCUPG5S.js
|
|
6131
|
+
var getBoundsCenter = (bounds) => ({
|
|
6132
|
+
x: (bounds.minX + bounds.maxX) / 2,
|
|
6133
|
+
y: (bounds.minY + bounds.maxY) / 2
|
|
6134
|
+
});
|
|
6135
|
+
|
|
6136
|
+
// node_modules/@tscircuit/math-utils/dist/chunk-5N7UJNVK.js
|
|
6137
|
+
var getBoundsFromPoints = (points) => {
|
|
6138
|
+
if (points.length === 0) {
|
|
6139
|
+
return null;
|
|
6140
|
+
}
|
|
6141
|
+
let minX = points[0].x;
|
|
6142
|
+
let minY = points[0].y;
|
|
6143
|
+
let maxX = points[0].x;
|
|
6144
|
+
let maxY = points[0].y;
|
|
6145
|
+
for (let i = 1; i < points.length; i++) {
|
|
6146
|
+
const point2 = points[i];
|
|
6147
|
+
if (point2.x < minX) minX = point2.x;
|
|
6148
|
+
if (point2.y < minY) minY = point2.y;
|
|
6149
|
+
if (point2.x > maxX) maxX = point2.x;
|
|
6150
|
+
if (point2.y > maxY) maxY = point2.y;
|
|
6151
|
+
}
|
|
6152
|
+
return { minX, minY, maxX, maxY };
|
|
6153
|
+
};
|
|
6154
|
+
|
|
6155
|
+
// lib/websafe/get-easyeda-cad-placement-helpers.ts
|
|
6156
|
+
var getCadSvgNode = (easyEdaJson) => {
|
|
6157
|
+
const svgNode = easyEdaJson.packageDetail.dataStr.shape.find(
|
|
6158
|
+
(shape) => shape.type === "SVGNODE" && shape.svgData.attrs?.uuid
|
|
6159
|
+
);
|
|
6160
|
+
return svgNode?.type === "SVGNODE" ? svgNode : null;
|
|
6161
|
+
};
|
|
6162
|
+
var isSvgChildNodeWithAttrs = (childNode) => typeof childNode === "object" && childNode !== null;
|
|
6163
|
+
var getXyBoundsFromModelBounds = (bounds) => ({
|
|
6164
|
+
minX: bounds.min.x,
|
|
6165
|
+
minY: bounds.min.y,
|
|
6166
|
+
maxX: bounds.max.x,
|
|
6167
|
+
maxY: bounds.max.y
|
|
6168
|
+
});
|
|
6169
|
+
var rotateScenePoint = (point2, rotationDeg) => {
|
|
6170
|
+
switch (rotationDeg) {
|
|
6171
|
+
case 0:
|
|
6172
|
+
return point2;
|
|
6173
|
+
case 90:
|
|
6174
|
+
return { x: point2.y, y: -point2.x };
|
|
6175
|
+
case 180:
|
|
6176
|
+
return { x: -point2.x, y: -point2.y };
|
|
6177
|
+
case 270:
|
|
6178
|
+
return { x: -point2.y, y: point2.x };
|
|
6179
|
+
}
|
|
6180
|
+
};
|
|
6181
|
+
var getEasyEdaModelOriginOnBoardMm = ({
|
|
6182
|
+
svgNode,
|
|
6183
|
+
footprintCenterMm
|
|
6184
|
+
}) => {
|
|
6185
|
+
const points = [];
|
|
6186
|
+
for (const childNode of svgNode.svgData.childNodes ?? []) {
|
|
6187
|
+
if (!isSvgChildNodeWithAttrs(childNode)) continue;
|
|
6188
|
+
const rawPoints = childNode.attrs?.points;
|
|
6189
|
+
if (!rawPoints) continue;
|
|
6190
|
+
const values = String(rawPoints).trim().split(/\s+/).map(Number);
|
|
6191
|
+
for (let i = 0; i + 1 < values.length; i += 2) {
|
|
6192
|
+
const x = values[i];
|
|
6193
|
+
const y = values[i + 1];
|
|
6194
|
+
if (Number.isFinite(x) && Number.isFinite(y)) {
|
|
6195
|
+
points.push({ x: mil10ToMm(x), y: mil10ToMm(y) });
|
|
6196
|
+
}
|
|
6197
|
+
}
|
|
6198
|
+
}
|
|
6199
|
+
let modelOriginMm = null;
|
|
6200
|
+
if (points.length > 0) {
|
|
6201
|
+
const bounds = getBoundsFromPoints(points);
|
|
6202
|
+
modelOriginMm = bounds ? getBoundsCenter(bounds) : null;
|
|
6203
|
+
} else {
|
|
6204
|
+
const [originX, originY] = String(svgNode.svgData.attrs?.c_origin ?? "0,0").split(",").map((value) => Number(value.trim()));
|
|
6205
|
+
if (Number.isFinite(originX) && Number.isFinite(originY)) {
|
|
6206
|
+
modelOriginMm = { x: mil10ToMm(originX), y: mil10ToMm(originY) };
|
|
6207
|
+
}
|
|
6208
|
+
}
|
|
6209
|
+
if (!modelOriginMm) return null;
|
|
6210
|
+
return {
|
|
6211
|
+
x: modelOriginMm.x - footprintCenterMm.x,
|
|
6212
|
+
y: footprintCenterMm.y - modelOriginMm.y
|
|
6213
|
+
};
|
|
6214
|
+
};
|
|
6215
|
+
var snapZero = (value) => Math.abs(value) < 1e-6 ? 0 : value;
|
|
6216
|
+
var normalizePoint = (point2) => ({
|
|
6217
|
+
x: snapZero(point2.x),
|
|
6218
|
+
y: snapZero(point2.y)
|
|
6219
|
+
});
|
|
6220
|
+
var getCadModelOffsetMm = (easyEdaJson) => {
|
|
6221
|
+
const svgNode = getCadSvgNode(easyEdaJson);
|
|
6222
|
+
return getCadModelOffsetMmFromBounds(
|
|
6223
|
+
easyEdaJson,
|
|
6224
|
+
easyEdaJson._objMetadata?.bounds
|
|
6225
|
+
);
|
|
6226
|
+
};
|
|
6227
|
+
var getCadModelOffsetMmFromBounds = (easyEdaJson, bounds, {
|
|
6228
|
+
footprintBoundsCenterMm
|
|
6229
|
+
} = {}) => {
|
|
6230
|
+
const svgNode = getCadSvgNode(easyEdaJson);
|
|
6231
|
+
if (!svgNode || !bounds) return null;
|
|
6232
|
+
const [, , rotationZRaw] = String(
|
|
6233
|
+
svgNode.svgData.attrs?.c_rotation ?? "0,0,0"
|
|
6234
|
+
).split(",").map((value) => Number(value.trim()));
|
|
6235
|
+
const rotationDeg = (rotationZRaw % 360 + 360) % 360;
|
|
6236
|
+
if (![0, 90, 180, 270].includes(rotationDeg)) return null;
|
|
6237
|
+
const modelCenter = getBoundsCenter(getXyBoundsFromModelBounds(bounds));
|
|
6238
|
+
const footprintCenter = easyEdaJson.packageDetail.dataStr.head;
|
|
6239
|
+
const footprintCenterMm = footprintBoundsCenterMm ?? {
|
|
6240
|
+
x: mil10ToMm(footprintCenter.x),
|
|
6241
|
+
y: mil10ToMm(footprintCenter.y)
|
|
6242
|
+
};
|
|
6243
|
+
const targetOriginOnBoardMm = getEasyEdaModelOriginOnBoardMm({
|
|
6244
|
+
svgNode,
|
|
6245
|
+
footprintCenterMm
|
|
6246
|
+
});
|
|
6247
|
+
if (!targetOriginOnBoardMm) return null;
|
|
6248
|
+
const targetOriginInModelFrame = rotateScenePoint(
|
|
6249
|
+
targetOriginOnBoardMm,
|
|
6250
|
+
rotationDeg
|
|
6251
|
+
);
|
|
6252
|
+
return normalizePoint({
|
|
6253
|
+
x: modelCenter.x - targetOriginInModelFrame.x,
|
|
6254
|
+
y: modelCenter.y - targetOriginInModelFrame.y
|
|
6255
|
+
});
|
|
6256
|
+
};
|
|
6257
|
+
var getCadSvgNodeZOffsetMm = (easyEdaJson) => {
|
|
6258
|
+
const svgNode = getCadSvgNode(easyEdaJson);
|
|
6259
|
+
if (!svgNode) return null;
|
|
6260
|
+
const svgNodeZ = Number(svgNode.svgData.attrs?.z ?? 0);
|
|
6261
|
+
if (!Number.isFinite(svgNodeZ)) return null;
|
|
6262
|
+
return mil10ToMm(svgNodeZ);
|
|
6263
|
+
};
|
|
6264
|
+
var getCadSvgNodeModelUuid = (easyEdaJson) => getCadSvgNode(easyEdaJson)?.svgData.attrs?.uuid ?? null;
|
|
6265
|
+
|
|
6124
6266
|
// lib/utils/normalize-pin-labels.ts
|
|
6125
6267
|
var normalizePinLabels = (inputPinLabels) => {
|
|
6126
6268
|
const uniqueInputPinLabels = inputPinLabels.map((labels) => [
|
|
@@ -6337,6 +6479,7 @@ var convertEasyEdaJsonToCircuitJson = (easyEdaJson, {
|
|
|
6337
6479
|
cadPositionXMm,
|
|
6338
6480
|
cadPositionYMm,
|
|
6339
6481
|
cadPositionZMm,
|
|
6482
|
+
cadModelBounds,
|
|
6340
6483
|
showDesignator = false
|
|
6341
6484
|
} = {}) => {
|
|
6342
6485
|
const resolvedCadPositionZMm = cadPositionZMm ?? getCadPositionZMmFromMetadata(easyEdaJson);
|
|
@@ -6689,6 +6832,14 @@ var convertEasyEdaJsonToCircuitJson = (easyEdaJson, {
|
|
|
6689
6832
|
if (!cad.model_origin_position) {
|
|
6690
6833
|
cad.model_origin_position = { x: 0, y: 0, z: 0 };
|
|
6691
6834
|
}
|
|
6835
|
+
const resolvedCadModelBounds = cadModelBounds ?? easyEdaJson._objMetadata?.bounds;
|
|
6836
|
+
const recenteredCadOffset = resolvedCadModelBounds && getCadModelOffsetMmFromBounds(easyEdaJson, resolvedCadModelBounds, {
|
|
6837
|
+
footprintBoundsCenterMm: bounds.center
|
|
6838
|
+
});
|
|
6839
|
+
if (recenteredCadOffset) {
|
|
6840
|
+
cad.model_origin_position.x = recenteredCadOffset.x;
|
|
6841
|
+
cad.model_origin_position.y = recenteredCadOffset.y;
|
|
6842
|
+
}
|
|
6692
6843
|
const side = pcb_component2.layer ?? "top";
|
|
6693
6844
|
const t = DEFAULT_PCB_THICKNESS_MM / 2;
|
|
6694
6845
|
const attrs = svgNode?.svgData?.attrs ?? {};
|
|
@@ -7513,98 +7664,6 @@ function normalizeManufacturerPartNumber(partNumber) {
|
|
|
7513
7664
|
return normalized;
|
|
7514
7665
|
}
|
|
7515
7666
|
|
|
7516
|
-
// lib/websafe/get-easyeda-cad-placement-helpers.ts
|
|
7517
|
-
var milToMm = (mil) => mil * 0.0254;
|
|
7518
|
-
var getBoundsCenter = (bounds) => ({
|
|
7519
|
-
x: (bounds.min.x + bounds.max.x) / 2,
|
|
7520
|
-
y: (bounds.min.y + bounds.max.y) / 2
|
|
7521
|
-
});
|
|
7522
|
-
var getCadSvgNode = (easyEdaJson) => {
|
|
7523
|
-
const svgNode = easyEdaJson.packageDetail.dataStr.shape.find(
|
|
7524
|
-
(shape) => shape.type === "SVGNODE" && shape.svgData.attrs?.uuid
|
|
7525
|
-
);
|
|
7526
|
-
return svgNode?.type === "SVGNODE" ? svgNode : null;
|
|
7527
|
-
};
|
|
7528
|
-
var parseMil10Value = (value) => Number(String(value).replace("mil", "")) / 10;
|
|
7529
|
-
var isZeroishModelCenter = (value) => Math.abs(value) < 1e-6;
|
|
7530
|
-
var isZeroishFootprintDelta = (value) => Math.abs(value) < 1e-3;
|
|
7531
|
-
var getPadCenter = (easyEdaJson) => {
|
|
7532
|
-
const pads = easyEdaJson.packageDetail.dataStr.shape.filter(
|
|
7533
|
-
(shape) => shape.type === "PAD"
|
|
7534
|
-
);
|
|
7535
|
-
if (pads.length === 0) return null;
|
|
7536
|
-
const xs = pads.map((pad) => parseMil10Value(pad.center.x));
|
|
7537
|
-
const ys = pads.map((pad) => parseMil10Value(pad.center.y));
|
|
7538
|
-
return {
|
|
7539
|
-
x: (Math.min(...xs) + Math.max(...xs)) / 2,
|
|
7540
|
-
y: (Math.min(...ys) + Math.max(...ys)) / 2
|
|
7541
|
-
};
|
|
7542
|
-
};
|
|
7543
|
-
var getRotatedOffsetMm = ({
|
|
7544
|
-
bounds,
|
|
7545
|
-
rawOffsetMil,
|
|
7546
|
-
rotationDeg
|
|
7547
|
-
}) => {
|
|
7548
|
-
const center = getBoundsCenter(bounds);
|
|
7549
|
-
const offsetX = milToMm(rawOffsetMil.x);
|
|
7550
|
-
const offsetY = milToMm(rawOffsetMil.y);
|
|
7551
|
-
switch (rotationDeg) {
|
|
7552
|
-
case 0:
|
|
7553
|
-
return { x: center.x + offsetX, y: center.y + offsetY };
|
|
7554
|
-
case 90:
|
|
7555
|
-
return { x: center.x + offsetY, y: center.y + offsetX };
|
|
7556
|
-
case 180:
|
|
7557
|
-
return { x: center.x - offsetX, y: center.y - offsetY };
|
|
7558
|
-
case 270:
|
|
7559
|
-
return { x: center.x - offsetY, y: center.y - offsetX };
|
|
7560
|
-
}
|
|
7561
|
-
};
|
|
7562
|
-
var getCadModelOffsetMm = (easyEdaJson) => {
|
|
7563
|
-
const svgNode = getCadSvgNode(easyEdaJson);
|
|
7564
|
-
return getCadModelOffsetMmFromBounds(
|
|
7565
|
-
easyEdaJson,
|
|
7566
|
-
easyEdaJson._objMetadata?.bounds
|
|
7567
|
-
);
|
|
7568
|
-
};
|
|
7569
|
-
var getCadModelOffsetMmFromBounds = (easyEdaJson, bounds) => {
|
|
7570
|
-
const svgNode = getCadSvgNode(easyEdaJson);
|
|
7571
|
-
if (!svgNode || !bounds) return null;
|
|
7572
|
-
const [originX, originY] = String(svgNode.svgData.attrs?.c_origin ?? "0,0").split(",").map((value) => Number(value.trim()));
|
|
7573
|
-
if (!Number.isFinite(originX) || !Number.isFinite(originY)) return null;
|
|
7574
|
-
const [, , rotationZRaw] = String(
|
|
7575
|
-
svgNode.svgData.attrs?.c_rotation ?? "0,0,0"
|
|
7576
|
-
).split(",").map((value) => Number(value.trim()));
|
|
7577
|
-
const rotationDeg = (rotationZRaw % 360 + 360) % 360;
|
|
7578
|
-
if (![0, 90, 180, 270].includes(rotationDeg)) return null;
|
|
7579
|
-
const modelCenter = getBoundsCenter(bounds);
|
|
7580
|
-
const footprintCenter = easyEdaJson.packageDetail.dataStr.head;
|
|
7581
|
-
const padCenter = getPadCenter(easyEdaJson);
|
|
7582
|
-
const padCenterDelta = padCenter ? {
|
|
7583
|
-
x: padCenter.x - footprintCenter.x,
|
|
7584
|
-
y: padCenter.y - footprintCenter.y
|
|
7585
|
-
} : null;
|
|
7586
|
-
const rawOffsetMil = {
|
|
7587
|
-
x: (originX - footprintCenter.x) * 10,
|
|
7588
|
-
y: (originY - footprintCenter.y) * 10
|
|
7589
|
-
};
|
|
7590
|
-
if (padCenter && padCenterDelta && isZeroishModelCenter(modelCenter.x) && isZeroishModelCenter(modelCenter.y) && isZeroishFootprintDelta(padCenterDelta.x) && isZeroishFootprintDelta(padCenterDelta.y)) {
|
|
7591
|
-
return { x: 0, y: 0 };
|
|
7592
|
-
}
|
|
7593
|
-
return getRotatedOffsetMm({
|
|
7594
|
-
bounds,
|
|
7595
|
-
rawOffsetMil,
|
|
7596
|
-
rotationDeg
|
|
7597
|
-
});
|
|
7598
|
-
};
|
|
7599
|
-
var getCadSvgNodeZOffsetMm = (easyEdaJson) => {
|
|
7600
|
-
const svgNode = getCadSvgNode(easyEdaJson);
|
|
7601
|
-
if (!svgNode) return null;
|
|
7602
|
-
const svgNodeZ = Number(svgNode.svgData.attrs?.z ?? 0);
|
|
7603
|
-
if (!Number.isFinite(svgNodeZ)) return null;
|
|
7604
|
-
return mil10ToMm(svgNodeZ);
|
|
7605
|
-
};
|
|
7606
|
-
var getCadSvgNodeModelUuid = (easyEdaJson) => getCadSvgNode(easyEdaJson)?.svgData.attrs?.uuid ?? null;
|
|
7607
|
-
|
|
7608
7667
|
// lib/websafe/get-easyeda-cad-model-placement.ts
|
|
7609
7668
|
var placementCache = /* @__PURE__ */ new Map();
|
|
7610
7669
|
var parseObjBounds2 = (objText) => {
|
|
@@ -7799,7 +7858,7 @@ var getPinLabelValues = (labels) => {
|
|
|
7799
7858
|
if (typeof labels === "string") return [labels];
|
|
7800
7859
|
return [...labels];
|
|
7801
7860
|
};
|
|
7802
|
-
var
|
|
7861
|
+
var getPolarizedPortHintsMap = (pinLabels) => {
|
|
7803
7862
|
const labelsByPin = Object.entries(pinLabels ?? {}).map(([pin, labels]) => ({
|
|
7804
7863
|
pin,
|
|
7805
7864
|
labels: getPinLabelValues(labels).map((label) => label.toLowerCase())
|
|
@@ -7830,7 +7889,7 @@ var generateTypescriptComponent = ({
|
|
|
7830
7889
|
const cadComponent = circuitJson.find((item) => item.type === "cad_component");
|
|
7831
7890
|
const footprintTsx = generateFootprintTsx(
|
|
7832
7891
|
circuitJson,
|
|
7833
|
-
componentType === "diode" ? { portHintsMap:
|
|
7892
|
+
componentType === "diode" || componentType === "led" ? { portHintsMap: getPolarizedPortHintsMap(safePinLabels) } : void 0
|
|
7834
7893
|
);
|
|
7835
7894
|
const simplifiedPinLabels = Object.fromEntries(
|
|
7836
7895
|
Object.entries(safePinLabels).map(([pin, labels]) => {
|
|
@@ -7867,6 +7926,28 @@ ${cadModelLines}
|
|
|
7867
7926
|
/>
|
|
7868
7927
|
)
|
|
7869
7928
|
}
|
|
7929
|
+
`.trim();
|
|
7930
|
+
}
|
|
7931
|
+
if (componentType === "led") {
|
|
7932
|
+
return `
|
|
7933
|
+
import type { LedProps } from "@tscircuit/props"
|
|
7934
|
+
|
|
7935
|
+
export const ${componentName} = (props: LedProps) => {
|
|
7936
|
+
const { name = "LED1", ...restProps } = props
|
|
7937
|
+
|
|
7938
|
+
return (
|
|
7939
|
+
<led
|
|
7940
|
+
name={name}
|
|
7941
|
+
supplierPartNumbers={${JSON.stringify(supplierPartNumbers, null, " ")}}
|
|
7942
|
+
manufacturerPartNumber="${manufacturerPartNumber}"
|
|
7943
|
+
footprint={${footprintTsx}}
|
|
7944
|
+
${objUrl || stepUrl ? `cadModel={{
|
|
7945
|
+
${cadModelLines}
|
|
7946
|
+
}}` : ""}
|
|
7947
|
+
{...restProps}
|
|
7948
|
+
/>
|
|
7949
|
+
)
|
|
7950
|
+
}
|
|
7870
7951
|
`.trim();
|
|
7871
7952
|
}
|
|
7872
7953
|
return `
|
|
@@ -7920,7 +8001,39 @@ var isDiodeCategoryComponent = (betterEasy) => {
|
|
|
7920
8001
|
].some(categoryValueContainsDiode);
|
|
7921
8002
|
};
|
|
7922
8003
|
|
|
8004
|
+
// lib/websafe/convert-to-typescript-component/category-value-contains-led.ts
|
|
8005
|
+
var categoryValueContainsLed = (value) => {
|
|
8006
|
+
if (typeof value === "string") {
|
|
8007
|
+
return /(^|[^a-z])leds?([^a-z]|$)/i.test(value) || /light[-\s]?emitting\s+diodes?/i.test(value);
|
|
8008
|
+
}
|
|
8009
|
+
if (Array.isArray(value)) {
|
|
8010
|
+
return value.some(categoryValueContainsLed);
|
|
8011
|
+
}
|
|
8012
|
+
if (value && typeof value === "object") {
|
|
8013
|
+
return Object.values(value).some(categoryValueContainsLed);
|
|
8014
|
+
}
|
|
8015
|
+
return false;
|
|
8016
|
+
};
|
|
8017
|
+
|
|
8018
|
+
// lib/websafe/convert-to-typescript-component/is-led-category-component.ts
|
|
8019
|
+
var isLedCategoryComponent = (betterEasy) => {
|
|
8020
|
+
const cPara = betterEasy.dataStr.head.c_para;
|
|
8021
|
+
return [
|
|
8022
|
+
betterEasy.tags,
|
|
8023
|
+
cPara.category,
|
|
8024
|
+
cPara.Category,
|
|
8025
|
+
cPara["LCSC Category"],
|
|
8026
|
+
cPara["JLCPCB Category"],
|
|
8027
|
+
betterEasy.category
|
|
8028
|
+
].some(categoryValueContainsLed);
|
|
8029
|
+
};
|
|
8030
|
+
|
|
7923
8031
|
// lib/websafe/convert-to-typescript-component/index.tsx
|
|
8032
|
+
var getGeneratedComponentType = (betterEasy) => {
|
|
8033
|
+
if (isLedCategoryComponent(betterEasy)) return "led";
|
|
8034
|
+
if (isDiodeCategoryComponent(betterEasy)) return "diode";
|
|
8035
|
+
return "chip";
|
|
8036
|
+
};
|
|
7924
8037
|
var convertRawEasyToTsx = async ({ rawEasy }) => {
|
|
7925
8038
|
const betterEasy = EasyEdaJsonSchema.parse(rawEasy);
|
|
7926
8039
|
const result = await convertBetterEasyToTsx({
|
|
@@ -7938,6 +8051,7 @@ var convertBetterEasyToTsx = async ({
|
|
|
7938
8051
|
cadPositionXMm: cadPlacement?.positionXMm,
|
|
7939
8052
|
cadPositionYMm: cadPlacement?.positionYMm,
|
|
7940
8053
|
cadPositionZMm: cadPlacement?.positionZMm,
|
|
8054
|
+
cadModelBounds: cadPlacement?.bounds,
|
|
7941
8055
|
showDesignator: true
|
|
7942
8056
|
});
|
|
7943
8057
|
const [cadComponent] = su(circuitJson).cad_component.list();
|
|
@@ -7985,7 +8099,7 @@ var convertBetterEasyToTsx = async ({
|
|
|
7985
8099
|
stepUrl: modelStepUrl,
|
|
7986
8100
|
circuitJson,
|
|
7987
8101
|
supplierPartNumbers,
|
|
7988
|
-
componentType:
|
|
8102
|
+
componentType: getGeneratedComponentType(betterEasy)
|
|
7989
8103
|
});
|
|
7990
8104
|
};
|
|
7991
8105
|
var checkModelObjUrlValidity = async (url) => {
|