@tscircuit/cli 0.1.1169 → 0.1.1170

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/cli/main.js CHANGED
@@ -98452,7 +98452,7 @@ var package_default = {
98452
98452
  debug: "^4.4.0",
98453
98453
  delay: "^6.0.0",
98454
98454
  "dsn-converter": "0.0.86",
98455
- easyeda: "^0.0.252",
98455
+ easyeda: "^0.0.253",
98456
98456
  "fuse.js": "^7.1.0",
98457
98457
  "get-port": "^7.1.0",
98458
98458
  globby: "^14.1.0",
@@ -254917,7 +254917,13 @@ var getCadPositionZMmFromMetadata = (easyEdaJson) => {
254917
254917
  const minZ = Math.abs(bounds.min.z) < 0.000001 ? 0 : bounds.min.z;
254918
254918
  return minZ - mil10ToMm(svgNodeZ);
254919
254919
  };
254920
- var convertEasyEdaJsonToCircuitJson = (easyEdaJson, { useModelCdn, shouldRecenter = true, cadPositionZMm } = {}) => {
254920
+ var convertEasyEdaJsonToCircuitJson = (easyEdaJson, {
254921
+ useModelCdn,
254922
+ shouldRecenter = true,
254923
+ cadPositionXMm,
254924
+ cadPositionYMm,
254925
+ cadPositionZMm
254926
+ } = {}) => {
254921
254927
  const resolvedCadPositionZMm = cadPositionZMm ?? getCadPositionZMmFromMetadata(easyEdaJson);
254922
254928
  const circuitElements = [];
254923
254929
  const source_component = any_source_component2.parse({
@@ -255140,8 +255146,8 @@ var convertEasyEdaJsonToCircuitJson = (easyEdaJson, { useModelCdn, shouldRecente
255140
255146
  anchor_alignment: "center_of_component_on_board_surface",
255141
255147
  model_origin_alignment: "center_of_component_on_board_surface",
255142
255148
  model_origin_position: {
255143
- x: 0,
255144
- y: 0,
255149
+ x: cadPositionXMm ?? 0,
255150
+ y: cadPositionYMm ?? 0,
255145
255151
  z: resolvedCadPositionZMm ?? position22.z
255146
255152
  },
255147
255153
  position: { x: 0, y: 0, z: 0 },
@@ -255997,6 +256003,90 @@ function normalizeManufacturerPartNumber(partNumber) {
255997
256003
  }
255998
256004
  return normalized;
255999
256005
  }
256006
+ var milToMm = (mil) => mil * 0.0254;
256007
+ var getBoundsCenter = (bounds) => ({
256008
+ x: (bounds.min.x + bounds.max.x) / 2,
256009
+ y: (bounds.min.y + bounds.max.y) / 2
256010
+ });
256011
+ var getCadSvgNode = (easyEdaJson) => {
256012
+ const svgNode = easyEdaJson.packageDetail.dataStr.shape.find((shape) => shape.type === "SVGNODE" && shape.svgData.attrs?.uuid);
256013
+ return svgNode?.type === "SVGNODE" ? svgNode : null;
256014
+ };
256015
+ var parseMil10Value = (value) => Number(String(value).replace("mil", "")) / 10;
256016
+ var isZeroishModelCenter = (value) => Math.abs(value) < 0.000001;
256017
+ var isZeroishFootprintDelta = (value) => Math.abs(value) < 0.001;
256018
+ var getPadCenter = (easyEdaJson) => {
256019
+ const pads = easyEdaJson.packageDetail.dataStr.shape.filter((shape) => shape.type === "PAD");
256020
+ if (pads.length === 0)
256021
+ return null;
256022
+ const xs3 = pads.map((pad2) => parseMil10Value(pad2.center.x));
256023
+ const ys3 = pads.map((pad2) => parseMil10Value(pad2.center.y));
256024
+ return {
256025
+ x: (Math.min(...xs3) + Math.max(...xs3)) / 2,
256026
+ y: (Math.min(...ys3) + Math.max(...ys3)) / 2
256027
+ };
256028
+ };
256029
+ var getRotatedOffsetMm = ({
256030
+ bounds,
256031
+ rawOffsetMil,
256032
+ rotationDeg
256033
+ }) => {
256034
+ const center2 = getBoundsCenter(bounds);
256035
+ const offsetX = milToMm(rawOffsetMil.x);
256036
+ const offsetY = milToMm(rawOffsetMil.y);
256037
+ switch (rotationDeg) {
256038
+ case 0:
256039
+ return { x: center2.x + offsetX, y: center2.y + offsetY };
256040
+ case 90:
256041
+ return { x: center2.x + offsetY, y: center2.y + offsetX };
256042
+ case 180:
256043
+ return { x: center2.x - offsetX, y: center2.y - offsetY };
256044
+ case 270:
256045
+ return { x: center2.x - offsetY, y: center2.y - offsetX };
256046
+ }
256047
+ };
256048
+ var getCadModelOffsetMm = (easyEdaJson) => {
256049
+ const svgNode = getCadSvgNode(easyEdaJson);
256050
+ const bounds = easyEdaJson._objMetadata?.bounds;
256051
+ if (!svgNode || !bounds)
256052
+ return null;
256053
+ const [originX, originY] = String(svgNode.svgData.attrs?.c_origin ?? "0,0").split(",").map((value) => Number(value.trim()));
256054
+ if (!Number.isFinite(originX) || !Number.isFinite(originY))
256055
+ return null;
256056
+ const [, , rotationZRaw] = String(svgNode.svgData.attrs?.c_rotation ?? "0,0,0").split(",").map((value) => Number(value.trim()));
256057
+ const rotationDeg = (rotationZRaw % 360 + 360) % 360;
256058
+ if (![0, 90, 180, 270].includes(rotationDeg))
256059
+ return null;
256060
+ const modelCenter = getBoundsCenter(bounds);
256061
+ const footprintCenter = easyEdaJson.packageDetail.dataStr.head;
256062
+ const padCenter = getPadCenter(easyEdaJson);
256063
+ const padCenterDelta = padCenter ? {
256064
+ x: padCenter.x - footprintCenter.x,
256065
+ y: padCenter.y - footprintCenter.y
256066
+ } : null;
256067
+ const rawOffsetMil = {
256068
+ x: (originX - footprintCenter.x) * 10,
256069
+ y: (originY - footprintCenter.y) * 10
256070
+ };
256071
+ if (padCenter && padCenterDelta && isZeroishModelCenter(modelCenter.x) && isZeroishModelCenter(modelCenter.y) && isZeroishFootprintDelta(padCenterDelta.x) && isZeroishFootprintDelta(padCenterDelta.y)) {
256072
+ return { x: 0, y: 0 };
256073
+ }
256074
+ return getRotatedOffsetMm({
256075
+ bounds,
256076
+ rawOffsetMil,
256077
+ rotationDeg
256078
+ });
256079
+ };
256080
+ var getCadSvgNodeZOffsetMm = (easyEdaJson) => {
256081
+ const svgNode = getCadSvgNode(easyEdaJson);
256082
+ if (!svgNode)
256083
+ return null;
256084
+ const svgNodeZ = Number(svgNode.svgData.attrs?.z ?? 0);
256085
+ if (!Number.isFinite(svgNodeZ))
256086
+ return null;
256087
+ return mil10ToMm(svgNodeZ);
256088
+ };
256089
+ var getCadSvgNodeModelUuid = (easyEdaJson) => getCadSvgNode(easyEdaJson)?.svgData.attrs?.uuid ?? null;
256000
256090
  var getModelObjCdnUrl = ({
256001
256091
  easyedaModelUuid,
256002
256092
  easyedaPartNumber
@@ -256045,27 +256135,16 @@ var parseObjBounds = (objText) => {
256045
256135
  max: { x: maxX, y: maxY, z: maxZ }
256046
256136
  };
256047
256137
  };
256048
- var getSvgNodeZOffsetMm = (easyEdaJson) => {
256049
- const svgNode = easyEdaJson.packageDetail.dataStr.shape.find((shape) => shape.type === "SVGNODE" && shape.svgData.attrs?.uuid);
256050
- if (!svgNode || svgNode.type !== "SVGNODE")
256051
- return null;
256052
- const svgNodeZ = Number(svgNode.svgData.attrs?.z ?? 0);
256053
- if (!Number.isFinite(svgNodeZ))
256054
- return null;
256055
- return mil10ToMm(svgNodeZ);
256056
- };
256057
256138
  var getPositionZMmFromBounds = (bounds, svgNodeZOffsetMm) => {
256058
256139
  const minZ = Math.abs(bounds.min.z) < 0.000001 ? 0 : bounds.min.z;
256059
256140
  return minZ - svgNodeZOffsetMm;
256060
256141
  };
256061
256142
  var getEasyEdaCadModelPlacement = async (easyEdaJson, { fetch: fetch22 = globalThis.fetch } = {}) => {
256062
- const svgNode = easyEdaJson.packageDetail.dataStr.shape.find((shape) => shape.type === "SVGNODE" && shape.svgData.attrs?.uuid);
256063
- if (!svgNode || svgNode.type !== "SVGNODE")
256064
- return null;
256065
- const modelUuid = svgNode.svgData.attrs?.uuid;
256143
+ const modelUuid = getCadSvgNodeModelUuid(easyEdaJson);
256066
256144
  const partNumber = easyEdaJson.lcsc.number;
256067
- const svgNodeZOffsetMm = getSvgNodeZOffsetMm(easyEdaJson);
256068
- if (!modelUuid || !partNumber || svgNodeZOffsetMm == null || !fetch22) {
256145
+ const derivedOffsetMm = getCadModelOffsetMm(easyEdaJson);
256146
+ const svgNodeZOffsetMm = getCadSvgNodeZOffsetMm(easyEdaJson);
256147
+ if (!modelUuid || !partNumber || svgNodeZOffsetMm == null || !derivedOffsetMm || !fetch22) {
256069
256148
  return null;
256070
256149
  }
256071
256150
  const modelObjUrl = getModelObjCdnUrl({
@@ -256080,6 +256159,8 @@ var getEasyEdaCadModelPlacement = async (easyEdaJson, { fetch: fetch22 = globalT
256080
256159
  if (metadataBounds) {
256081
256160
  return {
256082
256161
  modelObjUrl,
256162
+ positionXMm: derivedOffsetMm.x,
256163
+ positionYMm: derivedOffsetMm.y,
256083
256164
  modelStepUrl,
256084
256165
  bounds: metadataBounds,
256085
256166
  positionZMm: getPositionZMmFromBounds(metadataBounds, svgNodeZOffsetMm)
@@ -256100,6 +256181,8 @@ var getEasyEdaCadModelPlacement = async (easyEdaJson, { fetch: fetch22 = globalT
256100
256181
  return null;
256101
256182
  return {
256102
256183
  modelObjUrl,
256184
+ positionXMm: derivedOffsetMm.x,
256185
+ positionYMm: derivedOffsetMm.y,
256103
256186
  modelStepUrl,
256104
256187
  bounds,
256105
256188
  positionZMm: getPositionZMmFromBounds(bounds, svgNodeZOffsetMm)
@@ -256231,6 +256314,8 @@ var convertBetterEasyToTsx = async ({
256231
256314
  const circuitJson = convertEasyEdaJsonToCircuitJson(betterEasy, {
256232
256315
  useModelCdn: true,
256233
256316
  shouldRecenter: true,
256317
+ cadPositionXMm: cadPlacement?.positionXMm,
256318
+ cadPositionYMm: cadPlacement?.positionYMm,
256234
256319
  cadPositionZMm: cadPlacement?.positionZMm
256235
256320
  });
256236
256321
  const [cadComponent] = su8(circuitJson).cad_component.list();
@@ -261342,7 +261427,13 @@ var getCadPositionZMmFromMetadata2 = (easyEdaJson) => {
261342
261427
  const minZ = Math.abs(bounds.min.z) < 0.000001 ? 0 : bounds.min.z;
261343
261428
  return minZ - mil10ToMm2(svgNodeZ);
261344
261429
  };
261345
- var convertEasyEdaJsonToCircuitJson2 = (easyEdaJson, { useModelCdn, shouldRecenter = true, cadPositionZMm } = {}) => {
261430
+ var convertEasyEdaJsonToCircuitJson2 = (easyEdaJson, {
261431
+ useModelCdn,
261432
+ shouldRecenter = true,
261433
+ cadPositionXMm,
261434
+ cadPositionYMm,
261435
+ cadPositionZMm
261436
+ } = {}) => {
261346
261437
  const resolvedCadPositionZMm = cadPositionZMm ?? getCadPositionZMmFromMetadata2(easyEdaJson);
261347
261438
  const circuitElements = [];
261348
261439
  const source_component = any_source_component3.parse({
@@ -261565,8 +261656,8 @@ var convertEasyEdaJsonToCircuitJson2 = (easyEdaJson, { useModelCdn, shouldRecent
261565
261656
  anchor_alignment: "center_of_component_on_board_surface",
261566
261657
  model_origin_alignment: "center_of_component_on_board_surface",
261567
261658
  model_origin_position: {
261568
- x: 0,
261569
- y: 0,
261659
+ x: cadPositionXMm ?? 0,
261660
+ y: cadPositionYMm ?? 0,
261570
261661
  z: resolvedCadPositionZMm ?? position22.z
261571
261662
  },
261572
261663
  position: { x: 0, y: 0, z: 0 },
package/dist/lib/index.js CHANGED
@@ -60721,7 +60721,7 @@ var package_default = {
60721
60721
  debug: "^4.4.0",
60722
60722
  delay: "^6.0.0",
60723
60723
  "dsn-converter": "0.0.86",
60724
- easyeda: "^0.0.252",
60724
+ easyeda: "^0.0.253",
60725
60725
  "fuse.js": "^7.1.0",
60726
60726
  "get-port": "^7.1.0",
60727
60727
  globby: "^14.1.0",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tscircuit/cli",
3
- "version": "0.1.1169",
3
+ "version": "0.1.1170",
4
4
  "main": "dist/cli/main.js",
5
5
  "exports": {
6
6
  ".": "./dist/cli/main.js",
@@ -40,7 +40,7 @@
40
40
  "debug": "^4.4.0",
41
41
  "delay": "^6.0.0",
42
42
  "dsn-converter": "0.0.86",
43
- "easyeda": "^0.0.252",
43
+ "easyeda": "^0.0.253",
44
44
  "fuse.js": "^7.1.0",
45
45
  "get-port": "^7.1.0",
46
46
  "globby": "^14.1.0",