Skip to content

Conversation

@Myestery
Copy link
Contributor

@Myestery Myestery commented Jan 30, 2026

Summary

This PR removes unsafe type assertions ("as unknown as Type") from test files and improves type safety across the codebase.

Key Changes

Type Safety Improvements

  • Removed improper as unknown as Type patterns from 17 test files in Group 8 part 7
  • Replaced with proper TypeScript patterns using factory functions and Mock types
  • Fixed createTestingPinia usage in test files (was incorrectly using createPinia)
  • Fixed vi.hoisted pattern for mockSetDirty in viewport tests
  • Fixed vi.doMock lint issues with vi.mock and vi.hoisted pattern
  • Retained necessary as unknown as casts only for complex mock objects where direct type assertions would fail

Files Changed

Test files (Group 8 part 7 - services, stores, utils):

  • src/services/nodeOrganizationService.test.ts
  • src/services/providers/algoliaSearchProvider.test.ts
  • src/services/providers/registrySearchProvider.test.ts
  • src/stores/comfyRegistryStore.test.ts
  • src/stores/domWidgetStore.test.ts
  • src/stores/executionStore.test.ts
  • src/stores/firebaseAuthStore.test.ts
  • src/stores/modelToNodeStore.test.ts
  • src/stores/queueStore.test.ts
  • src/stores/subgraphNavigationStore.test.ts
  • src/stores/subgraphNavigationStore.viewport.test.ts
  • src/stores/subgraphStore.test.ts
  • src/stores/systemStatsStore.test.ts
  • src/stores/workspace/nodeHelpStore.test.ts
  • src/utils/colorUtil.test.ts
  • src/utils/executableGroupNodeChildDTO.test.ts

Source files:

  • src/stores/modelStore.ts - Improved type handling

Testing

  • All TypeScript type checking passes (pnpm typecheck)
  • All affected test files pass (pnpm test:unit)
  • Linting passes without errors (pnpm lint)
  • Code formatting applied (pnpm format)

Part of the "Road to No Explicit Any" initiative, cleaning up type casting issues from branch fix/remove-any-types-part8.

Previous PRs in this series:

┆Issue is synchronized with this Notion page by Unito

… files

- Fixed type casting issues in 17 files (services, stores, utils)
- Replaced `as unknown as Type` with proper TypeScript patterns
- Used factory functions and Mock types where appropriate
- Fixed createTestingPinia usage in test files (was incorrectly using createPinia)
- Fixed vi.hoisted pattern for mockSetDirty in viewport tests
- Fixed vi.doMock lint issues with vi.mock and vi.hoisted pattern
- Retained necessary `as unknown as` casts for complex mock objects
@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 30, 2026

📝 Walkthrough

Walkthrough

Tightens TypeScript typings across many test files and a helper: replaces loose any casts with Partial<T>, non-null assertions, and mock factories; adopts createTestingPinia in tests; and refines an internal helper _findInMetadata to return string | null.

Changes

Cohort / File(s) Summary
Service Provider Tests
src/services/nodeOrganizationService.test.ts, src/services/providers/algoliaSearchProvider.test.ts, src/services/providers/registrySearchProvider.test.ts
Narrowed mock parameter types (e.g., Partial<ComfyNodeDefImpl>, Partial<RegistryNodePack>), introduced typed mock clients/globals, and added a createMockStore test factory for registry store mocks.
Pinia & Registry Store Tests
src/stores/comfyRegistryStore.test.ts, src/stores/subgraphStore.test.ts
Aligned mocked hook return casts to actual ReturnType<...>, initialized Pinia in tests using createTestingPinia, and adjusted null/undefined handling in assertions.
Litegraph Mock Adoption
src/stores/domWidgetStore.test.ts, src/stores/executionStore.test.ts, src/utils/executableGroupNodeChildDTO.test.ts
Replaced ad‑hoc mock nodes with createMockLGraphNode factory, tightened node typings (Partial<LGraphNode>), and ensured relevant test imports.
Authentication Tests
src/stores/firebaseAuthStore.test.ts
Major test refactor adding explicit User/UserCredential typings, hoisted/dynamic mocks, detailed mock fetch responses for billing flows, and stronger typing around auth state/id token callbacks and flows.
Model / Queue / Node mapping Tests
src/stores/modelStore.ts, src/stores/modelToNodeStore.test.ts, src/stores/queueStore.test.ts
Refined _findInMetadata to `Record<string, string
Subgraph Navigation Tests
src/stores/subgraphNavigationStore.test.ts, src/stores/subgraphNavigationStore.viewport.test.ts
Introduced createMockChangeTracker, replaced many any casts with Partial<T>, ReturnType<>, or typeof assertions, hoisted setDirty mock, and improved LGraph/Subgraph typings.
Workspace / Node Help Tests
src/stores/workspace/nodeHelpStore.test.ts
Tighter casting for node help calls using Partial<ComfyNodeDefImpl> as ComfyNodeDefImpl instead of any.
Utilities & Small Store Tests
src/utils/colorUtil.test.ts, src/stores/systemStatsStore.test.ts, src/stores/subgraphStore.test.ts, src/stores/workspace/nodeHelpStore.test.ts
Added/used type imports (e.g., ColorAdjustOptions, SystemStats, ExportedSubgraph), strengthened mock typings and promise typings, and adjusted serialized subgraph structure in tests.

Possibly related PRs

  • PR #8376: broad migration of tests to createTestingPinia and Pinia test setup changes that overlap with this PR's Pinia changes.
  • PR #8329: adoption of shared litegraph test utilities (e.g., createMockLGraphNode, createMockChangeTracker) matching the mock factory work here.
  • PR #8319: related modifications to firebaseAuthStore tests and mocking strategy similar to this PR's authentication tests.

Suggested reviewers

  • DrJKL
  • christian-byrne
  • jtydhr88
  • AustinMroz
✨ 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 fix/remove-any-types-group7

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 Jan 30, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 01/30/2026, 02:22:53 AM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Jan 30, 2026

🎭 Playwright Tests: ✅ Passed

Results: 507 passed, 0 failed, 0 flaky, 8 skipped (Total: 515)

📊 Browser Reports
  • chromium: View Report (✅ 495 / ❌ 0 / ⚠️ 0 / ⏭️ 8)
  • chromium-2x: View Report (✅ 2 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • chromium-0.5x: View Report (✅ 1 / ❌ 0 / ⚠️ 0 / ⏭️ 0)
  • mobile-chrome: View Report (✅ 9 / ❌ 0 / ⚠️ 0 / ⏭️ 0)

@github-actions
Copy link

github-actions bot commented Jan 30, 2026

Bundle Size Report

Summary

  • Raw size: 22.1 MB baseline 22.1 MB — 🟢 -189 B
  • Gzip: 4.61 MB baseline 4.61 MB — 🟢 -41 B
  • Brotli: 3.42 MB baseline 3.42 MB — 🟢 -54 B
  • Bundles: 173 current • 173 baseline • 81 added / 81 removed

Category Glance
Other 🟢 -198 B (7.1 MB) · Data & Services 🔴 +17 B (2.71 MB) · Panels & Settings 🟢 -8 B (471 kB) · Vendor & Third-Party ⚪ 0 B (10.7 MB) · Graph Workspace ⚪ 0 B (974 kB) · Views & Navigation ⚪ 0 B (80.7 kB) · + 5 more

Per-category breakdown
App Entry Points — 26 kB (baseline 26 kB) • ⚪ 0 B

Main entry bundles and manifests

File Before After Δ Raw Δ Gzip Δ Brotli
assets/index-Bq6yJAKO.js (removed) 26 kB 🟢 -26 kB 🟢 -7.51 kB 🟢 -6.6 kB
assets/index-qBHIXN5S.js (new) 26 kB 🔴 +26 kB 🔴 +7.5 kB 🔴 +6.61 kB

Status: 1 added / 1 removed

Graph Workspace — 974 kB (baseline 974 kB) • ⚪ 0 B

Graph editor runtime, canvas, workflow orchestration

File Before After Δ Raw Δ Gzip Δ Brotli
assets/GraphView-BBVCX3gq.js (new) 974 kB 🔴 +974 kB 🔴 +197 kB 🔴 +149 kB
assets/GraphView-BoMvcUY_.js (removed) 974 kB 🟢 -974 kB 🟢 -197 kB 🟢 -149 kB

Status: 1 added / 1 removed

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

Top-level views, pages, and routed surfaces

File Before After Δ Raw Δ Gzip Δ Brotli
assets/CloudSurveyView-BOAm-fDU.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -3.61 kB 🟢 -3.05 kB
assets/CloudSurveyView-C1ZlGN_4.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +3.61 kB 🔴 +3.06 kB
assets/CloudLoginView-4FyPIUw9.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.09 kB 🟢 -2.72 kB
assets/CloudLoginView-CJvbMmvs.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.09 kB 🔴 +2.72 kB
assets/UserCheckView-DJuCN30F.js (new) 10.5 kB 🔴 +10.5 kB 🔴 +2.45 kB 🔴 +2.13 kB
assets/UserCheckView-DS2QKbDy.js (removed) 10.5 kB 🟢 -10.5 kB 🟢 -2.45 kB 🟢 -2.13 kB
assets/CloudLayoutView-DekY5VYV.js (removed) 8.54 kB 🟢 -8.54 kB 🟢 -2.24 kB 🟢 -1.95 kB
assets/CloudLayoutView-lAgUne3U.js (new) 8.54 kB 🔴 +8.54 kB 🔴 +2.24 kB 🔴 +1.96 kB
assets/CloudSignupView-CtjLVeop.js (new) 8.18 kB 🔴 +8.18 kB 🔴 +2.33 kB 🔴 +2.02 kB
assets/CloudSignupView-Cyi4CVzl.js (removed) 8.18 kB 🟢 -8.18 kB 🟢 -2.33 kB 🟢 -2.02 kB
assets/CloudForgotPasswordView-C7FoTDJF.js (new) 6.26 kB 🔴 +6.26 kB 🔴 +1.93 kB 🔴 +1.69 kB
assets/CloudForgotPasswordView-D7vjWa_d.js (removed) 6.26 kB 🟢 -6.26 kB 🟢 -1.93 kB 🟢 -1.69 kB
assets/UserSelectView-bgMldSY4.js (new) 5.28 kB 🔴 +5.28 kB 🔴 +1.76 kB 🔴 +1.57 kB
assets/UserSelectView-COhNJZ3H.js (removed) 5.28 kB 🟢 -5.28 kB 🟢 -1.76 kB 🟢 -1.57 kB
assets/CloudSubscriptionRedirectView-C_6EwoF9.js (removed) 5.27 kB 🟢 -5.27 kB 🟢 -1.73 kB 🟢 -1.54 kB
assets/CloudSubscriptionRedirectView-SoUNrcMO.js (new) 5.27 kB 🔴 +5.27 kB 🔴 +1.73 kB 🔴 +1.54 kB
assets/CloudAuthTimeoutView-DjbCAYhB.js (new) 5.24 kB 🔴 +5.24 kB 🔴 +1.71 kB 🔴 +1.48 kB
assets/CloudAuthTimeoutView-Do9oGBTr.js (removed) 5.24 kB 🟢 -5.24 kB 🟢 -1.71 kB 🟢 -1.49 kB
assets/CloudSorryContactSupportView-n5f-fGMz.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-V93lMUpe.js 500 B 500 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

Panels & Settings — 471 kB (baseline 471 kB) • 🟢 -8 B

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/WorkspacePanel-BJmeudjw.js (removed) 29.8 kB 🟢 -29.8 kB 🟢 -5.89 kB 🟢 -5.13 kB
assets/WorkspacePanel-BtjQDEEM.js (new) 29.8 kB 🔴 +29.8 kB 🔴 +5.89 kB 🔴 +5.14 kB
assets/LegacyCreditsPanel-BLrD7KnV.js (new) 23.8 kB 🔴 +23.8 kB 🔴 +5.94 kB 🔴 +5.22 kB
assets/LegacyCreditsPanel-hvVtngqX.js (removed) 23.8 kB 🟢 -23.8 kB 🟢 -5.95 kB 🟢 -5.23 kB
assets/SubscriptionPanel-CvzoZMlp.js (removed) 21 kB 🟢 -21 kB 🟢 -5.04 kB 🟢 -4.44 kB
assets/SubscriptionPanel-iwCLuzkx.js (new) 21 kB 🔴 +21 kB 🔴 +5.05 kB 🔴 +4.45 kB
assets/KeybindingPanel-Cc0TByTv.js (removed) 14.3 kB 🟢 -14.3 kB 🟢 -3.74 kB 🟢 -3.33 kB
assets/KeybindingPanel-DiOoJnWp.js (new) 14.3 kB 🔴 +14.3 kB 🔴 +3.74 kB 🔴 +3.33 kB
assets/AboutPanel-1arDLUcL.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.68 kB 🔴 +2.42 kB
assets/AboutPanel-TBBZ8Ru4.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.68 kB 🟢 -2.43 kB
assets/ExtensionPanel-CiGZupS1.js (removed) 10.2 kB 🟢 -10.2 kB 🟢 -2.71 kB 🟢 -2.4 kB
assets/ExtensionPanel-Cw-5uE-I.js (new) 10.2 kB 🔴 +10.2 kB 🔴 +2.71 kB 🔴 +2.4 kB
assets/ServerConfigPanel-BDSSPDdR.js (new) 7.23 kB 🔴 +7.23 kB 🔴 +2.17 kB 🔴 +1.94 kB
assets/ServerConfigPanel-ZJBvyiQJ.js (removed) 7.23 kB 🟢 -7.23 kB 🟢 -2.17 kB 🟢 -1.94 kB
assets/UserPanel-BqJ3RslJ.js (new) 6.58 kB 🔴 +6.58 kB 🔴 +1.9 kB 🔴 +1.67 kB
assets/UserPanel-LnIJKzj3.js (removed) 6.58 kB 🟢 -6.58 kB 🟢 -1.9 kB 🟢 -1.68 kB
assets/refreshRemoteConfig-CNtDYgv1.js (new) 1.31 kB 🔴 +1.31 kB 🔴 +572 B 🔴 +496 B
assets/refreshRemoteConfig-Jlng3xFO.js (removed) 1.31 kB 🟢 -1.31 kB 🟢 -574 B 🟢 -498 B
assets/config-CABmRkwG.js (removed) 1.16 kB 🟢 -1.16 kB 🟢 -610 B 🟢 -544 B
assets/config-jKrhsLwt.js (new) 1.15 kB 🔴 +1.15 kB 🔴 +604 B 🔴 +532 B
assets/cloudRemoteConfig-D31svCuM.js (removed) 1.11 kB 🟢 -1.11 kB 🟢 -510 B 🟢 -450 B
assets/cloudRemoteConfig-DzJVB-aU.js (new) 1.11 kB 🔴 +1.11 kB 🔴 +511 B 🔴 +438 B
assets/refreshRemoteConfig-BGFLDju8.js (new) 169 B 🔴 +169 B 🔴 +108 B 🔴 +109 B
assets/refreshRemoteConfig-xhIC_2qN.js (removed) 169 B 🟢 -169 B 🟢 -108 B 🟢 -108 B
assets/remoteConfig-B0mlVvm7.js 788 B 788 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-2UNjEj6k.js 32.9 kB 32.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-B2OMGvh7.js 31.2 kB 31.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BcujOfpn.js 29.6 kB 29.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BI09_t23.js 29.4 kB 29.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BKamuseh.js 25.8 kB 25.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-BlTun9tZ.js 26.4 kB 26.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-CZ62uO3e.js 30.2 kB 30.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DaK-NByz.js 35.2 kB 35.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DaS3cSXp.js 39.4 kB 39.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-DWbMuaAa.js 32 kB 32 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/settings-S7pA60Hj.js 30.4 kB 30.4 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 12 added / 12 removed

User & Accounts — 3.94 kB (baseline 3.94 kB) • ⚪ 0 B

Authentication, profile, and account management bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/auth-2LYKqVKS.js (removed) 3.54 kB 🟢 -3.54 kB 🟢 -1.24 kB 🟢 -1.08 kB
assets/auth-CC6x1ejQ.js (new) 3.54 kB 🔴 +3.54 kB 🔴 +1.24 kB 🔴 +1.05 kB
assets/firebaseAuthStore-BvzRmGKs.js (new) 217 B 🔴 +217 B 🔴 +138 B 🔴 +115 B
assets/firebaseAuthStore-qUHLPbaM.js (removed) 217 B 🟢 -217 B 🟢 -138 B 🟢 -115 B
assets/auth-B3dZgKV8.js (new) 178 B 🔴 +178 B 🔴 +142 B 🔴 +135 B
assets/auth-B8SHiDGv.js (removed) 178 B 🟢 -178 B 🟢 -142 B 🟢 -130 B

Status: 3 added / 3 removed

Editors & Dialogs — 2.89 kB (baseline 2.89 kB) • ⚪ 0 B

Modals, dialogs, drawers, and in-app editors

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useSubscriptionDialog-B5mXUTGq.js (new) 2.71 kB 🔴 +2.71 kB 🔴 +1.29 kB 🔴 +1.14 kB
assets/useSubscriptionDialog-Cxo-U2Rj.js (removed) 2.71 kB 🟢 -2.71 kB 🟢 -1.29 kB 🟢 -1.14 kB
assets/useSubscriptionDialog-CcqeUEzQ.js (removed) 179 B 🟢 -179 B 🟢 -110 B 🟢 -101 B
assets/useSubscriptionDialog-CoAlM4R7.js (new) 179 B 🔴 +179 B 🔴 +110 B 🔴 +103 B

Status: 2 added / 2 removed

UI Components — 33.7 kB (baseline 33.7 kB) • ⚪ 0 B

Reusable component library chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/ComfyQueueButton-Dnrfse5s.js (removed) 9.52 kB 🟢 -9.52 kB 🟢 -2.68 kB 🟢 -2.4 kB
assets/ComfyQueueButton-Dy3FnXiG.js (new) 9.52 kB 🔴 +9.52 kB 🔴 +2.68 kB 🔴 +2.41 kB
assets/SubscribeButton-cKLk-zAe.js (removed) 4.63 kB 🟢 -4.63 kB 🟢 -1.57 kB 🟢 -1.39 kB
assets/SubscribeButton-DrJKH8ip.js (new) 4.63 kB 🔴 +4.63 kB 🔴 +1.57 kB 🔴 +1.39 kB
assets/cloudFeedbackTopbarButton-E2hlbOIC.js (new) 1.24 kB 🔴 +1.24 kB 🔴 +674 B 🔴 +567 B
assets/cloudFeedbackTopbarButton-pwScsK0A.js (removed) 1.24 kB 🟢 -1.24 kB 🟢 -673 B 🟢 -573 B
assets/ComfyQueueButton-C0iedpYa.js (removed) 181 B 🟢 -181 B 🟢 -118 B 🟢 -110 B
assets/ComfyQueueButton-DPfrjzO8.js (new) 181 B 🔴 +181 B 🔴 +118 B 🔴 +122 B
assets/Button-Bb_i0j7c.js 3.82 kB 3.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-CzKMhVcP.js 1.85 kB 1.85 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-qACg_vGT.js 8.36 kB 8.36 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/UserAvatar-D80lITos.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetButton-DSv9NFvF.js 2.41 kB 2.41 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 4 added / 4 removed

Data & Services — 2.71 MB (baseline 2.71 MB) • 🔴 +17 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-DjSWDl1B.js (new) 2.01 MB 🔴 +2.01 MB 🔴 +424 kB 🔴 +324 kB
assets/dialogService-BBlCSul7.js (removed) 2.01 MB 🟢 -2.01 MB 🟢 -424 kB 🟢 -324 kB
assets/api-BkLmdkU1.js (new) 675 kB 🔴 +675 kB 🔴 +149 kB 🔴 +119 kB
assets/api-XzZ8OGrP.js (removed) 675 kB 🟢 -675 kB 🟢 -149 kB 🟢 -119 kB
assets/releaseStore-BwrvBior.js (removed) 8.91 kB 🟢 -8.91 kB 🟢 -2.4 kB 🟢 -2.12 kB
assets/releaseStore-g4HnYg1q.js (new) 8.91 kB 🔴 +8.91 kB 🔴 +2.4 kB 🔴 +2.12 kB
assets/keybindingService-D1dcoJlq.js (new) 6.78 kB 🔴 +6.78 kB 🔴 +1.74 kB 🔴 +1.51 kB
assets/keybindingService-Dh2wXdSV.js (removed) 6.78 kB 🟢 -6.78 kB 🟢 -1.74 kB 🟢 -1.51 kB
assets/bootstrapStore-C6lhwDX2.js (new) 2.69 kB 🔴 +2.69 kB 🔴 +1.03 kB 🔴 +964 B
assets/bootstrapStore-SQHIzONh.js (removed) 2.69 kB 🟢 -2.69 kB 🟢 -1.03 kB 🟢 -973 B
assets/userStore-B0Qg8Zhz.js (removed) 2.16 kB 🟢 -2.16 kB 🟢 -811 B 🟢 -724 B
assets/userStore-C9GyvXcv.js (new) 2.16 kB 🔴 +2.16 kB 🔴 +811 B 🔴 +723 B
assets/audioService-B4Ev2VCo.js (removed) 2.03 kB 🟢 -2.03 kB 🟢 -932 B 🟢 -818 B
assets/audioService-VYcQoSRd.js (new) 2.03 kB 🔴 +2.03 kB 🔴 +930 B 🔴 +819 B
assets/releaseStore-BS8EcGmt.js (removed) 140 B 🟢 -140 B 🟢 -106 B 🟢 -105 B
assets/releaseStore-CFXlWPUg.js (new) 140 B 🔴 +140 B 🔴 +106 B 🔴 +115 B
assets/serverConfigStore-DOoqLe5c.js 2.64 kB 2.64 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 8 added / 8 removed

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

Helpers, composables, and utility bundles

File Before After Δ Raw Δ Gzip Δ Brotli
assets/useErrorHandling-5gWA_TEm.js (removed) 5.21 kB 🟢 -5.21 kB 🟢 -1.53 kB 🟢 -1.34 kB
assets/useErrorHandling-BoHK9e-I.js (new) 5.21 kB 🔴 +5.21 kB 🔴 +1.53 kB 🔴 +1.34 kB
assets/useWorkspaceUI-BSDA-sWT.js (new) 3.42 kB 🔴 +3.42 kB 🔴 +975 B 🔴 +845 B
assets/useWorkspaceUI-DcRTr_yX.js (removed) 3.42 kB 🟢 -3.42 kB 🟢 -975 B 🟢 -846 B
assets/useSubscriptionActions-CC4L2oRy.js (removed) 2.22 kB 🟢 -2.22 kB 🟢 -870 B 🟢 -764 B
assets/useSubscriptionActions-DxneBzrE.js (new) 2.22 kB 🔴 +2.22 kB 🔴 +870 B 🔴 +763 B
assets/subscriptionCheckoutUtil-Cr5q_Phs.js (new) 2.03 kB 🔴 +2.03 kB 🔴 +871 B 🔴 +762 B
assets/subscriptionCheckoutUtil-D06A2Vr8.js (removed) 2.03 kB 🟢 -2.03 kB 🟢 -874 B 🟢 -764 B
assets/useSubscriptionCredits-D5sAfKJ1.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +595 B 🔴 +517 B
assets/useSubscriptionCredits-ORt_JEtC.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -594 B 🟢 -524 B
assets/audioUtils-BT0s5vUg.js (new) 970 B 🔴 +970 B 🔴 +548 B 🔴 +484 B
assets/audioUtils-DDtE_Vqe.js (removed) 970 B 🟢 -970 B 🟢 -547 B 🟢 -459 B
assets/useCurrentUser-Cdb4XPyp.js (removed) 145 B 🟢 -145 B 🟢 -114 B 🟢 -104 B
assets/useCurrentUser-D_TGwY3l.js (new) 145 B 🔴 +145 B 🔴 +114 B 🔴 +99 B
assets/_plugin-vue_export-helper-DuK_Fly3.js 467 B 467 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-GMAsfHxw.js 7.2 kB 7.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-ivqHoiOs.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/tailwindUtil-CJjrIEVR.js 488 B 488 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 7 added / 7 removed

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

External libraries and shared vendor chunks

File Before After Δ Raw Δ Gzip Δ Brotli
assets/vendor-chart-DHGfk3hn.js 408 kB 408 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-other-jpGqhHNG.js 4.1 MB 4.1 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-primevue-4Jj8eU28.js 3.04 MB 3.04 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-reka-ui-aCG649nF.js 263 kB 263 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-three-CERwhPwK.js 1.83 MB 1.83 MB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-tiptap-BxrEVL6s.js 650 kB 650 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-vue-Dwii0E-t.js 13.6 kB 13.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/vendor-xterm-IX6P8SWv.js 398 kB 398 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
Other — 7.1 MB (baseline 7.1 MB) • 🟢 -198 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-q-5LHauC.js (removed) 180 kB 🟢 -180 kB 🟢 -43.3 kB 🟢 -36.2 kB
assets/core-CLkhTjVr.js (new) 180 kB 🔴 +180 kB 🔴 +43.3 kB 🔴 +36.2 kB
assets/WidgetSelect-hac7uNKJ.js (new) 52.2 kB 🔴 +52.2 kB 🔴 +11.5 kB 🔴 +10 kB
assets/WidgetSelect-Vcr5TG8E.js (removed) 52.2 kB 🟢 -52.2 kB 🟢 -11.5 kB 🟢 -10 kB
assets/Load3DControls-BMSRupsN.js (new) 35.9 kB 🔴 +35.9 kB 🔴 +5.87 kB 🔴 +5.08 kB
assets/Load3DControls-DR6haPyy.js (removed) 35.9 kB 🟢 -35.9 kB 🟢 -5.86 kB 🟢 -5.07 kB
assets/SubscriptionRequiredDialogContent-CI7-k1UR.js (removed) 28.7 kB 🟢 -28.7 kB 🟢 -6.78 kB 🟢 -5.91 kB
assets/SubscriptionRequiredDialogContent-DJmKG3V0.js (new) 28.7 kB 🔴 +28.7 kB 🔴 +6.78 kB 🔴 +5.92 kB
assets/CurrentUserPopoverWorkspace-BnWEn0Iy.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +4.99 kB 🔴 +4.42 kB
assets/CurrentUserPopoverWorkspace-mz-borjS.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -4.99 kB 🟢 -4.43 kB
assets/Load3D-9QjiqG8E.js (removed) 19.2 kB 🟢 -19.2 kB 🟢 -4.37 kB 🟢 -3.84 kB
assets/Load3D-DI1LN54i.js (new) 19.2 kB 🔴 +19.2 kB 🔴 +4.37 kB 🔴 +3.86 kB
assets/WidgetInputNumber-CU4YWttl.js (removed) 18.3 kB 🟢 -18.3 kB 🟢 -4.53 kB 🟢 -4.03 kB
assets/WidgetInputNumber-D790i0GA.js (new) 18.3 kB 🔴 +18.3 kB 🔴 +4.53 kB 🔴 +4.03 kB
assets/WidgetRecordAudio-BU4t4PZl.js (removed) 18.3 kB 🟢 -18.3 kB 🟢 -4.97 kB 🟢 -4.44 kB
assets/WidgetRecordAudio-DJeRDbbm.js (new) 18.3 kB 🔴 +18.3 kB 🔴 +4.97 kB 🔴 +4.44 kB
assets/SubscriptionPanelContentWorkspace-BldQ1-HD.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.47 kB 🟢 -3.89 kB
assets/SubscriptionPanelContentWorkspace-BR9Fph0f.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.47 kB 🔴 +3.9 kB
assets/WidgetImageCrop-f1bVD2HF.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +4.14 kB 🔴 +3.63 kB
assets/WidgetImageCrop-flGZj0sv.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -4.14 kB 🟢 -3.63 kB
assets/PanelTemplate-BG8pMbR3.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -5.46 kB 🟢 -4.8 kB
assets/PanelTemplate-DS7daNDE.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +5.45 kB 🔴 +4.8 kB
assets/AudioPreviewPlayer-A1KElqoc.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.97 kB 🟢 -2.65 kB
assets/AudioPreviewPlayer-CB-vArU9.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.97 kB 🔴 +2.66 kB
assets/InviteMemberDialogContent-D0i7Tf3r.js (new) 8.36 kB 🔴 +8.36 kB 🔴 +2.5 kB 🔴 +2.17 kB
assets/InviteMemberDialogContent-Dt__JEup.js (removed) 8.36 kB 🟢 -8.36 kB 🟢 -2.5 kB 🟢 -2.17 kB
assets/WidgetWithControl-CbScHgcJ.js (new) 8.07 kB 🔴 +8.07 kB 🔴 +2.68 kB 🔴 +2.41 kB
assets/WidgetWithControl-Go0lJp2S.js (removed) 8.07 kB 🟢 -8.07 kB 🟢 -2.68 kB 🟢 -2.41 kB
assets/CreateWorkspaceDialogContent-ClHZigI8.js (removed) 5.93 kB 🟢 -5.93 kB 🟢 -1.92 kB 🟢 -1.68 kB
assets/CreateWorkspaceDialogContent-DnnXDcQu.js (new) 5.93 kB 🔴 +5.93 kB 🔴 +1.92 kB 🔴 +1.69 kB
assets/EditWorkspaceDialogContent-Bb--su_S.js (removed) 5.7 kB 🟢 -5.7 kB 🟢 -1.88 kB 🟢 -1.64 kB
assets/EditWorkspaceDialogContent-BrFL191q.js (new) 5.7 kB 🔴 +5.7 kB 🔴 +1.88 kB 🔴 +1.64 kB
assets/ValueControlPopover-C55HCoFE.js (removed) 5.17 kB 🟢 -5.17 kB 🟢 -1.68 kB 🟢 -1.5 kB
assets/ValueControlPopover-E4luwSAt.js (new) 5.17 kB 🔴 +5.17 kB 🔴 +1.68 kB 🔴 +1.5 kB
assets/DeleteWorkspaceDialogContent-DoeYc8wL.js (removed) 4.59 kB 🟢 -4.59 kB 🟢 -1.56 kB 🟢 -1.35 kB
assets/DeleteWorkspaceDialogContent-DPdJ1Mg1.js (new) 4.59 kB 🔴 +4.59 kB 🔴 +1.56 kB 🔴 +1.35 kB
assets/LeaveWorkspaceDialogContent-B0NRGsRz.js (removed) 4.41 kB 🟢 -4.41 kB 🟢 -1.5 kB 🟢 -1.31 kB
assets/LeaveWorkspaceDialogContent-cc-ROBYP.js (new) 4.41 kB 🔴 +4.41 kB 🔴 +1.5 kB 🔴 +1.3 kB
assets/RemoveMemberDialogContent-Dk5NLoAj.js (new) 4.38 kB 🔴 +4.38 kB 🔴 +1.45 kB 🔴 +1.27 kB
assets/RemoveMemberDialogContent-lI3AUv7d.js (removed) 4.38 kB 🟢 -4.38 kB 🟢 -1.45 kB 🟢 -1.27 kB
assets/RevokeInviteDialogContent-BD9Yint6.js (new) 4.29 kB 🔴 +4.29 kB 🔴 +1.47 kB 🔴 +1.29 kB
assets/RevokeInviteDialogContent-DfwQAZ2i.js (removed) 4.29 kB 🟢 -4.29 kB 🟢 -1.47 kB 🟢 -1.29 kB
assets/GlobalToast-CfcCcCJb.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.1 kB 🟢 -937 B
assets/GlobalToast-XFvC5w5K.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.1 kB 🔴 +943 B
assets/SubscribeToRun-C_5QP6yc.js (removed) 2.96 kB 🟢 -2.96 kB 🟢 -1.15 kB 🟢 -1.01 kB
assets/SubscribeToRun-KYI1-rPD.js (new) 2.96 kB 🔴 +2.96 kB 🔴 +1.15 kB 🔴 +1.01 kB
assets/cloudSessionCookie-E37VPRUE.js (new) 2.94 kB 🔴 +2.94 kB 🔴 +928 B 🔴 +798 B
assets/cloudSessionCookie-R7f3RCq7.js (removed) 2.94 kB 🟢 -2.94 kB 🟢 -930 B 🟢 -800 B
assets/BaseViewTemplate-DpWHI-sD.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -1.04 kB 🟢 -940 B
assets/BaseViewTemplate-DQr0kZ5Y.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +1.04 kB 🔴 +946 B
assets/CloudRunButtonWrapper-BDI4zR7e.js (new) 1.79 kB 🔴 +1.79 kB 🔴 +646 B 🔴 +563 B
assets/CloudRunButtonWrapper-DhoW53k8.js (removed) 1.79 kB 🟢 -1.79 kB 🟢 -641 B 🟢 -563 B
assets/cloudBadges-DseufOLT.js (new) 1.08 kB 🔴 +1.08 kB 🔴 +536 B 🔴 +481 B
assets/cloudBadges-eynhoZSL.js (removed) 1.08 kB 🟢 -1.08 kB 🟢 -533 B 🟢 -481 B
assets/graphHasMissingNodes-CcXnRcHe.js (removed) 1.06 kB 🟢 -1.06 kB 🟢 -462 B 🟢 -410 B
assets/graphHasMissingNodes-MD6_6goH.js (new) 1.06 kB 🔴 +1.06 kB 🔴 +461 B 🔴 +419 B
assets/cloudSubscription-GtLFQViA.js (removed) 976 B 🟢 -976 B 🟢 -463 B 🟢 -399 B
assets/cloudSubscription-pZxpsDdy.js (new) 976 B 🔴 +976 B 🔴 +465 B 🔴 +400 B
assets/nightlyBadges-9_aqWVAs.js (new) 595 B 🔴 +595 B 🔴 +354 B 🔴 +310 B
assets/nightlyBadges-tzkx42UE.js (removed) 595 B 🟢 -595 B 🟢 -355 B 🟢 -309 B
assets/SubscriptionPanelContentWorkspace-BfhgABUx.js (removed) 266 B 🟢 -266 B 🟢 -136 B 🟢 -118 B
assets/SubscriptionPanelContentWorkspace-BM1YC3DD.js (new) 266 B 🔴 +266 B 🔴 +136 B 🔴 +126 B
assets/WidgetInputNumber-Bi7AsRmE.js (removed) 186 B 🟢 -186 B 🟢 -119 B 🟢 -112 B
assets/WidgetInputNumber-BNVk5LZZ.js (new) 186 B 🔴 +186 B 🔴 +119 B 🔴 +111 B
assets/WidgetLegacy-C3hG4tWb.js (new) 164 B 🔴 +164 B 🔴 +125 B 🔴 +109 B
assets/WidgetLegacy-D4Qk_v47.js (removed) 164 B 🟢 -164 B 🟢 -125 B 🟢 -109 B
assets/Load3D-CGFNJLJu.js (removed) 131 B 🟢 -131 B 🟢 -107 B 🟢 -100 B
assets/Load3D-Czo5lXBT.js (new) 131 B 🔴 +131 B 🔴 +107 B 🔴 +111 B
assets/auto-DWs2ctGL.js 1.73 kB 1.73 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BEw5ErI4.js 18.5 kB 18.5 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BGeHkplA.js 17.9 kB 17.9 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-BV0l36Iz.js 17.2 kB 17.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C_Y3D6Cn.js 17.8 kB 17.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-C6piRza5.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-Cf8Zq1td.js 18.8 kB 18.8 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-CiziP3Xs.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-D1595tOr.js 19.3 kB 19.3 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-DXauvccL.js 20.6 kB 20.6 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-P5QCEfZc.js 18 kB 18 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/commands-WbYP_D61.js 17 kB 17 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-BlyhGDPa.js 500 kB 500 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-byadgsvD.js 188 B 188 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-DHwPdKGO.js 14.1 kB 14.1 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BHtk4Fg_.js 174 kB 174 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BMSlgLcp.js 155 kB 155 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-BQCWi9e4.js 112 kB 112 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CJicmTR7.js 113 kB 113 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CNOkBy-u.js 126 kB 126 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-CySb1R5_.js 151 kB 151 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-D0g10ZKf.js 131 kB 131 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DMUPIFMF.js 133 kB 133 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-DpsGU4si.js 126 kB 126 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-Dz6IPJXM.js 144 kB 144 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/main-lrEzMywH.js 128 kB 128 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Media3DTop-DUmUhXD6.js 2.38 kB 2.38 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaAudioTop-CD66_Mw_.js 2 kB 2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaImageTop-Bqe7yvm_.js 2.34 kB 2.34 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/MediaVideoTop-De3MzVmp.js 2.82 kB 2.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/mixpanel.module-CC2-PIpB.js 143 B 143 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-A7pvB7zM.js 370 kB 370 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-BIVjUijC.js 345 kB 345 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-Chkn0HaI.js 343 kB 343 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CK_6GHao.js 452 kB 452 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-CToVAwnT.js 373 kB 373 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DDabdWgx.js 417 kB 417 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DgvJyE3d.js 386 kB 386 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DjxaeFt_.js 416 kB 416 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-DslnWEGg.js 377 kB 377 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-EPAM3kwk.js 373 kB 373 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/nodeDefs-NrulhNyH.js 366 kB 366 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/OBJLoader2WorkerModule-DTMpvldF.js 109 kB 109 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/previousFullPath-CmezY7As.js 838 B 838 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/rolldown-runtime-cVp-94Rc.js 1.96 kB 1.96 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/Slider-D4lsf6Ob.js 4.21 kB 4.21 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widget-BJiJuR5i.js 518 B 518 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-CUtab2CB.js 4.71 kB 4.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetBoundingBox-D79nBMxa.js 186 B 186 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetChart-CiXfBVBH.js 2.79 kB 2.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetColorPicker-BxNqMlFv.js 3.71 kB 3.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-DDD96zwa.js 4.57 kB 4.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-A6pZMGtc.js 3.79 kB 3.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-DSMUKRnt.js 2.58 kB 2.58 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-MDImyvc3.js 2.7 kB 2.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-a8bZhyc5.js 3.49 kB 3.49 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetPropFilter-ERx8czR8.js 1.31 kB 1.31 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetTextarea-CV3BoahN.js 3.87 kB 3.87 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-ZdaYkxkD.js 3.26 kB 3.26 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/widgetTypes-KPj-zM0O.js 573 B 573 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 34 added / 34 removed

- Changed to mockReturnValue instead of mockImplementation since we're returning a value
- Fixed return type to use ReturnType<typeof useComfyRegistryStore> instead of the store definition type
- Fixed listAllPacks.call to use mockListAllPacksCall instead of inline mock
- Replaced null! non-null assertion with simple null assignment
- The type already accepts null so no cast is needed
- Makes the code clearer and more explicit
@Myestery Myestery marked this pull request as ready for review January 30, 2026 01:58
@Myestery Myestery requested a review from a team as a code owner January 30, 2026 01:58
@dosubot dosubot bot added the size:L This PR changes 100-499 lines, ignoring generated files. label Jan 30, 2026
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: 6

Caution

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

⚠️ Outside diff range comments (3)
src/stores/subgraphStore.test.ts (1)

24-32: ⚠️ Potential issue | 🔴 Critical

Critical: Missing getGlobalSubgraphs in the API mock causes test failures.

The pipeline failures indicate TypeError: Cannot read properties of undefined (reading 'mockResolvedValue') at line 81 because api.getGlobalSubgraphs is not defined in the mock. The mockFetch helper at line 81 calls vi.mocked(api.getGlobalSubgraphs).mockResolvedValue(globalSubgraphs), but this method is missing from the mock object.

🐛 Proposed fix to add the missing mock
 vi.mock('@/scripts/api', () => ({
   api: {
     getUserData: vi.fn(),
     storeUserData: vi.fn(),
     listUserDataFullInfo: vi.fn(),
     apiURL: vi.fn(),
-    addEventListener: vi.fn()
+    addEventListener: vi.fn(),
+    getGlobalSubgraphs: vi.fn()
   }
 }))
src/stores/modelToNodeStore.test.ts (1)

456-465: 🧹 Nitpick | 🔵 Trivial

The proposed refactor introduces the same type safety issue it aims to resolve.

While the review correctly identifies that null! and undefined! sidestep type safety, the suggested solution—casting the method itself with as (value: unknown) => string | undefined—also violates type safety by introducing a type assertion.

Per the coding guidelines, type assertions should be avoided entirely. A better approach would be to either:

  1. Adjust the function signature to accept invalid inputs: getCategoryForNodeType(nodeType: string | null | undefined | unknown): string | undefined
  2. Create a proper test utility helper following the pattern used in test files: Partial<MethodType> as MethodType with explicit acknowledgment of the incomplete type
  3. Use a standalone unsafe wrapper function in the test that clearly documents the intent

The current test code with null! and undefined! is acceptable if the function's defensive checks (lines 69–71) are the intended behavior being tested. If improving type safety is the goal, refactor the function signature or create a dedicated test helper rather than introducing a method-level cast.

src/services/providers/algoliaSearchProvider.test.ts (1)

273-304: 🧹 Nitpick | 🔵 Trivial

Cast once at declaration to remove repeated as RegistryNodePack.

Since these are intentionally partial mocks, cast once at the declaration and use the typed value throughout the assertions to reduce noise.

♻️ Suggested change
-const testPack: Partial<RegistryNodePack> = {
+const testPack = {
   id: '1',
   name: 'Test Pack',
   downloads: 100,
   publisher: { id: 'pub1', name: 'Publisher One' },
   latest_version: {
     version: '1.0.0',
     createdAt: '2024-01-15T10:00:00Z'
   },
   created_at: '2024-01-01T10:00:00Z'
-}
+} as Partial<RegistryNodePack> as RegistryNodePack
...
-  provider.getSortValue(
-    testPack as RegistryNodePack,
-    SortableAlgoliaField.Created
-  )
+  provider.getSortValue(testPack, SortableAlgoliaField.Created)
...
-const incompletePack: Partial<RegistryNodePack> = {
+const incompletePack = {
   id: '1',
   name: 'Incomplete'
-}
+} as Partial<RegistryNodePack> as RegistryNodePack
...
-  provider.getSortValue(
-    incompletePack as RegistryNodePack,
-    SortableAlgoliaField.Downloads
-  )
+  provider.getSortValue(incompletePack, SortableAlgoliaField.Downloads)
...
-  provider.getSortValue(
-    incompletePack as RegistryNodePack,
-    SortableAlgoliaField.Publisher
-  )
+  provider.getSortValue(incompletePack, SortableAlgoliaField.Publisher)
...
-  provider.getSortValue(
-    incompletePack as RegistryNodePack,
-    SortableAlgoliaField.Created
-  )
+  provider.getSortValue(incompletePack, SortableAlgoliaField.Created)
...
-  provider.getSortValue(
-    incompletePack as RegistryNodePack,
-    SortableAlgoliaField.Updated
-  )
+  provider.getSortValue(incompletePack, SortableAlgoliaField.Updated)
Based on learnings: In test files, when creating mock objects that partially implement an interface, prefer casting with as Partial as InterfaceType rather than as any or as unknown as InterfaceType.

Also applies to: 313-342

🤖 Fix all issues with AI agents
In `@src/services/nodeOrganizationService.test.ts`:
- Line 8: Change the helper createMockNodeDef from a const-assigned arrow
function to a top-level function declaration (e.g., function
createMockNodeDef(overrides: Partial<ComfyNodeDefImpl> = {}) { ... }) so it’s a
pure function declaration consistent with the repo guidance; keep the same
parameter types, default value, return shape, and internal implementation
(including any use of ComfyNodeDefImpl) so callers and tests remain unchanged.

In `@src/services/providers/algoliaSearchProvider.test.ts`:
- Around line 1-19: The test mutates global constants __ALGOLIA_APP_ID__ and
__ALGOLIA_API_KEY__ at module scope and never restores them; capture the
original values (e.g. const originalAppId = (globalThis as
GlobalWithAlgolia).__ALGOLIA_APP_ID__ etc.) before setting the test values and
restore them in an afterEach hook (or use beforeEach to set and afterEach to
reset to originals or delete if undefined) so tests do not leak state; update
the test file around useAlgoliaSearchProvider/GlobalWithAlgolia setup to
implement this restore logic.

In `@src/services/providers/registrySearchProvider.test.ts`:
- Around line 17-35: createMockStore is a pure helper implemented as a function
expression; replace it with a function declaration to follow repo conventions.
Change the declaration from "const createMockStore = (...)" to "function
createMockStore(...)" while preserving the parameter type
Partial<ReturnType<typeof useComfyRegistryStore>> and the returned typed object
shape (including search, listAllPacks, and spreads of params), and keep existing
mocks (mockSearchCall, mockSearchClear, mockListAllPacksCall,
mockListAllPacksClear) intact so tests continue to type-check and behave the
same.

In `@src/stores/subgraphNavigationStore.test.ts`:
- Line 12: The test imports the Subgraph type directly from LGraph which can
cause circular deps; change the import to use the barrel export by importing the
Subgraph type from '@/lib/litegraph/src/litegraph' instead of
'@/lib/litegraph/src/LGraph' (update the import statement that references
Subgraph in the test file).

In `@src/stores/systemStatsStore.test.ts`:
- Around line 94-103: The test currently types the promise and resolver as
SystemStats but then resolves with an empty object; change the mock to use a
Partial<SystemStats> to reflect the incomplete mock data: declare resolvePromise
as (value: Partial<SystemStats>) => void, create promise as
Promise<Partial<SystemStats>> and mock api.getSystemStats to return that
promise, and call resolvePromise({} as Partial<SystemStats>) so the types line
up with the pattern used in store.refetchSystemStats and the api.getSystemStats
mock.
- Line 29: The test currently mocks api.getSystemStats with a non-null assertion
on null (vi.mocked(api.getSystemStats).mockResolvedValue(null!)), which violates
the Promise<SystemStats> contract; replace the null! with a valid SystemStats
value—e.g. vi.mocked(api.getSystemStats).mockResolvedValue({} as SystemStats) or
construct a minimal object matching the SystemStats shape—and ensure the mock
uses vi.mocked(api.getSystemStats).mockResolvedValue(theMock) so the test
respects the declared return type.

…on in tests

- Added getGlobalSubgraphs to API mock to fix test failure
- Fixed _serializeItems mock to return properly typed ExportedSubgraph
- Added necessary type imports for ExportedSubgraph

This fixes the failing test 'should return false for non-existent blueprints' and ensures all subgraphStore tests pass with proper TypeScript typing.
@coderabbitai coderabbitai bot requested a review from AustinMroz January 30, 2026 02:22
@Myestery Myestery merged commit 13311a4 into main Jan 30, 2026
27 checks passed
@Myestery Myestery deleted the fix/remove-any-types-group7 branch January 30, 2026 02:38
snomiao pushed a commit that referenced this pull request Jan 30, 2026
## Summary

This PR removes unsafe type assertions ("as unknown as Type") from test
files and improves type safety across the codebase.

### Key Changes

#### Type Safety Improvements
- Removed improper `as unknown as Type` patterns from 17 test files in
Group 8 part 7
- Replaced with proper TypeScript patterns using factory functions and
Mock types
- Fixed createTestingPinia usage in test files (was incorrectly using
createPinia)
- Fixed vi.hoisted pattern for mockSetDirty in viewport tests  
- Fixed vi.doMock lint issues with vi.mock and vi.hoisted pattern
- Retained necessary `as unknown as` casts only for complex mock objects
where direct type assertions would fail

### Files Changed

Test files (Group 8 part 7 - services, stores, utils):
- src/services/nodeOrganizationService.test.ts
- src/services/providers/algoliaSearchProvider.test.ts
- src/services/providers/registrySearchProvider.test.ts
- src/stores/comfyRegistryStore.test.ts
- src/stores/domWidgetStore.test.ts
- src/stores/executionStore.test.ts
- src/stores/firebaseAuthStore.test.ts
- src/stores/modelToNodeStore.test.ts
- src/stores/queueStore.test.ts
- src/stores/subgraphNavigationStore.test.ts
- src/stores/subgraphNavigationStore.viewport.test.ts
- src/stores/subgraphStore.test.ts
- src/stores/systemStatsStore.test.ts
- src/stores/workspace/nodeHelpStore.test.ts
- src/utils/colorUtil.test.ts
- src/utils/executableGroupNodeChildDTO.test.ts

Source files:
- src/stores/modelStore.ts - Improved type handling

### Testing
- All TypeScript type checking passes (`pnpm typecheck`)
- All affected test files pass (`pnpm test:unit`)
- Linting passes without errors (`pnpm lint`)
- Code formatting applied (`pnpm format`)

Part of the "Road to No Explicit Any" initiative, cleaning up type
casting issues from branch `fix/remove-any-types-part8`.

### Previous PRs in this series:
- Part 2: #7401
- Part 3: #7935
- Part 4: #7970
- Part 5: #8064
- Part 6: #8083
- Part 7: #8092
- Part 8 Group 1: #8253
- Part 8 Group 2: #8258
- Part 8 Group 3: #8304
- Part 8 Group 4: #8314
- Part 8 Group 5: #8329
- Part 8 Group 6: #8344
- Part 8 Group 7: #8459 (this PR)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8459-Road-to-No-explicit-any-Group-8-part-7-test-files-2f86d73d36508114ad28d82e72a3a5e9)
by [Unito](https://www.unito.io)
Myestery added a commit that referenced this pull request Jan 30, 2026
## Summary

This PR removes unsafe type assertions ("as unknown as Type") from test
files and improves type safety across the codebase.

### Key Changes

#### Type Safety Improvements
- Removed improper `as unknown as Type` patterns from test files in
Group 8 part 8
- Replaced with proper TypeScript patterns using Pinia store testing
patterns
- Fixed parameter shadowing issue in typeGuardUtil.test.ts (constructor
→ nodeConstructor)
- Fixed stale mock values in useConflictDetection.test.ts using getter
functions
- Refactored useManagerState tests to follow proper Pinia store testing
patterns with createTestingPinia

### Files Changed

Test files (Group 8 part 8 - utils and manager composables):
- src/utils/typeGuardUtil.test.ts - Fixed parameter shadowing
- src/utils/graphTraversalUtil.test.ts - Removed unsafe type assertions
- src/utils/litegraphUtil.test.ts - Improved type handling
- src/workbench/extensions/manager/composables/useManagerState.test.ts -
Complete rewrite using Pinia testing patterns
-
src/workbench/extensions/manager/composables/useConflictDetection.test.ts
- Fixed stale mock values with getters
- src/workbench/extensions/manager/composables/useManagerQueue.test.ts -
Type safety improvements
-
src/workbench/extensions/manager/composables/nodePack/useMissingNodes.test.ts
- Removed unsafe casts
-
src/workbench/extensions/manager/composables/nodePack/usePacksSelection.test.ts
- Type improvements
-
src/workbench/extensions/manager/composables/nodePack/usePacksStatus.test.ts
- Type improvements
- src/workbench/extensions/manager/utils/versionUtil.test.ts - Type
safety fixes

Source files (minor type fixes):
- src/utils/fuseUtil.ts - Type improvements
- src/utils/linkFixer.ts - Type safety fixes
- src/utils/syncUtil.ts - Type improvements
-
src/workbench/extensions/manager/composables/nodePack/useWorkflowPacks.ts
- Type fix
-
src/workbench/extensions/manager/composables/useConflictAcknowledgment.ts
- Type fix

### Testing
- All TypeScript type checking passes (`pnpm typecheck`)
- All affected test files pass (`pnpm test:unit`)
- Linting passes without errors (`pnpm lint`)
- Code formatting applied (`pnpm format`)

Part of the "Road to No Explicit Any" initiative, cleaning up type
casting issues from branch `fix/remove-any-types-part8`.

### Previous PRs in this series:
- Part 2: #7401
- Part 3: #7935
- Part 4: #7970
- Part 5: #8064
- Part 6: #8083
- Part 7: #8092
- Part 8 Group 1: #8253
- Part 8 Group 2: #8258
- Part 8 Group 3: #8304
- Part 8 Group 4: #8314
- Part 8 Group 5: #8329
- Part 8 Group 6: #8344
- Part 8 Group 7: #8459
- Part 8 Group 8: #8496 (this PR)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8496-Road-to-No-explicit-any-Group-8-part-8-test-files-2f86d73d365081f3afdcf8d01fba81e1)
by [Unito](https://www.unito.io)

---------

Co-authored-by: GitHub Action <action@github.com>
DrJKL pushed a commit that referenced this pull request Jan 31, 2026
## Summary

This PR removes unsafe type assertions ("as unknown as Type") from test
files and improves type safety across the codebase.

### Key Changes

#### Type Safety Improvements
- Removed improper `as unknown as Type` patterns from 17 test files in
Group 8 part 7
- Replaced with proper TypeScript patterns using factory functions and
Mock types
- Fixed createTestingPinia usage in test files (was incorrectly using
createPinia)
- Fixed vi.hoisted pattern for mockSetDirty in viewport tests  
- Fixed vi.doMock lint issues with vi.mock and vi.hoisted pattern
- Retained necessary `as unknown as` casts only for complex mock objects
where direct type assertions would fail

### Files Changed

Test files (Group 8 part 7 - services, stores, utils):
- src/services/nodeOrganizationService.test.ts
- src/services/providers/algoliaSearchProvider.test.ts
- src/services/providers/registrySearchProvider.test.ts
- src/stores/comfyRegistryStore.test.ts
- src/stores/domWidgetStore.test.ts
- src/stores/executionStore.test.ts
- src/stores/firebaseAuthStore.test.ts
- src/stores/modelToNodeStore.test.ts
- src/stores/queueStore.test.ts
- src/stores/subgraphNavigationStore.test.ts
- src/stores/subgraphNavigationStore.viewport.test.ts
- src/stores/subgraphStore.test.ts
- src/stores/systemStatsStore.test.ts
- src/stores/workspace/nodeHelpStore.test.ts
- src/utils/colorUtil.test.ts
- src/utils/executableGroupNodeChildDTO.test.ts

Source files:
- src/stores/modelStore.ts - Improved type handling

### Testing
- All TypeScript type checking passes (`pnpm typecheck`)
- All affected test files pass (`pnpm test:unit`)
- Linting passes without errors (`pnpm lint`)
- Code formatting applied (`pnpm format`)

Part of the "Road to No Explicit Any" initiative, cleaning up type
casting issues from branch `fix/remove-any-types-part8`.

### Previous PRs in this series:
- Part 2: #7401
- Part 3: #7935
- Part 4: #7970
- Part 5: #8064
- Part 6: #8083
- Part 7: #8092
- Part 8 Group 1: #8253
- Part 8 Group 2: #8258
- Part 8 Group 3: #8304
- Part 8 Group 4: #8314
- Part 8 Group 5: #8329
- Part 8 Group 6: #8344
- Part 8 Group 7: #8459 (this PR)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8459-Road-to-No-explicit-any-Group-8-part-7-test-files-2f86d73d36508114ad28d82e72a3a5e9)
by [Unito](https://www.unito.io)
DrJKL pushed a commit that referenced this pull request Jan 31, 2026
## Summary

This PR removes unsafe type assertions ("as unknown as Type") from test
files and improves type safety across the codebase.

### Key Changes

#### Type Safety Improvements
- Removed improper `as unknown as Type` patterns from test files in
Group 8 part 8
- Replaced with proper TypeScript patterns using Pinia store testing
patterns
- Fixed parameter shadowing issue in typeGuardUtil.test.ts (constructor
→ nodeConstructor)
- Fixed stale mock values in useConflictDetection.test.ts using getter
functions
- Refactored useManagerState tests to follow proper Pinia store testing
patterns with createTestingPinia

### Files Changed

Test files (Group 8 part 8 - utils and manager composables):
- src/utils/typeGuardUtil.test.ts - Fixed parameter shadowing
- src/utils/graphTraversalUtil.test.ts - Removed unsafe type assertions
- src/utils/litegraphUtil.test.ts - Improved type handling
- src/workbench/extensions/manager/composables/useManagerState.test.ts -
Complete rewrite using Pinia testing patterns
-
src/workbench/extensions/manager/composables/useConflictDetection.test.ts
- Fixed stale mock values with getters
- src/workbench/extensions/manager/composables/useManagerQueue.test.ts -
Type safety improvements
-
src/workbench/extensions/manager/composables/nodePack/useMissingNodes.test.ts
- Removed unsafe casts
-
src/workbench/extensions/manager/composables/nodePack/usePacksSelection.test.ts
- Type improvements
-
src/workbench/extensions/manager/composables/nodePack/usePacksStatus.test.ts
- Type improvements
- src/workbench/extensions/manager/utils/versionUtil.test.ts - Type
safety fixes

Source files (minor type fixes):
- src/utils/fuseUtil.ts - Type improvements
- src/utils/linkFixer.ts - Type safety fixes
- src/utils/syncUtil.ts - Type improvements
-
src/workbench/extensions/manager/composables/nodePack/useWorkflowPacks.ts
- Type fix
-
src/workbench/extensions/manager/composables/useConflictAcknowledgment.ts
- Type fix

### Testing
- All TypeScript type checking passes (`pnpm typecheck`)
- All affected test files pass (`pnpm test:unit`)
- Linting passes without errors (`pnpm lint`)
- Code formatting applied (`pnpm format`)

Part of the "Road to No Explicit Any" initiative, cleaning up type
casting issues from branch `fix/remove-any-types-part8`.

### Previous PRs in this series:
- Part 2: #7401
- Part 3: #7935
- Part 4: #7970
- Part 5: #8064
- Part 6: #8083
- Part 7: #8092
- Part 8 Group 1: #8253
- Part 8 Group 2: #8258
- Part 8 Group 3: #8304
- Part 8 Group 4: #8314
- Part 8 Group 5: #8329
- Part 8 Group 6: #8344
- Part 8 Group 7: #8459
- Part 8 Group 8: #8496 (this PR)

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8496-Road-to-No-explicit-any-Group-8-part-8-test-files-2f86d73d365081f3afdcf8d01fba81e1)
by [Unito](https://www.unito.io)

---------

Co-authored-by: GitHub Action <action@github.com>
Myestery added a commit that referenced this pull request Feb 2, 2026
## Summary

This PR removes `any` types from UI component files and replaces them
with proper TypeScript types.

### Key Changes

#### Type Safety Improvements
- Replaced `any` with `unknown`, explicit types, or proper interfaces
across UI components
- Used `ComponentPublicInstance` with explicit method signatures for
component refs
- Used `Record<string, unknown>` for dynamic property access
- Added generics for form components with flexible value types
- Used `CSSProperties` for style objects

### Files Changed

UI Components:
- src/components/common/ComfyImage.vue - Used proper class prop type
- src/components/common/DeviceInfo.vue - Used `string | number` for
formatValue
- src/components/common/FormItem.vue - Used `unknown` for model value
- src/components/common/FormRadioGroup.vue - Added generic type
parameter
- src/components/common/TreeExplorer.vue - Used proper async function
signature
- src/components/custom/widget/WorkflowTemplateSelectorDialog.vue -
Fixed duplicate import
- src/components/graph/CanvasModeSelector.vue - Used
`ComponentPublicInstance` for ref
- src/components/node/NodePreview.vue - Changed `any` to `unknown`
- src/components/queue/job/JobDetailsPopover.vue - Removed unnecessary
casts
- src/components/queue/job/JobFiltersBar.vue - Removed `as any` casts
- src/platform/assets/components/MediaAssetContextMenu.vue - Added
`ContextMenuInstance` type
- src/renderer/extensions/minimap/MiniMapPanel.vue - Used
`CSSProperties`
- src/renderer/extensions/vueNodes/composables/useNodeTooltips.ts -
Added `PrimeVueTooltipElement` interface
-
src/renderer/extensions/vueNodes/widgets/components/form/FormSelectButton.vue
- Used `Record<string, unknown>`
-
src/workbench/extensions/manager/components/manager/infoPanel/tabs/DescriptionTabPanel.vue
- Added `LicenseObject` interface

### Testing
- All TypeScript type checking passes (`pnpm typecheck`)
- Linting passes without errors (`pnpm lint`)

Part of the "Road to No Explicit Any" initiative.

### Previous PRs in this series:
- Part 2: #7401
- Part 3: #7935
- Part 4: #7970
- Part 5: #8064
- Part 6: #8083
- Part 7: #8092
- Part 8 Group 1: #8253
- Part 8 Group 2: #8258
- Part 8 Group 3: #8304
- Part 8 Group 4: #8314
- Part 8 Group 5: #8329
- Part 8 Group 6: #8344
- Part 8 Group 7: #8459
- Part 8 Group 8: #8496
- Part 9: #8498
- Part 10: #8499

┆Issue is synchronized with this [Notion
page](https://www.notion.so/PR-8499-Road-to-No-Explicit-Any-Part-10-2f86d73d365081aab129f165c7d02434)
by [Unito](https://www.unito.io)
Myestery added a commit that referenced this pull request Feb 2, 2026
## Summary

This PR removes `any` types from core source files and replaces them
with proper TypeScript types.

### Key Changes

#### Type Safety Improvements
- Replaced `any` with `unknown`, explicit types, or proper interfaces
across core files
- Introduced new type definitions: `SceneConfig`, `Load3DNode`,
`ElectronWindow`
- Used `Object.assign` instead of `as any` for dynamic property
assignment
- Replaced `as any` casts with proper type assertions

### Files Changed

Source files:
- src/extensions/core/widgetInputs.ts - Removed unnecessary `as any`
cast
- src/platform/cloud/onboarding/auth.ts - Used `Record<string, unknown>`
and Sentry types
- src/platform/telemetry/providers/cloud/MixpanelTelemetryProvider.ts -
Used `AuditLog[]` type
- src/platform/workflow/management/stores/workflowStore.ts - Used
`typeof ComfyWorkflow` constructor type
- src/scripts/app.ts - Used `ResultItem[]` for Clipspace images
- src/services/colorPaletteService.ts - Used `Object.assign` instead of
`as any`
- src/services/customerEventsService.ts - Used `unknown` instead of
`any`
- src/services/load3dService.ts - Added proper interface types for
Load3D nodes
- src/types/litegraph-augmentation.d.ts - Used `TWidgetValue[]` type
- src/utils/envUtil.ts - Added ElectronWindow interface
- src/workbench/extensions/manager/stores/comfyManagerStore.ts - Typed
event as `CustomEvent<{ ui_id?: string }>`

### Testing
- All TypeScript type checking passes (`pnpm typecheck`)
- Linting passes without errors (`pnpm lint`)
- Code formatting applied (`pnpm format`)

Part of the "Road to No Explicit Any" initiative.

### Previous PRs in this series:
- Part 2: #7401
- Part 3: #7935
- Part 4: #7970
- Part 5: #8064
- Part 6: #8083
- Part 7: #8092
- Part 8 Group 1: #8253
- Part 8 Group 2: #8258
- Part 8 Group 3: #8304
- Part 8 Group 4: #8314
- Part 8 Group 5: #8329
- Part 8 Group 6: #8344
- Part 8 Group 7: #8459
- Part 8 Group 8: #8496
- Part 9: #8498 (this PR)
@Myestery Myestery mentioned this pull request Feb 3, 2026
5 tasks
AustinMroz pushed a commit that referenced this pull request Feb 6, 2026
## Summary

This PR removes `any` types from widgets, services, stores, and test
files, replacing them with proper TypeScript types.

### Key Changes

#### Type Safety Improvements
- Replaced `any` with `unknown`, explicit types, or proper interfaces
across widgets and services
- Added proper type imports (TgpuRoot, Point, StyleValue, etc.)
- Created typed interfaces (NumericWidgetOptions, TestWindow,
ImportFailureDetail, etc.)
- Fixed function return types to be non-nullable where appropriate
- Added type guards and null checks instead of non-null assertions
- Used `ComponentProps` from vue-component-type-helpers for component
testing

#### Widget System
- Added index signature to IWidgetOptions for Record compatibility
- Centralized disabled logic in WidgetInputNumberInput
- Moved template type assertions to computed properties
- Fixed ComboWidget getOptionLabel type assertions
- Improved remote widget type handling with runtime checks

#### Services & Stores
- Fixed getOrCreateViewer to return non-nullable values
- Updated addNodeOnGraph to use specific options type `{ pos?: Point }`
- Added proper type assertions for settings store retrieval
- Fixed executionIdToCurrentId return type (string | undefined)

#### Test Infrastructure
- Exported GraphOrSubgraph from litegraph barrel to avoid circular
dependencies
- Updated test fixtures with proper TypeScript types (TestInfo,
LGraphNode)
- Replaced loose Record types with ComponentProps in tests
- Added proper error handling in WebSocket fixture

#### Code Organization
- Created shared i18n-types module for locale data types
- Made ImportFailureDetail non-exported (internal use only)
- Added @public JSDoc tag to ElectronWindow type
- Fixed console.log usage in scripts to use allowed methods

### Files Changed

**Widgets & Components:**
-
src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.vue
-
src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue
-
src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue
- src/renderer/extensions/vueNodes/widgets/components/WidgetTextarea.vue
-
src/renderer/extensions/vueNodes/widgets/composables/useRemoteWidget.ts
- src/lib/litegraph/src/widgets/ComboWidget.ts
- src/lib/litegraph/src/types/widgets.ts
- src/components/common/LazyImage.vue
- src/components/load3d/Load3dViewerContent.vue

**Services & Stores:**
- src/services/litegraphService.ts
- src/services/load3dService.ts
- src/services/colorPaletteService.ts
- src/stores/maskEditorStore.ts
- src/stores/nodeDefStore.ts
- src/platform/settings/settingStore.ts
- src/platform/workflow/management/stores/workflowStore.ts

**Composables & Utils:**
- src/composables/node/useWatchWidget.ts
- src/composables/useCanvasDrop.ts
- src/utils/widgetPropFilter.ts
- src/utils/queueDisplay.ts
- src/utils/envUtil.ts

**Test Files:**
- browser_tests/fixtures/ComfyPage.ts
- browser_tests/fixtures/ws.ts
- browser_tests/tests/actionbar.spec.ts
-
src/workbench/extensions/manager/components/manager/skeleton/PackCardGridSkeleton.test.ts
- src/lib/litegraph/src/subgraph/subgraphUtils.test.ts
- src/components/rightSidePanel/shared.test.ts
- src/platform/cloud/subscription/composables/useSubscription.test.ts
-
src/platform/workflow/persistence/composables/useWorkflowPersistence.test.ts

**Scripts & Types:**
- scripts/i18n-types.ts (new shared module)
- scripts/diff-i18n.ts
- scripts/check-unused-i18n-keys.ts
- src/workbench/extensions/manager/types/conflictDetectionTypes.ts
- src/types/algoliaTypes.ts
- src/types/simplifiedWidget.ts

**Infrastructure:**
- src/lib/litegraph/src/litegraph.ts (added GraphOrSubgraph export)
- src/lib/litegraph/src/infrastructure/CustomEventTarget.ts
- src/platform/assets/services/assetService.ts

**Stories:**
- apps/desktop-ui/src/views/InstallView.stories.ts
- src/components/queue/job/JobDetailsPopover.stories.ts

**Extension Manager:**
- src/workbench/extensions/manager/composables/useConflictDetection.ts
- src/workbench/extensions/manager/composables/useManagerQueue.ts
- src/workbench/extensions/manager/services/comfyManagerService.ts
- src/workbench/extensions/manager/utils/conflictMessageUtil.ts

### Testing

- [x] All TypeScript type checking passes (`pnpm typecheck`)
- [x] ESLint passes without errors (`pnpm lint`)
- [x] Format checks pass (`pnpm format:check`)
- [x] Knip (unused exports) passes (`pnpm knip`)
- [x] Pre-commit and pre-push hooks pass

Part of the "Road to No Explicit Any" initiative.

### Previous PRs in this series:
- Part 2: #7401
- Part 3: #7935
- Part 4: #7970
- Part 5: #8064
- Part 6: #8083
- Part 7: #8092
- Part 8 Group 1: #8253
- Part 8 Group 2: #8258
- Part 8 Group 3: #8304
- Part 8 Group 4: #8314
- Part 8 Group 5: #8329
- Part 8 Group 6: #8344
- Part 8 Group 7: #8459
- Part 8 Group 8: #8496
- Part 9: #8498
- Part 10: #8499

---------

Co-authored-by: Comfy Org PR Bot <snomiao+comfy-pr@gmail.com>
Co-authored-by: christian-byrne <72887196+christian-byrne@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
@coderabbitai coderabbitai bot mentioned this pull request Feb 6, 2026
4 tasks
snomiao pushed a commit that referenced this pull request Feb 6, 2026
## Summary

This PR removes `any` types from widgets, services, stores, and test
files, replacing them with proper TypeScript types.

### Key Changes

#### Type Safety Improvements
- Replaced `any` with `unknown`, explicit types, or proper interfaces
across widgets and services
- Added proper type imports (TgpuRoot, Point, StyleValue, etc.)
- Created typed interfaces (NumericWidgetOptions, TestWindow,
ImportFailureDetail, etc.)
- Fixed function return types to be non-nullable where appropriate
- Added type guards and null checks instead of non-null assertions
- Used `ComponentProps` from vue-component-type-helpers for component
testing

#### Widget System
- Added index signature to IWidgetOptions for Record compatibility
- Centralized disabled logic in WidgetInputNumberInput
- Moved template type assertions to computed properties
- Fixed ComboWidget getOptionLabel type assertions
- Improved remote widget type handling with runtime checks

#### Services & Stores
- Fixed getOrCreateViewer to return non-nullable values
- Updated addNodeOnGraph to use specific options type `{ pos?: Point }`
- Added proper type assertions for settings store retrieval
- Fixed executionIdToCurrentId return type (string | undefined)

#### Test Infrastructure
- Exported GraphOrSubgraph from litegraph barrel to avoid circular
dependencies
- Updated test fixtures with proper TypeScript types (TestInfo,
LGraphNode)
- Replaced loose Record types with ComponentProps in tests
- Added proper error handling in WebSocket fixture

#### Code Organization
- Created shared i18n-types module for locale data types
- Made ImportFailureDetail non-exported (internal use only)
- Added @public JSDoc tag to ElectronWindow type
- Fixed console.log usage in scripts to use allowed methods

### Files Changed

**Widgets & Components:**
-
src/renderer/extensions/vueNodes/widgets/components/WidgetInputNumberInput.vue
-
src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDefault.vue
-
src/renderer/extensions/vueNodes/widgets/components/WidgetSelectDropdown.vue
- src/renderer/extensions/vueNodes/widgets/components/WidgetTextarea.vue
-
src/renderer/extensions/vueNodes/widgets/composables/useRemoteWidget.ts
- src/lib/litegraph/src/widgets/ComboWidget.ts
- src/lib/litegraph/src/types/widgets.ts
- src/components/common/LazyImage.vue
- src/components/load3d/Load3dViewerContent.vue

**Services & Stores:**
- src/services/litegraphService.ts
- src/services/load3dService.ts
- src/services/colorPaletteService.ts
- src/stores/maskEditorStore.ts
- src/stores/nodeDefStore.ts
- src/platform/settings/settingStore.ts
- src/platform/workflow/management/stores/workflowStore.ts

**Composables & Utils:**
- src/composables/node/useWatchWidget.ts
- src/composables/useCanvasDrop.ts
- src/utils/widgetPropFilter.ts
- src/utils/queueDisplay.ts
- src/utils/envUtil.ts

**Test Files:**
- browser_tests/fixtures/ComfyPage.ts
- browser_tests/fixtures/ws.ts
- browser_tests/tests/actionbar.spec.ts
-
src/workbench/extensions/manager/components/manager/skeleton/PackCardGridSkeleton.test.ts
- src/lib/litegraph/src/subgraph/subgraphUtils.test.ts
- src/components/rightSidePanel/shared.test.ts
- src/platform/cloud/subscription/composables/useSubscription.test.ts
-
src/platform/workflow/persistence/composables/useWorkflowPersistence.test.ts

**Scripts & Types:**
- scripts/i18n-types.ts (new shared module)
- scripts/diff-i18n.ts
- scripts/check-unused-i18n-keys.ts
- src/workbench/extensions/manager/types/conflictDetectionTypes.ts
- src/types/algoliaTypes.ts
- src/types/simplifiedWidget.ts

**Infrastructure:**
- src/lib/litegraph/src/litegraph.ts (added GraphOrSubgraph export)
- src/lib/litegraph/src/infrastructure/CustomEventTarget.ts
- src/platform/assets/services/assetService.ts

**Stories:**
- apps/desktop-ui/src/views/InstallView.stories.ts
- src/components/queue/job/JobDetailsPopover.stories.ts

**Extension Manager:**
- src/workbench/extensions/manager/composables/useConflictDetection.ts
- src/workbench/extensions/manager/composables/useManagerQueue.ts
- src/workbench/extensions/manager/services/comfyManagerService.ts
- src/workbench/extensions/manager/utils/conflictMessageUtil.ts

### Testing

- [x] All TypeScript type checking passes (`pnpm typecheck`)
- [x] ESLint passes without errors (`pnpm lint`)
- [x] Format checks pass (`pnpm format:check`)
- [x] Knip (unused exports) passes (`pnpm knip`)
- [x] Pre-commit and pre-push hooks pass

Part of the "Road to No Explicit Any" initiative.

### Previous PRs in this series:
- Part 2: #7401
- Part 3: #7935
- Part 4: #7970
- Part 5: #8064
- Part 6: #8083
- Part 7: #8092
- Part 8 Group 1: #8253
- Part 8 Group 2: #8258
- Part 8 Group 3: #8304
- Part 8 Group 4: #8314
- Part 8 Group 5: #8329
- Part 8 Group 6: #8344
- Part 8 Group 7: #8459
- Part 8 Group 8: #8496
- Part 9: #8498
- Part 10: #8499

---------

Co-authored-by: Comfy Org PR Bot <snomiao+comfy-pr@gmail.com>
Co-authored-by: christian-byrne <72887196+christian-byrne@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
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.

2 participants