Skip to content

Road to No explicit any: Group 8 (part 8) test files#8496

Merged
Myestery merged 5 commits intomainfrom
fix/remove-any-types-part8
Jan 30, 2026
Merged

Road to No explicit any: Group 8 (part 8) test files#8496
Myestery merged 5 commits intomainfrom
fix/remove-any-types-part8

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 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:

┆Issue is synchronized with this Notion page by Unito

…tterns

- Use createTestingPinia and setActivePinia for proper store setup
- Replace manual mock factories with store.() for state changes
- Remove custom type casting and use proper Pinia patterns
- Eliminate all 'as any' usage in favor of proper typing
- All 13 original tests passing with improved implementation
- Fix constructor parameter shadowing in typeGuardUtil.test.ts
- Use getter functions for dynamic mock values in useConflictDetection.test.ts
@dosubot dosubot bot added the size:XL This PR changes 500-999 lines, ignoring generated files. label Jan 30, 2026
@github-actions
Copy link

github-actions bot commented Jan 30, 2026

🎨 Storybook Build Status

Build completed successfully!

⏰ Completed at: 01/30/2026, 08:44:22 PM UTC

🔗 Links


🎉 Your Storybook is ready for review!

@github-actions
Copy link

github-actions bot commented Jan 30, 2026

🎭 Playwright Tests: ⚠️ Passed with flaky tests

Results: 503 passed, 0 failed, 2 flaky, 8 skipped (Total: 513)

❌ Failed Tests

📊 Browser Reports
  • chromium: View Report (✅ 491 / ❌ 0 / ⚠️ 2 / ⏭️ 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)

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 30, 2026

📝 Walkthrough

Walkthrough

This PR improves TypeScript type-safety across utility functions and test files by introducing stricter type guards, replacing unsafe type casts with factory functions and satisfies operators, narrowing parameter types, and exporting previously internal types. Changes affect core utilities, test mock infrastructure, and manager composables.

Changes

Cohort / File(s) Summary
Core Utilities Type Safety
src/utils/fuseUtil.ts, src/utils/linkFixer.ts, src/utils/syncUtil.ts
Stricter type guards in isFuseSearchable with runtime object checks; tightened logger typing from any to unknown; imported INodeOutputSlot for precise output slot typing; narrowed syncEntities callback parameters from any to UserDataFullInfo & { path: string }.
Test Mock Infrastructure
src/utils/graphTraversalUtil.test.ts, src/utils/litegraphUtil.test.ts, src/utils/typeGuardUtil.test.ts
Replaced manual mock node construction with createMockLGraphNode factory; strengthened type-safety using satisfies operator instead of broad casts; replaced direct property mutations via any-casts with direct assignments; relaxed test type assertions with Partial patterns for mock scaffolding.
Manager Node Pack Composables
src/workbench/extensions/manager/composables/nodePack/useMissingNodes.test.ts, src/workbench/extensions/manager/composables/nodePack/usePacksSelection.test.ts, src/workbench/extensions/manager/composables/nodePack/usePacksStatus.test.ts, src/workbench/extensions/manager/composables/nodePack/useWorkflowPacks.ts
Strengthened mocking with centralized createMockLGraphNode utility; removed explicit any casts for undefined ids; exported WorkflowPack type to enable external imports.
Manager Conflict Detection
src/workbench/extensions/manager/composables/useConflictAcknowledgment.ts, src/workbench/extensions/manager/composables/useConflictDetection.test.ts
Exported ConflictAcknowledgmentState interface for public use; tightened mock structures using Partial<ReturnType<...>> patterns; replaced Vue ref-based mockConflictedPackages with plain array; converted computed properties to getters; improved import failure mock typing.
Manager Queue & State Tests
src/workbench/extensions/manager/composables/useManagerQueue.test.ts, src/workbench/extensions/manager/composables/useManagerState.test.ts, src/workbench/extensions/manager/utils/versionUtil.test.ts
Added Ref wrapper types for task history and queue; updated test data structures to align with new TaskStateMessage schema; introduced Pinia createTestingPinia for isolated test environments; replaced null as any casts with null! assertions.

Possibly related PRs

Suggested reviewers

  • viva-jinyi
  • christian-byrne
  • ltdrdata
  • Myestery
✨ 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-part8

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

Bundle Size Report

Summary

  • Raw size: 22.1 MB baseline 22.1 MB — 🔴 +58 B
  • Gzip: 4.61 MB baseline 4.61 MB — 🟢 -96 B
  • Brotli: 3.42 MB baseline 3.42 MB — 🔴 +50 B
  • Bundles: 173 current • 173 baseline • 81 added / 81 removed

Category Glance
Data & Services 🔴 +58 B (2.71 MB) · Vendor & Third-Party ⚪ 0 B (10.7 MB) · Other ⚪ 0 B (7.1 MB) · Graph Workspace ⚪ 0 B (974 kB) · Panels & Settings ⚪ 0 B (471 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-CiXDufVA.js (removed) 26 kB 🟢 -26 kB 🟢 -7.51 kB 🟢 -6.6 kB
assets/index-DziwVw0e.js (new) 26 kB 🔴 +26 kB 🔴 +7.51 kB 🔴 +6.62 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-E3TKdbtT.js (new) 974 kB 🔴 +974 kB 🔴 +197 kB 🔴 +149 kB
assets/GraphView-f1d4Bv_n.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-b-uOBSg5.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +3.6 kB 🔴 +3.05 kB
assets/CloudSurveyView-C1yZR7Se.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -3.61 kB 🟢 -3.05 kB
assets/CloudLoginView-Bhp9qgG6.js (new) 11.8 kB 🔴 +11.8 kB 🔴 +3.09 kB 🔴 +2.72 kB
assets/CloudLoginView-DF8ij_lj.js (removed) 11.8 kB 🟢 -11.8 kB 🟢 -3.09 kB 🟢 -2.72 kB
assets/UserCheckView-BLCJ6Y45.js (removed) 10.5 kB 🟢 -10.5 kB 🟢 -2.45 kB 🟢 -2.13 kB
assets/UserCheckView-YRP2lNt2.js (new) 10.5 kB 🔴 +10.5 kB 🔴 +2.44 kB 🔴 +2.13 kB
assets/CloudLayoutView-BCXLju9x.js (removed) 8.54 kB 🟢 -8.54 kB 🟢 -2.25 kB 🟢 -1.95 kB
assets/CloudLayoutView-CKbPQGb4.js (new) 8.54 kB 🔴 +8.54 kB 🔴 +2.24 kB 🔴 +1.95 kB
assets/CloudSignupView-C-N6QGgO.js (removed) 8.18 kB 🟢 -8.18 kB 🟢 -2.33 kB 🟢 -2.02 kB
assets/CloudSignupView-CJb4po4r.js (new) 8.18 kB 🔴 +8.18 kB 🔴 +2.33 kB 🔴 +2.02 kB
assets/CloudForgotPasswordView-DXs7X-Fd.js (removed) 6.26 kB 🟢 -6.26 kB 🟢 -1.93 kB 🟢 -1.69 kB
assets/CloudForgotPasswordView-RkuE_vc4.js (new) 6.26 kB 🔴 +6.26 kB 🔴 +1.92 kB 🔴 +1.68 kB
assets/UserSelectView-C3q8POe0.js (removed) 5.28 kB 🟢 -5.28 kB 🟢 -1.76 kB 🟢 -1.57 kB
assets/UserSelectView-CFba_o_u.js (new) 5.28 kB 🔴 +5.28 kB 🔴 +1.76 kB 🔴 +1.57 kB
assets/CloudSubscriptionRedirectView-BtU4EL61.js (new) 5.27 kB 🔴 +5.27 kB 🔴 +1.73 kB 🔴 +1.54 kB
assets/CloudSubscriptionRedirectView-DZCWkkKt.js (removed) 5.27 kB 🟢 -5.27 kB 🟢 -1.73 kB 🟢 -1.54 kB
assets/CloudAuthTimeoutView-9NckCSTh.js (new) 5.24 kB 🔴 +5.24 kB 🔴 +1.7 kB 🔴 +1.48 kB
assets/CloudAuthTimeoutView-D7JZf0b2.js (removed) 5.24 kB 🟢 -5.24 kB 🟢 -1.71 kB 🟢 -1.48 kB
assets/CloudSorryContactSupportView-cm9oKn4s.js 1.97 kB 1.97 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/layout-CUzumK-h.js 500 B 500 B ⚪ 0 B ⚪ 0 B ⚪ 0 B

Status: 9 added / 9 removed

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

Configuration panels, inspectors, and settings screens

File Before After Δ Raw Δ Gzip Δ Brotli
assets/WorkspacePanel-BHPLetoG.js (new) 29.8 kB 🔴 +29.8 kB 🔴 +5.89 kB 🔴 +5.14 kB
assets/WorkspacePanel-CeWtgEu5.js (removed) 29.8 kB 🟢 -29.8 kB 🟢 -5.89 kB 🟢 -5.14 kB
assets/LegacyCreditsPanel-Bapmkwub.js (new) 23.8 kB 🔴 +23.8 kB 🔴 +5.94 kB 🔴 +5.22 kB
assets/LegacyCreditsPanel-dYaazqQm.js (removed) 23.8 kB 🟢 -23.8 kB 🟢 -5.95 kB 🟢 -5.22 kB
assets/SubscriptionPanel-DmfUyzG0.js (removed) 21 kB 🟢 -21 kB 🟢 -5.05 kB 🟢 -4.46 kB
assets/SubscriptionPanel-vSmocmGk.js (new) 21 kB 🔴 +21 kB 🔴 +5.05 kB 🔴 +4.46 kB
assets/KeybindingPanel-CbxomNbY.js (new) 14.3 kB 🔴 +14.3 kB 🔴 +3.77 kB 🔴 +3.35 kB
assets/KeybindingPanel-CVtXDEQT.js (removed) 14.3 kB 🟢 -14.3 kB 🟢 -3.77 kB 🟢 -3.35 kB
assets/AboutPanel-DeLR7fn9.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.68 kB 🟢 -2.42 kB
assets/AboutPanel-nYc-goZ6.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.68 kB 🔴 +2.42 kB
assets/ExtensionPanel-FwV9pOOK.js (removed) 10.2 kB 🟢 -10.2 kB 🟢 -2.71 kB 🟢 -2.4 kB
assets/ExtensionPanel-RnLjdOiz.js (new) 10.2 kB 🔴 +10.2 kB 🔴 +2.71 kB 🔴 +2.41 kB
assets/ServerConfigPanel-BVTsTs9T.js (removed) 7.23 kB 🟢 -7.23 kB 🟢 -2.17 kB 🟢 -1.94 kB
assets/ServerConfigPanel-DQG3ouO2.js (new) 7.23 kB 🔴 +7.23 kB 🔴 +2.17 kB 🔴 +1.94 kB
assets/UserPanel-BAp25Wou.js (new) 6.58 kB 🔴 +6.58 kB 🔴 +1.9 kB 🔴 +1.67 kB
assets/UserPanel-CPtflPUj.js (removed) 6.58 kB 🟢 -6.58 kB 🟢 -1.91 kB 🟢 -1.67 kB
assets/refreshRemoteConfig-CknSupdc.js (removed) 1.31 kB 🟢 -1.31 kB 🟢 -572 B 🟢 -499 B
assets/refreshRemoteConfig-Dx3oUVtp.js (new) 1.31 kB 🔴 +1.31 kB 🔴 +573 B 🔴 +500 B
assets/config-DDgMS6XZ.js (removed) 1.15 kB 🟢 -1.15 kB 🟢 -605 B 🟢 -529 B
assets/config-DKvuuVoW.js (new) 1.15 kB 🔴 +1.15 kB 🔴 +605 B 🔴 +530 B
assets/cloudRemoteConfig-BDtRFanX.js (new) 1.11 kB 🔴 +1.11 kB 🔴 +507 B 🔴 +437 B
assets/cloudRemoteConfig-CDzO4uyh.js (removed) 1.11 kB 🟢 -1.11 kB 🟢 -508 B 🟢 -436 B
assets/refreshRemoteConfig-9sJLKeCj.js (new) 169 B 🔴 +169 B 🔴 +108 B 🔴 +101 B
assets/refreshRemoteConfig-BH0ok5VW.js (removed) 169 B 🟢 -169 B 🟢 -108 B 🟢 -104 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-C4TWgs0E.js (new) 3.54 kB 🔴 +3.54 kB 🔴 +1.24 kB 🔴 +1.07 kB
assets/auth-PO_4-jLv.js (removed) 3.54 kB 🟢 -3.54 kB 🟢 -1.24 kB 🟢 -1.06 kB
assets/firebaseAuthStore-cgKkGfsC.js (new) 217 B 🔴 +217 B 🔴 +138 B 🔴 +122 B
assets/firebaseAuthStore-O4gUb0ee.js (removed) 217 B 🟢 -217 B 🟢 -138 B 🟢 -119 B
assets/auth-CGpHf-TE.js (removed) 178 B 🟢 -178 B 🟢 -142 B 🟢 -144 B
assets/auth-DMAFULbN.js (new) 178 B 🔴 +178 B 🔴 +142 B 🔴 +133 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-CesVJtSP.js (removed) 2.71 kB 🟢 -2.71 kB 🟢 -1.29 kB 🟢 -1.15 kB
assets/useSubscriptionDialog-DrTUY8WC.js (new) 2.71 kB 🔴 +2.71 kB 🔴 +1.29 kB 🔴 +1.13 kB
assets/useSubscriptionDialog-BNBKwGBM.js (new) 179 B 🔴 +179 B 🔴 +110 B 🔴 +103 B
assets/useSubscriptionDialog-DikHBwdK.js (removed) 179 B 🟢 -179 B 🟢 -110 B 🟢 -102 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-B_clvCBp.js (new) 9.52 kB 🔴 +9.52 kB 🔴 +2.69 kB 🔴 +2.42 kB
assets/ComfyQueueButton-DUoFGOc2.js (removed) 9.52 kB 🟢 -9.52 kB 🟢 -2.69 kB 🟢 -2.41 kB
assets/SubscribeButton-BGBZ_6a9.js (removed) 4.63 kB 🟢 -4.63 kB 🟢 -1.57 kB 🟢 -1.39 kB
assets/SubscribeButton-GSudfBDn.js (new) 4.63 kB 🔴 +4.63 kB 🔴 +1.57 kB 🔴 +1.39 kB
assets/cloudFeedbackTopbarButton-C5UkmgWC.js (new) 1.24 kB 🔴 +1.24 kB 🔴 +674 B 🔴 +572 B
assets/cloudFeedbackTopbarButton-sTQ4zm1s.js (removed) 1.24 kB 🟢 -1.24 kB 🟢 -675 B 🟢 -566 B
assets/ComfyQueueButton-CAYha8Iz.js (new) 181 B 🔴 +181 B 🔴 +118 B 🔴 +122 B
assets/ComfyQueueButton-nO0YvM_h.js (removed) 181 B 🟢 -181 B 🟢 -118 B 🟢 -120 B
assets/Button-DbRyW27H.js 3.82 kB 3.82 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/CloudBadge-DdpkQvvD.js 1.85 kB 1.85 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/TopbarBadge-BFw4kSAY.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-CVau1vM3.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) • 🔴 +58 B

Stores, services, APIs, and repositories

File Before After Δ Raw Δ Gzip Δ Brotli
assets/dialogService-Dbalwv0r.js (new) 2.01 MB 🔴 +2.01 MB 🔴 +425 kB 🔴 +324 kB
assets/dialogService-0uwQV6SE.js (removed) 2.01 MB 🟢 -2.01 MB 🟢 -425 kB 🟢 -324 kB
assets/api-BJZQmb6f.js (removed) 675 kB 🟢 -675 kB 🟢 -149 kB 🟢 -119 kB
assets/api-Dg6c3Zkm.js (new) 675 kB 🔴 +675 kB 🔴 +149 kB 🔴 +119 kB
assets/releaseStore-BX3ZloZN.js (new) 8.91 kB 🔴 +8.91 kB 🔴 +2.4 kB 🔴 +2.12 kB
assets/releaseStore-DoIF9q2t.js (removed) 8.91 kB 🟢 -8.91 kB 🟢 -2.4 kB 🟢 -2.12 kB
assets/keybindingService-BLb9oMOI.js (new) 6.74 kB 🔴 +6.74 kB 🔴 +1.75 kB 🔴 +1.53 kB
assets/keybindingService-CM0SWccQ.js (removed) 6.74 kB 🟢 -6.74 kB 🟢 -1.75 kB 🟢 -1.53 kB
assets/bootstrapStore-BZ7S-_eR.js (new) 2.69 kB 🔴 +2.69 kB 🔴 +1.03 kB 🔴 +964 B
assets/bootstrapStore-D2NlxE61.js (removed) 2.69 kB 🟢 -2.69 kB 🟢 -1.03 kB 🟢 -971 B
assets/userStore-CAxkHykB.js (removed) 2.16 kB 🟢 -2.16 kB 🟢 -816 B 🟢 -724 B
assets/userStore-DuYOJJL2.js (new) 2.16 kB 🔴 +2.16 kB 🔴 +812 B 🔴 +727 B
assets/audioService-B2NSKVmr.js (new) 2.03 kB 🔴 +2.03 kB 🔴 +928 B 🔴 +815 B
assets/audioService-FOZnlLxU.js (removed) 2.03 kB 🟢 -2.03 kB 🟢 -928 B 🟢 -813 B
assets/releaseStore-BX0YiT2O.js (new) 140 B 🔴 +140 B 🔴 +106 B 🔴 +106 B
assets/releaseStore-CUGXG0Yr.js (removed) 140 B 🟢 -140 B 🟢 -106 B 🟢 -116 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-CRVVrvQ8.js (new) 5.21 kB 🔴 +5.21 kB 🔴 +1.54 kB 🔴 +1.34 kB
assets/useErrorHandling-JBmn0cqZ.js (removed) 5.21 kB 🟢 -5.21 kB 🟢 -1.54 kB 🟢 -1.34 kB
assets/useWorkspaceUI-1ExfDg5O.js (new) 3.42 kB 🔴 +3.42 kB 🔴 +975 B 🔴 +837 B
assets/useWorkspaceUI-DYFl5vvA.js (removed) 3.42 kB 🟢 -3.42 kB 🟢 -976 B 🟢 -843 B
assets/useSubscriptionActions-CJ9q2VOM.js (removed) 2.22 kB 🟢 -2.22 kB 🟢 -871 B 🟢 -765 B
assets/useSubscriptionActions-DQXbKSSE.js (new) 2.22 kB 🔴 +2.22 kB 🔴 +869 B 🔴 +765 B
assets/subscriptionCheckoutUtil-ffrI7mDD.js (new) 2.03 kB 🔴 +2.03 kB 🔴 +871 B 🔴 +768 B
assets/subscriptionCheckoutUtil-o5-6GIUY.js (removed) 2.03 kB 🟢 -2.03 kB 🟢 -873 B 🟢 -772 B
assets/useSubscriptionCredits-CgkHyVk4.js (removed) 1.39 kB 🟢 -1.39 kB 🟢 -599 B 🟢 -528 B
assets/useSubscriptionCredits-f22OAmwf.js (new) 1.39 kB 🔴 +1.39 kB 🔴 +596 B 🔴 +530 B
assets/audioUtils-B9lnoR9u.js (new) 970 B 🔴 +970 B 🔴 +545 B 🔴 +459 B
assets/audioUtils-DWW9CWk5.js (removed) 970 B 🟢 -970 B 🟢 -549 B 🟢 -459 B
assets/useCurrentUser-CrMuhwiJ.js (removed) 145 B 🟢 -145 B 🟢 -114 B 🟢 -101 B
assets/useCurrentUser-DDSKJvRw.js (new) 145 B 🔴 +145 B 🔴 +114 B 🔴 +106 B
assets/_plugin-vue_export-helper-DuK_Fly3.js 467 B 467 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/colorUtil-DfMUHmsF.js 7.2 kB 7.2 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/markdownRendererUtil-DM9z_tTX.js 1.78 kB 1.78 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/tailwindUtil-BWBAZ7f9.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-B3TsI6ya.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) • ⚪ 0 B

Bundles that do not match a named category

File Before After Δ Raw Δ Gzip Δ Brotli
assets/core-B_F_90Tj.js (removed) 180 kB 🟢 -180 kB 🟢 -43.3 kB 🟢 -36.2 kB
assets/core-B-wJYJ52.js (new) 180 kB 🔴 +180 kB 🔴 +43.3 kB 🔴 +36.2 kB
assets/WidgetSelect-38XWSCP1.js (new) 52.2 kB 🔴 +52.2 kB 🔴 +11.5 kB 🔴 +10 kB
assets/WidgetSelect-V0Xn9tf3.js (removed) 52.2 kB 🟢 -52.2 kB 🟢 -11.5 kB 🟢 -10 kB
assets/Load3DControls-DlFDaBJw.js (new) 35.9 kB 🔴 +35.9 kB 🔴 +5.87 kB 🔴 +5.09 kB
assets/Load3DControls-UypCpLuT.js (removed) 35.9 kB 🟢 -35.9 kB 🟢 -5.87 kB 🟢 -5.09 kB
assets/SubscriptionRequiredDialogContent-BEShncKn.js (removed) 28.7 kB 🟢 -28.7 kB 🟢 -6.79 kB 🟢 -5.91 kB
assets/SubscriptionRequiredDialogContent-DC72-spt.js (new) 28.7 kB 🔴 +28.7 kB 🔴 +6.78 kB 🔴 +5.92 kB
assets/CurrentUserPopoverWorkspace-BB6f6LpS.js (new) 22.2 kB 🔴 +22.2 kB 🔴 +4.99 kB 🔴 +4.43 kB
assets/CurrentUserPopoverWorkspace-CHg5Xmg4.js (removed) 22.2 kB 🟢 -22.2 kB 🟢 -4.99 kB 🟢 -4.43 kB
assets/Load3D-B09CSjf9.js (removed) 19.2 kB 🟢 -19.2 kB 🟢 -4.38 kB 🟢 -3.86 kB
assets/Load3D-CE9QeX0H.js (new) 19.2 kB 🔴 +19.2 kB 🔴 +4.38 kB 🔴 +3.85 kB
assets/WidgetInputNumber-BzafQ42N.js (new) 18.3 kB 🔴 +18.3 kB 🔴 +4.53 kB 🔴 +4.03 kB
assets/WidgetInputNumber-kWW7Vca_.js (removed) 18.3 kB 🟢 -18.3 kB 🟢 -4.53 kB 🟢 -4.03 kB
assets/WidgetRecordAudio-BmfG9tRs.js (removed) 18.3 kB 🟢 -18.3 kB 🟢 -4.97 kB 🟢 -4.44 kB
assets/WidgetRecordAudio-Cq1rRSXU.js (new) 18.3 kB 🔴 +18.3 kB 🔴 +4.97 kB 🔴 +4.44 kB
assets/SubscriptionPanelContentWorkspace-BR98i7AL.js (new) 18.2 kB 🔴 +18.2 kB 🔴 +4.47 kB 🔴 +3.9 kB
assets/SubscriptionPanelContentWorkspace-DVDESrLX.js (removed) 18.2 kB 🟢 -18.2 kB 🟢 -4.48 kB 🟢 -3.9 kB
assets/WidgetImageCrop-BwvdexmA.js (removed) 17.1 kB 🟢 -17.1 kB 🟢 -4.13 kB 🟢 -3.63 kB
assets/WidgetImageCrop-D9X_MlGH.js (new) 17.1 kB 🔴 +17.1 kB 🔴 +4.14 kB 🔴 +3.63 kB
assets/PanelTemplate-3M_WJBIM.js (removed) 16.2 kB 🟢 -16.2 kB 🟢 -5.46 kB 🟢 -4.8 kB
assets/PanelTemplate-U8j3B1rW.js (new) 16.2 kB 🔴 +16.2 kB 🔴 +5.45 kB 🔴 +4.8 kB
assets/AudioPreviewPlayer-BIeOiMpk.js (removed) 10.8 kB 🟢 -10.8 kB 🟢 -2.97 kB 🟢 -2.65 kB
assets/AudioPreviewPlayer-vdpPTcj_.js (new) 10.8 kB 🔴 +10.8 kB 🔴 +2.97 kB 🔴 +2.66 kB
assets/InviteMemberDialogContent-BuMWMFHK.js (removed) 8.36 kB 🟢 -8.36 kB 🟢 -2.51 kB 🟢 -2.17 kB
assets/InviteMemberDialogContent-c6T3kFVU.js (new) 8.36 kB 🔴 +8.36 kB 🔴 +2.5 kB 🔴 +2.17 kB
assets/WidgetWithControl-C5CKW2WP.js (new) 8.07 kB 🔴 +8.07 kB 🔴 +2.68 kB 🔴 +2.42 kB
assets/WidgetWithControl-khbMSkpZ.js (removed) 8.07 kB 🟢 -8.07 kB 🟢 -2.68 kB 🟢 -2.42 kB
assets/CreateWorkspaceDialogContent-BnmtNx4H.js (new) 5.93 kB 🔴 +5.93 kB 🔴 +1.92 kB 🔴 +1.68 kB
assets/CreateWorkspaceDialogContent-C_2X-quA.js (removed) 5.93 kB 🟢 -5.93 kB 🟢 -1.93 kB 🟢 -1.68 kB
assets/EditWorkspaceDialogContent-B49N-iVV.js (removed) 5.7 kB 🟢 -5.7 kB 🟢 -1.88 kB 🟢 -1.64 kB
assets/EditWorkspaceDialogContent-BxidnQA8.js (new) 5.7 kB 🔴 +5.7 kB 🔴 +1.88 kB 🔴 +1.64 kB
assets/ValueControlPopover-BhRdtK9G.js (removed) 5.17 kB 🟢 -5.17 kB 🟢 -1.69 kB 🟢 -1.5 kB
assets/ValueControlPopover-BuJYovHa.js (new) 5.17 kB 🔴 +5.17 kB 🔴 +1.69 kB 🔴 +1.5 kB
assets/DeleteWorkspaceDialogContent-Da6G5vRm.js (new) 4.59 kB 🔴 +4.59 kB 🔴 +1.56 kB 🔴 +1.35 kB
assets/DeleteWorkspaceDialogContent-DeM-_qIB.js (removed) 4.59 kB 🟢 -4.59 kB 🟢 -1.56 kB 🟢 -1.35 kB
assets/LeaveWorkspaceDialogContent-B-P8PCf7.js (new) 4.41 kB 🔴 +4.41 kB 🔴 +1.5 kB 🔴 +1.31 kB
assets/LeaveWorkspaceDialogContent-B5QHOKAb.js (removed) 4.41 kB 🟢 -4.41 kB 🟢 -1.51 kB 🟢 -1.31 kB
assets/RemoveMemberDialogContent-BBcaYU2E.js (new) 4.38 kB 🔴 +4.38 kB 🔴 +1.45 kB 🔴 +1.27 kB
assets/RemoveMemberDialogContent-BtuPstNt.js (removed) 4.38 kB 🟢 -4.38 kB 🟢 -1.45 kB 🟢 -1.27 kB
assets/RevokeInviteDialogContent-BBvheP6l.js (removed) 4.29 kB 🟢 -4.29 kB 🟢 -1.47 kB 🟢 -1.29 kB
assets/RevokeInviteDialogContent-eyMr5qMY.js (new) 4.29 kB 🔴 +4.29 kB 🔴 +1.47 kB 🔴 +1.29 kB
assets/GlobalToast-CQMYUAvm.js (removed) 3.05 kB 🟢 -3.05 kB 🟢 -1.1 kB 🟢 -945 B
assets/GlobalToast-DRIgREyY.js (new) 3.05 kB 🔴 +3.05 kB 🔴 +1.1 kB 🔴 +943 B
assets/SubscribeToRun-CImFcRsK.js (removed) 2.96 kB 🟢 -2.96 kB 🟢 -1.15 kB 🟢 -1.01 kB
assets/SubscribeToRun-CxWL1Ftu.js (new) 2.96 kB 🔴 +2.96 kB 🔴 +1.15 kB 🔴 +1.01 kB
assets/cloudSessionCookie-Bvd1o8Bk.js (removed) 2.94 kB 🟢 -2.94 kB 🟢 -937 B 🟢 -808 B
assets/cloudSessionCookie-C-ugk6f5.js (new) 2.94 kB 🔴 +2.94 kB 🔴 +936 B 🔴 +809 B
assets/BaseViewTemplate-CTxbLQUc.js (removed) 2.42 kB 🟢 -2.42 kB 🟢 -1.04 kB 🟢 -944 B
assets/BaseViewTemplate-DM46L5ld.js (new) 2.42 kB 🔴 +2.42 kB 🔴 +1.04 kB 🔴 +949 B
assets/CloudRunButtonWrapper-DrIB1yy2.js (removed) 1.79 kB 🟢 -1.79 kB 🟢 -644 B 🟢 -560 B
assets/CloudRunButtonWrapper-OgkfDrMv.js (new) 1.79 kB 🔴 +1.79 kB 🔴 +642 B 🔴 +562 B
assets/cloudBadges-DvugsJe2.js (removed) 1.08 kB 🟢 -1.08 kB 🟢 -536 B 🟢 -477 B
assets/cloudBadges-dy3EfIiE.js (new) 1.08 kB 🔴 +1.08 kB 🔴 +535 B 🔴 +477 B
assets/graphHasMissingNodes-CHcrX8iy.js (removed) 1.06 kB 🟢 -1.06 kB 🟢 -462 B 🟢 -423 B
assets/graphHasMissingNodes-CJiFRPRh.js (new) 1.06 kB 🔴 +1.06 kB 🔴 +463 B 🔴 +409 B
assets/cloudSubscription-Csv-KI1Q.js (new) 976 B 🔴 +976 B 🔴 +464 B 🔴 +401 B
assets/cloudSubscription-CZUv6ea7.js (removed) 976 B 🟢 -976 B 🟢 -466 B 🟢 -405 B
assets/nightlyBadges-BxLysZEy.js (removed) 595 B 🟢 -595 B 🟢 -356 B 🟢 -309 B
assets/nightlyBadges-DLsBpeF5.js (new) 595 B 🔴 +595 B 🔴 +354 B 🔴 +308 B
assets/SubscriptionPanelContentWorkspace-6g-d_eLZ.js (removed) 266 B 🟢 -266 B 🟢 -136 B 🟢 -112 B
assets/SubscriptionPanelContentWorkspace-C6fTB6Q5.js (new) 266 B 🔴 +266 B 🔴 +136 B 🔴 +113 B
assets/WidgetInputNumber-a7UbOf2I.js (new) 186 B 🔴 +186 B 🔴 +119 B 🔴 +113 B
assets/WidgetInputNumber-DpK-a44n.js (removed) 186 B 🟢 -186 B 🟢 -119 B 🟢 -121 B
assets/WidgetLegacy-BgXuzrxz.js (removed) 164 B 🟢 -164 B 🟢 -125 B 🟢 -104 B
assets/WidgetLegacy-Bi9T5Lcd.js (new) 164 B 🔴 +164 B 🔴 +125 B 🔴 +109 B
assets/Load3D--G-bq6fV.js (removed) 131 B 🟢 -131 B 🟢 -107 B 🟢 -108 B
assets/Load3D-CYU0YdAO.js (new) 131 B 🔴 +131 B 🔴 +107 B 🔴 +114 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-DKbrI9yU.js 500 kB 500 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/i18n-Do-i5KgH.js 188 B 188 B ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/LazyImage-ooHoQZNd.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-D5feRGXX.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-DLR992B1.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-C87scEAV.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-BEfQQjV6.js 3.71 kB 3.71 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetGalleria-jm_gz6R2.js 4.57 kB 4.57 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetImageCompare-DnZ84Utk.js 3.79 kB 3.79 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetInputText-WCHoBOIV.js 2.58 kB 2.58 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetLayoutField-BHrU_4qY.js 2.7 kB 2.7 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetMarkdown-3U-WuCE_.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-BXRA46js.js 3.87 kB 3.87 kB ⚪ 0 B ⚪ 0 B ⚪ 0 B
assets/WidgetToggleSwitch-DYS14Ar3.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

Copy link
Contributor Author

Choose a reason for hiding this comment

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

over 30 instances of any here. needed an overhaul

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: 2

Caution

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

⚠️ Outside diff range comments (3)
src/workbench/extensions/manager/composables/nodePack/useMissingNodes.test.ts (1)

257-275: ⚠️ Potential issue | 🟡 Minor

Replace the unsafe double-cast with proper WorkflowPack mapping.

Line 274 uses as unknown as WorkflowPack[], which hides a shape mismatch between mockWorkflowPacks (with name and latest_version properties) and the WorkflowPack type (which only requires id and version). Build a proper WorkflowPack[] from the mock data instead.

🔧 Suggested fix
-      workflowPacksRef.value = mockWorkflowPacks as unknown as WorkflowPack[]
+      workflowPacksRef.value = mockWorkflowPacks.map((pack) => ({
+        id: pack.id,
+        version: pack.latest_version?.version
+      }))
src/workbench/extensions/manager/composables/useConflictDetection.test.ts (1)

453-468: ⚠️ Potential issue | 🟡 Minor

Assert the composable output, not just the mock array.

The current assertions only validate the mock data, so the test won’t fail if useConflictDetection stops wiring state.

🔧 Suggested fix
-      useConflictDetection()
-
-      // The hasConflicts computed should be true since we have a conflict
-      expect(mockConflictedPackages).toHaveLength(1)
-      expect(mockConflictedPackages[0].has_conflict).toBe(true)
+      const { hasConflicts, conflictedPackages } = useConflictDetection()
+
+      expect(hasConflicts.value).toBe(true)
+      expect(conflictedPackages.value).toHaveLength(1)
+      expect(conflictedPackages.value[0].has_conflict).toBe(true)

As per coding guidelines: Do not write tests that just test the mocks; ensure tests fail when code behaves unexpectedly.

src/workbench/extensions/manager/composables/useManagerState.test.ts (1)

70-435: 🧹 Nitpick | 🔵 Trivial

Reduce repeated systemStats fixtures with a small factory

These tests repeat the same base systemStats object. A tiny helper lets each case focus on the argv differences and reduces maintenance.

♻️ Example refactor pattern (apply across the file)
 describe('useManagerState', () => {
+  function buildSystemStats(argv: string[]) {
+    return {
+      system: {
+        os: 'Test OS',
+        python_version: '3.10',
+        embedded_python: false,
+        comfyui_version: '1.0.0',
+        pytorch_version: '2.0.0',
+        argv,
+        ram_total: 16000000000,
+        ram_free: 8000000000
+      },
+      devices: []
+    }
+  }
+
   let systemStatsStore: ReturnType<typeof useSystemStatsStore>
@@
-      systemStatsStore.$patch({
-        systemStats: {
-          system: {
-            os: 'Test OS',
-            python_version: '3.10',
-            embedded_python: false,
-            comfyui_version: '1.0.0',
-            pytorch_version: '2.0.0',
-            argv: ['python', 'main.py'], // No --enable-manager flag
-            ram_total: 16000000000,
-            ram_free: 8000000000
-          },
-          devices: []
-        },
-        isInitialized: true
-      })
+      systemStatsStore.$patch({
+        systemStats: buildSystemStats(['python', 'main.py']),
+        isInitialized: true
+      })
As per coding guidelines, When writing new code, ask if there is a simpler way to introduce the same functionality; choose the simpler course if it exists.
🤖 Fix all issues with AI agents
In `@src/workbench/extensions/manager/composables/useManagerState.test.ts`:
- Around line 73-91: The test setup uses vi.resetAllMocks() in the beforeEach
block which clears mock implementations created by vi.mock() factories; replace
that call with vi.clearAllMocks() so factory implementations are preserved while
call history is cleared. In the beforeEach for useManagerState.test.ts (the
block that sets up setActivePinia, createTestingPinia, and initializes
systemStatsStore), change vi.resetAllMocks() to vi.clearAllMocks() and keep the
subsequent vi.mocked(...).mockReturnValue(...) calls (api.getClientFeatureFlags
and api.getServerFeature) as-is to ensure mocks are reset but factory
implementations remain intact.

In `@src/workbench/extensions/manager/utils/versionUtil.test.ts`:
- Around line 27-32: Tests are using non-idiomatic null! assertions when calling
checkVersionCompatibility; locate the test cases that call
checkVersionCompatibility with a null! argument (the cases asserting "should
return null when current version is null" and the other similar case) and
replace both null! occurrences with undefined so the calls pass an undefined
value (matching the function signature currentVersion?: string /
supportedVersion?: string) and avoid defeating TypeScript's type safety.

Comment on lines 73 to 91
beforeEach(() => {
vi.clearAllMocks()
// Create a fresh testing pinia and activate it for each test
setActivePinia(
createTestingPinia({
stubActions: false,
createSpy: vi.fn
})
)

// Initialize stores
systemStatsStore = useSystemStatsStore()

// Reset all mocks
vi.resetAllMocks()

// Set default mock returns
vi.mocked(api.getClientFeatureFlags).mockReturnValue({})
vi.mocked(api.getServerFeature).mockReturnValue(undefined)
})
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

Vitest vi.resetAllMocks vs vi.clearAllMocks difference mock factories

💡 Result:

vi.clearAllMocks() vs vi.resetAllMocks()

  • vi.clearAllMocks() calls .mockClear() on every spy/mock: it only clears call history (mock.calls, mock.results, etc.) and keeps the current mock implementation (including anything you set via mockReturnValue, mockImplementation, etc.). (vitest.dev)
  • vi.resetAllMocks() calls .mockReset() on every spy/mock: it clears call history and resets each mock’s implementation back to the default “empty” mock (returns undefined), also resetting any “once” implementations. (vitest.dev)

Practical rule:

  • If you want “same stubs, fresh assertions” between tests → clearAllMocks
  • If you want “wipe everything about the mocks (including stubs)” between tests → resetAllMocks

What this means for vi.mock(..., factory) (mock factories)

Vitest runs a vi.mock factory only once and caches its result for subsequent imports, until you explicitly unmock it. (vitest.dev)

So:

  • Neither vi.clearAllMocks() nor vi.resetAllMocks() re-runs the module mock factory.
  • They only operate on the mock functions/spies that already exist (often created inside the factory, e.g. vi.fn()).

Common pitfall with factories:

  • If your factory returns functions like vi.fn().mockReturnValue('x'), then:
    • clearAllMocks() keeps that return value (just clears call history).
    • resetAllMocks() removes that configured behavior (back to undefined). (vitest.dev)

If your goal is to “start over” with a fresh factory result, you typically need module-level actions (not *AllMocks):

  • vi.resetModules() clears the module cache (so modules can be re-evaluated on re-import), but it does not clear the mocks registry. (vitest.dev)
  • To stop using a mocked module / clear it from the mocks registry, use vi.unmock / vi.doUnmock (then re-import). (vitest.dev)

Citations:


🏁 Script executed:

# Find and examine the test file
fd "useManagerState.test.ts" --type f

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 138


🏁 Script executed:

# Examine the test file to understand the mock setup and what useManagerState does
cat -n src/workbench/extensions/manager/composables/useManagerState.test.ts

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 15838


🏁 Script executed:

# Check if useManagerState is a composable that might be called during setup
cat -n src/workbench/extensions/manager/composables/useManagerState.ts | head -50

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 2261


Prefer clearAllMocks() to preserve factory implementations

vi.resetAllMocks() removes mock implementations created in vi.mock() factories, resetting them to return undefined. Since tests explicitly set mock return values afterward, this works in the current code but is unnecessarily defensive. vi.clearAllMocks() preserves factory implementations while clearing call history—a safer pattern that protects against accidental regressions if test initialization order changes.

-    vi.resetAllMocks()
+    vi.clearAllMocks()
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
beforeEach(() => {
vi.clearAllMocks()
// Create a fresh testing pinia and activate it for each test
setActivePinia(
createTestingPinia({
stubActions: false,
createSpy: vi.fn
})
)
// Initialize stores
systemStatsStore = useSystemStatsStore()
// Reset all mocks
vi.resetAllMocks()
// Set default mock returns
vi.mocked(api.getClientFeatureFlags).mockReturnValue({})
vi.mocked(api.getServerFeature).mockReturnValue(undefined)
})
beforeEach(() => {
// Create a fresh testing pinia and activate it for each test
setActivePinia(
createTestingPinia({
stubActions: false,
createSpy: vi.fn
})
)
// Initialize stores
systemStatsStore = useSystemStatsStore()
// Reset all mocks
vi.clearAllMocks()
// Set default mock returns
vi.mocked(api.getClientFeatureFlags).mockReturnValue({})
vi.mocked(api.getServerFeature).mockReturnValue(undefined)
})
🤖 Prompt for AI Agents
In `@src/workbench/extensions/manager/composables/useManagerState.test.ts` around
lines 73 - 91, The test setup uses vi.resetAllMocks() in the beforeEach block
which clears mock implementations created by vi.mock() factories; replace that
call with vi.clearAllMocks() so factory implementations are preserved while call
history is cleared. In the beforeEach for useManagerState.test.ts (the block
that sets up setActivePinia, createTestingPinia, and initializes
systemStatsStore), change vi.resetAllMocks() to vi.clearAllMocks() and keep the
subsequent vi.mocked(...).mockReturnValue(...) calls (api.getClientFeatureFlags
and api.getServerFeature) as-is to ensure mocks are reset but factory
implementations remain intact.

Comment on lines 27 to 32
it('should return null when current version is null', () => {
const result = checkVersionCompatibility(
'comfyui_version',
null as any,
null!,
'>=1.0.0'
)
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# First, find the test file and check the actual lines mentioned
fd -t f "versionUtil.test.ts" -x cat -n {} | head -60

# Also find the actual implementation file to see the function signature
fd -t f "versionUtil.ts" -g '!*.test.ts' -x cat -n {}

# Find all call sites of checkVersionCompatibility to understand usage
rg "checkVersionCompatibility" -n --type ts

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 8447


🏁 Script executed:

# Get the function signature from versionUtil.ts
cat -n src/workbench/extensions/manager/utils/versionUtil.ts | head -80

# Also check the non-test call sites to understand current usage
rg -A 5 "checkVersionCompatibility\(" src/workbench/extensions/manager/composables/useConflictDetection.ts | head -40

Repository: Comfy-Org/ComfyUI_frontend

Length of output: 3636


Replace null! with undefined to align with function signature and codebase conventions.

The checkVersionCompatibility function signature accepts currentVersion?: string and supportedVersion?: string, meaning both parameters accept undefined or string values—not null. The null! assertions (lines 30, 54) defeat type safety without adding value; the equivalent tests using undefined (line 21) already pass without assertions.

Replace both instances:

  • Line 30: use undefined instead of null!
  • Line 54: use undefined instead of null!

This removes unnecessary type-safety violations and aligns with the codebase preference for undefined over null.

🤖 Prompt for AI Agents
In `@src/workbench/extensions/manager/utils/versionUtil.test.ts` around lines 27 -
32, Tests are using non-idiomatic null! assertions when calling
checkVersionCompatibility; locate the test cases that call
checkVersionCompatibility with a null! argument (the cases asserting "should
return null when current version is null" and the other similar case) and
replace both null! occurrences with undefined so the calls pass an undefined
value (matching the function signature currentVersion?: string /
supportedVersion?: string) and avoid defeating TypeScript's type safety.

@Myestery Myestery enabled auto-merge (squash) January 30, 2026 21:24
@Myestery Myestery disabled auto-merge January 30, 2026 21:25
@Myestery Myestery merged commit a64c561 into main Jan 30, 2026
27 checks passed
@Myestery Myestery deleted the fix/remove-any-types-part8 branch January 30, 2026 21:25
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XL This PR changes 500-999 lines, ignoring generated files.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants