Skip to content

Conversation

@DrJKL
Copy link
Contributor

@DrJKL DrJKL commented Dec 10, 2025

Summary

Updates for the linter/formatter deps, turning on some more rules.

┆Issue is synchronized with this Notion page by Unito

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 10, 2025

📝 Walkthrough

Walkthrough

This PR makes linting/config updates and dependency bumps, removes numerous unused Vue component props/events/refs, consolidates dynamic import formatting, reformats TypeScript generic/class signatures, and adjusts related tests and stylelint settings. No new features or runtime behavior changes are introduced.

Changes

Cohort / File(s) Summary
ESLint & Linting Configuration
/.oxlintrc.json, eslint.config.ts, /.stylelintrc.json
Added top-level plugins and several new rules in .oxlintrc.json; enabled/expanded Vue rules and added oxlint import overrides in eslint.config.ts; updated stylelint rule mappings and ignoreFunctions formatting.
Dependency Upgrades
pnpm-workspace.yaml
Bumped ESLint, eslint-plugin-vue, typescript, typescript-eslint, oxlint, prettier, vue-tsc, lint-staged and other linting/tooling package versions.
Vue Component Prop Removals
src/components/..., src/platform/assets/..., src/renderer/extensions/vueNodes/...
Removed many unused/optional props across components (examples: commands, defaultValue, widget, runningNodeName, isShown, class, inputName, close, context, zoomLevel, readonly, files, modelValue).
Event & Ref Removals
src/components/common/EditableText.vue, src/components/graph/GraphCanvasMenu.vue, src/components/load3d/Load3DControls.vue, src/platform/assets/components/MediaVideoTop.vue, src/renderer/.../AudioPreviewPlayer.vue
Removed emitted events (update:modelValue, play) and unused ref bindings (e.g., zoomButton, minimapButton, various control refs, videoRef, optionsButtonRef).
Static Binding Simplifications
src/components/breadcrumb/SubgraphBreadcrumbItem.vue, src/components/dialog/content/ErrorDialogContent.vue, src/components/graph/selectionToolbox/NodeOptions.vue, src/components/searchbox/NodeSearchBox.vue, src/platform/assets/components/MediaAssetSortButton.vue
Replaced bound literal expressions with static attribute literals (e.g., :value="'Blueprint'"value="Blueprint", :append-to="'body'"append-to="body").
Type/Signature Formatting
src/lib/litegraph/src/*, src/scripts/domWidget.ts, src/stores/electronDownloadStore.ts
Reformatted generic parameter blocks, class/interface signatures, and extends/implements clauses across multiple files (stylistic only; no semantic changes).
Dynamic Import Formatting
src/main.ts, src/platform/..., src/router.ts, src/services/dialogService.ts, src/workbench/..., tests-ui/tests/...
Consolidated numerous multi-line dynamic import(...) calls into single-line imports across source and test files.
Tests & Minor UI Adjustments
tests-ui/tests/..., src/components/queue/job/QueueJobItem.stories.ts, src/components/graph/GraphCanvas.vue, src/components/queue/CompletionSummaryBanner.vue, src/components/ui/slider/Slider.vue
Removed test assertions tied to deleted props, added ESLint directives, adjusted class attributes and small template/formatting tweaks; removed AssetContext imports where props were deleted.

Possibly related PRs

✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch drjkl/no-doze

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@github-actions
Copy link

github-actions bot commented Dec 10, 2025

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 12/10/2025, 06:52:55 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Dec 10, 2025

🎭 Playwright Test Results

⚠️ Tests passed with flaky tests

⏰ Completed at: 12/10/2025, 07:03:48 AM UTC

📈 Summary

  • Total Tests: 493
  • Passed: 477 ✅
  • Failed: 0
  • Flaky: 7 ⚠️
  • Skipped: 9 ⏭️

📊 Test Reports by Browser

  • chromium: View Report • ✅ 468 / ❌ 0 / ⚠️ 7 / ⏭️ 9
  • chromium-2x: View Report • ✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • chromium-0.5x: View Report • ✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0
  • mobile-chrome: View Report • ✅ 6 / ❌ 0 / ⚠️ 0 / ⏭️ 0

🎉 Click on the links above to view detailed test results for each browser configuration.

@socket-security
Copy link

socket-security bot commented Dec 10, 2025

Review the following changes in direct dependencies. Learn more about Socket for GitHub.

Diff Package Supply Chain
Security
Vulnerability Quality Maintenance License
Updated@​iconify-json/​lucide@​1.2.66 ⏵ 1.2.79100 +110079 +296 +1100
Updatedeslint-plugin-unused-imports@​4.2.0 ⏵ 4.3.0100 +110090 +185100
Updated@​prettier/​plugin-oxc@​0.0.4 ⏵ 0.1.397 -310086 +197100 +20
Updatedeslint-plugin-vue@​10.4.0 ⏵ 10.6.296 -310091 +196 +4100
Updated@​eslint/​js@​9.35.0 ⏵ 9.39.1100100100 +1095100
Updatedeslint@​9.35.0 ⏵ 9.39.197 +110010095100
Updatedeslint-plugin-storybook@​9.1.6 ⏵ 9.1.16100 +110010099 +1100

View full report

@github-actions
Copy link

github-actions bot commented Dec 10, 2025

Bundle Size Report

Summary

  • Raw size: 17.1 MB baseline 17.1 MB — 🟢 -942 B
  • Gzip: 3.39 MB baseline 3.39 MB — 🟢 -205 B
  • Brotli: 2.6 MB baseline 2.6 MB — 🔴 +40 B
  • Bundles: 97 current • 97 baseline • 38 added / 38 removed

Category Glance
Other 🟢 -345 B (3.81 MB) · UI Components 🟢 -213 B (178 kB) · Graph Workspace 🟢 -210 B (991 kB) · App Entry Points 🟢 -174 B (3.22 MB) · Vendor & Third-Party ⚪ 0 B (8.56 MB) · Panels & Settings ⚪ 0 B (298 kB) · + 3 more

Per-category breakdown
App Entry Points — 3.22 MB (baseline 3.23 MB) • 🟢 -174 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-Dm41XDSv.js (removed) 3 MB 🟢 -3 MB 🟢 -624 kB 🟢 -474 kB
assets/index-CWksovAH.js (new) 3 MB 🔴 +3 MB 🔴 +624 kB 🔴 +474 kB
assets/index-BeuGS11Y.js (new) 223 kB 🔴 +223 kB 🔴 +47.6 kB 🔴 +39.3 kB
assets/index-ClNUnPDR.js (removed) 223 kB 🟢 -223 kB 🟢 -47.6 kB 🟢 -39.2 kB
assets/index-Cfml2s_M.js (removed) 345 B 🟢 -345 B 🟢 -245 B 🟢 -229 B
assets/index-DILMmlmq.js (new) 345 B 🔴 +345 B 🔴 +244 B 🔴 +197 B

Status: 3 added / 3 removed

Graph Workspace — 991 kB (baseline 991 kB) • 🟢 -210 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-Bo21bf-c.js (removed) 991 kB 🟢 -991 kB 🟢 -192 kB 🟢 -146 kB
assets/GraphView-D50tV8vS.js (new) 991 kB 🔴 +991 kB 🔴 +192 kB 🔴 +146 kB

Status: 1 added / 1 removed

Views & Navigation — 6.54 kB (baseline 6.54 kB) • ⚪ 0 B

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/UserSelectView-DQS2_jOC.js (new) 6.54 kB 🔴 +6.54 kB 🔴 +2.14 kB 🔴 +1.89 kB
assets/UserSelectView-DUhBlbKH.js (removed) 6.54 kB 🟢 -6.54 kB 🟢 -2.14 kB 🟢 -1.89 kB

Status: 1 added / 1 removed

Panels & Settings — 298 kB (baseline 298 kB) • ⚪ 0 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/LegacyCreditsPanel-BgO2oRw2.js (removed) 21.4 kB 🟢 -21.4 kB 🟢 -5.15 kB 🟢 -4.5 kB
assets/LegacyCreditsPanel-f1mmudLa.js (new) 21.4 kB 🔴 +21.4 kB 🔴 +5.15 kB 🔴 +4.5 kB
assets/KeybindingPanel-CqcSB4NQ.js (removed) 13.6 kB 🟢 -13.6 kB 🟢 -3.42 kB 🟢 -3.02 kB
assets/KeybindingPanel-DV3R5uV2.js (new) 13.6 kB 🔴 +13.6 kB 🔴 +3.42 kB 🔴 +3.01 kB
assets/ExtensionPanel-DWX6M-RL.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.58 kB 🔴 +2.26 kB
assets/ExtensionPanel-DXTJVaM1.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.58 kB 🟢 -2.26 kB
assets/AboutPanel-DMoOLIcl.js (new) 9.16 kB 🔴 +9.16 kB 🔴 +2.46 kB 🔴 +2.21 kB
assets/AboutPanel-OMMWMbI-.js (removed) 9.16 kB 🟢 -9.16 kB 🟢 -2.46 kB 🟢 -2.21 kB
assets/ServerConfigPanel-C9HTa48y.js (removed) 6.56 kB 🟢 -6.56 kB 🟢 -1.83 kB 🟢 -1.63 kB
assets/ServerConfigPanel-DD55Ts1R.js (new) 6.56 kB 🔴 +6.56 kB 🔴 +1.83 kB 🔴 +1.63 kB
assets/UserPanel-BLjWaRfo.js (removed) 6.23 kB 🟢 -6.23 kB 🟢 -1.72 kB 🟢 -1.51 kB
assets/UserPanel-D_EH2p51.js (new) 6.23 kB 🔴 +6.23 kB 🔴 +1.72 kB 🔴 +1.51 kB
assets/settings-BhbWhsRg.js 101 B 101 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BXTtSH4O.js 33.3 kB 33.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-C9Pzn-NG.js 25.2 kB 25.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CCy2fA_h.js 27.3 kB 27.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CQpqEFfl.js 26.6 kB 26.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DHcnxypw.js 21.7 kB 21.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DhFTK9fY.js 25.1 kB 25.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DlT4t_ui.js 25.9 kB 25.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DRgSrIdD.js 24.2 kB 24.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-tjkeqiZq.js 21.1 kB 21.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

UI Components — 178 kB (baseline 178 kB) • 🟢 -213 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/Load3D.vue_vue_type_script_setup_true_lang-CiRi-4uT.js (removed) 53.9 kB 🟢 -53.9 kB 🟢 -8.52 kB 🟢 -7.32 kB
assets/Load3D.vue_vue_type_script_setup_true_lang-CCDgFwWC.js (new) 53.7 kB 🔴 +53.7 kB 🔴 +8.49 kB 🔴 +7.3 kB
assets/WidgetSelect.vue_vue_type_script_setup_true_lang-D1gvAWW9.js (removed) 48.1 kB 🟢 -48.1 kB 🟢 -10.4 kB 🟢 -9 kB
assets/WidgetSelect.vue_vue_type_script_setup_true_lang-DtHeVqq-.js (new) 48.1 kB 🔴 +48.1 kB 🔴 +10.4 kB 🔴 +8.99 kB
assets/LazyImage.vue_vue_type_script_setup_true_lang-B-w-htS6.js (removed) 48 kB 🟢 -48 kB 🟢 -10.6 kB 🟢 -9.31 kB
assets/LazyImage.vue_vue_type_script_setup_true_lang-DEMl7c7J.js (new) 48 kB 🔴 +48 kB 🔴 +10.7 kB 🔴 +9.32 kB
assets/WidgetInputNumber.vue_vue_type_script_setup_true_lang-DeduSTf4.js (removed) 12.9 kB 🟢 -12.9 kB 🟢 -3.37 kB 🟢 -2.98 kB
assets/WidgetInputNumber.vue_vue_type_script_setup_true_lang-V_WGmSs1.js (new) 12.9 kB 🔴 +12.9 kB 🔴 +3.37 kB 🔴 +2.96 kB
assets/ComfyQueueButton-BavR1lwg.js (new) 8.44 kB 🔴 +8.44 kB 🔴 +2.48 kB 🔴 +2.21 kB
assets/ComfyQueueButton-D6d4ALev.js (removed) 8.44 kB 🟢 -8.44 kB 🟢 -2.47 kB 🟢 -2.21 kB
assets/MediaTitle.vue_vue_type_script_setup_true_lang-C8b_xMrZ.js (removed) 897 B 🟢 -897 B 🟢 -502 B 🟢 -428 B
assets/MediaTitle.vue_vue_type_script_setup_true_lang-WgDbpArX.js (new) 897 B 🔴 +897 B 🔴 +504 B 🔴 +430 B
assets/UserAvatar.vue_vue_type_script_setup_true_lang-BkTMAMst.js 1.34 kB 1.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-CMkR1knv.js 2.04 kB 2.04 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField.vue_vue_type_script_setup_true_lang-6ZIklFyS.js 2.26 kB 2.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 6 added / 6 removed

Data & Services — 12.5 kB (baseline 12.5 kB) • ⚪ 0 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/keybindingService-BJ_ZhJJ6.js (removed) 7.51 kB 🟢 -7.51 kB 🟢 -1.84 kB 🟢 -1.58 kB
assets/keybindingService-C1uOSEum.js (new) 7.51 kB 🔴 +7.51 kB 🔴 +1.83 kB 🔴 +1.58 kB
assets/audioService-CiL4aYAj.js (new) 2.2 kB 🔴 +2.2 kB 🔴 +962 B 🔴 +826 B
assets/audioService-DlUWzpC1.js (removed) 2.2 kB 🟢 -2.2 kB 🟢 -963 B 🟢 -829 B
assets/serverConfigStore-L3qzi_1Z.js 2.83 kB 2.83 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 2 added / 2 removed

Utilities & Hooks — 3.18 kB (baseline 3.18 kB) • ⚪ 0 B

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/audioUtils-AYLaJW7-.js (new) 1.41 kB 🔴 +1.41 kB 🔴 +652 B 🔴 +547 B
assets/audioUtils-CBaUlfuX.js (removed) 1.41 kB 🟢 -1.41 kB 🟢 -650 B 🟢 -548 B
assets/mathUtil-CD4DsosH.js 1.32 kB 1.32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeFilterUtil-CXKCRJ-m.js 460 B 460 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 1 added / 1 removed

Vendor & Third-Party — 8.56 MB (baseline 8.56 MB) • ⚪ 0 B

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-chart-DJFoH6N_.js 452 kB 452 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-BZV8aGUB.js 3.98 MB 3.98 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-CkvDSSUa.js 1.96 MB 1.96 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-aR6ntw5X.js 1.37 MB 1.37 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-Cmu0_BY4.js 232 kB 232 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-Bz22sFex.js 160 kB 160 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-BZLod3g9.js 407 kB 407 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 3.81 MB (baseline 3.81 MB) • 🟢 -345 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/WidgetRecordAudio-DsLvAwDI.js (removed) 20.4 kB 🟢 -20.4 kB 🟢 -5.24 kB 🟢 -4.63 kB
assets/WidgetRecordAudio-NNETkfP6.js (new) 20.4 kB 🔴 +20.4 kB 🔴 +5.23 kB 🔴 +4.63 kB
assets/AudioPreviewPlayer-BlJ2_SAF.js (removed) 13.5 kB 🟢 -13.5 kB 🟢 -3.4 kB 🟢 -3.03 kB
assets/AudioPreviewPlayer-CgLjdOc3.js (new) 13.4 kB 🔴 +13.4 kB 🔴 +3.37 kB 🔴 +3.01 kB
assets/WidgetGalleria-BPgrdJFb.js (removed) 4.1 kB 🟢 -4.1 kB 🟢 -1.45 kB 🟢 -1.31 kB
assets/WidgetGalleria-HvGJc_pe.js (new) 4.1 kB 🔴 +4.1 kB 🔴 +1.44 kB 🔴 +1.3 kB
assets/WidgetColorPicker-Ckbs9Z0j.js (new) 3.41 kB 🔴 +3.41 kB 🔴 +1.38 kB 🔴 +1.23 kB
assets/WidgetColorPicker-wkbF2Nxz.js (removed) 3.41 kB 🟢 -3.41 kB 🟢 -1.38 kB 🟢 -1.23 kB
assets/WidgetMarkdown-C2SvrvoL.js (removed) 3.08 kB 🟢 -3.08 kB 🟢 -1.28 kB 🟢 -1.13 kB
assets/WidgetMarkdown-D3aNTKFT.js (new) 3.08 kB 🔴 +3.08 kB 🔴 +1.28 kB 🔴 +1.13 kB
assets/WidgetTextarea-CqvNrZjU.js (removed) 2.93 kB 🟢 -2.93 kB 🟢 -1.17 kB 🟢 -1.04 kB
assets/WidgetTextarea-D8mn-aQq.js (new) 2.93 kB 🔴 +2.93 kB 🔴 +1.17 kB 🔴 +1.05 kB
assets/WidgetAudioUI-DF4w_Q7Z.js (new) 2.85 kB 🔴 +2.85 kB 🔴 +1.17 kB 🔴 +1.05 kB
assets/WidgetAudioUI-QTzGiM2D.js (removed) 2.85 kB 🟢 -2.85 kB 🟢 -1.16 kB 🟢 -1.05 kB
assets/MediaVideoTop-ehTZdDBw.js (removed) 2.76 kB 🟢 -2.76 kB 🟢 -1.05 kB 🟢 -901 B
assets/MediaVideoTop-C7srdKNW.js (new) 2.65 kB 🔴 +2.65 kB 🔴 +1.02 kB 🔴 +873 B
assets/WidgetInputText-DJeyGUhY.js (new) 1.99 kB 🔴 +1.99 kB 🔴 +917 B 🔴 +855 B
assets/WidgetInputText-DY9jLCz-.js (removed) 1.99 kB 🟢 -1.99 kB 🟢 -916 B 🟢 -861 B
assets/MediaImageBottom-CUByQios.js (removed) 1.57 kB 🟢 -1.57 kB 🟢 -739 B 🟢 -645 B
assets/MediaImageBottom-DajgFJ3C.js (new) 1.55 kB 🔴 +1.55 kB 🔴 +735 B 🔴 +639 B
assets/MediaAudioBottom-9p8FOGld.js (removed) 1.52 kB 🟢 -1.52 kB 🟢 -740 B 🟢 -656 B
assets/MediaVideoBottom-D3LGmjHu.js (removed) 1.52 kB 🟢 -1.52 kB 🟢 -739 B 🟢 -657 B
assets/MediaAudioBottom-Vh8kzacD.js (new) 1.51 kB 🔴 +1.51 kB 🔴 +733 B 🔴 +653 B
assets/Media3DBottom-C3rR-fw7.js (removed) 1.5 kB 🟢 -1.5 kB 🟢 -733 B 🟢 -652 B
assets/Media3DBottom-D9racYh8.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +730 B 🔴 +652 B
assets/MediaVideoBottom-ikgww0Kz.js (new) 1.5 kB 🔴 +1.5 kB 🔴 +732 B 🔴 +650 B
assets/Media3DTop-DPcqhCxV.js (new) 1.49 kB 🔴 +1.49 kB 🔴 +766 B 🔴 +655 B
assets/Media3DTop-hdkMYmE0.js (removed) 1.49 kB 🟢 -1.49 kB 🟢 -764 B 🟢 -654 B
assets/WidgetSelect-B_dITAzA.js (removed) 655 B 🟢 -655 B 🟢 -344 B 🟢 -289 B
assets/WidgetSelect-CkTOldKq.js (new) 655 B 🔴 +655 B 🔴 +343 B 🔴 +287 B
assets/WidgetInputNumber-DluH2Cn8.js (removed) 595 B 🟢 -595 B 🟢 -328 B 🟢 -277 B
assets/WidgetInputNumber-DXOul5I2.js (new) 595 B 🔴 +595 B 🔴 +330 B 🔴 +278 B
assets/Load3D-Cg763o6f.js (new) 424 B 🔴 +424 B 🔴 +267 B 🔴 +224 B
assets/Load3D-joHW0KZN.js (removed) 424 B 🟢 -424 B 🟢 -267 B 🟢 -223 B
assets/WidgetLegacy-DlgS5Lcl.js (removed) 364 B 🟢 -364 B 🟢 -237 B 🟢 -228 B
assets/WidgetLegacy-DZFSqT2L.js (new) 364 B 🔴 +364 B 🔴 +238 B 🔴 +224 B
assets/commands-_s-RvhJR.js 13.6 kB 13.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BuUILW6P.js 13 kB 13 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BV4R6fLx.js 14.9 kB 14.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BWp4HdfU.js 101 B 101 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CLwPdnT6.js 14.2 kB 14.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CWMchBmd.js 15.9 kB 15.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DazTQhtc.js 12.9 kB 12.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DmWrOe93.js 13.7 kB 13.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DwiH7Kr6.js 13.8 kB 13.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-mS3LCNPn.js 14.5 kB 14.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-B1JflQcI.js 72.2 kB 72.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-B2lyXe48.js 114 kB 114 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-B9XEQ-pc.js 94 kB 94 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BErKFzc-.js 73.1 kB 73.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Bf7Tze-u.js 83.4 kB 83.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BhGMcO4Q.js 84.3 kB 84.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CPZUloNQ.js 99 kB 99 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Cw9RZWRY.js 89 B 89 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Dva0z-T2.js 86.5 kB 86.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-un0K9wDS.js 81.8 kB 81.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-BPDWO8-i.js 1.46 kB 1.46 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-BtY1hGDO.js 1.75 kB 1.75 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BC3OlaIn.js 342 kB 342 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BsqN8-W1.js 285 kB 285 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Bw_Jitw_.js 101 B 101 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CK2saYDx.js 307 kB 307 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Cm5kR4Hi.js 306 kB 306 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CMrh-uxB.js 310 kB 310 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DlUIOit1.js 369 kB 369 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DNu_xoP2.js 282 kB 282 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DpcvlpZe.js 303 kB 303 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-IyjOYIl-.js 317 kB 317 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-DhnqAfj7.js 2.48 kB 2.48 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-DFci1T8T.js 2.21 kB 2.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-BIbGSUAt.js 1.28 kB 1.28 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-D6b0vE-q.js 1.58 kB 1.58 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 18 added / 18 removed

@DrJKL DrJKL changed the title WIP: Linter updates Devex: Linter updates Dec 10, 2025
@DrJKL DrJKL marked this pull request as ready for review December 10, 2025 05:04
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Dec 10, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
src/stores/electronDownloadStore.ts (1)

33-33: Use standard "TODO" convention in comments.

Change ToDO to TODO to match standard conventions and improve searchability.

-      // ToDO: replace with ElectronDownload type
+      // TODO: replace with ElectronDownload type
src/components/queue/CompletionSummaryBanner.vue (1)

102-104: Replace withDefaults with Vue 3.5 reactive props destructuring.

As per coding guidelines, use Vue 3.5 TypeScript style for default prop declaration instead of withDefaults.

Apply this diff:

-const props = withDefaults(defineProps<Props>(), {
-  thumbnailUrls: () => []
-})
+const {
+  mode,
+  completedCount,
+  failedCount,
+  thumbnailUrls = [],
+  ariaLabel
+} = defineProps<Props>()

Then update template references from props.mode to mode, props.completedCount to completedCount, etc.

src/components/queue/job/QueueJobItem.stories.ts (1)

111-118: Gallery story still passes removed running-node-name prop

QueueJobItem no longer exposes a runningNodeName prop, but the Gallery story template still passes running-node-name="KSampler". This is now a stale attribute that won’t be used by the component and may confuse readers about the current API.

Consider removing it to keep stories in sync with the component:

-        <QueueJobItem
-          job-id="job-running-2"
-          state="running"
-          title="Generating image"
-          :progress-total-percent="66"
-          :progress-current-percent="10"
-          running-node-name="KSampler"
-          v-bind="args"
-        />
+        <QueueJobItem
+          job-id="job-running-2"
+          state="running"
+          title="Generating image"
+          :progress-total-percent="66"
+          :progress-current-percent="10"
+          v-bind="args"
+        />
src/lib/litegraph/src/interfaces.ts (1)

383-406: Align extra callback param type with TExtra

The multiline generic formatting for IContextMenuOptions looks good and keeps things within the configured line width. While you’re touching this block, consider tightening the callback signature so the extra argument matches the extra?: TExtra property and the IContextMenuValue callback:

   callback?(
     value?: string | IContextMenuValue<TValue>,
     options?: unknown,
     event?: MouseEvent,
     previous_menu?: ContextMenu<TValue>,
-    extra?: unknown
+    extra?: TExtra
   ): void | boolean | Promise<void | boolean>

This is a type-only improvement and can be done here or in a follow‑up, but it will give better type inference around context‑menu handlers.

Comment on lines +17 to 22
import type { AssetMeta } from '../schemas/mediaAssetSchema'
import MediaTitle from './MediaTitle.vue'
const { asset } = defineProps<{
asset: AssetMeta
context: AssetContext
}>()
Copy link
Contributor

@coderabbitai coderabbitai bot Dec 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
# Search for all MediaImageBottom component usages
rg -nP '(MediaImageBottom|import.*MediaImageBottom)' --type=vue --type=ts

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 97


🏁 Script executed:

#!/bin/bash
# Search for all MediaImageBottom component usages without type flag
rg 'MediaImageBottom' -A 5 --glob='*.vue' --glob='*.ts'

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 561


🏁 Script executed:

#!/bin/bash
# Read the MediaAssetCard.vue file to check prop usage
cat -n src/platform/assets/components/MediaAssetCard.vue

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 12078


🏁 Script executed:

#!/bin/bash
# Read MediaImageBottom.vue to verify current prop definitions
cat -n src/platform/assets/components/MediaImageBottom.vue

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 941


🏁 Script executed:

#!/bin/bash
# Check all media bottom components for their prop definitions
for file in src/platform/assets/components/Media*Bottom.vue; do
  echo "=== $file ==="
  grep -A 5 "defineProps" "$file"
done

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 866


🏁 Script executed:

#!/bin/bash
# Check all media top components for their prop definitions
for file in src/platform/assets/components/Media*Top.vue; do
  echo "=== $file ==="
  grep -A 5 "defineProps" "$file"
done

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 627


🏁 Script executed:

#!/bin/bash
# Search for provide/inject usage of context in the codebase
rg 'provide.*MediaAssetKey|inject.*MediaAssetKey' -A 3 -B 1

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 985


🏁 Script executed:

#!/bin/bash
# Search for inject usage in media components
rg 'inject.*MediaAssetKey' src/platform/assets/components/ -B 2 -A 3

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 52


Remove the context prop binding from both top and bottom component usages in MediaAssetCard.vue.

All media components (MediaImageBottom, MediaVideoBottom, MediaAudioBottom, Media3DBottom, and their Top counterparts) no longer accept a context prop. MediaAssetCard.vue still passes :context="{ type: assetType }" on lines 40 and 110, which must be removed. The context is available via the provide/inject pattern if needed, but the components do not currently consume it.

🤖 Prompt for AI Agents
In src/platform/assets/components/MediaImageBottom.vue around lines 17-22 and
related media component usages, remove the now-unused context prop binding from
MediaAssetCard.vue where it passes :context="{ type: assetType }" (specifically
at lines 40 and 110); update both top and bottom component usages
(MediaImageBottom, MediaVideoBottom, MediaAudioBottom, Media3DBottom and their
Top counterparts) to stop passing the context prop so components receive context
via provide/inject when needed.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Strange I never saw a invalid prop warning in the console. What mechanism emits those warnings anyway?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@christian-byrne Vue's prop validation warnings are emitted by Vue's runtime during component instantiation in development mode only. Here's how it works:

Warning Mechanism:

  • Vue's runtime checks props passed to a component against its defineProps declaration
  • In development builds, Vue emits console warnings when:
    • A prop is passed but not declared in defineProps (extraneous prop warning)
    • A declared prop fails type validation
    • A required prop is missing

Why you might not have seen warnings:

  1. Production mode: Warnings are completely stripped from production builds for performance
  2. Component not rendered: If the parent component (MediaAssetCard) wasn't actually rendered/mounted in your testing, no validation would occur
  3. Timing: The warning only appears when the component instance is created - if you loaded the page before making changes, the old code wouldn't warn
  4. Build configuration: Some build tools or Vue configurations can suppress specific warnings
  5. Previously declared props: If the context prop was previously declared (which it was), Vue wouldn't warn about it being passed - it only warns about undeclared props being passed

In this case, since context was previously a valid declared prop and you're now removing it, the warning would only appear going forward when the parent still tries to pass it to components that no longer accept it. The linter caught this issue before runtime would have!


🧠 Learnings used
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.vue : In Vue Components, implement proper props and emits definitions

Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/components/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:45.616Z
Learning: Applies to src/components/**/*.vue : Define proper props and emits definitions in Vue components

Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-11-24T19:47:02.860Z
Learning: Applies to src/**/*.vue : Implement proper props and emits definitions

Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.vue : Prefer `useModel` to separately defining a prop and emit

Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.vue : Implement proper error handling in Vue components

Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/components/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:45.616Z
Learning: Applies to src/components/**/*.vue : Use provide/inject for dependency injection in Vue components

Learnt from: christian-byrne
Repo: Comfy-Org/ComfyUI_frontend PR: 6300
File: src/locales/en/main.json:774-780
Timestamp: 2025-12-09T04:35:40.491Z
Learning: In the Comfy-Org/ComfyUI_frontend repository, locale files other than `src/locales/en/main.json` are generated automatically on every release. Developers only need to add English (en) key/values in `src/locales/en/main.json` when making PRs; manual updates to other locale files (fr, ja, ko, ru, zh, zh-TW, es, ar, tr, etc.) are not required and should not be suggested in reviews.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The issue is that the media stuff is very clever with dynamic components that evade static analysis.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like the humans are having a chat. I'll hop back into my burrow for now. If you need me again, just tag @coderabbitai in a new comment, and I'll come hopping out!

@github-actions
Copy link

🔧 Auto-fixes Applied

This PR has been automatically updated to fix linting and formatting issues.

⚠️ Important: Your local branch is now behind. Run git pull before making additional changes to avoid conflicts.

Changes made:

  • ESLint auto-fixes
  • Prettier formatting

Copy link
Contributor

@christian-byrne christian-byrne left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

true,
{
"typesSyntax": {
"radial-gradient()": "| <any-value>"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What does this do to the plugin exactly?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a fix for an issue in the newer stylelint. (Not this one, but related)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The offending site is here

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Interesting

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

📜 Review details

Configuration used: CodeRabbit UI

Review profile: ASSERTIVE

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 39db445 and 78e1d2f.

📒 Files selected for processing (1)
  • eslint.config.ts (2 hunks)
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx,js,jsx,vue,json}

📄 CodeRabbit inference engine (AGENTS.md)

Code style: Use 2-space indentation, single quotes, no trailing semicolons, and 80-character line width (see .prettierrc)

Files:

  • eslint.config.ts
**/*.{ts,tsx,vue}

📄 CodeRabbit inference engine (AGENTS.md)

**/*.{ts,tsx,vue}: Imports must be sorted and grouped by plugin; run pnpm format before committing
Use TypeScript for type safety; never use any type - use proper TypeScript types
Never use as any type assertions; fix the underlying type issue instead
Use es-toolkit for utility functions
Write code that is expressive and self-documenting; avoid comments unless absolutely necessary; do not add or retain redundant comments
Keep functions short and functional
Minimize nesting in code (e.g., deeply nested if or for statements); apply the Arrow Anti-Pattern principle
Avoid mutable state; prefer immutability and assignment at point of declaration
Favor pure functions, especially testable ones

Files:

  • eslint.config.ts
🧠 Learnings (23)
📓 Common learnings
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.{ts,tsx,vue} : Imports must be sorted and grouped by plugin; run `pnpm format` before committing
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/lib/litegraph/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:56.371Z
Learning: Applies to src/lib/litegraph/**/*.{js,ts,jsx,tsx} : Run ESLint instead of manually figuring out whitespace fixes or other trivial style concerns using the `pnpm lint:fix` command
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.{ts,tsx,js,jsx,vue,json} : Code style: Use 2-space indentation, single quotes, no trailing semicolons, and 80-character line width (see `.prettierrc`)
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:34.324Z
Learning: Applies to src/**/*.{vue,ts,tsx} : Follow Vue 3 composition API style guide
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-11-24T19:47:02.860Z
Learning: Applies to src/**/*.vue : Follow Vue 3 style guide and naming conventions
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:34.324Z
Learning: Applies to src/**/*.{ts,tsx,vue} : Implement proper TypeScript types throughout the codebase
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.vue : Use Vue 3.5 TypeScript style for default prop declaration with reactive props destructuring; do not use `withDefaults` or runtime props declaration
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: CLAUDE.md:0-0
Timestamp: 2025-12-05T23:03:52.138Z
Learning: Run typecheck, lint, and format checks during development workflow
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:34.324Z
Learning: Applies to src/**/{components,composables}/**/*.{ts,tsx,vue} : Use vue-i18n for ALL user-facing strings by adding them to `src/locales/en/main.json`
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.{ts,tsx,vue} : Use es-toolkit for utility functions
📚 Learning: 2025-11-24T19:47:56.371Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/lib/litegraph/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:56.371Z
Learning: Applies to src/lib/litegraph/**/*.{js,ts,jsx,tsx} : Run ESLint instead of manually figuring out whitespace fixes or other trivial style concerns using the `pnpm lint:fix` command

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-11-24T19:47:34.324Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:34.324Z
Learning: Applies to src/**/*.{vue,ts,tsx} : Follow Vue 3 composition API style guide

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T20:22:23.581Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.{ts,tsx,vue} : Imports must be sorted and grouped by plugin; run `pnpm format` before committing

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T20:22:23.581Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.{ts,tsx,js,jsx,vue,json} : Code style: Use 2-space indentation, single quotes, no trailing semicolons, and 80-character line width (see `.prettierrc`)

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-11-24T19:47:34.324Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:34.324Z
Learning: Applies to src/**/*.{ts,tsx,vue} : Use es-toolkit for utility functions instead of other utility libraries

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-11-24T19:47:34.324Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:34.324Z
Learning: Applies to src/**/{components,composables}/**/*.{ts,tsx,vue} : Use vue-i18n for ALL user-facing strings by adding them to `src/locales/en/main.json`

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T20:22:23.581Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.{ts,tsx,vue} : Use es-toolkit for utility functions

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T20:22:23.581Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.vue : Implement proper error handling in Vue components

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T20:22:23.581Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.vue : Follow Vue 3 style guide and naming conventions

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-11-24T19:47:02.860Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-11-24T19:47:02.860Z
Learning: Applies to src/**/*.{vue,ts} : Implement proper error handling

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-11-24T19:47:02.860Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-11-24T19:47:02.860Z
Learning: Applies to src/**/*.vue : Follow Vue 3 style guide and naming conventions

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T20:22:23.581Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.vue : Use Vue 3 SFCs (Single File Components) with Composition API only; do not use Options API

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T20:22:23.581Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.vue : In Vue Components, implement proper props and emits definitions

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T20:22:23.581Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.test.ts : For Component testing, use Vue Test Utils and follow advice about making components easy to test

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T20:22:23.581Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.vue : Vue components must use `<script setup lang="ts">` for component logic

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-11-24T19:47:45.616Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/components/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:45.616Z
Learning: Applies to src/components/**/*.vue : Define proper props and emits definitions in Vue components

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T20:22:23.581Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.vue : Avoid new usage of PrimeVue components; prefer shadcn/vue or Reka UI instead

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T20:22:23.581Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.vue : Use Vue 3.5 TypeScript style for default prop declaration with reactive props destructuring; do not use `withDefaults` or runtime props declaration

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-11-24T19:47:02.860Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-11-24T19:47:02.860Z
Learning: Applies to src/**/*.vue : Use the Vue 3 Composition API instead of the Options API when writing Vue components (exception: when overriding or extending PrimeVue components for compatibility)

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T20:22:23.581Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: AGENTS.md:0-0
Timestamp: 2025-12-09T20:22:23.581Z
Learning: Applies to **/*.vue : Be judicious with addition of new refs or other state: prefer props, avoid redundant `computed`, and prefer `computed` over `watch`

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-11-24T19:47:34.324Z
Learnt from: CR
Repo: Comfy-Org/ComfyUI_frontend PR: 0
File: src/CLAUDE.md:0-0
Timestamp: 2025-11-24T19:47:34.324Z
Learning: Applies to src/**/*.{ts,tsx,vue} : Avoid using ts-expect-error; use proper TypeScript types instead

Applied to files:

  • eslint.config.ts
📚 Learning: 2025-12-09T03:39:54.501Z
Learnt from: DrJKL
Repo: Comfy-Org/ComfyUI_frontend PR: 7169
File: src/platform/remote/comfyui/jobs/jobTypes.ts:1-107
Timestamp: 2025-12-09T03:39:54.501Z
Learning: In the ComfyUI_frontend project, Zod is on v3.x. Do not suggest Zod v4 standalone validators (z.uuid, z.ulid, z.cuid2, z.nanoid) until an upgrade to Zod 4 is performed. When reviewing TypeScript files (e.g., src/platform/remote/comfyui/jobs/jobTypes.ts) validate against Zod 3 capabilities and avoid introducing v4-specific features; flag any proposal to upgrade or incorporate v4-only validators and propose staying with compatible 3.x patterns.

Applied to files:

  • eslint.config.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: lint-and-format
  • GitHub Check: setup
  • GitHub Check: collect
  • GitHub Check: test
🔇 Additional comments (1)
eslint.config.ts (1)

149-153: Good additions for Vue code quality enforcement.

These rules align well with Vue 3 best practices:

  • vue/no-useless-mustaches prevents redundant template interpolations
  • vue/no-unused-emit-declarations catches dead emit definitions
  • vue/no-use-v-else-with-v-for prevents a common template anti-pattern
  • vue/one-component-per-file enforces the recommended single-component structure

Based on learnings, these rules complement the guideline for proper props and emits definitions in Vue components.

@DrJKL DrJKL marked this pull request as draft December 10, 2025 06:20
@DrJKL DrJKL marked this pull request as ready for review December 10, 2025 06:46
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (4)
src/stores/electronDownloadStore.ts (1)

33-33: Technical debt: TODO comment about ElectronDownload type coverage.

The TODO on line 33 indicates that the DownloadManager.onDownloadProgress callback data type could be better aligned with the ElectronDownload interface. This is pre-existing and outside the scope of this linter update, but worth tracking for future store refactoring.

If you'd like to address this type alignment in a follow-up PR, I can help generate a more precise type definition that covers the callback data structure.

src/components/queue/CompletionSummaryBanner.vue (1)

94-104: Replace withDefaults with Vue 3.5-style prop defaults

Current props use withDefaults(defineProps<Props>(), …), which goes against the repo guideline to use Vue 3.5 TypeScript-style default prop declaration and avoid withDefaults/runtime props declarations. Consider refactoring to the recommended pattern (typed destructuring with default values) on a follow-up pass or in this PR if it’s already touching linting rules for props.

Based on learnings, this repo prefers Vue 3.5 TS-style default props over withDefaults.

src/components/queue/job/QueueJobItem.stories.ts (1)

111-119: Remove the deleted running-node-name prop.

The running-node-name attribute is used here but this prop was removed from the QueueJobItem component. This inconsistency will cause runtime warnings and the story won't accurately reflect the component's current API.

Apply this diff to remove the obsolete prop:

         <QueueJobItem
           job-id="job-running-2"
           state="running"
           title="Generating image"
           :progress-total-percent="66"
           :progress-current-percent="10"
-          running-node-name="KSampler"
           v-bind="args"
         />
src/lib/litegraph/src/LGraphCanvas.ts (1)

308-317: Fix oldGraph value in subgraph setter

The setter assigns this.#subgraph = value before dispatching 'litegraph:set-graph', causing oldGraph to always equal newGraph. Capture the previous graph before assignment:

  set subgraph(value: Subgraph | undefined) {
    if (value !== this.#subgraph) {
+     const oldGraph = this.graph
      this.#subgraph = value
      if (value)
        this.dispatch('litegraph:set-graph', {
-         oldGraph: this.#subgraph,
+         oldGraph: oldGraph ?? null,
          newGraph: value
        })
    }
  }

Also consider whether 'litegraph:set-graph' should be dispatched from both subgraph setter and setGraph method. In openSubgraph, the event fires twice (once from line 1878 with incorrect oldGraph, again from setGraph at line 1879 with correct value).

@@ -1,3 +1,4 @@
/* eslint-disable vue/one-component-per-file */
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick | 🔵 Trivial

File‑level disable for vue/one-component-per-file is reasonable in tests

Given the explicit stub components defined alongside the tested component, disabling this rule for the test file makes sense. If lint noise becomes an issue elsewhere, you could narrow the disable to just the stub definitions, but it’s not required here.

🤖 Prompt for AI Agents
In src/renderer/extensions/vueNodes/components/NodeSlots.test.ts at line 1, the
file currently has a file‑level eslint disable for vue/one-component-per-file;
keep this disable as-is since the test defines multiple explicit stub components
alongside the tested component, or if you prefer to limit scope later, move the
disable to only surround the stub component definitions (e.g., use localized
eslint-disable comments immediately above and below the stubs) to reduce global
lint suppression.

@DrJKL
Copy link
Contributor Author

DrJKL commented Dec 10, 2025

Going to merge with the previous approval

@DrJKL DrJKL merged commit 72b5444 into main Dec 10, 2025
29 checks passed
@DrJKL DrJKL deleted the drjkl/no-doze branch December 10, 2025 19:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L This PR changes 100-499 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants