diff --git a/browser_tests/fixtures/ComfyMouse.ts b/browser_tests/fixtures/ComfyMouse.ts index 306f4352b..dfb0281eb 100644 --- a/browser_tests/fixtures/ComfyMouse.ts +++ b/browser_tests/fixtures/ComfyMouse.ts @@ -10,7 +10,7 @@ import type { Position } from './types' * - {@link Mouse.move} * - {@link Mouse.up} */ -export interface DragOptions { +interface DragOptions { button?: 'left' | 'right' | 'middle' clickCount?: number steps?: number diff --git a/browser_tests/fixtures/utils/litegraphUtils.ts b/browser_tests/fixtures/utils/litegraphUtils.ts index 8a52d8b66..c9bf88a91 100644 --- a/browser_tests/fixtures/utils/litegraphUtils.ts +++ b/browser_tests/fixtures/utils/litegraphUtils.ts @@ -134,7 +134,7 @@ export class SubgraphSlotReference { } } -export class NodeSlotReference { +class NodeSlotReference { constructor( readonly type: 'input' | 'output', readonly index: number, @@ -201,7 +201,7 @@ export class NodeSlotReference { } } -export class NodeWidgetReference { +class NodeWidgetReference { constructor( readonly index: number, readonly node: NodeReference diff --git a/knip.config.ts b/knip.config.ts index 2c1167ab3..9df077d77 100644 --- a/knip.config.ts +++ b/knip.config.ts @@ -2,84 +2,56 @@ import type { KnipConfig } from 'knip' const config: KnipConfig = { entry: [ - 'build/**/*.ts', - 'scripts/**/*.{js,ts}', + '{build,scripts}/**/*.{js,ts}', + 'src/assets/css/style.css', 'src/main.ts', - 'vite.electron.config.mts', - 'vite.types.config.mts' - ], - project: [ - 'browser_tests/**/*.{js,ts}', - 'build/**/*.{js,ts,vue}', - 'scripts/**/*.{js,ts}', - 'src/**/*.{js,ts,vue}', - 'tests-ui/**/*.{js,ts,vue}', - '*.{js,ts,mts}' + 'src/scripts/ui/menu/index.ts', + 'src/types/index.ts' ], + project: ['**/*.{js,ts,vue}', '*.{js,ts,mts}'], ignoreBinaries: ['only-allow', 'openapi-typescript'], ignoreDependencies: [ + // Weird importmap things + '@iconify/json', '@primeuix/forms', '@primeuix/styled', '@primeuix/utils', '@primevue/icons', - '@iconify/json', - 'tailwindcss', - 'tailwindcss-primeui', // Need to figure out why tailwind plugin isn't applying // Dev '@trivago/prettier-plugin-sort-imports' ], ignore: [ - // Generated files - 'dist/**', - 'types/**', - 'node_modules/**', - // Config files that might not show direct usage - '.husky/**', - // Temporary or cache files - '.vite/**', - 'coverage/**', - // i18n config - '.i18nrc.cjs', - // Vitest litegraph config - 'vitest.litegraph.config.ts', - // Test setup files - 'browser_tests/globalSetup.ts', - 'browser_tests/globalTeardown.ts', - 'browser_tests/utils/**', - // Scripts - 'scripts/**', - // Vite config files - 'vite.electron.config.mts', - 'vite.types.config.mts', // Auto generated manager types 'src/types/generatedManagerTypes.ts', - // Design system components (may not be used immediately) - 'src/components/button/IconGroup.vue', - 'src/components/button/MoreButton.vue', - 'src/components/button/TextButton.vue', - 'src/components/card/CardTitle.vue', - 'src/components/card/CardDescription.vue', - 'src/components/input/SingleSelect.vue', + 'src/types/comfyRegistryTypes.ts', // Used by a custom node (that should move off of this) - 'src/scripts/ui/components/splitButton.ts', - // Generated file: openapi - 'src/types/comfyRegistryTypes.ts' + 'src/scripts/ui/components/splitButton.ts' ], - ignoreExportsUsedInFile: true, - // Vue-specific configuration - vue: true, - tailwind: true, - // Only check for unused files, disable all other rules - // TODO: Gradually enable other rules - see https://github.com/Comfy-Org/ComfyUI_frontend/issues/4888 - rules: { - classMembers: 'off' + compilers: { + // https://github.com/webpro-nl/knip/issues/1008#issuecomment-3207756199 + css: (text: string) => + [ + ...text.replaceAll('plugin', 'import').matchAll(/(?<=@)import[^;]+/g) + ].join('\n') + }, + vite: { + config: ['vite?(.*).config.mts'] + }, + vitest: { + config: ['vitest?(.*).config.ts'], + entry: [ + '**/*.{bench,test,test-d,spec}.?(c|m)[jt]s?(x)', + '**/__mocks__/**/*.[jt]s?(x)' + ] + }, + playwright: { + config: ['playwright?(.*).config.ts'], + entry: ['**/*.@(spec|test).?(c|m)[jt]s?(x)', 'browser_tests/**/*.ts'] }, tags: [ '-knipIgnoreUnusedButUsedByCustomNodes', '-knipIgnoreUnusedButUsedByVueNodesBranch' - ], - // Include dependencies analysis - includeEntryExports: true + ] } export default config diff --git a/src/composables/bottomPanelTabs/useCommandSubcategories.ts b/src/composables/bottomPanelTabs/useCommandSubcategories.ts index 18131b033..0fbf37ebe 100644 --- a/src/composables/bottomPanelTabs/useCommandSubcategories.ts +++ b/src/composables/bottomPanelTabs/useCommandSubcategories.ts @@ -2,12 +2,12 @@ import { type ComputedRef, computed } from 'vue' import { type ComfyCommandImpl } from '@/stores/commandStore' -export type SubcategoryRule = { +type SubcategoryRule = { pattern: string | RegExp subcategory: string } -export type SubcategoryConfig = { +type SubcategoryConfig = { defaultSubcategory: string rules: SubcategoryRule[] } diff --git a/src/composables/element/useDomClipping.ts b/src/composables/element/useDomClipping.ts index 843f76944..c3d41c998 100644 --- a/src/composables/element/useDomClipping.ts +++ b/src/composables/element/useDomClipping.ts @@ -23,7 +23,7 @@ function intersect(a: Rect, b: Rect): [number, number, number, number] | null { return [x1, y1, x2 - x1, y2 - y1] } -export interface ClippingOptions { +interface ClippingOptions { margin?: number } diff --git a/src/composables/graph/useCanvasTransformSync.ts b/src/composables/graph/useCanvasTransformSync.ts index 3e382492b..02145c100 100644 --- a/src/composables/graph/useCanvasTransformSync.ts +++ b/src/composables/graph/useCanvasTransformSync.ts @@ -2,7 +2,7 @@ import { onUnmounted, ref } from 'vue' import type { LGraphCanvas } from '../../lib/litegraph/src/litegraph' -export interface CanvasTransformSyncOptions { +interface CanvasTransformSyncOptions { /** * Whether to automatically start syncing when canvas is available * @default true @@ -10,7 +10,7 @@ export interface CanvasTransformSyncOptions { autoStart?: boolean } -export interface CanvasTransformSyncCallbacks { +interface CanvasTransformSyncCallbacks { /** * Called when sync starts */ diff --git a/src/composables/graph/useGraphNodeManager.ts b/src/composables/graph/useGraphNodeManager.ts index 4a81c78af..cda182f90 100644 --- a/src/composables/graph/useGraphNodeManager.ts +++ b/src/composables/graph/useGraphNodeManager.ts @@ -19,14 +19,14 @@ export interface NodeState { culled: boolean } -export interface NodeMetadata { +interface NodeMetadata { lastRenderTime: number cachedBounds: DOMRect | null lodLevel: 'high' | 'medium' | 'low' spatialIndex?: QuadTree } -export interface PerformanceMetrics { +interface PerformanceMetrics { fps: number frameTime: number updateTime: number @@ -60,12 +60,12 @@ export interface VueNodeData { } } -export interface SpatialMetrics { +interface SpatialMetrics { queryTime: number nodesInIndex: number } -export interface GraphNodeManager { +interface GraphNodeManager { // Reactive state - safe data extracted from LiteGraph nodes vueNodeData: ReadonlyMap nodeState: ReadonlyMap diff --git a/src/composables/graph/useTransformSettling.ts b/src/composables/graph/useTransformSettling.ts index 669cfceaa..bc3d0fc06 100644 --- a/src/composables/graph/useTransformSettling.ts +++ b/src/composables/graph/useTransformSettling.ts @@ -2,7 +2,7 @@ import { useDebounceFn, useEventListener, useThrottleFn } from '@vueuse/core' import { ref } from 'vue' import type { MaybeRefOrGetter } from 'vue' -export interface TransformSettlingOptions { +interface TransformSettlingOptions { /** * Delay in ms before transform is considered "settled" after last interaction * @default 200 diff --git a/src/composables/graph/useWidgetValue.ts b/src/composables/graph/useWidgetValue.ts index 1cf2fb353..96b5edcce 100644 --- a/src/composables/graph/useWidgetValue.ts +++ b/src/composables/graph/useWidgetValue.ts @@ -6,10 +6,7 @@ import { type Ref, ref, watch } from 'vue' import type { SimplifiedWidget, WidgetValue } from '@/types/simplifiedWidget' -export interface UseWidgetValueOptions< - T extends WidgetValue = WidgetValue, - U = T -> { +interface UseWidgetValueOptions { /** The widget configuration from LiteGraph */ widget: SimplifiedWidget /** The current value from parent component */ @@ -22,10 +19,7 @@ export interface UseWidgetValueOptions< transform?: (value: U) => T } -export interface UseWidgetValueReturn< - T extends WidgetValue = WidgetValue, - U = T -> { +interface UseWidgetValueReturn { /** Local value for immediate UI updates */ localValue: Ref /** Handler for user interactions */ diff --git a/src/composables/node/useNodeImage.ts b/src/composables/node/useNodeImage.ts index 19a461ade..83600aec2 100644 --- a/src/composables/node/useNodeImage.ts +++ b/src/composables/node/useNodeImage.ts @@ -35,7 +35,7 @@ const createContainer = () => { const createTimeout = (ms: number) => new Promise((resolve) => setTimeout(() => resolve(null), ms)) -export const useNodePreview = ( +const useNodePreview = ( node: LGraphNode, options: NodePreviewOptions ) => { diff --git a/src/composables/node/useWatchWidget.ts b/src/composables/node/useWatchWidget.ts index e32cb0101..2897de949 100644 --- a/src/composables/node/useWatchWidget.ts +++ b/src/composables/node/useWatchWidget.ts @@ -4,7 +4,7 @@ import { type ComputedRef, ref } from 'vue' import { useChainCallback } from '@/composables/functional/useChainCallback' import type { LGraphNode } from '@/lib/litegraph/src/litegraph' -export interface UseComputedWithWidgetWatchOptions { +interface UseComputedWithWidgetWatchOptions { /** * Names of widgets to observe for changes. * If not provided, all widgets will be observed. diff --git a/src/composables/nodePack/usePacksSelection.ts b/src/composables/nodePack/usePacksSelection.ts index 9643fab0e..7bfbaa4c3 100644 --- a/src/composables/nodePack/usePacksSelection.ts +++ b/src/composables/nodePack/usePacksSelection.ts @@ -5,7 +5,7 @@ import type { components } from '@/types/comfyRegistryTypes' type NodePack = components['schemas']['Node'] -export type SelectionState = 'all-installed' | 'none-installed' | 'mixed' +type SelectionState = 'all-installed' | 'none-installed' | 'mixed' /** * Composable for managing multi-package selection states diff --git a/src/composables/useCachedRequest.ts b/src/composables/useCachedRequest.ts index 3ecc69f7a..db7a2e86e 100644 --- a/src/composables/useCachedRequest.ts +++ b/src/composables/useCachedRequest.ts @@ -4,7 +4,7 @@ import { paramsToCacheKey } from '@/utils/formatUtil' const DEFAULT_MAX_SIZE = 50 -export interface CachedRequestOptions { +interface CachedRequestOptions { /** * Maximum number of items to store in the cache * @default 50 diff --git a/src/composables/useFrontendVersionMismatchWarning.ts b/src/composables/useFrontendVersionMismatchWarning.ts index 11897a016..e74f2ee5c 100644 --- a/src/composables/useFrontendVersionMismatchWarning.ts +++ b/src/composables/useFrontendVersionMismatchWarning.ts @@ -5,7 +5,7 @@ import { useI18n } from 'vue-i18n' import { useToastStore } from '@/stores/toastStore' import { useVersionCompatibilityStore } from '@/stores/versionCompatibilityStore' -export interface UseFrontendVersionMismatchWarningOptions { +interface UseFrontendVersionMismatchWarningOptions { immediate?: boolean } diff --git a/src/composables/useIntersectionObserver.ts b/src/composables/useIntersectionObserver.ts index a369e9506..f1077b9c1 100644 --- a/src/composables/useIntersectionObserver.ts +++ b/src/composables/useIntersectionObserver.ts @@ -1,7 +1,6 @@ import { type Ref, onBeforeUnmount, ref, watch } from 'vue' -export interface UseIntersectionObserverOptions - extends IntersectionObserverInit { +interface UseIntersectionObserverOptions extends IntersectionObserverInit { immediate?: boolean } diff --git a/src/composables/useLazyPagination.ts b/src/composables/useLazyPagination.ts index 474ccc8eb..95a26f4a5 100644 --- a/src/composables/useLazyPagination.ts +++ b/src/composables/useLazyPagination.ts @@ -1,6 +1,6 @@ import { type Ref, computed, ref, shallowRef, watch } from 'vue' -export interface LazyPaginationOptions { +interface LazyPaginationOptions { itemsPerPage?: number initialPage?: number } diff --git a/src/composables/useWorkflowValidation.ts b/src/composables/useWorkflowValidation.ts index 8577734a5..1c218dc2e 100644 --- a/src/composables/useWorkflowValidation.ts +++ b/src/composables/useWorkflowValidation.ts @@ -4,7 +4,7 @@ import { validateComfyWorkflow } from '@/schemas/comfyWorkflowSchema' import { useToastStore } from '@/stores/toastStore' import { fixBadLinks } from '@/utils/linkFixer' -export interface ValidationResult { +interface ValidationResult { graphData: ComfyWorkflowJSON | null } diff --git a/src/constants/slotColors.ts b/src/constants/slotColors.ts index 797bd94f5..6f0d70053 100644 --- a/src/constants/slotColors.ts +++ b/src/constants/slotColors.ts @@ -2,7 +2,7 @@ * Default colors for node slot types * Mirrors LiteGraph's slot_default_color_by_type */ -export const SLOT_TYPE_COLORS: Record = { +const SLOT_TYPE_COLORS: Record = { number: '#AAD', string: '#DCA', boolean: '#DAA', diff --git a/src/constants/supportedWorkflowFormats.ts b/src/constants/supportedWorkflowFormats.ts index ac0bee186..2184dbda7 100644 --- a/src/constants/supportedWorkflowFormats.ts +++ b/src/constants/supportedWorkflowFormats.ts @@ -5,7 +5,7 @@ /** * All supported image formats that can contain workflow data */ -export const IMAGE_WORKFLOW_FORMATS = { +const IMAGE_WORKFLOW_FORMATS = { extensions: ['.png', '.webp', '.svg', '.avif'], mimeTypes: ['image/png', 'image/webp', 'image/svg+xml', 'image/avif'] } @@ -13,7 +13,7 @@ export const IMAGE_WORKFLOW_FORMATS = { /** * All supported audio formats that can contain workflow data */ -export const AUDIO_WORKFLOW_FORMATS = { +const AUDIO_WORKFLOW_FORMATS = { extensions: ['.mp3', '.ogg', '.flac'], mimeTypes: ['audio/mpeg', 'audio/ogg', 'audio/flac', 'audio/x-flac'] } @@ -21,7 +21,7 @@ export const AUDIO_WORKFLOW_FORMATS = { /** * All supported video formats that can contain workflow data */ -export const VIDEO_WORKFLOW_FORMATS = { +const VIDEO_WORKFLOW_FORMATS = { extensions: ['.mp4', '.mov', '.m4v', '.webm'], mimeTypes: ['video/mp4', 'video/quicktime', 'video/x-m4v', 'video/webm'] } @@ -29,7 +29,7 @@ export const VIDEO_WORKFLOW_FORMATS = { /** * All supported 3D model formats that can contain workflow data */ -export const MODEL_WORKFLOW_FORMATS = { +const MODEL_WORKFLOW_FORMATS = { extensions: ['.glb'], mimeTypes: ['model/gltf-binary'] } @@ -37,7 +37,7 @@ export const MODEL_WORKFLOW_FORMATS = { /** * All supported data formats that directly contain workflow data */ -export const DATA_WORKFLOW_FORMATS = { +const DATA_WORKFLOW_FORMATS = { extensions: ['.json', '.latent', '.safetensors'], mimeTypes: ['application/json'] } @@ -45,7 +45,7 @@ export const DATA_WORKFLOW_FORMATS = { /** * Combines all supported formats into a single object */ -export const ALL_WORKFLOW_FORMATS = { +const ALL_WORKFLOW_FORMATS = { extensions: [ ...IMAGE_WORKFLOW_FORMATS.extensions, ...AUDIO_WORKFLOW_FORMATS.extensions, diff --git a/src/extensions/core/load3d/interfaces.ts b/src/extensions/core/load3d/interfaces.ts index fa05ce2b0..86d33edc9 100644 --- a/src/extensions/core/load3d/interfaces.ts +++ b/src/extensions/core/load3d/interfaces.ts @@ -48,7 +48,7 @@ export interface CaptureResult { lineart: string } -export interface BaseManager { +interface BaseManager { init(): void dispose(): void reset(): void diff --git a/src/extensions/core/maskEditorLayerFilenames.ts b/src/extensions/core/maskEditorLayerFilenames.ts index 2e2f1bf98..6b6b5ca27 100644 --- a/src/extensions/core/maskEditorLayerFilenames.ts +++ b/src/extensions/core/maskEditorLayerFilenames.ts @@ -1,4 +1,4 @@ -export interface ImageLayerFilenames { +interface ImageLayerFilenames { maskedImage: string paint: string paintedImage: string diff --git a/src/lib/litegraph/src/LGraphCanvas.ts b/src/lib/litegraph/src/LGraphCanvas.ts index c15073da8..e0e0031d9 100644 --- a/src/lib/litegraph/src/LGraphCanvas.ts +++ b/src/lib/litegraph/src/LGraphCanvas.ts @@ -165,7 +165,7 @@ interface IDialogOptions { } /** @inheritdoc {@link LGraphCanvas.state} */ -export interface LGraphCanvasState { +interface LGraphCanvasState { /** {@link Positionable} items are being dragged on the canvas. */ draggingItems: boolean /** The canvas itself is being dragged. */ diff --git a/src/lib/litegraph/src/LGraphNode.ts b/src/lib/litegraph/src/LGraphNode.ts index e28fca23f..c069bb36b 100644 --- a/src/lib/litegraph/src/LGraphNode.ts +++ b/src/lib/litegraph/src/LGraphNode.ts @@ -94,19 +94,19 @@ export type NodeId = number | string export type NodeProperty = string | number | boolean | object -export interface INodePropertyInfo { +interface INodePropertyInfo { name: string type?: string default_value: NodeProperty | undefined } -export interface IMouseOverData { +interface IMouseOverData { inputId?: number outputId?: number overWidget?: IBaseWidget } -export interface ConnectByTypeOptions { +interface ConnectByTypeOptions { /** @deprecated Events */ createEventInCase?: boolean /** Allow our wildcard slot to connect to typed slots on remote node. Default: true */ @@ -118,12 +118,12 @@ export interface ConnectByTypeOptions { } /** Internal type used for type safety when implementing generic checks for inputs & outputs */ -export interface IGenericLinkOrLinks { +interface IGenericLinkOrLinks { links?: INodeOutputSlot['links'] link?: INodeInputSlot['link'] } -export interface FindFreeSlotOptions { +interface FindFreeSlotOptions { /** Slots matching these types will be ignored. Default: [] */ typesNotAccepted?: ISlotType[] /** If true, the slot itself is returned instead of the index. Default: false */ diff --git a/src/lib/litegraph/src/canvas/LinkConnector.ts b/src/lib/litegraph/src/canvas/LinkConnector.ts index 1456953ad..a70fd8752 100644 --- a/src/lib/litegraph/src/canvas/LinkConnector.ts +++ b/src/lib/litegraph/src/canvas/LinkConnector.ts @@ -44,7 +44,7 @@ import { ToOutputRenderLink } from './ToOutputRenderLink' * References are only held atomically within a function, never passed. * The concrete implementation may be replaced or proxied without side-effects. */ -export interface LinkConnectorState { +interface LinkConnectorState { /** * The type of slot that links are being connected **to**. * - When `undefined`, no operation is being performed. @@ -68,7 +68,7 @@ type RenderLinkUnion = | ToInputFromIoNodeLink | ToOutputFromIoNodeLink -export interface LinkConnectorExport { +interface LinkConnectorExport { renderLinks: RenderLink[] inputLinks: LLink[] outputLinks: LLink[] diff --git a/src/lib/litegraph/src/draw.ts b/src/lib/litegraph/src/draw.ts index b335f3f81..2b8987ef8 100644 --- a/src/lib/litegraph/src/draw.ts +++ b/src/lib/litegraph/src/draw.ts @@ -48,7 +48,7 @@ export interface IDrawBoundingOptions { lineWidth?: number } -export interface IDrawTextInAreaOptions { +interface IDrawTextInAreaOptions { /** The canvas to draw the text on. */ ctx: CanvasRenderingContext2D /** The text to draw. */ diff --git a/src/lib/litegraph/src/interfaces.ts b/src/lib/litegraph/src/interfaces.ts index 0abbf313b..f48a7f141 100644 --- a/src/lib/litegraph/src/interfaces.ts +++ b/src/lib/litegraph/src/interfaces.ts @@ -64,7 +64,7 @@ export interface HasBoundingRect { } /** An object containing a set of child objects */ -export interface Parent { +interface Parent { /** All objects owned by the parent object. */ readonly children?: ReadonlySet } @@ -210,7 +210,7 @@ export interface LinkSegment { readonly origin_slot: number | undefined } -export interface IInputOrOutput { +interface IInputOrOutput { // If an input, this will be defined input?: INodeInputSlot | null // If an output, this will be defined @@ -273,7 +273,7 @@ export type ReadOnlyTypedArray = > /** Union of property names that are of type Match */ -export type KeysOfType = Exclude< +type KeysOfType = Exclude< { [P in keyof T]: T[P] extends Match ? P : never }[keyof T], undefined > @@ -445,7 +445,7 @@ export interface IContextMenuValue< ): void | boolean } -export interface IContextMenuSubmenu +interface IContextMenuSubmenu extends IContextMenuOptions { options: ConstructorParameters>[0] } diff --git a/src/lib/litegraph/src/litegraph.ts b/src/lib/litegraph/src/litegraph.ts index fd1d1a31a..ddfc12c40 100644 --- a/src/lib/litegraph/src/litegraph.ts +++ b/src/lib/litegraph/src/litegraph.ts @@ -8,7 +8,7 @@ import type { CanvasEventDetail } from './types/events' import type { RenderShape, TitleMode } from './types/globalEnums' // Must remain above LiteGraphGlobal (circular dependency due to abstract factory behaviour in `configure`) -export { Subgraph, type GraphOrSubgraph } from './subgraph/Subgraph' +export { Subgraph } from './subgraph/Subgraph' export const LiteGraph = new LiteGraphGlobal() @@ -23,7 +23,7 @@ loadPolyfills() /** @deprecated Use {@link Point} instead. */ export type Vector2 = Point -export interface IContextMenuItem { +interface IContextMenuItem { content: string callback?: ContextMenuEventListener /** Used as innerHTML for extra child element */ @@ -36,7 +36,7 @@ export interface IContextMenuItem { className?: string } -export type ContextMenuEventListener = ( +type ContextMenuEventListener = ( value: IContextMenuItem, options: IContextMenuOptions, event: MouseEvent, @@ -74,58 +74,38 @@ export interface LGraphNodeConstructor { // End backwards compat -export { InputIndicators } from './canvas/InputIndicators' export { LinkConnector } from './canvas/LinkConnector' export { isOverNodeInput, isOverNodeOutput } from './canvas/measureSlots' export { CanvasPointer } from './CanvasPointer' export * as Constants from './constants' -export { SUBGRAPH_INPUT_ID, SUBGRAPH_OUTPUT_ID } from './constants' +export { SUBGRAPH_INPUT_ID } from './constants' export { ContextMenu } from './ContextMenu' -export { CurveEditor } from './CurveEditor' + export { DragAndScale } from './DragAndScale' -export { LabelPosition, SlotDirection, SlotShape, SlotType } from './draw' -export { strokeShape } from './draw' + export { Rectangle } from './infrastructure/Rectangle' export { RecursionError } from './infrastructure/RecursionError' export type { CanvasColour, ColorOption, - ConnectingLink, - Direction, - IBoundaryNodes, - IColorable, IContextMenuOptions, IContextMenuValue, - IFoundSlot, - IInputOrOutput, - INodeFlags, INodeInputSlot, INodeOutputSlot, INodeSlot, ISlotType, - KeysOfType, LinkNetwork, - LinkSegment, - MethodNames, Point, Positionable, - ReadonlyLinkNetwork, - ReadOnlyPoint, - ReadOnlyRect, - Rect, Size } from './interfaces' export { LGraph } from './LGraph' -export { - BadgePosition, - LGraphBadge, - type LGraphBadgeOptions -} from './LGraphBadge' -export { LGraphCanvas, type LGraphCanvasState } from './LGraphCanvas' +export { BadgePosition, LGraphBadge } from './LGraphBadge' +export { LGraphCanvas } from './LGraphCanvas' export { LGraphGroup } from './LGraphGroup' -export { LGraphNode, type NodeId, type NodeProperty } from './LGraphNode' +export { LGraphNode, type NodeId } from './LGraphNode' export { COMFY_VUE_NODE_DIMENSIONS } from './LiteGraphGlobal' -export { type LinkId, LLink } from './LLink' +export { LLink } from './LLink' export { createBounds } from './measure' export { Reroute, type RerouteId } from './Reroute' export { @@ -136,23 +116,18 @@ export { export { SubgraphNode } from './subgraph/SubgraphNode' export type { CanvasPointerEvent } from './types/events' export { - CanvasItem, EaseFunction, LGraphEventMode, LinkDirection, LinkMarkerShape, - RenderShape, - TitleMode + RenderShape } from './types/globalEnums' export type { ExportedSubgraph, ExportedSubgraphInstance, - ExportedSubgraphIONode, ISerialisedGraph, ISerialisedNode, - SerialisableGraph, - SerialisableLLink, - SubgraphIO + SerialisableGraph } from './types/serialisation' export type { IWidget } from './types/widgets' export { isColorable } from './utils/type' @@ -161,19 +136,14 @@ export type { UUID } from './utils/uuid' export { truncateText } from './utils/textUtils' export { getWidgetStep } from './utils/widget' export { distributeSpace, type SpaceRequest } from './utils/spaceDistribution' -export { BaseSteppedWidget } from './widgets/BaseSteppedWidget' + export { BaseWidget } from './widgets/BaseWidget' -export { BooleanWidget } from './widgets/BooleanWidget' -export { ButtonWidget } from './widgets/ButtonWidget' -export { ComboWidget } from './widgets/ComboWidget' -export { KnobWidget } from './widgets/KnobWidget' + export { LegacyWidget } from './widgets/LegacyWidget' -export { NumberWidget } from './widgets/NumberWidget' -export { SliderWidget } from './widgets/SliderWidget' -export { TextWidget } from './widgets/TextWidget' + export { isComboWidget } from './widgets/widgetMap' // Additional test-specific exports -export { LGraphButton, type LGraphButtonOptions } from './LGraphButton' +export { LGraphButton } from './LGraphButton' export { MovingOutputLink } from './canvas/MovingOutputLink' export { ToOutputRenderLink } from './canvas/ToOutputRenderLink' export { ToInputFromIoNodeLink } from './canvas/ToInputFromIoNodeLink' diff --git a/src/lib/litegraph/src/node/slotUtils.ts b/src/lib/litegraph/src/node/slotUtils.ts index e0eda79c8..712637040 100644 --- a/src/lib/litegraph/src/node/slotUtils.ts +++ b/src/lib/litegraph/src/node/slotUtils.ts @@ -18,9 +18,7 @@ type CommonIoSlotProps = SharedIntersection< ISerialisableNodeOutput > -export function shallowCloneCommonProps( - slot: CommonIoSlotProps -): CommonIoSlotProps { +function shallowCloneCommonProps(slot: CommonIoSlotProps): CommonIoSlotProps { const { color_off, color_on, diff --git a/src/lib/litegraph/src/subgraph/SubgraphSlotBase.ts b/src/lib/litegraph/src/subgraph/SubgraphSlotBase.ts index ed973733a..1634a769f 100644 --- a/src/lib/litegraph/src/subgraph/SubgraphSlotBase.ts +++ b/src/lib/litegraph/src/subgraph/SubgraphSlotBase.ts @@ -28,7 +28,7 @@ import type { SubgraphInputNode } from './SubgraphInputNode' import type { SubgraphOutput } from './SubgraphOutput' import type { SubgraphOutputNode } from './SubgraphOutputNode' -export interface SubgraphSlotDrawOptions { +interface SubgraphSlotDrawOptions { ctx: CanvasRenderingContext2D colorContext: DefaultConnectionColors lowQuality?: boolean diff --git a/src/lib/litegraph/src/subgraph/subgraphUtils.ts b/src/lib/litegraph/src/subgraph/subgraphUtils.ts index 2053d4999..c225dd7b8 100644 --- a/src/lib/litegraph/src/subgraph/subgraphUtils.ts +++ b/src/lib/litegraph/src/subgraph/subgraphUtils.ts @@ -27,7 +27,7 @@ import { SubgraphInputNode } from './SubgraphInputNode' import type { SubgraphOutput } from './SubgraphOutput' import { SubgraphOutputNode } from './SubgraphOutputNode' -export interface FilteredItems { +interface FilteredItems { nodes: Set reroutes: Set groups: Set diff --git a/src/lib/litegraph/src/types/events.ts b/src/lib/litegraph/src/types/events.ts index acbb89043..e5f8912ab 100644 --- a/src/lib/litegraph/src/types/events.ts +++ b/src/lib/litegraph/src/types/events.ts @@ -6,7 +6,7 @@ import type { LGraphNode } from '../LGraphNode' import type { LinkReleaseContextExtended } from '../litegraph' /** For Canvas*Event - adds graph space co-ordinates (property names are shipped) */ -export interface ICanvasPosition { +interface ICanvasPosition { /** X co-ordinate of the event, in graph space (NOT canvas space) */ canvasX: number /** Y co-ordinate of the event, in graph space (NOT canvas space) */ @@ -14,7 +14,7 @@ export interface ICanvasPosition { } /** For Canvas*Event */ -export interface IDeltaPosition { +interface IDeltaPosition { deltaX: number deltaY: number } @@ -23,7 +23,7 @@ export interface IDeltaPosition { * Workaround for Firefox returning 0 on offsetX/Y props * See https://github.com/Comfy-Org/litegraph.js/issues/403 for details */ -export interface IOffsetWorkaround { +interface IOffsetWorkaround { /** See {@link MouseEvent.offsetX}. This workaround is required (2024-12-31) to support Firefox, which always returns 0 */ safeOffsetX: number /** See {@link MouseEvent.offsetY}. This workaround is required (2024-12-31) to support Firefox, which always returns 0 */ @@ -45,7 +45,7 @@ interface LegacyMouseEvent { export interface CanvasPointerEvent extends PointerEvent, CanvasMouseEvent {} /** MouseEvent with canvasX/Y and deltaX/Y properties */ -export interface CanvasMouseEvent +interface CanvasMouseEvent extends MouseEvent, Readonly, LegacyMouseEvent {} @@ -57,29 +57,29 @@ export type CanvasEventDetail = | EmptyDoubleClickEventDetail | EmptyReleaseEventDetail -export interface GenericEventDetail { +interface GenericEventDetail { subType: 'before-change' | 'after-change' } -export interface OriginalEvent { +interface OriginalEvent { originalEvent: CanvasPointerEvent } -export interface EmptyReleaseEventDetail extends OriginalEvent { +interface EmptyReleaseEventDetail extends OriginalEvent { subType: 'empty-release' linkReleaseContext: LinkReleaseContextExtended } -export interface EmptyDoubleClickEventDetail extends OriginalEvent { +interface EmptyDoubleClickEventDetail extends OriginalEvent { subType: 'empty-double-click' } -export interface GroupDoubleClickEventDetail extends OriginalEvent { +interface GroupDoubleClickEventDetail extends OriginalEvent { subType: 'group-double-click' group: LGraphGroup } -export interface NodeDoubleClickEventDetail extends OriginalEvent { +interface NodeDoubleClickEventDetail extends OriginalEvent { subType: 'node-double-click' node: LGraphNode } diff --git a/src/lib/litegraph/src/types/serialisation.ts b/src/lib/litegraph/src/types/serialisation.ts index 4b1bfed90..8ab446594 100644 --- a/src/lib/litegraph/src/types/serialisation.ts +++ b/src/lib/litegraph/src/types/serialisation.ts @@ -31,7 +31,7 @@ export interface Serialisable { asSerialisable(): SerialisableObject } -export interface BaseExportedGraph { +interface BaseExportedGraph { /** Unique graph ID. Automatically generated if not provided. */ id: UUID /** The revision number of this graph. Not automatically incremented; intended for use by a downstream save function. */ diff --git a/src/lib/litegraph/src/types/widgets.ts b/src/lib/litegraph/src/types/widgets.ts index 4dde6949b..fa47c6a93 100644 --- a/src/lib/litegraph/src/types/widgets.ts +++ b/src/lib/litegraph/src/types/widgets.ts @@ -30,7 +30,7 @@ export interface IWidgetOptions { callback?: IWidget['callback'] } -export interface IWidgetSliderOptions extends IWidgetOptions { +interface IWidgetSliderOptions extends IWidgetOptions { min: number max: number step2: number @@ -38,7 +38,7 @@ export interface IWidgetSliderOptions extends IWidgetOptions { marker_color?: CanvasColour } -export interface IWidgetKnobOptions extends IWidgetOptions { +interface IWidgetKnobOptions extends IWidgetOptions { min: number max: number step2: number @@ -144,7 +144,7 @@ export interface IButtonWidget } /** A custom widget - accepts any value and has no built-in special handling */ -export interface ICustomWidget extends IBaseWidget { +interface ICustomWidget extends IBaseWidget { type: 'custom' value: string | object } @@ -169,7 +169,7 @@ export interface IMarkdownWidget extends IBaseWidget { } /** Image display widget */ -export interface IImageWidget extends IBaseWidget { +interface IImageWidget extends IBaseWidget { type: 'image' value: string } diff --git a/src/lib/litegraph/src/widgets/BaseWidget.ts b/src/lib/litegraph/src/widgets/BaseWidget.ts index 496f22923..c09668d9e 100644 --- a/src/lib/litegraph/src/widgets/BaseWidget.ts +++ b/src/lib/litegraph/src/widgets/BaseWidget.ts @@ -18,7 +18,7 @@ export interface DrawWidgetOptions { showText?: boolean } -export interface DrawTruncatingTextOptions extends DrawWidgetOptions { +interface DrawTruncatingTextOptions extends DrawWidgetOptions { /** The canvas context to draw the text on. */ ctx: CanvasRenderingContext2D /** The amount of padding to add to the left of the text. */ diff --git a/src/lib/litegraph/test/subgraph/fixtures/subgraphFixtures.ts b/src/lib/litegraph/test/subgraph/fixtures/subgraphFixtures.ts index 1c2d936ac..a83ef5e5f 100644 --- a/src/lib/litegraph/test/subgraph/fixtures/subgraphFixtures.ts +++ b/src/lib/litegraph/test/subgraph/fixtures/subgraphFixtures.ts @@ -16,7 +16,7 @@ import { createTestSubgraphNode } from './subgraphHelpers' -export interface SubgraphFixtures { +interface SubgraphFixtures { /** A minimal subgraph with no inputs, outputs, or nodes */ emptySubgraph: Subgraph diff --git a/src/lib/litegraph/test/subgraph/fixtures/subgraphHelpers.ts b/src/lib/litegraph/test/subgraph/fixtures/subgraphHelpers.ts index 4a3bd6c11..736f979d3 100644 --- a/src/lib/litegraph/test/subgraph/fixtures/subgraphHelpers.ts +++ b/src/lib/litegraph/test/subgraph/fixtures/subgraphHelpers.ts @@ -17,7 +17,7 @@ import type { import type { UUID } from '@/lib/litegraph/src/utils/uuid' import { createUuidv4 } from '@/lib/litegraph/src/utils/uuid' -export interface TestSubgraphOptions { +interface TestSubgraphOptions { id?: UUID name?: string nodeCount?: number @@ -27,20 +27,20 @@ export interface TestSubgraphOptions { outputs?: Array<{ name: string; type: ISlotType }> } -export interface TestSubgraphNodeOptions { +interface TestSubgraphNodeOptions { id?: NodeId pos?: [number, number] size?: [number, number] } -export interface NestedSubgraphOptions { +interface NestedSubgraphOptions { depth?: number nodesPerLevel?: number inputsPerSubgraph?: number outputsPerSubgraph?: number } -export interface SubgraphStructureExpectation { +interface SubgraphStructureExpectation { inputCount?: number outputCount?: number nodeCount?: number @@ -49,7 +49,7 @@ export interface SubgraphStructureExpectation { hasOutputNode?: boolean } -export interface CapturedEvent { +interface CapturedEvent { type: string detail: T timestamp: number @@ -422,6 +422,3 @@ export function createEventCapture( capturedEvents.filter((e) => e.type === type) } } - -// Re-export expect from vitest for convenience -export { expect } from 'vitest' diff --git a/src/renderer/core/canvas/litegraph/litegraphLinkAdapter.ts b/src/renderer/core/canvas/litegraph/litegraphLinkAdapter.ts index 301996585..88d32485f 100644 --- a/src/renderer/core/canvas/litegraph/litegraphLinkAdapter.ts +++ b/src/renderer/core/canvas/litegraph/litegraphLinkAdapter.ts @@ -58,7 +58,7 @@ export interface LinkRenderContext { disabledPattern?: CanvasPattern | null } -export interface LinkRenderOptions { +interface LinkRenderOptions { color?: CanvasColour flow?: boolean skipBorder?: boolean diff --git a/src/renderer/core/canvas/pathRenderer.ts b/src/renderer/core/canvas/pathRenderer.ts index a2ee8817c..eb458b180 100644 --- a/src/renderer/core/canvas/pathRenderer.ts +++ b/src/renderer/core/canvas/pathRenderer.ts @@ -38,7 +38,7 @@ export interface LinkRenderData { centerAngle?: number } -export interface RenderStyle { +interface RenderStyle { mode: RenderMode connectionWidth: number borderWidth?: number @@ -51,7 +51,7 @@ export interface RenderStyle { highQuality?: boolean } -export interface RenderColors { +interface RenderColors { default: string byType: Record highlighted: string diff --git a/src/renderer/core/layout/operations/layoutMutations.ts b/src/renderer/core/layout/operations/layoutMutations.ts index 42ce2677c..0c656899d 100644 --- a/src/renderer/core/layout/operations/layoutMutations.ts +++ b/src/renderer/core/layout/operations/layoutMutations.ts @@ -19,7 +19,7 @@ import { const logger = log.getLogger('LayoutMutations') -export interface LayoutMutations { +interface LayoutMutations { // Single node operations (synchronous, CRDT-ready) moveNode(nodeId: NodeId, position: Point): void resizeNode(nodeId: NodeId, size: Size): void diff --git a/src/renderer/core/layout/slots/register.ts b/src/renderer/core/layout/slots/register.ts index 5965b885b..afe7242ee 100644 --- a/src/renderer/core/layout/slots/register.ts +++ b/src/renderer/core/layout/slots/register.ts @@ -24,7 +24,7 @@ import { getSlotKey } from './slotIdentifier' * @param isInput Whether this is an input slot * @param position The slot position in graph coordinates */ -export function registerSlotLayout( +function registerSlotLayout( nodeId: string, slotIndex: number, isInput: boolean, diff --git a/src/renderer/core/layout/slots/slotIdentifier.ts b/src/renderer/core/layout/slots/slotIdentifier.ts index df1f64fc2..2600405e9 100644 --- a/src/renderer/core/layout/slots/slotIdentifier.ts +++ b/src/renderer/core/layout/slots/slotIdentifier.ts @@ -6,7 +6,7 @@ * @TODO Replace this concatenated string with root cause fix */ -export interface SlotIdentifier { +interface SlotIdentifier { nodeId: string index: number isInput: boolean diff --git a/src/renderer/core/layout/sync/useSlotLayoutSync.ts b/src/renderer/core/layout/sync/useSlotLayoutSync.ts index 05ea87508..55a464140 100644 --- a/src/renderer/core/layout/sync/useSlotLayoutSync.ts +++ b/src/renderer/core/layout/sync/useSlotLayoutSync.ts @@ -16,7 +16,7 @@ import { layoutStore } from '@/renderer/core/layout/store/layoutStore' * Compute and register slot layouts for a node * @param node LiteGraph node to process */ -export function computeAndRegisterSlots(node: LGraphNode): void { +function computeAndRegisterSlots(node: LGraphNode): void { const nodeId = String(node.id) const nodeLayout = layoutStore.getNodeLayoutRef(nodeId).value diff --git a/src/renderer/core/layout/types.ts b/src/renderer/core/layout/types.ts index c672f3e94..fdfcff430 100644 --- a/src/renderer/core/layout/types.ts +++ b/src/renderer/core/layout/types.ts @@ -84,7 +84,7 @@ export interface RerouteLayout { /** * Meta-only base for all operations - contains common fields */ -export interface OperationMeta { +interface OperationMeta { /** Unique operation ID for deduplication */ id?: string /** Timestamp for ordering operations */ @@ -100,9 +100,9 @@ export interface OperationMeta { /** * Entity-specific base types for proper type discrimination */ -export type NodeOpBase = OperationMeta & { entity: 'node'; nodeId: NodeId } -export type LinkOpBase = OperationMeta & { entity: 'link'; linkId: LinkId } -export type RerouteOpBase = OperationMeta & { +type NodeOpBase = OperationMeta & { entity: 'node'; nodeId: NodeId } +type LinkOpBase = OperationMeta & { entity: 'link'; linkId: LinkId } +type RerouteOpBase = OperationMeta & { entity: 'reroute' rerouteId: RerouteId } @@ -110,7 +110,7 @@ export type RerouteOpBase = OperationMeta & { /** * Operation type discriminator for type narrowing */ -export type OperationType = +type OperationType = | 'moveNode' | 'resizeNode' | 'setNodeZIndex' @@ -170,7 +170,7 @@ export interface DeleteNodeOperation extends NodeOpBase { /** * Set node visibility operation */ -export interface SetNodeVisibilityOperation extends NodeOpBase { +interface SetNodeVisibilityOperation extends NodeOpBase { type: 'setNodeVisibility' visible: boolean previousVisible: boolean @@ -179,7 +179,7 @@ export interface SetNodeVisibilityOperation extends NodeOpBase { /** * Batch update operation for atomic multi-property changes */ -export interface BatchUpdateOperation extends NodeOpBase { +interface BatchUpdateOperation extends NodeOpBase { type: 'batchUpdate' updates: Partial previousValues: Partial diff --git a/src/renderer/core/layout/useTransformState.ts b/src/renderer/core/layout/useTransformState.ts index a3ca2a820..515984567 100644 --- a/src/renderer/core/layout/useTransformState.ts +++ b/src/renderer/core/layout/useTransformState.ts @@ -53,12 +53,12 @@ import { computed, reactive, readonly } from 'vue' import type { LGraphCanvas } from '@/lib/litegraph/src/litegraph' -export interface Point { +interface Point { x: number y: number } -export interface Camera { +interface Camera { x: number y: number z: number // scale/zoom diff --git a/src/renderer/core/spatial/QuadTree.ts b/src/renderer/core/spatial/QuadTree.ts index e2c90b32e..e24692cf5 100644 --- a/src/renderer/core/spatial/QuadTree.ts +++ b/src/renderer/core/spatial/QuadTree.ts @@ -14,7 +14,7 @@ export interface Bounds { height: number } -export interface QuadTreeItem { +interface QuadTreeItem { id: string bounds: Bounds data: T diff --git a/src/renderer/core/spatial/boundsCalculator.ts b/src/renderer/core/spatial/boundsCalculator.ts index 50a4f708b..384663447 100644 --- a/src/renderer/core/spatial/boundsCalculator.ts +++ b/src/renderer/core/spatial/boundsCalculator.ts @@ -2,7 +2,7 @@ * Spatial bounds calculations for node layouts */ -export interface SpatialBounds { +interface SpatialBounds { minX: number minY: number maxX: number @@ -11,7 +11,7 @@ export interface SpatialBounds { height: number } -export interface PositionedNode { +interface PositionedNode { pos: ArrayLike size: ArrayLike } diff --git a/src/renderer/extensions/minimap/types.ts b/src/renderer/extensions/minimap/types.ts index 38f464f97..fbea21c83 100644 --- a/src/renderer/extensions/minimap/types.ts +++ b/src/renderer/extensions/minimap/types.ts @@ -29,7 +29,7 @@ export interface MinimapRenderContext { height: number } -export interface MinimapRenderSettings { +interface MinimapRenderSettings { nodeColors: boolean showLinks: boolean showGroups: boolean diff --git a/src/renderer/extensions/vueNodes/lod/useLOD.ts b/src/renderer/extensions/vueNodes/lod/useLOD.ts index 9d07e37ca..584e21f9a 100644 --- a/src/renderer/extensions/vueNodes/lod/useLOD.ts +++ b/src/renderer/extensions/vueNodes/lod/useLOD.ts @@ -35,7 +35,7 @@ export enum LODLevel { FULL = 'full' // zoom > 0.8 } -export interface LODConfig { +interface LODConfig { renderWidgets: boolean renderSlots: boolean renderContent: boolean diff --git a/src/renderer/extensions/vueNodes/widgets/composables/useRemoteWidget.ts b/src/renderer/extensions/vueNodes/widgets/composables/useRemoteWidget.ts index 0fde7592a..9022ab8c1 100644 --- a/src/renderer/extensions/vueNodes/widgets/composables/useRemoteWidget.ts +++ b/src/renderer/extensions/vueNodes/widgets/composables/useRemoteWidget.ts @@ -9,7 +9,7 @@ import { api } from '@/scripts/api' const MAX_RETRIES = 5 const TIMEOUT = 4096 -export interface CacheEntry { +interface CacheEntry { data: T timestamp?: number error?: Error | null diff --git a/src/renderer/extensions/vueNodes/widgets/registry/widgetRegistry.ts b/src/renderer/extensions/vueNodes/widgets/registry/widgetRegistry.ts index e72d90be1..c8b0b0a49 100644 --- a/src/renderer/extensions/vueNodes/widgets/registry/widgetRegistry.ts +++ b/src/renderer/extensions/vueNodes/widgets/registry/widgetRegistry.ts @@ -130,7 +130,7 @@ export const getComponent = (type: string): Component | null => { return widgets.get(canonicalType)?.component || null } -export const isSupported = (type: string): boolean => { +const isSupported = (type: string): boolean => { const canonicalType = getCanonicalType(type) return widgets.has(canonicalType) } diff --git a/src/schemas/apiSchema.ts b/src/schemas/apiSchema.ts index 6aaa95912..b4283d231 100644 --- a/src/schemas/apiSchema.ts +++ b/src/schemas/apiSchema.ts @@ -318,7 +318,7 @@ const zDeviceStats = z.object({ torch_vram_free: z.number() }) -export const zSystemStats = z.object({ +const zSystemStats = z.object({ system: z.object({ os: z.string(), python_version: z.string(), diff --git a/src/schemas/colorPaletteSchema.ts b/src/schemas/colorPaletteSchema.ts index 1a29c3940..88b797486 100644 --- a/src/schemas/colorPaletteSchema.ts +++ b/src/schemas/colorPaletteSchema.ts @@ -100,7 +100,7 @@ export const paletteSchema = z }) .passthrough() -export const completedPaletteSchema = z +const completedPaletteSchema = z .object({ id: z.string(), name: z.string(), diff --git a/src/schemas/comfyWorkflowSchema.ts b/src/schemas/comfyWorkflowSchema.ts index 62be3392b..a07ebc018 100644 --- a/src/schemas/comfyWorkflowSchema.ts +++ b/src/schemas/comfyWorkflowSchema.ts @@ -5,9 +5,9 @@ import { fromZodError } from 'zod-validation-error' // innerNode.id = `${this.node.id}:${i}` // Remove it after GroupNode is redesigned. export const zNodeId = z.union([z.number().int(), z.string()]) -export const zNodeInputName = z.string() +const zNodeInputName = z.string() export type NodeId = z.infer -export const zSlotIndex = z.union([ +const zSlotIndex = z.union([ z.number().int(), z .string() @@ -20,7 +20,7 @@ export const zSlotIndex = z.union([ // TODO: Investigate usage of array and number as data type usage in custom nodes. // Known usage: // - https://github.com/rgthree/rgthree-comfy Context Big node is using array as type. -export const zDataType = z.union([z.string(), z.array(z.string()), z.number()]) +const zDataType = z.union([z.string(), z.array(z.string()), z.number()]) const zVector2 = z.union([ z @@ -214,7 +214,7 @@ const zComfyNode = z }) .passthrough() -export const zSubgraphIO = zNodeInput.extend({ +const zSubgraphIO = zNodeInput.extend({ /** Slot ID (internal; never changes once instantiated). */ id: z.string().uuid(), /** The data type this slot uses. Unlike nodes, this does not support legacy numeric types. */ @@ -274,11 +274,11 @@ const zExtra = z }) .passthrough() -export const zGraphDefinitions = z.object({ +const zGraphDefinitions = z.object({ subgraphs: z.lazy(() => z.array(zSubgraphDefinition)) }) -export const zBaseExportableGraph = z.object({ +const zBaseExportableGraph = z.object({ /** Unique graph ID. Automatically generated if not provided. */ id: z.string().uuid().optional(), revision: z.number().optional(), @@ -371,13 +371,13 @@ export const zComfyWorkflow1 = zBaseExportableGraph }) .passthrough() -export const zExportedSubgraphIONode = z.object({ +const zExportedSubgraphIONode = z.object({ id: zNodeId, bounding: z.tuple([z.number(), z.number(), z.number(), z.number()]), pinned: z.boolean().optional() }) -export const zExposedWidget = z.object({ +const zExposedWidget = z.object({ id: z.string(), name: z.string() }) @@ -414,7 +414,7 @@ interface SubgraphDefinitionBase< } /** A subgraph definition `worfklow.definitions.subgraphs` */ -export const zSubgraphDefinition = zComfyWorkflow1 +const zSubgraphDefinition = zComfyWorkflow1 .extend({ /** Unique graph ID. Automatically generated if not provided. */ id: z.string().uuid(), @@ -455,7 +455,7 @@ export type WorkflowJSON04 = z.infer export type ComfyWorkflowJSON = z.infer< typeof zComfyWorkflow | typeof zComfyWorkflow1 > -export type SubgraphDefinition = z.infer +type SubgraphDefinition = z.infer /** * Type guard to check if an object is a SubgraphDefinition. @@ -522,5 +522,5 @@ const zNodeData = z.object({ }) }) -export const zComfyApiWorkflow = z.record(zNodeId, zNodeData) +const zComfyApiWorkflow = z.record(zNodeId, zNodeData) export type ComfyApiWorkflow = z.infer diff --git a/src/schemas/keyBindingSchema.ts b/src/schemas/keyBindingSchema.ts index 31896842f..04cbe319a 100644 --- a/src/schemas/keyBindingSchema.ts +++ b/src/schemas/keyBindingSchema.ts @@ -1,7 +1,7 @@ import { z } from 'zod' // KeyCombo schema -export const zKeyCombo = z.object({ +const zKeyCombo = z.object({ key: z.string(), ctrl: z.boolean().optional(), alt: z.boolean().optional(), diff --git a/src/schemas/nodeDef/nodeDefSchemaV2.ts b/src/schemas/nodeDef/nodeDefSchemaV2.ts index cb212fb99..09983d115 100644 --- a/src/schemas/nodeDef/nodeDefSchemaV2.ts +++ b/src/schemas/nodeDef/nodeDefSchemaV2.ts @@ -207,10 +207,10 @@ export const zComfyNodeDef = z.object({ }) // Export types -export type IntInputSpec = z.infer -export type FloatInputSpec = z.infer -export type BooleanInputSpec = z.infer -export type StringInputSpec = z.infer +type IntInputSpec = z.infer +type FloatInputSpec = z.infer +type BooleanInputSpec = z.infer +type StringInputSpec = z.infer export type ComboInputSpec = z.infer export type ColorInputSpec = z.infer export type FileUploadInputSpec = z.infer diff --git a/src/schemas/nodeDefSchema.ts b/src/schemas/nodeDefSchema.ts index 9d4c0b2e8..24adf85d4 100644 --- a/src/schemas/nodeDefSchema.ts +++ b/src/schemas/nodeDefSchema.ts @@ -34,7 +34,7 @@ export const zBaseInputOptions = z }) .passthrough() -export const zNumericInputOptions = zBaseInputOptions.extend({ +const zNumericInputOptions = zBaseInputOptions.extend({ min: z.number().optional(), max: z.number().optional(), step: z.number().optional(), diff --git a/src/scripts/domWidget.ts b/src/scripts/domWidget.ts index 1b081facd..a94ddb2ac 100644 --- a/src/scripts/domWidget.ts +++ b/src/scripts/domWidget.ts @@ -55,7 +55,7 @@ export interface DOMWidget * - widget: Reference to the widget instance * - onUpdate:modelValue: The update handler for v-model */ -export type ComponentWidgetCustomProps = Record +type ComponentWidgetCustomProps = Record /** * Standard props that are handled separately by DomWidget.vue and should be diff --git a/src/scripts/metadata/avif.ts b/src/scripts/metadata/avif.ts index d23adf4bb..70e5dcf62 100644 --- a/src/scripts/metadata/avif.ts +++ b/src/scripts/metadata/avif.ts @@ -319,7 +319,7 @@ function parseAvifMetadata(buffer: ArrayBuffer): ComfyMetadata { } // @ts-expect-error fixme ts strict error -export function parseExifData(exifData) { +function parseExifData(exifData) { // Check for the correct TIFF header (0x4949 for little-endian or 0x4D4D for big-endian) const isLittleEndian = String.fromCharCode(...exifData.slice(0, 2)) === 'II' diff --git a/src/scripts/metadata/flac.ts b/src/scripts/metadata/flac.ts index b3be03dd5..5a3efa6ac 100644 --- a/src/scripts/metadata/flac.ts +++ b/src/scripts/metadata/flac.ts @@ -1,3 +1,4 @@ +/** @knipIgnoreUnusedButUsedByCustomNodes */ export function getFromFlacBuffer(buffer: ArrayBuffer): Record { const dataView = new DataView(buffer) diff --git a/src/scripts/metadata/png.ts b/src/scripts/metadata/png.ts index 0d8b7d2dc..af3be9a64 100644 --- a/src/scripts/metadata/png.ts +++ b/src/scripts/metadata/png.ts @@ -1,3 +1,4 @@ +/** @knipIgnoreUnusedButUsedByCustomNodes */ export function getFromPngBuffer(buffer: ArrayBuffer) { // Get the PNG data as a Uint8Array const pngData = new Uint8Array(buffer) diff --git a/src/services/mediaCacheService.ts b/src/services/mediaCacheService.ts index 412f0a226..65f87a43c 100644 --- a/src/services/mediaCacheService.ts +++ b/src/services/mediaCacheService.ts @@ -1,6 +1,6 @@ import { reactive } from 'vue' -export interface CachedMedia { +interface CachedMedia { src: string blob?: Blob objectUrl?: string @@ -9,7 +9,7 @@ export interface CachedMedia { lastAccessed: number } -export interface MediaCacheOptions { +interface MediaCacheOptions { maxSize?: number maxAge?: number // in milliseconds preloadDistance?: number // pixels from viewport @@ -194,7 +194,7 @@ class MediaCacheService { } // Global instance -export let mediaCacheInstance: MediaCacheService | null = null +let mediaCacheInstance: MediaCacheService | null = null export function useMediaCache(options?: MediaCacheOptions) { if (!mediaCacheInstance) { diff --git a/src/services/nodeHelpService.ts b/src/services/nodeHelpService.ts index 8d26f9457..53a0e81ab 100644 --- a/src/services/nodeHelpService.ts +++ b/src/services/nodeHelpService.ts @@ -3,7 +3,7 @@ import type { ComfyNodeDefImpl } from '@/stores/nodeDefStore' import { NodeSourceType, getNodeSource } from '@/types/nodeSource' import { extractCustomNodeName } from '@/utils/nodeHelpUtil' -export class NodeHelpService { +class NodeHelpService { async fetchNodeHelp(node: ComfyNodeDefImpl, locale: string): Promise { const nodeSource = getNodeSource(node.python_module) diff --git a/src/services/nodeOrganizationService.ts b/src/services/nodeOrganizationService.ts index fb2e4dff4..e96c61e5f 100644 --- a/src/services/nodeOrganizationService.ts +++ b/src/services/nodeOrganizationService.ts @@ -13,7 +13,7 @@ const DEFAULT_ICON = 'pi pi-sort' export const DEFAULT_GROUPING_ID = 'category' as const export const DEFAULT_SORTING_ID = 'original' as const -export class NodeOrganizationService { +class NodeOrganizationService { private readonly groupingStrategies: NodeGroupingStrategy[] = [ { id: 'category', diff --git a/src/services/releaseService.ts b/src/services/releaseService.ts index 2f2871bd1..7c55ae8f0 100644 --- a/src/services/releaseService.ts +++ b/src/services/releaseService.ts @@ -14,11 +14,10 @@ const releaseApiClient = axios.create({ // Use generated types from OpenAPI spec export type ReleaseNote = components['schemas']['ReleaseNote'] -export type GetReleasesParams = - operations['getReleaseNotes']['parameters']['query'] +type GetReleasesParams = operations['getReleaseNotes']['parameters']['query'] // Use generated error response type -export type ErrorResponse = components['schemas']['ErrorResponse'] +type ErrorResponse = components['schemas']['ErrorResponse'] // Release service for fetching release notes export const useReleaseService = () => { diff --git a/src/stores/executionStore.ts b/src/stores/executionStore.ts index 6bc5db077..44bb13d2d 100644 --- a/src/stores/executionStore.ts +++ b/src/stores/executionStore.ts @@ -31,7 +31,7 @@ import { createNodeLocatorId } from '@/types/nodeIdentification' import { useCanvasStore } from './graphStore' import { ComfyWorkflow, useWorkflowStore } from './workflowStore' -export interface QueuedPrompt { +interface QueuedPrompt { /** * The nodes that are queued to be executed. The key is the node id and the * value is a boolean indicating if the node has been executed. diff --git a/src/stores/extensionStore.ts b/src/stores/extensionStore.ts index 2756b7593..3c1abde8e 100644 --- a/src/stores/extensionStore.ts +++ b/src/stores/extensionStore.ts @@ -6,9 +6,9 @@ import type { ComfyExtension } from '@/types/comfy' /** * These extensions are always active, even if they are disabled in the setting. */ -export const ALWAYS_ENABLED_EXTENSIONS: readonly string[] = [] +const ALWAYS_ENABLED_EXTENSIONS: readonly string[] = [] -export const ALWAYS_DISABLED_EXTENSIONS: readonly string[] = [ +const ALWAYS_DISABLED_EXTENSIONS: readonly string[] = [ // pysssss.Locking is replaced by pin/unpin in ComfyUI core. // https://github.com/Comfy-Org/litegraph.js/pull/117 'pysssss.Locking', diff --git a/src/stores/firebaseAuthStore.ts b/src/stores/firebaseAuthStore.ts index 161ec9d56..8f2af6439 100644 --- a/src/stores/firebaseAuthStore.ts +++ b/src/stores/firebaseAuthStore.ts @@ -41,7 +41,7 @@ type AccessBillingPortalResponse = type AccessBillingPortalReqBody = operations['AccessBillingPortal']['requestBody'] -export class FirebaseAuthStoreError extends Error { +class FirebaseAuthStoreError extends Error { constructor(message: string) { super(message) this.name = 'FirebaseAuthStoreError' diff --git a/src/stores/nodeBookmarkStore.ts b/src/stores/nodeBookmarkStore.ts index 8720e6f7d..e3eb22d86 100644 --- a/src/stores/nodeBookmarkStore.ts +++ b/src/stores/nodeBookmarkStore.ts @@ -10,7 +10,7 @@ import { ComfyNodeDefImpl, createDummyFolderNodeDef } from './nodeDefStore' import { buildNodeDefTree } from './nodeDefStore' import { useSettingStore } from './settingStore' -export const BOOKMARK_SETTING_ID = 'Comfy.NodeLibrary.Bookmarks.V2' +const BOOKMARK_SETTING_ID = 'Comfy.NodeLibrary.Bookmarks.V2' export const useNodeBookmarkStore = defineStore('nodeBookmark', () => { const settingStore = useSettingStore() diff --git a/src/stores/nodeDefStore.ts b/src/stores/nodeDefStore.ts index 32f74d313..f13d921e2 100644 --- a/src/stores/nodeDefStore.ts +++ b/src/stores/nodeDefStore.ts @@ -224,7 +224,7 @@ export const SYSTEM_NODE_DEFS: Record = { } } -export interface BuildNodeDefTreeOptions { +interface BuildNodeDefTreeOptions { /** * Custom function to extract the tree path from a node definition. * If not provided, uses the default path based on nodeDef.nodePath. diff --git a/src/stores/queueStore.ts b/src/stores/queueStore.ts index 83133aa5e..4369f2782 100644 --- a/src/stores/queueStore.ts +++ b/src/stores/queueStore.ts @@ -18,7 +18,7 @@ import { useExtensionService } from '@/services/extensionService' import { useNodeOutputStore } from '@/stores/imagePreviewStore' // Task type used in the API. -export type APITaskType = 'queue' | 'history' +type APITaskType = 'queue' | 'history' export enum TaskItemDisplayStatus { Running = 'Running', diff --git a/src/stores/serverConfigStore.ts b/src/stores/serverConfigStore.ts index afb822cf7..3781d0ab5 100644 --- a/src/stores/serverConfigStore.ts +++ b/src/stores/serverConfigStore.ts @@ -3,7 +3,7 @@ import { computed, ref } from 'vue' import { ServerConfig, ServerConfigValue } from '@/constants/serverConfig' -export type ServerConfigWithValue = ServerConfig & { +type ServerConfigWithValue = ServerConfig & { /** * Current value. */ diff --git a/src/stores/userFileStore.ts b/src/stores/userFileStore.ts index e7c8728f0..383bab6b0 100644 --- a/src/stores/userFileStore.ts +++ b/src/stores/userFileStore.ts @@ -182,7 +182,7 @@ export class UserFile { } } -export interface LoadedUserFile extends UserFile { +interface LoadedUserFile extends UserFile { isLoaded: true originalContent: string content: string diff --git a/src/stores/workflowStore.ts b/src/stores/workflowStore.ts index 8f11da1e2..b0c8e8b37 100644 --- a/src/stores/workflowStore.ts +++ b/src/stores/workflowStore.ts @@ -148,7 +148,7 @@ export interface LoadedComfyWorkflow extends ComfyWorkflow { * error TS7056: The inferred type of this node exceeds the maximum length the * compiler will serialize. An explicit type annotation is needed. */ -export interface WorkflowStore { +interface WorkflowStore { activeWorkflow: LoadedComfyWorkflow | null attachWorkflow: (workflow: ComfyWorkflow, openIndex?: number) => void isActive: (workflow: ComfyWorkflow) => boolean diff --git a/src/types/buttonTypes.ts b/src/types/buttonTypes.ts index 97e936946..2d39d64d9 100644 --- a/src/types/buttonTypes.ts +++ b/src/types/buttonTypes.ts @@ -1,8 +1,8 @@ import type { HTMLAttributes } from 'vue' export type ButtonSize = 'fit-content' | 'sm' | 'md' -export type ButtonType = 'primary' | 'secondary' | 'transparent' -export type ButtonBorder = boolean +type ButtonType = 'primary' | 'secondary' | 'transparent' +type ButtonBorder = boolean export interface BaseButtonProps { size?: ButtonSize diff --git a/src/types/comfy.ts b/src/types/comfy.ts index 622753357..491380f85 100644 --- a/src/types/comfy.ts +++ b/src/types/comfy.ts @@ -9,7 +9,7 @@ import type { ComfyCommand } from '@/stores/commandStore' import type { BottomPanelExtension } from '@/types/extensionTypes' import type { SettingParams } from '@/types/settingTypes' -export type Widgets = Record +type Widgets = Record export interface AboutPageBadge { label: string @@ -17,7 +17,7 @@ export interface AboutPageBadge { icon: string } -export type MenuCommandGroup = { +type MenuCommandGroup = { /** * The path to the menu group. */ diff --git a/src/types/extensionTypes.ts b/src/types/extensionTypes.ts index c1a9e9c2a..0ba93043b 100644 --- a/src/types/extensionTypes.ts +++ b/src/types/extensionTypes.ts @@ -3,7 +3,7 @@ import { Component } from 'vue' import type { useDialogService } from '@/services/dialogService' import type { ComfyCommand } from '@/stores/commandStore' -export interface BaseSidebarTabExtension { +interface BaseSidebarTabExtension { id: string title: string icon?: string | Component @@ -12,7 +12,7 @@ export interface BaseSidebarTabExtension { label?: string } -export interface BaseBottomPanelExtension { +interface BaseBottomPanelExtension { id: string title?: string // For extensions that provide static titles titleKey?: string // For core tabs with i18n keys @@ -32,16 +32,14 @@ export interface CustomExtension { destroy?: () => void } -export type VueSidebarTabExtension = BaseSidebarTabExtension & VueExtension -export type CustomSidebarTabExtension = BaseSidebarTabExtension & - CustomExtension +type VueSidebarTabExtension = BaseSidebarTabExtension & VueExtension +type CustomSidebarTabExtension = BaseSidebarTabExtension & CustomExtension export type SidebarTabExtension = | VueSidebarTabExtension | CustomSidebarTabExtension -export type VueBottomPanelExtension = BaseBottomPanelExtension & VueExtension -export type CustomBottomPanelExtension = BaseBottomPanelExtension & - CustomExtension +type VueBottomPanelExtension = BaseBottomPanelExtension & VueExtension +type CustomBottomPanelExtension = BaseBottomPanelExtension & CustomExtension export type BottomPanelExtension = | VueBottomPanelExtension | CustomBottomPanelExtension diff --git a/src/types/importFailedTypes.ts b/src/types/importFailedTypes.ts index d12bb1427..a45d95e92 100644 --- a/src/types/importFailedTypes.ts +++ b/src/types/importFailedTypes.ts @@ -1,6 +1,6 @@ import type { ComputedRef, InjectionKey } from 'vue' -export interface ImportFailedContext { +interface ImportFailedContext { importFailed: ComputedRef showImportFailedDialog: () => void } diff --git a/src/types/metadataTypes.ts b/src/types/metadataTypes.ts index c63324196..f4989c3c1 100644 --- a/src/types/metadataTypes.ts +++ b/src/types/metadataTypes.ts @@ -66,7 +66,7 @@ export type GltfChunkHeader = { chunkTypeIdentifier: number } -export type GltfExtras = { +type GltfExtras = { workflow?: string | object prompt?: string | object [key: string]: any @@ -112,12 +112,12 @@ export type AvifIinfBox = { entries: AvifInfeBox[] } -export type AvifIlocItemExtent = { +type AvifIlocItemExtent = { extent_offset: number extent_length: number } -export type AvifIlocItem = { +type AvifIlocItem = { item_ID: number data_reference_index: number base_offset: number diff --git a/src/types/nodeDefAugmentation.ts b/src/types/nodeDefAugmentation.ts index 74a976afc..5dad8ee73 100644 --- a/src/types/nodeDefAugmentation.ts +++ b/src/types/nodeDefAugmentation.ts @@ -11,7 +11,7 @@ import type { ComboInputOptions, InputSpec } from '@/schemas/nodeDefSchema' * Frontend augmentation for image upload combo inputs. * This extends ComboInputOptions with properties injected by the uploadImage extension. */ -export interface ImageUploadComboOptions extends ComboInputOptions { +interface ImageUploadComboOptions extends ComboInputOptions { /** * Reference to the associated filename combo widget. * Injected by uploadImage.ts to link upload buttons with their combo widgets. diff --git a/src/types/settingTypes.ts b/src/types/settingTypes.ts index 47b3a8a36..08453bde9 100644 --- a/src/types/settingTypes.ts +++ b/src/types/settingTypes.ts @@ -1,6 +1,6 @@ import type { Settings } from '@/schemas/apiSchema' -export type SettingInputType = +type SettingInputType = | 'boolean' | 'number' | 'slider' @@ -13,7 +13,7 @@ export type SettingInputType = | 'hidden' | 'backgroundImage' -export type SettingCustomRenderer = ( +type SettingCustomRenderer = ( name: string, setter: (v: any) => void, value: any, diff --git a/src/utils/formatUtil.ts b/src/utils/formatUtil.ts index 7f9ba3582..b89b28456 100644 --- a/src/utils/formatUtil.ts +++ b/src/utils/formatUtil.ts @@ -83,7 +83,7 @@ export function formatSize(value?: number) { * - filename: 'file' * - suffix: 'txt' */ -export function getFilenameDetails(fullFilename: string) { +function getFilenameDetails(fullFilename: string) { if (fullFilename.includes('.')) { return { filename: fullFilename.split('.').slice(0, -1).join('.'), @@ -479,7 +479,7 @@ export function formatVersionAnchor(version: string): string { /** * Supported locale types for the application (from OpenAPI schema) */ -export type SupportedLocale = NonNullable< +type SupportedLocale = NonNullable< operations['getReleaseNotes']['parameters']['query']['locale'] > diff --git a/src/utils/graphTraversalUtil.ts b/src/utils/graphTraversalUtil.ts index fa9e436ec..72f6f3733 100644 --- a/src/utils/graphTraversalUtil.ts +++ b/src/utils/graphTraversalUtil.ts @@ -394,7 +394,7 @@ export function getAllNonIoNodesInSubgraph(subgraph: Subgraph): LGraphNode[] { /** * Options for traverseNodesDepthFirst function */ -export interface TraverseNodesOptions { +interface TraverseNodesOptions { /** Function called for each node during traversal */ visitor?: (node: LGraphNode, context: T) => T /** Initial context value */ @@ -449,7 +449,7 @@ export function traverseNodesDepthFirst( /** * Options for collectFromNodes function */ -export interface CollectFromNodesOptions { +interface CollectFromNodesOptions { /** Function that returns data to collect for each node */ collector?: (node: LGraphNode, context: C) => T | null /** Function that builds context for child nodes */ diff --git a/src/utils/linkFixer.ts b/src/utils/linkFixer.ts index 125e450ee..1c26afb29 100644 --- a/src/utils/linkFixer.ts +++ b/src/utils/linkFixer.ts @@ -32,7 +32,7 @@ import type { ISerialisedNode } from '@/lib/litegraph/src/types/serialisation' -export interface BadLinksData { +interface BadLinksData { hasBadLinks: boolean fixed: boolean graph: T diff --git a/src/utils/mathUtil.ts b/src/utils/mathUtil.ts index c8645363f..2fb74e1cf 100644 --- a/src/utils/mathUtil.ts +++ b/src/utils/mathUtil.ts @@ -5,7 +5,7 @@ * @param b - The second number. * @returns The GCD of the two numbers. */ -export const gcd = (a: number, b: number): number => { +const gcd = (a: number, b: number): number => { return b === 0 ? a : gcd(b, a % b) } diff --git a/src/utils/tailwindUtil.ts b/src/utils/tailwindUtil.ts index 39124c768..78e3a3d1a 100644 --- a/src/utils/tailwindUtil.ts +++ b/src/utils/tailwindUtil.ts @@ -1,7 +1,7 @@ import clsx, { type ClassArray } from 'clsx' import { twMerge } from 'tailwind-merge' -export type { ClassValue, ClassArray, ClassDictionary } from 'clsx' +export type { ClassValue } from 'clsx' export function cn(...inputs: ClassArray) { return twMerge(clsx(inputs)) diff --git a/src/utils/treeUtil.ts b/src/utils/treeUtil.ts index 788f47e89..21f1e45d6 100644 --- a/src/utils/treeUtil.ts +++ b/src/utils/treeUtil.ts @@ -129,7 +129,7 @@ export const findNodeByKey = ( * @param node - The node to clone. * @returns A deep clone of the node. */ -export function cloneTree(node: T): T { +function cloneTree(node: T): T { const clone = { ...node } // Clone children recursively diff --git a/tests-ui/tests/litegraph/subgraph/fixtures/subgraphFixtures.ts b/tests-ui/tests/litegraph/subgraph/fixtures/subgraphFixtures.ts index 88a3db3fb..b90a781e2 100644 --- a/tests-ui/tests/litegraph/subgraph/fixtures/subgraphFixtures.ts +++ b/tests-ui/tests/litegraph/subgraph/fixtures/subgraphFixtures.ts @@ -16,7 +16,7 @@ import { createTestSubgraphNode } from './subgraphHelpers' -export interface SubgraphFixtures { +interface SubgraphFixtures { /** A minimal subgraph with no inputs, outputs, or nodes */ emptySubgraph: Subgraph diff --git a/tests-ui/tests/litegraph/subgraph/fixtures/subgraphHelpers.ts b/tests-ui/tests/litegraph/subgraph/fixtures/subgraphHelpers.ts index 4a3bd6c11..736f979d3 100644 --- a/tests-ui/tests/litegraph/subgraph/fixtures/subgraphHelpers.ts +++ b/tests-ui/tests/litegraph/subgraph/fixtures/subgraphHelpers.ts @@ -17,7 +17,7 @@ import type { import type { UUID } from '@/lib/litegraph/src/utils/uuid' import { createUuidv4 } from '@/lib/litegraph/src/utils/uuid' -export interface TestSubgraphOptions { +interface TestSubgraphOptions { id?: UUID name?: string nodeCount?: number @@ -27,20 +27,20 @@ export interface TestSubgraphOptions { outputs?: Array<{ name: string; type: ISlotType }> } -export interface TestSubgraphNodeOptions { +interface TestSubgraphNodeOptions { id?: NodeId pos?: [number, number] size?: [number, number] } -export interface NestedSubgraphOptions { +interface NestedSubgraphOptions { depth?: number nodesPerLevel?: number inputsPerSubgraph?: number outputsPerSubgraph?: number } -export interface SubgraphStructureExpectation { +interface SubgraphStructureExpectation { inputCount?: number outputCount?: number nodeCount?: number @@ -49,7 +49,7 @@ export interface SubgraphStructureExpectation { hasOutputNode?: boolean } -export interface CapturedEvent { +interface CapturedEvent { type: string detail: T timestamp: number @@ -422,6 +422,3 @@ export function createEventCapture( capturedEvents.filter((e) => e.type === type) } } - -// Re-export expect from vitest for convenience -export { expect } from 'vitest'