@windypro-rourou/dsh-eda 0.1.3 → 0.1.5
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/README.md +3 -1
- package/lib/capabilities.js +3 -2
- package/lib/client.js +576 -452
- package/lib/index.js +89 -2
- package/package.json +10 -1
- package/skill/INDEX.md +10 -8
- package/skill/README.md +125 -0
- package/skill/README.zh-Hans.md +125 -0
- package/skill/SKILL.md +746 -746
- package/skill/format/index.md +152 -152
- package/skill/format/pcb/3d.md +166 -166
- package/skill/format/pcb/attr.md +63 -63
- package/skill/format/pcb/common.md +306 -306
- package/skill/format/pcb/component.md +132 -132
- package/skill/format/pcb/dimension.md +58 -58
- package/skill/format/pcb/index.md +17 -17
- package/skill/format/pcb/obj.md +43 -43
- package/skill/format/pcb/pad_via.md +151 -151
- package/skill/format/pcb/panel.md +64 -64
- package/skill/format/pcb/partition.md +43 -43
- package/skill/format/pcb/primitive.md +196 -196
- package/skill/format/pcb/rule.md +71 -71
- package/skill/format/pcb/shape.md +441 -441
- package/skill/format/pcb/text.md +62 -62
- package/skill/format/project/blob.md +30 -30
- package/skill/format/project/common.md +42 -42
- package/skill/format/project/group.md +62 -62
- package/skill/format/project/index.md +12 -12
- package/skill/format/project/instance.md +32 -32
- package/skill/format/project/meta.md +189 -189
- package/skill/format/project/variant.md +30 -30
- package/skill/format/schematic/attr.md +41 -41
- package/skill/format/schematic/common.md +47 -47
- package/skill/format/schematic/component.md +91 -91
- package/skill/format/schematic/index.md +14 -14
- package/skill/format/schematic/obj.md +41 -41
- package/skill/format/schematic/pin.md +59 -59
- package/skill/format/schematic/shape.md +231 -231
- package/skill/format/schematic/structure.md +53 -53
- package/skill/format/schematic/table.md +109 -109
- package/skill/format/schematic/text.md +47 -47
- package/skill/format/schematic/wire.md +132 -132
- package/skill/guide/ancillary-projects/easyeda-api-sdk.md +1 -0
- package/skill/guide/ancillary-projects/pro-api-types.md +5 -5
- package/skill/guide/ancillary-projects.md +10 -10
- package/skill/guide/cli.md +1510 -0
- package/skill/guide/error-handling.md +38 -38
- package/skill/guide/extension-json.md +135 -135
- package/skill/guide/extensions-marketplace.md +61 -61
- package/skill/guide/how-to-start.md +316 -301
- package/skill/guide/i18n.md +57 -57
- package/skill/guide/index.md +7 -7
- package/skill/guide/inline-frame.md +20 -20
- package/skill/guide/invoke-apis.md +81 -81
- package/skill/guide/stability.md +37 -37
- package/skill/references/_index.md +471 -398
- package/skill/references/_quick-reference.md +3103 -3028
- package/skill/references/classes/DMT_Board.md +537 -533
- package/skill/references/classes/DMT_EditorControl.md +1736 -1736
- package/skill/references/classes/DMT_Event.md +356 -356
- package/skill/references/classes/DMT_Folder.md +775 -775
- package/skill/references/classes/DMT_Panel.md +531 -531
- package/skill/references/classes/DMT_Pcb.md +579 -575
- package/skill/references/classes/DMT_Project.md +734 -573
- package/skill/references/classes/DMT_Schematic.md +1482 -1477
- package/skill/references/classes/DMT_SelectControl.md +96 -96
- package/skill/references/classes/DMT_Team.md +172 -172
- package/skill/references/classes/DMT_Workspace.md +198 -198
- package/skill/references/classes/EDA.md +1001 -961
- package/skill/references/classes/IPCB_ComplexPolygon.md +299 -299
- package/skill/references/classes/IPCB_Polygon.md +175 -175
- package/skill/references/classes/IPCB_PrimitiveArc.md +1901 -1901
- package/skill/references/classes/IPCB_PrimitiveAttribute.md +2993 -2993
- package/skill/references/classes/IPCB_PrimitiveComponent.md +2624 -2627
- package/skill/references/classes/IPCB_PrimitiveComponentPad.md +410 -410
- package/skill/references/classes/IPCB_PrimitiveDimension.md +1419 -1419
- package/skill/references/classes/IPCB_PrimitiveFill.md +1325 -1325
- package/skill/references/classes/IPCB_PrimitiveImage.md +1461 -1461
- package/skill/references/classes/IPCB_PrimitiveLine.md +1639 -1639
- package/skill/references/classes/IPCB_PrimitiveObject.md +1700 -1700
- package/skill/references/classes/IPCB_PrimitivePad.md +3155 -3155
- package/skill/references/classes/IPCB_PrimitivePolyline.md +1193 -1193
- package/skill/references/classes/IPCB_PrimitivePour.md +1858 -1858
- package/skill/references/classes/IPCB_PrimitivePoured.md +556 -556
- package/skill/references/classes/IPCB_PrimitiveRegion.md +1332 -1332
- package/skill/references/classes/IPCB_PrimitiveString.md +2315 -2315
- package/skill/references/classes/IPCB_PrimitiveVia.md +1588 -1588
- package/skill/references/classes/ISCH_PrimitiveArc.md +1676 -1676
- package/skill/references/classes/ISCH_PrimitiveAttribute.md +2541 -2541
- package/skill/references/classes/ISCH_PrimitiveBus.md +973 -973
- package/skill/references/classes/ISCH_PrimitiveCbbSymbolComponent.md +260 -260
- package/skill/references/classes/ISCH_PrimitiveCircle.md +1392 -1392
- package/skill/references/classes/ISCH_PrimitiveComponent.md +2910 -2913
- package/skill/references/classes/ISCH_PrimitiveComponentPin.md +155 -155
- package/skill/references/classes/ISCH_PrimitiveObject.md +960 -960
- package/skill/references/classes/ISCH_PrimitivePin.md +2402 -2402
- package/skill/references/classes/ISCH_PrimitivePolygon.md +1028 -1028
- package/skill/references/classes/ISCH_PrimitiveRectangle.md +1777 -1777
- package/skill/references/classes/ISCH_PrimitiveText.md +1771 -1771
- package/skill/references/classes/ISCH_PrimitiveWire.md +973 -973
- package/skill/references/classes/LIB_3DModel.md +782 -780
- package/skill/references/classes/LIB_Cbb.md +957 -957
- package/skill/references/classes/LIB_Classification.md +969 -965
- package/skill/references/classes/LIB_Device.md +1222 -1221
- package/skill/references/classes/LIB_Footprint.md +1298 -1153
- package/skill/references/classes/LIB_LibrariesList.md +361 -329
- package/skill/references/classes/LIB_PanelLibrary.md +855 -855
- package/skill/references/classes/LIB_SelectControl.md +89 -89
- package/skill/references/classes/LIB_SimulationModel.md +807 -821
- package/skill/references/classes/LIB_Symbol.md +1341 -1195
- package/skill/references/classes/PCB_Document.md +1770 -1754
- package/skill/references/classes/PCB_Drc.md +3379 -3375
- package/skill/references/classes/PCB_Event.md +1166 -1081
- package/skill/references/classes/PCB_ImageTool.md +363 -0
- package/skill/references/classes/PCB_Layer.md +1915 -1911
- package/skill/references/classes/PCB_ManufactureData.md +2968 -2968
- package/skill/references/classes/PCB_MathPolygon.md +916 -785
- package/skill/references/classes/PCB_Net.md +1128 -1128
- package/skill/references/classes/PCB_Primitive.md +217 -217
- package/skill/references/classes/PCB_PrimitiveArc.md +820 -894
- package/skill/references/classes/PCB_PrimitiveAttribute.md +635 -717
- package/skill/references/classes/PCB_PrimitiveComponent.md +1050 -1050
- package/skill/references/classes/PCB_PrimitiveDimension.md +789 -833
- package/skill/references/classes/PCB_PrimitiveFill.md +783 -861
- package/skill/references/classes/PCB_PrimitiveImage.md +803 -875
- package/skill/references/classes/PCB_PrimitiveLine.md +787 -858
- package/skill/references/classes/PCB_PrimitiveObject.md +796 -800
- package/skill/references/classes/PCB_PrimitivePad.md +947 -944
- package/skill/references/classes/PCB_PrimitivePolyline.md +744 -819
- package/skill/references/classes/PCB_PrimitivePour.md +808 -845
- package/skill/references/classes/PCB_PrimitivePoured.md +363 -363
- package/skill/references/classes/PCB_PrimitiveRegion.md +765 -799
- package/skill/references/classes/PCB_PrimitiveString.md +828 -910
- package/skill/references/classes/PCB_PrimitiveVia.md +761 -765
- package/skill/references/classes/PCB_RayTracerEngine.md +603 -263
- package/skill/references/classes/PCB_SelectControl.md +495 -495
- package/skill/references/classes/PCB_Tool.md +9 -0
- package/skill/references/classes/PNL_Document.md +83 -83
- package/skill/references/classes/SCH_Document.md +797 -809
- package/skill/references/classes/SCH_Drc.md +246 -242
- package/skill/references/classes/SCH_Event.md +583 -583
- package/skill/references/classes/SCH_ManufactureData.md +1209 -1205
- package/skill/references/classes/SCH_Net.md +200 -200
- package/skill/references/classes/SCH_Netlist.md +191 -191
- package/skill/references/classes/SCH_Primitive.md +337 -337
- package/skill/references/classes/SCH_PrimitiveArc.md +686 -692
- package/skill/references/classes/SCH_PrimitiveAttribute.md +579 -590
- package/skill/references/classes/SCH_PrimitiveBus.md +618 -624
- package/skill/references/classes/SCH_PrimitiveCircle.md +667 -683
- package/skill/references/classes/SCH_PrimitiveComponent.md +2256 -2240
- package/skill/references/classes/SCH_PrimitiveObject.md +666 -666
- package/skill/references/classes/SCH_PrimitivePin.md +737 -754
- package/skill/references/classes/SCH_PrimitivePolygon.md +621 -627
- package/skill/references/classes/SCH_PrimitiveRectangle.md +715 -731
- package/skill/references/classes/SCH_PrimitiveText.md +736 -746
- package/skill/references/classes/SCH_PrimitiveWire.md +701 -703
- package/skill/references/classes/SCH_SelectControl.md +520 -520
- package/skill/references/classes/SCH_SimulationEngine.md +133 -133
- package/skill/references/classes/SCH_Utils.md +121 -121
- package/skill/references/classes/SYS_ClientUrl.md +173 -173
- package/skill/references/classes/SYS_Dialog.md +825 -825
- package/skill/references/classes/SYS_Environment.md +640 -502
- package/skill/references/classes/SYS_ExternalApi.md +246 -0
- package/skill/references/classes/SYS_FileManager.md +1664 -1686
- package/skill/references/classes/SYS_FileSystem.md +1366 -1171
- package/skill/references/classes/SYS_FontManager.md +224 -224
- package/skill/references/classes/SYS_FormatConversion.md +349 -349
- package/skill/references/classes/SYS_HeaderMenu.md +480 -479
- package/skill/references/classes/SYS_Help.md +141 -0
- package/skill/references/classes/SYS_I18n.md +861 -861
- package/skill/references/classes/SYS_IFrame.md +541 -535
- package/skill/references/classes/SYS_LoadingAndProgressBar.md +246 -246
- package/skill/references/classes/SYS_Log.md +422 -424
- package/skill/references/classes/SYS_Math.md +1565 -1565
- package/skill/references/classes/SYS_Message.md +363 -363
- package/skill/references/classes/SYS_MessageBox.md +285 -285
- package/skill/references/classes/SYS_MessageBus.md +1618 -1618
- package/skill/references/classes/SYS_PanelControl.md +696 -696
- package/skill/references/classes/SYS_RightClickMenu.md +175 -175
- package/skill/references/classes/SYS_Setting.md +134 -85
- package/skill/references/classes/SYS_ShortcutKey.md +623 -623
- package/skill/references/classes/SYS_Storage.md +484 -484
- package/skill/references/classes/SYS_Timer.md +447 -447
- package/skill/references/classes/SYS_ToastMessage.md +194 -194
- package/skill/references/classes/SYS_Tool.md +317 -241
- package/skill/references/classes/SYS_Unit.md +594 -594
- package/skill/references/classes/SYS_WebSocket.md +401 -401
- package/skill/references/classes/SYS_Window.md +849 -850
- package/skill/references/enums/EDMT_EditorDocumentType.md +324 -278
- package/skill/references/enums/EDMT_EditorSplitScreenDirection.md +51 -47
- package/skill/references/enums/EDMT_EditorTabEventType.md +68 -62
- package/skill/references/enums/EDMT_IndicatorMarkerType.md +90 -80
- package/skill/references/enums/EDMT_ItemType.md +181 -157
- package/skill/references/enums/EDMT_ProjectCollaborationMode.md +51 -47
- package/skill/references/enums/EDMT_ProjectFileFormat.md +60 -0
- package/skill/references/enums/EDMT_ProjectReadyState.md +82 -0
- package/skill/references/enums/ELIB_DeviceJlcLibraryCategory.md +51 -47
- package/skill/references/enums/ELIB_LibraryType.md +129 -113
- package/skill/references/enums/ELIB_PreviewType.md +77 -69
- package/skill/references/enums/ELIB_SimulationModelType.md +51 -47
- package/skill/references/enums/ELIB_SymbolType.md +142 -124
- package/skill/references/enums/EPCB_AutoRoutingCornerStyle.md +51 -47
- package/skill/references/enums/EPCB_AutoRoutingExistingPrimitiveMode.md +51 -47
- package/skill/references/enums/EPCB_AutoRoutingOptimization.md +51 -47
- package/skill/references/enums/EPCB_DocumentCanvasUpdateCalculationActiveStatus.md +51 -47
- package/skill/references/enums/EPCB_DocumentRatlineCalculatingActiveStatus.md +55 -51
- package/skill/references/enums/EPCB_InactiveLayerDisplayMode.md +64 -58
- package/skill/references/enums/EPCB_LayerColorConfiguration.md +90 -80
- package/skill/references/enums/EPCB_LayerId.md +1169 -881
- package/skill/references/enums/EPCB_LayerStatus.md +64 -58
- package/skill/references/enums/EPCB_LayerType.md +129 -113
- package/skill/references/enums/EPCB_MouseEventType.md +64 -58
- package/skill/references/enums/EPCB_NetEventType.md +64 -58
- package/skill/references/enums/EPCB_PcbPlateType.md +51 -47
- package/skill/references/enums/EPCB_PdfOutputMethod.md +64 -58
- package/skill/references/enums/EPCB_PrimitiveArcInteractiveMode.md +51 -47
- package/skill/references/enums/EPCB_PrimitiveDimensionType.md +64 -58
- package/skill/references/enums/EPCB_PrimitiveEventType.md +64 -58
- package/skill/references/enums/EPCB_PrimitiveFillMode.md +68 -62
- package/skill/references/enums/EPCB_PrimitivePadHeatWeldingConnectionMethod.md +64 -58
- package/skill/references/enums/EPCB_PrimitivePadHoleType.md +64 -58
- package/skill/references/enums/EPCB_PrimitivePadShapeType.md +90 -80
- package/skill/references/enums/EPCB_PrimitivePadType.md +64 -58
- package/skill/references/enums/EPCB_PrimitivePourFillMethod.md +64 -58
- package/skill/references/enums/EPCB_PrimitiveRegionRuleType.md +107 -95
- package/skill/references/enums/EPCB_PrimitiveStringAlignMode.md +142 -124
- package/skill/references/enums/EPCB_PrimitiveType.md +233 -201
- package/skill/references/enums/EPCB_PrimitiveViaType.md +64 -58
- package/skill/references/enums/ESCH_DynamicSimulationEnginePullEventType.md +116 -102
- package/skill/references/enums/ESCH_DynamicSimulationEnginePushEventType.md +90 -80
- package/skill/references/enums/ESCH_ExportDocumentFileType.md +64 -58
- package/skill/references/enums/ESCH_MouseEventType.md +51 -47
- package/skill/references/enums/ESCH_PrimitiveComponentType.md +142 -124
- package/skill/references/enums/ESCH_PrimitiveEventType.md +77 -69
- package/skill/references/enums/ESCH_PrimitiveFillStyle.md +129 -113
- package/skill/references/enums/ESCH_PrimitiveLineType.md +77 -69
- package/skill/references/enums/ESCH_PrimitivePinShape.md +77 -69
- package/skill/references/enums/ESCH_PrimitivePinType.md +168 -146
- package/skill/references/enums/ESCH_PrimitiveTextAlignMode.md +142 -124
- package/skill/references/enums/ESCH_PrimitiveType.md +207 -179
- package/skill/references/enums/ESCH_SimulationNetlistType.md +38 -36
- package/skill/references/enums/ESCH_SpiceSimulationEnginePullEventType.md +51 -47
- package/skill/references/enums/ESCH_SpiceSimulationEnginePushEventType.md +77 -69
- package/skill/references/enums/ESYS_BottomPanelTab.md +94 -80
- package/skill/references/enums/ESYS_HeaderMenuEnvironment.md +181 -157
- package/skill/references/enums/ESYS_ImportProjectBoardOutlineSource.md +55 -51
- package/skill/references/enums/ESYS_ImportProjectImportOption.md +64 -58
- package/skill/references/enums/ESYS_ImportProjectSchematicObjectStyle.md +51 -47
- package/skill/references/enums/ESYS_ImportProjectViaSolderMaskExpansion.md +55 -51
- package/skill/references/enums/ESYS_JobState.md +95 -0
- package/skill/references/enums/ESYS_LeftPanelTab.md +94 -80
- package/skill/references/enums/ESYS_LogType.md +77 -102
- package/skill/references/enums/ESYS_NetlistType.md +129 -113
- package/skill/references/enums/ESYS_PanelPosition.md +69 -0
- package/skill/references/enums/ESYS_PanelTab.md +368 -0
- package/skill/references/enums/ESYS_RightPanelTab.md +237 -201
- package/skill/references/enums/ESYS_ShortcutKeyEffectiveEditorRange.md +220 -190
- package/skill/references/enums/ESYS_ShortcutKeyEffectiveEditorScene.md +103 -91
- package/skill/references/enums/ESYS_StartPageQuickStartItem.md +237 -205
- package/skill/references/enums/ESYS_Theme.md +51 -47
- package/skill/references/enums/ESYS_ToastMessageType.md +90 -80
- package/skill/references/enums/ESYS_Unit.md +116 -102
- package/skill/references/enums/ESYS_WindowEventType.md +64 -47
- package/skill/references/enums/ESYS_WindowOpenTarget.md +51 -47
- package/skill/references/enums/NetportDeviceName.md +146 -146
- package/skill/references/enums/SchToolBarDeviceName.md +278 -278
- package/skill/references/interfaces/BoardProps.md +169 -169
- package/skill/references/interfaces/BorderConfig.md +109 -0
- package/skill/references/interfaces/ButtonProps.md +196 -169
- package/skill/references/interfaces/CellClickInfo.md +142 -0
- package/skill/references/interfaces/CellCoord.md +88 -0
- package/skill/references/interfaces/CheckBoxProps.md +223 -196
- package/skill/references/interfaces/CheckChangeDetail.md +88 -0
- package/skill/references/interfaces/CheckboxEditConfig.md +159 -0
- package/skill/references/interfaces/ClipboardCellData.md +142 -0
- package/skill/references/interfaces/ClipboardConfig.md +115 -0
- package/skill/references/interfaces/ColorPickerProps.md +169 -0
- package/skill/references/interfaces/ColumnDef.md +605 -0
- package/skill/references/interfaces/ColumnEditTrigger.md +57 -0
- package/skill/references/interfaces/ColumnGroupDef.md +192 -0
- package/skill/references/interfaces/ColumnResizeConfig.md +142 -0
- package/skill/references/interfaces/ComponentPropsMap.md +517 -448
- package/skill/references/interfaces/CustomHeaderConfig.md +169 -0
- package/skill/references/interfaces/DialogProps.md +385 -385
- package/skill/references/interfaces/DragSortConfig.md +115 -0
- package/skill/references/interfaces/EditingConfig.md +196 -0
- package/skill/references/interfaces/FilteringConfig.md +250 -0
- package/skill/references/interfaces/FixedColumnConfig.md +88 -0
- package/skill/references/interfaces/FlexItemProps.md +116 -116
- package/skill/references/interfaces/FlexProps.md +224 -224
- package/skill/references/interfaces/GridItemProps.md +143 -143
- package/skill/references/interfaces/GridProps.md +143 -143
- package/skill/references/interfaces/IDMT_BoardItem.md +171 -171
- package/skill/references/interfaces/IDMT_BriefProjectItem.md +171 -171
- package/skill/references/interfaces/IDMT_EditorDocumentItem.md +169 -169
- package/skill/references/interfaces/IDMT_EditorSplitScreenItem.md +173 -173
- package/skill/references/interfaces/IDMT_EditorTabItem.md +169 -169
- package/skill/references/interfaces/IDMT_FolderItem.md +225 -225
- package/skill/references/interfaces/IDMT_IndicatorMarkerShape.md +393 -393
- package/skill/references/interfaces/IDMT_PanelItem.md +144 -144
- package/skill/references/interfaces/IDMT_PcbItem.md +171 -171
- package/skill/references/interfaces/IDMT_ProjectItem.md +143 -143
- package/skill/references/interfaces/IDMT_SchematicItem.md +225 -225
- package/skill/references/interfaces/IDMT_SchematicPageItem.md +198 -198
- package/skill/references/interfaces/IDMT_TeamItem.md +144 -144
- package/skill/references/interfaces/IDMT_WorkspaceItem.md +117 -117
- package/skill/references/interfaces/IDesignPortal.md +103 -103
- package/skill/references/interfaces/ILIB_3DModelItem.md +198 -198
- package/skill/references/interfaces/ILIB_3DModelSearchItem.md +277 -277
- package/skill/references/interfaces/ILIB_CbbItem.md +225 -225
- package/skill/references/interfaces/ILIB_CbbSearchItem.md +277 -277
- package/skill/references/interfaces/ILIB_ClassificationIndex.md +150 -150
- package/skill/references/interfaces/ILIB_ClassificationNode.md +98 -0
- package/skill/references/interfaces/ILIB_DeviceAssociationItem.md +210 -210
- package/skill/references/interfaces/ILIB_DeviceExtendPropertyItem.md +304 -304
- package/skill/references/interfaces/ILIB_DeviceItem.md +279 -279
- package/skill/references/interfaces/ILIB_DevicePropertiesForSearch.md +250 -250
- package/skill/references/interfaces/ILIB_DeviceSearchItem.md +521 -521
- package/skill/references/interfaces/ILIB_ExtendLibrary3DModelFunctions.md +64 -64
- package/skill/references/interfaces/ILIB_ExtendLibraryCbbFunctions.md +93 -99
- package/skill/references/interfaces/ILIB_ExtendLibraryClassificationIndex.md +150 -150
- package/skill/references/interfaces/ILIB_ExtendLibraryDeviceFunctions.md +143 -157
- package/skill/references/interfaces/ILIB_ExtendLibraryFootprintFunctions.md +63 -63
- package/skill/references/interfaces/ILIB_ExtendLibraryFunctions.md +123 -123
- package/skill/references/interfaces/ILIB_ExtendLibraryItem.md +97 -97
- package/skill/references/interfaces/ILIB_ExtendLibraryItemIndex.md +98 -98
- package/skill/references/interfaces/ILIB_ExtendLibrarySearchProperty.md +115 -115
- package/skill/references/interfaces/ILIB_ExtendLibrarySearchResult.md +169 -169
- package/skill/references/interfaces/ILIB_ExtendLibrarySearchResultDataLine.md +234 -234
- package/skill/references/interfaces/ILIB_ExtendLibrarySymbolFunctions.md +91 -105
- package/skill/references/interfaces/ILIB_ExtendLibraryUserIndex.md +96 -96
- package/skill/references/interfaces/ILIB_FootprintItem.md +256 -198
- package/skill/references/interfaces/ILIB_FootprintPropertiesForSearch.md +61 -61
- package/skill/references/interfaces/ILIB_FootprintSearchItem.md +277 -277
- package/skill/references/interfaces/ILIB_LibraryInfo.md +92 -92
- package/skill/references/interfaces/ILIB_LibraryItem.md +115 -115
- package/skill/references/interfaces/ILIB_PanelLibraryItem.md +198 -198
- package/skill/references/interfaces/ILIB_PanelLibrarySearchItem.md +277 -277
- package/skill/references/interfaces/ILIB_RegisterExtendLibraryProps.md +71 -0
- package/skill/references/interfaces/ILIB_SimulationModelItem.md +306 -306
- package/skill/references/interfaces/ILIB_SimulationModelSearchItem.md +304 -304
- package/skill/references/interfaces/ILIB_SymbolItem.md +306 -279
- package/skill/references/interfaces/ILIB_SymbolPropertiesForSearch.md +61 -61
- package/skill/references/interfaces/ILIB_SymbolSearchItem.md +304 -304
- package/skill/references/interfaces/IPCB_AutoLayoutResult.md +169 -169
- package/skill/references/interfaces/IPCB_AutoRoutingProps.md +220 -220
- package/skill/references/interfaces/IPCB_AutoRoutingResult.md +169 -169
- package/skill/references/interfaces/IPCB_BomPropertiesTableColumns.md +169 -169
- package/skill/references/interfaces/IPCB_DifferentialPairItem.md +115 -115
- package/skill/references/interfaces/IPCB_DiscretizeOptions.md +65 -65
- package/skill/references/interfaces/IPCB_DiscretizedPoint.md +88 -88
- package/skill/references/interfaces/IPCB_EqualLengthNetGroupItem.md +115 -115
- package/skill/references/interfaces/IPCB_LayerItem.md +277 -277
- package/skill/references/interfaces/IPCB_NetClassItem.md +115 -115
- package/skill/references/interfaces/IPCB_NetInfo.md +115 -115
- package/skill/references/interfaces/IPCB_PadPairGroupItem.md +88 -88
- package/skill/references/interfaces/IPCB_PadPairMinWireLengthItem.md +88 -88
- package/skill/references/interfaces/IPCB_PhysicalStackingConfiguration.md +115 -115
- package/skill/references/interfaces/IPCB_Primitive.md +218 -218
- package/skill/references/interfaces/IPCB_PrimitiveAPI.md +174 -175
- package/skill/references/interfaces/IPCB_PrimitivePadHeatWelding.md +151 -151
- package/skill/references/interfaces/IPCB_PrimitivePouredPourFill.md +142 -142
- package/skill/references/interfaces/IPCB_PrimitiveSolderMaskAndPasteMaskExpansion.md +154 -154
- package/skill/references/interfaces/IPCB_RayTracerBackgroundConfig.md +223 -0
- package/skill/references/interfaces/IPCB_RayTracerLightConfig.md +412 -0
- package/skill/references/interfaces/IPCB_RayTracerMaterialConfig.md +547 -0
- package/skill/references/interfaces/IPCB_RayTracerPcbMaterialConfig.md +196 -0
- package/skill/references/interfaces/IPCB_RayTracerRenderConfigurations.md +200 -0
- package/skill/references/interfaces/IPCB_RayTracerRendererConfig.md +196 -0
- package/skill/references/interfaces/IPCB_RayTracerSceneElement.md +115 -0
- package/skill/references/interfaces/IPCB_RayTracerSceneElementTransform.md +123 -0
- package/skill/references/interfaces/IPCB_RayTracerTexture.md +88 -0
- package/skill/references/interfaces/IPCB_SubstratePhysicalProperties.md +88 -88
- package/skill/references/interfaces/IRawNet.md +103 -103
- package/skill/references/interfaces/IRawPureSchematic.md +80 -80
- package/skill/references/interfaces/IRawSchematic.md +103 -103
- package/skill/references/interfaces/IRawWire.md +149 -149
- package/skill/references/interfaces/ISCH_DrcError.md +142 -142
- package/skill/references/interfaces/ISCH_DrcErrorPrimitive.md +142 -142
- package/skill/references/interfaces/ISCH_ExportPngResolution.md +94 -94
- package/skill/references/interfaces/ISCH_NetInfo.md +88 -88
- package/skill/references/interfaces/ISCH_Primitive.md +218 -219
- package/skill/references/interfaces/ISCH_PrimitiveAPI.md +174 -175
- package/skill/references/interfaces/ISCH_ProjectNetInfo.md +142 -142
- package/skill/references/interfaces/ISCH_WireInfo.md +169 -169
- package/skill/references/interfaces/ISYS_ComparisonResponse.md +115 -0
- package/skill/references/interfaces/ISYS_ExtensionExternalApiIndex.md +13 -0
- package/skill/references/interfaces/ISYS_ExtensionRegisteredExternalApis.md +13 -0
- package/skill/references/interfaces/ISYS_ExternalApiHelp.md +173 -0
- package/skill/references/interfaces/ISYS_ExternalApiRegistration.md +146 -0
- package/skill/references/interfaces/ISYS_FileSystemFileList.md +169 -169
- package/skill/references/interfaces/ISYS_HeaderMenuSub1MenuItem.md +205 -174
- package/skill/references/interfaces/ISYS_HeaderMenuSub2MenuItem.md +178 -147
- package/skill/references/interfaces/ISYS_HeaderMenuTopMenuItem.md +115 -115
- package/skill/references/interfaces/ISYS_HeaderMenus.md +408 -408
- package/skill/references/interfaces/ISYS_HelpAudienceEntry.md +92 -0
- package/skill/references/interfaces/ISYS_HelpClassSummary.md +205 -0
- package/skill/references/interfaces/ISYS_HelpData.md +92 -0
- package/skill/references/interfaces/ISYS_HelpMethodDetail.md +310 -0
- package/skill/references/interfaces/ISYS_JobHandle.md +65 -0
- package/skill/references/interfaces/ISYS_JobLogEntry.md +142 -0
- package/skill/references/interfaces/ISYS_JobStatus.md +176 -0
- package/skill/references/interfaces/ISYS_LogLine.md +115 -115
- package/skill/references/interfaces/ISYS_MathBBox.md +142 -142
- package/skill/references/interfaces/ISYS_MathPoint.md +88 -88
- package/skill/references/interfaces/ISYS_MathPolygonWithHoles.md +92 -92
- package/skill/references/interfaces/ISYS_MessageBusTask.md +115 -115
- package/skill/references/interfaces/ISYS_MultilingualLanguagesData.md +12 -12
- package/skill/references/interfaces/ISYS_RightClickMenuItem.md +174 -174
- package/skill/references/interfaces/ISYS_ShortcutKeyData.md +169 -169
- package/skill/references/interfaces/ISYS_ShortcutKeyDataWithCallFn.md +62 -62
- package/skill/references/interfaces/ISYS_ShortcutKeyDataWithUserDefinedShortcutKey.md +62 -62
- package/skill/references/interfaces/ISYS_WindowEventListenerRemovableObject.md +109 -109
- package/skill/references/interfaces/IconProps.md +88 -88
- package/skill/references/interfaces/ImageProps.md +115 -115
- package/skill/references/interfaces/InputEditConfig.md +182 -0
- package/skill/references/interfaces/InputProps.md +547 -520
- package/skill/references/interfaces/KeyboardConfig.md +61 -0
- package/skill/references/interfaces/ListChildren.md +223 -223
- package/skill/references/interfaces/ListProps.md +250 -223
- package/skill/references/interfaces/ModalProps.md +358 -358
- package/skill/references/interfaces/NumberEditConfig.md +234 -0
- package/skill/references/interfaces/RadioGroupProps.md +196 -196
- package/skill/references/interfaces/RadioItem.md +115 -115
- package/skill/references/interfaces/RichTableProps.md +1357 -0
- package/skill/references/interfaces/RowMetaConfig.md +142 -0
- package/skill/references/interfaces/ScrollerProps.md +169 -169
- package/skill/references/interfaces/SelectEditConfig.md +211 -0
- package/skill/references/interfaces/SelectListItem.md +142 -142
- package/skill/references/interfaces/SelectOption.md +142 -0
- package/skill/references/interfaces/SelectProps.md +169 -169
- package/skill/references/interfaces/SelectionConfig.md +358 -0
- package/skill/references/interfaces/SliderProps.md +142 -0
- package/skill/references/interfaces/SlotProps.md +88 -88
- package/skill/references/interfaces/SortState.md +88 -0
- package/skill/references/interfaces/SortingConfig.md +169 -0
- package/skill/references/interfaces/StyleProps.md +439 -385
- package/skill/references/interfaces/TextAreaProps.md +196 -196
- package/skill/references/interfaces/TextProps.md +169 -169
- package/skill/references/interfaces/TextareaEditConfig.md +182 -0
- package/skill/references/interfaces/ValidationRule.md +223 -0
- package/skill/references/interfaces/VirtualScrollConfig.md +115 -0
- package/skill/references/types/Align.md +9 -0
- package/skill/references/types/CellContentType.md +9 -0
- package/skill/references/types/ColumnDefOrGroup.md +12 -0
- package/skill/references/types/ColumnEditConfig.md +13 -0
- package/skill/references/types/ColumnType.md +9 -0
- package/skill/references/types/DataChangeType.md +9 -0
- package/skill/references/types/FilterMatchMode.md +9 -0
- package/skill/references/types/RichTableRow.md +12 -0
- package/skill/references/types/Serializable.md +10 -0
- package/skill/references/types/SerializablePrimitive.md +9 -0
- package/skill/references/types/SortOrder.md +9 -0
- package/skill/references/types/TPCB_LayerTypesOfInnerLayer.md +11 -11
- package/skill/references/types/TPCB_LayersInTheSelectable.md +42 -42
- package/skill/references/types/TPCB_LayersOfComponent.md +11 -11
- package/skill/references/types/TPCB_LayersOfCopper.md +15 -15
- package/skill/references/types/TPCB_LayersOfCustom.md +41 -41
- package/skill/references/types/TPCB_LayersOfDimension.md +16 -16
- package/skill/references/types/TPCB_LayersOfFill.md +28 -28
- package/skill/references/types/TPCB_LayersOfImage.md +22 -22
- package/skill/references/types/TPCB_LayersOfInner.md +41 -41
- package/skill/references/types/TPCB_LayersOfLine.md +25 -25
- package/skill/references/types/TPCB_LayersOfObject.md +12 -12
- package/skill/references/types/TPCB_LayersOfPad.md +11 -11
- package/skill/references/types/TPCB_LayersOfRegion.md +11 -11
- package/skill/references/types/TPCB_NumberOfCopperLayers.md +9 -9
- package/skill/references/types/TPCB_PolygonSourceArray.md +85 -83
- package/skill/references/types/TPCB_PrimitiveDimensionCoordinateSet.md +66 -66
- package/skill/references/types/TPCB_PrimitivePadHole.md +30 -30
- package/skill/references/types/TPCB_PrimitivePadShape.md +61 -61
- package/skill/references/types/TPCB_PrimitiveSpecialPadShape.md +19 -19
- package/skill/references/types/TSYS_ComparisonErrorCode.md +15 -0
- package/skill/references/types/TSYS_LanguageKeyValuePairs.md +13 -0
- package/skill/references/types/TSYS_MathPolygonGroup.md +15 -15
- package/skill/references/types/TSYS_MathPolygonInput.md +20 -20
- package/skill/references/types/TSYS_ShortcutKeys.md +96 -96
- package/skill/user-guide/using-extension.md +47 -47
- package/src/json-gen.test.js +430 -0
- package/skill/guide/ancillary-projects/pro-api-sdk.md +0 -1
- package/skill/references/interfaces/ISYS_PcbComparisonResponse.md +0 -115
- package/skill/references/types/ISYS_LanguageKeyValuePairs.md +0 -13
- package/skill/references/types/TSYS_PcbComparisonErrorCode.md +0 -10
|
@@ -1,47 +1,47 @@
|
|
|
1
|
-
# Getting and Using Extensions
|
|
2
|
-
|
|
3
|
-
## Getting Extensions
|
|
4
|
-
|
|
5
|
-
EasyEDA Pro now provides the official [Extensions Marketplace](https://jlcext.com), where you can conveniently obtain a wide range of EasyEDA Pro extensions provided by both official and third-party developers.
|
|
6
|
-
|
|
7
|
-

|
|
8
|
-
|
|
9
|
-
## Installing Extensions
|
|
10
|
-
|
|
11
|
-
### V3 Installation
|
|
12
|
-
|
|
13
|
-
1. Open the [EasyEDA Pro Editor](https://pro.easyeda.com/editor).
|
|
14
|
-
|
|
15
|
-
2. In the top menu, click **Advanced** -\> **Extension Manager**:
|
|
16
|
-
|
|
17
|
-

|
|
18
|
-
|
|
19
|
-
3. While online, you can search for extensions and install them directly. If you already have an extension file, you can also click **Import** to import it:
|
|
20
|
-
|
|
21
|
-

|
|
22
|
-
|
|
23
|
-
4. Switch to the **Installed** list and click an installed extension to configure its enabled state and permissions. If **Show in top menu** is not checked, the extension entry will appear under the **Advanced** menu by default:
|
|
24
|
-
|
|
25
|
-

|
|
26
|
-
|
|
27
|
-
### V2 Installation
|
|
28
|
-
|
|
29
|
-
1. Open the [EasyEDA Pro Editor](https://pro.easyeda.com/editor).
|
|
30
|
-
|
|
31
|
-
2. In the top menu bar, click **Settings** -\> **Extensions** -\> **Extension Manager...** in sequence:
|
|
32
|
-
|
|
33
|
-

|
|
34
|
-
|
|
35
|
-
3. In the pop-up window, click **Import Extension**, then select the downloaded `.eext` file to complete the import.
|
|
36
|
-
|
|
37
|
-

|
|
38
|
-
|
|
39
|
-
4. Extension settings
|
|
40
|
-
|
|
41
|
-
- Installed extensions can be enabled or disabled. The registered menu of an enabled extension will be displayed in the top menu bar:
|
|
42
|
-
|
|
43
|
-

|
|
44
|
-
|
|
45
|
-
- Some extensions involve external interactions, such as network access. You need to enable the extension's **External Interactions** permission to ensure proper operation:
|
|
46
|
-
|
|
47
|
-

|
|
1
|
+
# Getting and Using Extensions
|
|
2
|
+
|
|
3
|
+
## Getting Extensions
|
|
4
|
+
|
|
5
|
+
EasyEDA Pro now provides the official [Extensions Marketplace](https://jlcext.com), where you can conveniently obtain a wide range of EasyEDA Pro extensions provided by both official and third-party developers.
|
|
6
|
+
|
|
7
|
+

|
|
8
|
+
|
|
9
|
+
## Installing Extensions
|
|
10
|
+
|
|
11
|
+
### V3 Installation
|
|
12
|
+
|
|
13
|
+
1. Open the [EasyEDA Pro Editor](https://pro.easyeda.com/editor).
|
|
14
|
+
|
|
15
|
+
2. In the top menu, click **Advanced** -\> **Extension Manager**:
|
|
16
|
+
|
|
17
|
+

|
|
18
|
+
|
|
19
|
+
3. While online, you can search for extensions and install them directly. If you already have an extension file, you can also click **Import** to import it:
|
|
20
|
+
|
|
21
|
+

|
|
22
|
+
|
|
23
|
+
4. Switch to the **Installed** list and click an installed extension to configure its enabled state and permissions. If **Show in top menu** is not checked, the extension entry will appear under the **Advanced** menu by default:
|
|
24
|
+
|
|
25
|
+

|
|
26
|
+
|
|
27
|
+
### V2 Installation
|
|
28
|
+
|
|
29
|
+
1. Open the [EasyEDA Pro Editor](https://pro.easyeda.com/editor).
|
|
30
|
+
|
|
31
|
+
2. In the top menu bar, click **Settings** -\> **Extensions** -\> **Extension Manager...** in sequence:
|
|
32
|
+
|
|
33
|
+

|
|
34
|
+
|
|
35
|
+
3. In the pop-up window, click **Import Extension**, then select the downloaded `.eext` file to complete the import.
|
|
36
|
+
|
|
37
|
+

|
|
38
|
+
|
|
39
|
+
4. Extension settings
|
|
40
|
+
|
|
41
|
+
- Installed extensions can be enabled or disabled. The registered menu of an enabled extension will be displayed in the top menu bar:
|
|
42
|
+
|
|
43
|
+

|
|
44
|
+
|
|
45
|
+
- Some extensions involve external interactions, such as network access. You need to enable the extension's **External Interactions** permission to ensure proper operation:
|
|
46
|
+
|
|
47
|
+

|
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
// ============================================================================
|
|
2
|
+
// dsh-lichuang-eda · 自动化测试(Node 内置 node:test,零依赖)
|
|
3
|
+
// 运行:node --test src/json-gen.test.js
|
|
4
|
+
// ⚠ Windows 沙箱(DSH)下 node:test 默认的子进程隔离会被沙箱拦截(spawn EPERM),
|
|
5
|
+
// 请用:node --test --experimental-test-isolation=none src/json-gen.test.js
|
|
6
|
+
// 普通环境(无沙箱)直接用 node --test 即可。
|
|
7
|
+
//
|
|
8
|
+
// 覆盖两层:
|
|
9
|
+
// 层一(json-gen.js,生成器自带的校验):
|
|
10
|
+
// validateSchematic(obj) —— 结构 lint(顶层/head/canvas/shape/BBox/colors)
|
|
11
|
+
// deriveNetlist(sheet) —— 从生成物反推网表 + 一致性自检
|
|
12
|
+
// 层二(validate.js,design 级校验,供 nl-to-design 与插件调用):
|
|
13
|
+
// checkConnectivity / deriveNetlist / pinPoints
|
|
14
|
+
//
|
|
15
|
+
// 用例:
|
|
16
|
+
// 合法电路(电阻+LED)→ JSON.parse + 必需字段 + 结构 lint + 网表自检 全通过
|
|
17
|
+
// 坏电路(悬空导线 / 引脚未闭合 / 孤立导线)→ 网表自检必须报错
|
|
18
|
+
// 残缺对象 → 结构 lint 必须报错
|
|
19
|
+
// ============================================================================
|
|
20
|
+
|
|
21
|
+
import { test } from 'node:test'
|
|
22
|
+
import assert from 'node:assert/strict'
|
|
23
|
+
|
|
24
|
+
// ---- 层一:生成器(json-gen.js)----
|
|
25
|
+
import {
|
|
26
|
+
generateSchematic,
|
|
27
|
+
wrapAsProject,
|
|
28
|
+
validateSchematic,
|
|
29
|
+
deriveNetlist as deriveNetlistFromSheet,
|
|
30
|
+
DEFAULT_DESIGN,
|
|
31
|
+
} from './json-gen.js'
|
|
32
|
+
|
|
33
|
+
// ---- 层二:design 级校验(validate.js)----
|
|
34
|
+
import {
|
|
35
|
+
validateSchematic as lintDesign,
|
|
36
|
+
checkConnectivity,
|
|
37
|
+
deriveNetlist as deriveNetlistFromDesign,
|
|
38
|
+
pinPoints,
|
|
39
|
+
} from './validate.js'
|
|
40
|
+
|
|
41
|
+
// ---- nl-to-design 模板目录(供模板卡/关键词路由测试)----
|
|
42
|
+
import { templateById, translateRequest, TEMPLATE_CATALOG } from './nl-to-design.js'
|
|
43
|
+
|
|
44
|
+
const pinsOf = (pins) => pins.map((p) => `${p.designator}.${p.number}`).sort()
|
|
45
|
+
const sheetPinsOf = (pins) => pins.map((p) => `${p.designator}.${p.number}`).sort()
|
|
46
|
+
|
|
47
|
+
// ============================================================================
|
|
48
|
+
// 合法电路:生成 → JSON.parse → 必需字段 → 结构 lint → 网表自检 全通过
|
|
49
|
+
// ============================================================================
|
|
50
|
+
|
|
51
|
+
test('生成 → JSON.parse 往返,顶层键/head 键符合文档确认的结构', () => {
|
|
52
|
+
const sheet = generateSchematic(DEFAULT_DESIGN)
|
|
53
|
+
const round = JSON.parse(JSON.stringify(sheet))
|
|
54
|
+
// 平面单片顶层键与真实 v6 导出一致(docs/json-format.md §2.1)
|
|
55
|
+
assert.deepEqual(Object.keys(round).sort(), ['BBox', 'canvas', 'colors', 'head', 'shape'])
|
|
56
|
+
// head 键与真实 v6 样本一致(§3)
|
|
57
|
+
assert.deepEqual(Object.keys(round.head).sort(), [
|
|
58
|
+
'c_para', 'c_spiceCmd', 'docType', 'editorVersion', 'hasIdFlag', 'importFlag',
|
|
59
|
+
'newgId', 'portOfADImportHack', 'transformList', 'uuid', 'x', 'y',
|
|
60
|
+
])
|
|
61
|
+
// canvas 15 段(§4)
|
|
62
|
+
assert.equal(round.canvas.split('~').length, 15)
|
|
63
|
+
// shape 前缀分布:2 元件 + 1 导线 + 1 网络标签 + 1 接地标志
|
|
64
|
+
const prefixes = {}
|
|
65
|
+
for (const s of round.shape) prefixes[s.split('~')[0]] = (prefixes[s.split('~')[0]] ?? 0) + 1
|
|
66
|
+
assert.deepEqual(prefixes, { LIB: 2, W: 1, N: 1, F: 1 })
|
|
67
|
+
})
|
|
68
|
+
|
|
69
|
+
test('validateSchematic(json-gen.js 导出):合法产物结构 lint 通过', () => {
|
|
70
|
+
const sheet = generateSchematic(DEFAULT_DESIGN)
|
|
71
|
+
const res = validateSchematic(sheet)
|
|
72
|
+
assert.equal(res.ok, true, res.errors.join('; '))
|
|
73
|
+
// 工程包装的 dataStr 同样可 lint
|
|
74
|
+
const proj = wrapAsProject(sheet, { title: 'demo' })
|
|
75
|
+
assert.equal(proj.docType, 5)
|
|
76
|
+
assert.equal(proj.schematics.length, 1)
|
|
77
|
+
assert.equal(validateSchematic(proj.schematics[0].dataStr).ok, true)
|
|
78
|
+
})
|
|
79
|
+
|
|
80
|
+
test('deriveNetlist(sheet 级):3 个网络全部闭合,4 个引脚各归其网', () => {
|
|
81
|
+
const sheet = generateSchematic(DEFAULT_DESIGN)
|
|
82
|
+
const nl = deriveNetlistFromSheet(sheet)
|
|
83
|
+
assert.equal(nl.checks.ok, true, '网表自检应通过: ' + nl.checks.errors.join('; '))
|
|
84
|
+
assert.equal(nl.nets.length, 3, '应有 3 个网络(Net1 / 5V / GND)')
|
|
85
|
+
const byName = Object.fromEntries(nl.nets.map((n) => [n.name, n]))
|
|
86
|
+
assert.ok(byName['5V'], '应包含 5V 网络(标签)')
|
|
87
|
+
assert.ok(byName['GND'], '应包含 GND 网络(接地标志)')
|
|
88
|
+
assert.deepEqual(sheetPinsOf(byName['5V'].pins), ['R1.2'], '5V = R1 引脚2(带标签允许单引脚)')
|
|
89
|
+
assert.deepEqual(sheetPinsOf(byName['GND'].pins), ['LED1.2'], 'GND = LED1 引脚2')
|
|
90
|
+
const main = Object.values(byName).find((n) => n.label === null)
|
|
91
|
+
assert.ok(main, '应存在无标签内部网络')
|
|
92
|
+
assert.deepEqual(sheetPinsOf(main.pins), ['LED1.1', 'R1.1'], '内部网络 = R1 引脚1 + LED1 引脚1')
|
|
93
|
+
for (const n of nl.nets) assert.equal(n.closed, true, `${n.name} 应闭合`)
|
|
94
|
+
// 4 个引脚恰好各出现一次
|
|
95
|
+
const all = nl.nets.flatMap((n) => n.pins)
|
|
96
|
+
assert.equal(all.length, 4)
|
|
97
|
+
assert.equal(new Set(all.map((p) => `${p.designator}.${p.number}`)).size, 4, '引脚不应重复归属')
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
test('checkConnectivity(design 级):连通、无悬空;命名网含 5V/GND', () => {
|
|
101
|
+
const res = checkConnectivity(DEFAULT_DESIGN)
|
|
102
|
+
assert.equal(res.ok, true, res.errors.join('; '))
|
|
103
|
+
const named = res.netlist.nets.filter((n) => n.name !== null)
|
|
104
|
+
assert.deepEqual(named.map((n) => n.name).sort(), ['5V', 'GND'])
|
|
105
|
+
for (const n of named) assert.ok(n.pins.length >= 1, `net ${n.name} 无引脚`)
|
|
106
|
+
assert.equal(res.netlist.dangling.length, 0)
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
test('deriveNetlist(design 级):5V/GND 与中间网络引脚符合预期', () => {
|
|
110
|
+
const { nets } = deriveNetlistFromDesign(DEFAULT_DESIGN)
|
|
111
|
+
const byName = Object.fromEntries(
|
|
112
|
+
nets.filter((n) => n.name !== null).map((n) => [n.name, n.pins.map((p) => p.ref + '.' + p.pin)]),
|
|
113
|
+
)
|
|
114
|
+
assert.deepEqual(byName['5V'].sort(), ['R1.2'])
|
|
115
|
+
assert.deepEqual(byName['GND'].sort(), ['LED1.2'])
|
|
116
|
+
const unnamed = nets.filter((n) => n.name === null && n.pins.length === 2)
|
|
117
|
+
assert.equal(unnamed.length, 1)
|
|
118
|
+
assert.deepEqual(unnamed[0].pins.map((p) => p.ref + '.' + p.pin).sort(), ['LED1.1', 'R1.1'])
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
test('pinPoints:resistor/led 引脚几何与生成器一致(±50/±40)', () => {
|
|
122
|
+
const r = pinPoints({ ref: 'R1', type: 'resistor', pos: { x: 400, y: 300 } })
|
|
123
|
+
assert.deepEqual(r.map((p) => [p.x, p.y]), [[450, 300], [350, 300]])
|
|
124
|
+
const l = pinPoints({ ref: 'D1', type: 'led', pos: { x: 700, y: 300 } })
|
|
125
|
+
assert.deepEqual(l.map((p) => [p.x, p.y]), [[740, 300], [660, 300]])
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
test('pinPoints:capacitor/diode/switch 引脚几何与生成器一致', () => {
|
|
129
|
+
// capacitor/switch: ±50;diode: ±40(阳极右/阴极左)
|
|
130
|
+
assert.deepEqual(pinPoints({ ref: 'C1', type: 'capacitor', pos: { x: 400, y: 300 } }).map((p) => [p.x, p.y]),
|
|
131
|
+
[[450, 300], [350, 300]])
|
|
132
|
+
assert.deepEqual(pinPoints({ ref: 'S1', type: 'switch', pos: { x: 400, y: 300 } }).map((p) => [p.x, p.y]),
|
|
133
|
+
[[450, 300], [350, 300]])
|
|
134
|
+
assert.deepEqual(pinPoints({ ref: 'D1', type: 'diode', pos: { x: 700, y: 300 } }).map((p) => [p.x, p.y]),
|
|
135
|
+
[[740, 300], [660, 300]])
|
|
136
|
+
})
|
|
137
|
+
|
|
138
|
+
test('capacitor 去耦:VCC→C→GND 生成 + 结构 lint + 连通性 + 网表自检 全通过', () => {
|
|
139
|
+
const cap = {
|
|
140
|
+
name: 'cap-bypass',
|
|
141
|
+
components: [{ ref: 'C1', type: 'capacitor', value: '0.1u', pos: { x: 400, y: 300 } }],
|
|
142
|
+
wires: [],
|
|
143
|
+
nets: [{ name: '5V', points: [[450, 300]] }, { name: 'GND', points: [[350, 300]] }],
|
|
144
|
+
}
|
|
145
|
+
const sheet = generateSchematic(cap)
|
|
146
|
+
assert.equal(validateSchematic(sheet).ok, true, validateSchematic(sheet).errors.join('; '))
|
|
147
|
+
assert.equal(checkConnectivity(cap).ok, true, checkConnectivity(cap).errors.join('; '))
|
|
148
|
+
const nl = deriveNetlistFromSheet(sheet)
|
|
149
|
+
assert.equal(nl.checks.ok, true, nl.checks.errors.join('; '))
|
|
150
|
+
const byName = Object.fromEntries(nl.nets.map((n) => [n.name, n]))
|
|
151
|
+
assert.ok(byName['5V'] && byName['GND'], '应含 5V/GND 命名网')
|
|
152
|
+
})
|
|
153
|
+
|
|
154
|
+
test('新符号:capacitor/diode/switch 混合设计 generateSchematic 不抛错且结构 lint 通过', () => {
|
|
155
|
+
const mix = {
|
|
156
|
+
name: 'mix',
|
|
157
|
+
components: [
|
|
158
|
+
{ ref: 'R1', type: 'resistor', value: '1k', pos: { x: 200, y: 300 } },
|
|
159
|
+
{ ref: 'C1', type: 'capacitor', value: '0.1u', pos: { x: 400, y: 460 } },
|
|
160
|
+
{ ref: 'D1', type: 'diode', value: '1N4007', pos: { x: 600, y: 300 } },
|
|
161
|
+
{ ref: 'S1', type: 'switch', value: 'SW', pos: { x: 850, y: 300 } },
|
|
162
|
+
],
|
|
163
|
+
wires: [],
|
|
164
|
+
nets: [{ name: '5V', points: [[150, 300]] }, { name: 'GND', points: [[900, 300]] }],
|
|
165
|
+
}
|
|
166
|
+
const sheet = generateSchematic(mix)
|
|
167
|
+
assert.equal(validateSchematic(sheet).ok, true, validateSchematic(sheet).errors.join('; '))
|
|
168
|
+
const prefixes = {}
|
|
169
|
+
for (const s of sheet.shape) prefixes[s.split('~')[0]] = (prefixes[s.split('~')[0]] ?? 0) + 1
|
|
170
|
+
assert.equal(prefixes.LIB, 4, '应有 4 个元件 LIB')
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
test('wrapAsProject:docType=5 工程包装,dataStr 与平面单片一致', () => {
|
|
174
|
+
const sheet = generateSchematic(DEFAULT_DESIGN)
|
|
175
|
+
const proj = wrapAsProject(sheet, { title: 'demo' })
|
|
176
|
+
assert.equal(proj.docType, 5)
|
|
177
|
+
assert.deepEqual(Object.keys(proj).sort(), ['colors', 'description', 'docType', 'editorVersion', 'schematics', 'title'])
|
|
178
|
+
assert.equal(proj.schematics.length, 1)
|
|
179
|
+
assert.equal(proj.schematics[0].docType, '1')
|
|
180
|
+
assert.deepEqual(proj.schematics[0].dataStr, sheet)
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
// ============================================================================
|
|
184
|
+
// 坏电路:网表自检必须报错(结构 lint 仍通过 —— 格式合法、电路断开)
|
|
185
|
+
// ============================================================================
|
|
186
|
+
|
|
187
|
+
test('坏电路:悬空导线端点 → sheet 级网表自检报错', () => {
|
|
188
|
+
const sheet = generateSchematic({
|
|
189
|
+
components: [{ ref: 'R1', type: 'resistor', value: '10k', pos: { x: 400, y: 300 } }],
|
|
190
|
+
// 起点 (450,300) 接 R1 引脚1;末端 (900,480) 悬空
|
|
191
|
+
wires: [[450, 300, 450, 380, 900, 380, 900, 480]],
|
|
192
|
+
nets: [{ name: '5V', points: [[350, 300]] }],
|
|
193
|
+
})
|
|
194
|
+
// 结构 lint 通过(悬空导线是电路问题,不是格式问题)
|
|
195
|
+
assert.equal(validateSchematic(sheet).ok, true)
|
|
196
|
+
// 网表自检必须失败
|
|
197
|
+
const nl = deriveNetlistFromSheet(sheet)
|
|
198
|
+
assert.equal(nl.checks.ok, false, '网表自检必须失败')
|
|
199
|
+
const msgs = nl.checks.errors.join('; ')
|
|
200
|
+
assert.ok(msgs.includes('悬空导线端点'), '应报悬空导线端点: ' + msgs)
|
|
201
|
+
assert.ok(msgs.includes('未闭合'), '同时应报网络未闭合(只有 1 个引脚): ' + msgs)
|
|
202
|
+
})
|
|
203
|
+
|
|
204
|
+
test('坏电路:引脚未连接(网络未闭合)→ sheet 级网表自检报错', () => {
|
|
205
|
+
const sheet = generateSchematic({
|
|
206
|
+
components: [
|
|
207
|
+
{ ref: 'R1', type: 'resistor', value: '10k', pos: { x: 400, y: 300 } },
|
|
208
|
+
{ ref: 'LED1', type: 'led', value: 'red', pos: { x: 700, y: 300 } },
|
|
209
|
+
],
|
|
210
|
+
wires: [[450, 300, 740, 300]], // R1.1 ↔ LED1.1 已连
|
|
211
|
+
nets: [{ name: '5V', points: [[350, 300]] }], // 缺 GND → LED1 阴极 (660,300) 悬空
|
|
212
|
+
})
|
|
213
|
+
const nl = deriveNetlistFromSheet(sheet)
|
|
214
|
+
assert.equal(nl.checks.ok, false)
|
|
215
|
+
const msgs = nl.checks.errors.join('; ')
|
|
216
|
+
assert.ok(msgs.includes('未闭合'), '应报未闭合网络: ' + msgs)
|
|
217
|
+
assert.ok(msgs.includes('LED1'), '错误信息应指明 LED1 引脚: ' + msgs)
|
|
218
|
+
})
|
|
219
|
+
|
|
220
|
+
test('坏电路:完全孤立的导线 → sheet 级网表自检报孤立导线', () => {
|
|
221
|
+
const sheet = generateSchematic({ components: [], wires: [[100, 100, 200, 200]], nets: [] })
|
|
222
|
+
const nl = deriveNetlistFromSheet(sheet)
|
|
223
|
+
assert.equal(nl.checks.ok, false)
|
|
224
|
+
const msgs = nl.checks.errors.join('; ')
|
|
225
|
+
assert.ok(msgs.includes('孤立导线'), '应报孤立导线: ' + msgs)
|
|
226
|
+
})
|
|
227
|
+
|
|
228
|
+
test('坏电路(design 级):引脚悬空 → checkConnectivity 报错;生成器照常产出', () => {
|
|
229
|
+
const broken = {
|
|
230
|
+
name: 'broken',
|
|
231
|
+
components: [{ ref: 'R9', type: 'resistor', value: '1k', pos: { x: 100, y: 100 } }],
|
|
232
|
+
wires: [],
|
|
233
|
+
nets: [],
|
|
234
|
+
}
|
|
235
|
+
const sheet = generateSchematic(broken) // 生成不报错(生成器只负责生成)
|
|
236
|
+
assert.equal(validateSchematic(sheet).ok, true)
|
|
237
|
+
const res = checkConnectivity(broken) // 但连通性必须报错
|
|
238
|
+
assert.equal(res.ok, false)
|
|
239
|
+
assert.ok(res.errors.some((e) => e.includes('R9.1')), '应报出 R9.1 悬空: ' + res.errors.join('; '))
|
|
240
|
+
assert.ok(res.errors.some((e) => e.includes('R9.2')), '应报出 R9.2 悬空: ' + res.errors.join('; '))
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
// ============================================================================
|
|
244
|
+
// 结构 lint 防御:残缺/非法对象必须报错
|
|
245
|
+
// ============================================================================
|
|
246
|
+
|
|
247
|
+
test('validateSchematic:残缺/非法对象必须报错', () => {
|
|
248
|
+
const bad1 = validateSchematic({ head: {}, canvas: 42, shape: 'x', BBox: {}, colors: null, extra: 1 })
|
|
249
|
+
assert.equal(bad1.ok, false)
|
|
250
|
+
assert.ok(bad1.errors.length >= 4, '应有多条错误: ' + bad1.errors.join('; '))
|
|
251
|
+
assert.ok(bad1.errors.some((e) => e.includes('顶层键')), bad1.errors.join('; '))
|
|
252
|
+
assert.ok(bad1.errors.some((e) => e.includes('canvas')))
|
|
253
|
+
|
|
254
|
+
assert.equal(validateSchematic(null).ok, false)
|
|
255
|
+
assert.equal(validateSchematic([]).ok, false)
|
|
256
|
+
|
|
257
|
+
// 缺 head 必需字段 + 空 shape
|
|
258
|
+
const bad2 = validateSchematic({
|
|
259
|
+
head: { docType: '1' },
|
|
260
|
+
canvas: 'CA~1200~800~#FFFFFF~yes~#CCCCCC~10~1200~800~line~10~pixel~5~0~0',
|
|
261
|
+
shape: [],
|
|
262
|
+
BBox: { x: 0, y: 0, width: 10, height: 10 },
|
|
263
|
+
colors: {},
|
|
264
|
+
})
|
|
265
|
+
assert.equal(bad2.ok, false)
|
|
266
|
+
assert.ok(bad2.errors.some((e) => e.includes('head 缺少必需字段')))
|
|
267
|
+
assert.ok(bad2.errors.some((e) => e.includes('shape 不能为空')))
|
|
268
|
+
|
|
269
|
+
// validate.js 的 validateSchematic 同样拒绝
|
|
270
|
+
assert.equal(lintDesign({ head: {}, shape: [] }).ok, false)
|
|
271
|
+
})
|
|
272
|
+
|
|
273
|
+
// ============================================================================
|
|
274
|
+
// 其他
|
|
275
|
+
// ============================================================================
|
|
276
|
+
|
|
277
|
+
test('不支持的元件类型:generateSchematic 抛出明确错误', () => {
|
|
278
|
+
assert.throws(
|
|
279
|
+
() =>
|
|
280
|
+
generateSchematic({
|
|
281
|
+
...DEFAULT_DESIGN,
|
|
282
|
+
components: [{ ref: 'X1', type: 'ic', value: 'X', pos: { x: 0, y: 0 } }],
|
|
283
|
+
}),
|
|
284
|
+
/不支持的元件类型/,
|
|
285
|
+
)
|
|
286
|
+
})
|
|
287
|
+
|
|
288
|
+
test('new-symbol templates: cap-bypass/diode-protect/switch-demo 生成 ok 且设计闭合', () => {
|
|
289
|
+
const supported = TEMPLATE_CATALOG.filter((t) => t.supported === true)
|
|
290
|
+
assert.ok(supported.length >= 5, '应有 ≥5 个支持模板: ' + supported.map((t) => t.id).join(', '))
|
|
291
|
+
for (const id of ['cap-bypass', 'diode-protect', 'switch-demo']) {
|
|
292
|
+
const r = templateById(id)
|
|
293
|
+
assert.equal(r.ok, true, `${id} 应生成成功: ${r.note || ''}`)
|
|
294
|
+
assert.ok(r.design, `${id} 应有 design`)
|
|
295
|
+
const res = checkConnectivity(r.design)
|
|
296
|
+
assert.equal(res.ok, true, `${id} 连通性应通过: ${res.errors.join('; ')}`)
|
|
297
|
+
}
|
|
298
|
+
// 关键词路由
|
|
299
|
+
assert.ok(translateRequest('帮我加一个电源去耦电容').ok, '电容关键词应路由到模板')
|
|
300
|
+
assert.ok(translateRequest('一个二极管防反接电路').ok, '二极管关键词应路由')
|
|
301
|
+
assert.ok(translateRequest('开关电路').ok, '开关关键词应路由')
|
|
302
|
+
})
|
|
303
|
+
|
|
304
|
+
test('demo-netlist.json 与 demo.json 联动:生成器 main 产物可复现(幂等形状)', async () => {
|
|
305
|
+
// 重新运行 main(),确认 demo.json / demo-project.json / demo-netlist.json 均能写出且自检通过
|
|
306
|
+
const { ok, netlist } = await (await import('./json-gen.js')).main()
|
|
307
|
+
assert.equal(ok, true)
|
|
308
|
+
assert.equal(netlist.checks.ok, true, netlist.checks.errors.join('; '))
|
|
309
|
+
assert.equal(netlist.nets.length, 3)
|
|
310
|
+
})
|
|
311
|
+
|
|
312
|
+
// ============================================================================
|
|
313
|
+
// 任务 4 新增:4 种新符号 + 3 个新模板 + pinPoints 全类型
|
|
314
|
+
// ============================================================================
|
|
315
|
+
|
|
316
|
+
test('新符号:inductor/crystal/battery/fuse 生成 + 结构 lint 通过(各 1 个 LIB)', () => {
|
|
317
|
+
const cases = [
|
|
318
|
+
['L1', 'inductor', '10u'],
|
|
319
|
+
['Y1', 'crystal', '16MHz'],
|
|
320
|
+
['BT1', 'battery', '3.7V'],
|
|
321
|
+
['F1', 'fuse', '1A'],
|
|
322
|
+
]
|
|
323
|
+
for (const [ref, type, value] of cases) {
|
|
324
|
+
const sheet = generateSchematic({ components: [{ ref, type, value, pos: { x: 400, y: 300 } }], nets: [] })
|
|
325
|
+
const lint = validateSchematic(sheet)
|
|
326
|
+
assert.equal(lint.ok, true, `${type} 结构 lint 应通过: ${lint.errors.join('; ')}`)
|
|
327
|
+
const libs = sheet.shape.filter((s) => s.startsWith('LIB'))
|
|
328
|
+
assert.equal(libs.length, 1, `${type} 应恰有 1 个 LIB`)
|
|
329
|
+
assert.ok(libs[0].includes('spiceSymbolName'), `${type} LIB 应包含 spiceSymbolName`)
|
|
330
|
+
}
|
|
331
|
+
})
|
|
332
|
+
|
|
333
|
+
test('pinPoints:新 6 类 → ±50;diode → ±40(与 led 同档)', () => {
|
|
334
|
+
// 两脚间距 100(±50):电容/开关/电感/晶振/电池/保险丝(引脚1 右、引脚2 左)
|
|
335
|
+
for (const type of ['capacitor', 'switch', 'inductor', 'crystal', 'battery', 'fuse']) {
|
|
336
|
+
assert.deepEqual(
|
|
337
|
+
pinPoints({ ref: 'X1', type, pos: { x: 400, y: 300 } }).map((p) => [p.x, p.y]),
|
|
338
|
+
[[450, 300], [350, 300]],
|
|
339
|
+
`${type} 应为 ±50`,
|
|
340
|
+
)
|
|
341
|
+
}
|
|
342
|
+
// 两脚间距 80(±40):二极管与 LED 同档(阳极右=引脚1,阴极左=引脚2)
|
|
343
|
+
assert.deepEqual(pinPoints({ ref: 'D1', type: 'diode', pos: { x: 700, y: 300 } }).map((p) => [p.x, p.y]),
|
|
344
|
+
[[740, 300], [660, 300]])
|
|
345
|
+
assert.deepEqual(pinPoints({ ref: 'L1', type: 'led', pos: { x: 700, y: 300 } }).map((p) => [p.x, p.y]),
|
|
346
|
+
[[740, 300], [660, 300]])
|
|
347
|
+
})
|
|
348
|
+
|
|
349
|
+
test('rc-delay 组合电路:translateRequest → 生成 + 结构 lint + 连通 + 网表自检 全通过', () => {
|
|
350
|
+
const rd = translateRequest('一个 RC 延时电路')
|
|
351
|
+
assert.equal(rd.ok, true, rd.note || '')
|
|
352
|
+
assert.equal(rd.title, 'RC 延时电路')
|
|
353
|
+
const types = rd.design.components.map((c) => c.type)
|
|
354
|
+
assert.ok(types.includes('resistor') && types.includes('capacitor'), `应含 resistor/capacitor: ${types.join(', ')}`)
|
|
355
|
+
const sheet = generateSchematic(rd.design)
|
|
356
|
+
assert.equal(validateSchematic(sheet).ok, true, validateSchematic(sheet).errors.join('; '))
|
|
357
|
+
assert.equal(checkConnectivity(rd.design).ok, true, checkConnectivity(rd.design).errors.join('; '))
|
|
358
|
+
const nl = deriveNetlistFromSheet(sheet)
|
|
359
|
+
assert.equal(nl.checks.ok, true, nl.checks.errors.join('; '))
|
|
360
|
+
const byName = Object.fromEntries(nl.nets.map((n) => [n.name, n]))
|
|
361
|
+
assert.ok(byName['5V'] && byName['GND'], 'rc-delay 应含 5V/GND 命名网')
|
|
362
|
+
})
|
|
363
|
+
|
|
364
|
+
test('diode-protect 组合电路:生成 + 结构 lint + 连通 + 网表自检 全通过', () => {
|
|
365
|
+
const dp = translateRequest('用二极管保护一下')
|
|
366
|
+
assert.equal(dp.ok, true, dp.note || '')
|
|
367
|
+
assert.ok(dp.design.components.some((c) => c.type === 'diode'), '应含二极管')
|
|
368
|
+
const sheet = generateSchematic(dp.design)
|
|
369
|
+
assert.equal(validateSchematic(sheet).ok, true, validateSchematic(sheet).errors.join('; '))
|
|
370
|
+
assert.equal(checkConnectivity(dp.design).ok, true, checkConnectivity(dp.design).errors.join('; '))
|
|
371
|
+
const nl = deriveNetlistFromSheet(sheet)
|
|
372
|
+
assert.equal(nl.checks.ok, true, nl.checks.errors.join('; '))
|
|
373
|
+
})
|
|
374
|
+
|
|
375
|
+
test('battery-switch-led 组合电路:生成 + 结构 lint + 连通 + 网表自检 全通过', () => {
|
|
376
|
+
const bsl = templateById('battery-switch-led')
|
|
377
|
+
assert.equal(bsl.ok, true, bsl.note || '')
|
|
378
|
+
const types = bsl.design.components.map((c) => c.type)
|
|
379
|
+
assert.ok(types.includes('battery') && types.includes('switch') && types.includes('led'),
|
|
380
|
+
`应含 battery/switch/led: ${types.join(', ')}`)
|
|
381
|
+
const sheet = generateSchematic(bsl.design)
|
|
382
|
+
assert.equal(validateSchematic(sheet).ok, true, validateSchematic(sheet).errors.join('; '))
|
|
383
|
+
assert.equal(checkConnectivity(bsl.design).ok, true, checkConnectivity(bsl.design).errors.join('; '))
|
|
384
|
+
const nl = deriveNetlistFromSheet(sheet)
|
|
385
|
+
assert.equal(nl.checks.ok, true, nl.checks.errors.join('; '))
|
|
386
|
+
})
|
|
387
|
+
|
|
388
|
+
test('nl-to-design:rc-delay / diode-protect / battery-switch-led 关键词命中且模板目录已登记', () => {
|
|
389
|
+
// 模板目录登记:3 条新模板均 supported:true
|
|
390
|
+
for (const id of ['rc-delay', 'diode-protect', 'battery-switch-led']) {
|
|
391
|
+
const meta = TEMPLATE_CATALOG.find((t) => t.id === id)
|
|
392
|
+
assert.ok(meta, `TEMPLATE_CATALOG 应包含 ${id}`)
|
|
393
|
+
assert.equal(meta.supported, true, `${id} 应为 supported:true`)
|
|
394
|
+
}
|
|
395
|
+
// 关键词路由
|
|
396
|
+
const rc = translateRequest('一个 RC 延时电路')
|
|
397
|
+
assert.equal(rc.ok, true)
|
|
398
|
+
assert.ok(rc.design.components.some((c) => c.type === 'capacitor'), 'rc-delay 应含 capacitor')
|
|
399
|
+
|
|
400
|
+
const dp = translateRequest('用二极管保护一下')
|
|
401
|
+
assert.equal(dp.ok, true)
|
|
402
|
+
assert.ok(dp.design.components.some((c) => c.type === 'diode'), 'diode-protect 应含 diode')
|
|
403
|
+
|
|
404
|
+
const bsl = translateRequest('电池开关灯')
|
|
405
|
+
assert.equal(bsl.ok, true)
|
|
406
|
+
const t = bsl.design.components.map((c) => c.type)
|
|
407
|
+
assert.ok(t.includes('switch') && t.includes('battery'), `电池开关灯应含 switch/battery: ${t.join(', ')}`)
|
|
408
|
+
})
|
|
409
|
+
|
|
410
|
+
test('9 种符号混合 generateSchematic 结构 lint 通过(含新 4 种)', () => {
|
|
411
|
+
const mix = {
|
|
412
|
+
components: [
|
|
413
|
+
{ ref: 'R1', type: 'resistor', value: '1k', pos: { x: 200, y: 300 } },
|
|
414
|
+
{ ref: 'L1', type: 'inductor', value: '10u', pos: { x: 400, y: 300 } },
|
|
415
|
+
{ ref: 'C1', type: 'capacitor', value: '0.1u', pos: { x: 600, y: 300 } },
|
|
416
|
+
{ ref: 'D1', type: 'diode', value: '1N4007', pos: { x: 800, y: 300 } },
|
|
417
|
+
{ ref: 'Y1', type: 'crystal', value: '16MHz', pos: { x: 1000, y: 300 } },
|
|
418
|
+
{ ref: 'BT1', type: 'battery', value: '3.7V', pos: { x: 1200, y: 300 } },
|
|
419
|
+
{ ref: 'F1', type: 'fuse', value: '1A', pos: { x: 1400, y: 300 } },
|
|
420
|
+
{ ref: 'S1', type: 'switch', value: 'SW', pos: { x: 1600, y: 300 } },
|
|
421
|
+
{ ref: 'LED1', type: 'led', value: 'red', pos: { x: 1800, y: 300 } },
|
|
422
|
+
],
|
|
423
|
+
wires: [],
|
|
424
|
+
nets: [],
|
|
425
|
+
}
|
|
426
|
+
const sheet = generateSchematic(mix)
|
|
427
|
+
assert.equal(validateSchematic(sheet).ok, true, validateSchematic(sheet).errors.join('; '))
|
|
428
|
+
const libs = sheet.shape.filter((s) => s.startsWith('LIB'))
|
|
429
|
+
assert.equal(libs.length, 9, '应有 9 个元件 LIB')
|
|
430
|
+
})
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<!--@include: @/private/pro-api-sdk/README.en.md{3,}-->
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
# ISYS\_PcbComparisonResponse interface
|
|
2
|
-
|
|
3
|
-
PCB comparison response
|
|
4
|
-
|
|
5
|
-
## Signature
|
|
6
|
-
|
|
7
|
-
```typescript
|
|
8
|
-
interface ISYS_PcbComparisonResponse
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Properties
|
|
12
|
-
|
|
13
|
-
<table><thead><tr><th>
|
|
14
|
-
|
|
15
|
-
Property
|
|
16
|
-
|
|
17
|
-
</th><th>
|
|
18
|
-
|
|
19
|
-
Modifiers
|
|
20
|
-
|
|
21
|
-
</th><th>
|
|
22
|
-
|
|
23
|
-
Type
|
|
24
|
-
|
|
25
|
-
</th><th>
|
|
26
|
-
|
|
27
|
-
Description
|
|
28
|
-
|
|
29
|
-
</th></tr></thead>
|
|
30
|
-
<tbody><tr><td>
|
|
31
|
-
|
|
32
|
-
[data?](./ISYS_PcbComparisonResponse.md)
|
|
33
|
-
|
|
34
|
-
</td><td>
|
|
35
|
-
|
|
36
|
-
</td><td>
|
|
37
|
-
|
|
38
|
-
any
|
|
39
|
-
|
|
40
|
-
</td><td>
|
|
41
|
-
|
|
42
|
-
_(Optional)_ Comparison result (present when `success = true`<!-- -->)
|
|
43
|
-
|
|
44
|
-
</td></tr>
|
|
45
|
-
<tr><td>
|
|
46
|
-
|
|
47
|
-
[error?](./ISYS_PcbComparisonResponse.md)
|
|
48
|
-
|
|
49
|
-
</td><td>
|
|
50
|
-
|
|
51
|
-
</td><td>
|
|
52
|
-
|
|
53
|
-
{ code: [TSYS\_PcbComparisonErrorCode](../types/TSYS_PcbComparisonErrorCode.md)<!-- -->; message: string }
|
|
54
|
-
|
|
55
|
-
</td><td>
|
|
56
|
-
|
|
57
|
-
_(Optional)_ Error (present when `success = false`<!-- -->)
|
|
58
|
-
|
|
59
|
-
</td></tr>
|
|
60
|
-
<tr><td>
|
|
61
|
-
|
|
62
|
-
[success](./ISYS_PcbComparisonResponse.md)
|
|
63
|
-
|
|
64
|
-
</td><td>
|
|
65
|
-
|
|
66
|
-
</td><td>
|
|
67
|
-
|
|
68
|
-
boolean
|
|
69
|
-
|
|
70
|
-
</td><td>
|
|
71
|
-
|
|
72
|
-
Whether Successful
|
|
73
|
-
|
|
74
|
-
</td></tr>
|
|
75
|
-
</tbody></table>
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
## 属性详情
|
|
80
|
-
|
|
81
|
-
### data
|
|
82
|
-
|
|
83
|
-
# ISYS\_PcbComparisonResponse.data property
|
|
84
|
-
|
|
85
|
-
Comparison result (present when `success = true`<!-- -->)
|
|
86
|
-
|
|
87
|
-
## Signature
|
|
88
|
-
|
|
89
|
-
```typescript
|
|
90
|
-
data?: any;
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
### error
|
|
94
|
-
|
|
95
|
-
# ISYS\_PcbComparisonResponse.error property
|
|
96
|
-
|
|
97
|
-
Error (present when `success = false`<!-- -->)
|
|
98
|
-
|
|
99
|
-
## Signature
|
|
100
|
-
|
|
101
|
-
```typescript
|
|
102
|
-
error?: { code: TSYS_PcbComparisonErrorCode; message: string };
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### success
|
|
106
|
-
|
|
107
|
-
# ISYS\_PcbComparisonResponse.success property
|
|
108
|
-
|
|
109
|
-
Whether Successful
|
|
110
|
-
|
|
111
|
-
## Signature
|
|
112
|
-
|
|
113
|
-
```typescript
|
|
114
|
-
success: boolean;
|
|
115
|
-
```
|