Skip to content

refactor: split large files into focused modules#288

Closed
webadderall wants to merge 3 commits intomainfrom
refactor/split-large-files
Closed

refactor: split large files into focused modules#288
webadderall wants to merge 3 commits intomainfrom
refactor/split-large-files

Conversation

@webadderall
Copy link
Copy Markdown
Collaborator

Summary

Split all tracked source/config files exceeding 500 lines into smaller, focused modules. No behavioral changes — pure structural refactoring.

What changed

Electron main process

  • electron/main.ts → extracted mainBootstrapHelpers, mainRuntimeState, mainUpdateIntegration, mainWindowControls
  • electron/windows.ts → extracted editorWindows, hudWindows, windowShared
  • electron/updater.ts → extracted updaterDialogs, updaterEventHandlers, updaterShared
  • electron/preload.ts → extracted preloadExtensionsBridge, preloadUpdateBridge
  • electron/ipc/register/recording.ts → split into recording/ directory with focused handler files

Electron type declarations

  • electron/electron-env.d.ts → extracted per-domain .d.ts files (capture, export, projects, settings)

Video editor components

  • VideoEditor.tsxEditorContent, EditorHeader, EditorSidebar, EditorToolbar + hooks directory
  • SettingsPanel.tsxsettings/ directory with per-section components
  • AnnotationSettingsPanel.tsx → tab components (AnnotationBlurTab, AnnotationFigureTab, etc.)
  • ExtensionManager.tsxextension-manager/ directory
  • VideoPlayback.tsxvideoPlaybackComponent/ directory with focused hooks
  • TimelineEditor.tsxTimelineEditor/ directory with action utils and state hooks
  • projectPersistence.tsprojectPersistence{Normalization,Paths,Regions,Shared}.ts
  • types.ts → focused type modules

Launch window

  • LaunchWindow.tsxLaunchWindow/ directory with DropdownContent, HudControls, hooks, types

Screen recorder hook

  • useScreenRecorder.tsuseScreenRecorder/ directory (lifecycle, controls, native, webcam, etc.)

Exporter modules

  • audioEncoder.tsaudioEncoder/ directory (decoding, offline render, trim/transcode, etc.)
  • frameRenderer.ts → focused renderer modules (background, captions, compositing, webcam, zoom)
  • modernFrameRenderer.ts → extracted filters and lifecycle modules
  • modernVideoExporter.tsmodernVideoExporter/ directory (audio plan, encoding, progress, etc.)
  • videoExporter.tsvideo-exporter/ directory (audio, encoder, progress base)
  • streamingDecoder.ts → extracted streamingDecoderHelpers.ts

Extension system

  • extensionHost.ts → extracted API factory, query API, registration API, shared utilities, state
  • types.ts → extracted API types, hook types, manifest types, marketplace types

Native helpers (Swift)

  • ScreenCaptureKitRecorder.swiftScreenCaptureKitRecorder/ directory (ScreenCaptureRecorder.swift, +Stream.swift, RecorderService.swift)
  • build-native-helpers.mjs updated for multi-file Swift compilation

Scripts & CI

  • benchmark-export-queues.mjsbenchmark-export-queues/ directory (config, fixtures, reporting, runner)
  • .github/workflows/release.yml → extracted merge-macos-metadata composite action

Other

  • Default export quality changed from good to source (incorporated from origin/main)

Validation

  • tsc --noEmit passes
  • node scripts/build-native-helpers.mjs builds all 8 native binaries (arm64 + x64)
  • No files over 500 lines (excluding package-lock.json)

Split all source files exceeding 500 lines into smaller, focused modules:

- electron/main.ts → mainBootstrapHelpers, mainRuntimeState, mainUpdateIntegration, mainWindowControls
- electron/windows.ts → editorWindows, hudWindows, windowShared
- electron/updater.ts → updaterDialogs, updaterEventHandlers, updaterShared
- electron/preload.ts → preloadExtensionsBridge, preloadUpdateBridge
- electron/ipc/register/recording.ts → recording/ directory with focused handlers
- src/components/video-editor/VideoEditor.tsx → EditorContent, EditorHeader, EditorSidebar, EditorToolbar, hooks/
- src/components/video-editor/SettingsPanel.tsx → settings/ directory with per-section components
- src/components/video-editor/AnnotationSettingsPanel.tsx → tab components
- src/components/video-editor/ExtensionManager.tsx → extension-manager/ directory
- src/components/video-editor/VideoPlayback.tsx → videoPlaybackComponent/ directory
- src/components/video-editor/projectPersistence.ts → projectPersistence{Normalization,Paths,Regions,Shared}.ts
- src/components/video-editor/timeline/TimelineEditor.tsx → TimelineEditor/ directory
- src/components/video-editor/types.ts → focused type modules
- src/components/launch/LaunchWindow.tsx → LaunchWindow/ directory
- src/hooks/useScreenRecorder.ts → useScreenRecorder/ directory
- src/lib/exporter/audioEncoder.ts → audioEncoder/ directory
- src/lib/exporter/frameRenderer.ts → frameRenderer modules
- src/lib/exporter/modernFrameRenderer.ts → filters and lifecycle modules
- src/lib/exporter/modernVideoExporter.ts → modernVideoExporter/ directory
- src/lib/exporter/videoExporter.ts → video-exporter/ directory
- src/lib/exporter/streamingDecoder.ts → streamingDecoderHelpers.ts
- src/lib/extensions/extensionHost.ts → extensionHost{ApiFactory,QueryApi,RegistrationApi,Shared,State}.ts
- src/lib/extensions/types.ts → focused type modules
- electron/native/ScreenCaptureKitRecorder.swift → ScreenCaptureKitRecorder/ directory
- scripts/benchmark-export-queues.mjs → benchmark-export-queues/ directory
- .github/workflows/release.yml → extracted merge-macos-metadata composite action
- scripts/build-native-helpers.mjs → updated for multi-file Swift compilation

Also incorporates upstream default export quality change (good → source).
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 20, 2026

Important

Review skipped

Too many files!

This PR contains 197 files, which is 47 over the limit of 150.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d920cb38-e83e-4599-9d63-4ae1e3c784ec

📥 Commits

Reviewing files that changed from the base of the PR and between 09f487d and 7760f62.

📒 Files selected for processing (197)
  • .coderabbit.yaml
  • .github/actions/merge-macos-metadata/action.yml
  • .github/workflows/release.yml
  • electron/editorWindows.ts
  • electron/electron-api-capture.d.ts
  • electron/electron-api-export.d.ts
  • electron/electron-api-projects.d.ts
  • electron/electron-api-settings.d.ts
  • electron/electron-env.d.ts
  • electron/hudWindows.ts
  • electron/ipc/register/recording.ts
  • electron/ipc/register/recording/ffmpegHandlers.ts
  • electron/ipc/register/recording/index.ts
  • electron/ipc/register/recording/nativeControlHandlers.ts
  • electron/ipc/register/recording/nativeStartHandlers.ts
  • electron/ipc/register/recording/nativeStopHandlers.ts
  • electron/ipc/register/recording/storageHandlers.ts
  • electron/ipc/register/recording/telemetryHandlers.ts
  • electron/main.ts
  • electron/mainBootstrapHelpers.ts
  • electron/mainRuntimeState.ts
  • electron/mainUpdateIntegration.ts
  • electron/mainWindowControls.ts
  • electron/native/ScreenCaptureKitRecorder.swift
  • electron/native/ScreenCaptureKitRecorder/RecorderService.swift
  • electron/native/ScreenCaptureKitRecorder/ScreenCaptureRecorder+Stream.swift
  • electron/native/ScreenCaptureKitRecorder/ScreenCaptureRecorder.swift
  • electron/native/bin/darwin-arm64/recordly-screencapturekit-helper
  • electron/native/bin/darwin-x64/recordly-screencapturekit-helper
  • electron/preload.ts
  • electron/preloadExtensionsBridge.ts
  • electron/preloadUpdateBridge.ts
  • electron/updater.ts
  • electron/updaterDialogs.ts
  • electron/updaterEventHandlers.ts
  • electron/updaterShared.ts
  • electron/windowShared.ts
  • electron/windows.ts
  • scripts/benchmark-export-queues.mjs
  • scripts/benchmark-export-queues/config.mjs
  • scripts/benchmark-export-queues/fixtures.mjs
  • scripts/benchmark-export-queues/reporting.mjs
  • scripts/benchmark-export-queues/runner.mjs
  • scripts/build-native-helpers.mjs
  • src/components/launch/LaunchWindow.tsx
  • src/components/launch/LaunchWindow/DropdownContent.tsx
  • src/components/launch/LaunchWindow/HudControls.tsx
  • src/components/launch/LaunchWindow/LaunchWindow.module.css
  • src/components/launch/LaunchWindow/helperComponents.tsx
  • src/components/launch/LaunchWindow/hooks.ts
  • src/components/launch/LaunchWindow/index.tsx
  • src/components/launch/LaunchWindow/types.ts
  • src/components/launch/LaunchWindow/useLaunchWindowActions.ts
  • src/components/launch/LaunchWindow/useLaunchWindowSetup.ts
  • src/components/launch/SourceSelector.tsx
  • src/components/video-editor/AnnotationBlurTab.tsx
  • src/components/video-editor/AnnotationFigureTab.tsx
  • src/components/video-editor/AnnotationImageTab.tsx
  • src/components/video-editor/AnnotationSettingsPanel.tsx
  • src/components/video-editor/AnnotationTextTab.tsx
  • src/components/video-editor/CursorStylePreview.tsx
  • src/components/video-editor/EditorContent.tsx
  • src/components/video-editor/EditorHeader.tsx
  • src/components/video-editor/EditorSidebar.tsx
  • src/components/video-editor/EditorToolbar.tsx
  • src/components/video-editor/ExtensionManager.tsx
  • src/components/video-editor/ExtensionSettingsSection.tsx
  • src/components/video-editor/SettingsPanel.tsx
  • src/components/video-editor/VideoEditor.tsx
  • src/components/video-editor/VideoPlayback.tsx
  • src/components/video-editor/annotationSettingsShared.ts
  • src/components/video-editor/captureProjectThumbnail.ts
  • src/components/video-editor/extension-manager/ExtensionDetailModal.tsx
  • src/components/video-editor/extension-manager/ExtensionManagerCards.tsx
  • src/components/video-editor/extension-manager/ExtensionManagerShared.tsx
  • src/components/video-editor/extension-manager/ExtensionManagerTabs.tsx
  • src/components/video-editor/hooks/editorExportShared.ts
  • src/components/video-editor/hooks/editorExportWorkflow.ts
  • src/components/video-editor/hooks/useEditorAnnotationAudioRegions.ts
  • src/components/video-editor/hooks/useEditorAudioSync.ts
  • src/components/video-editor/hooks/useEditorCaptions.ts
  • src/components/video-editor/hooks/useEditorClipRegions.ts
  • src/components/video-editor/hooks/useEditorCursorTelemetry.ts
  • src/components/video-editor/hooks/useEditorExport.ts
  • src/components/video-editor/hooks/useEditorHistory.ts
  • src/components/video-editor/hooks/useEditorInit.ts
  • src/components/video-editor/hooks/useEditorPreferences.ts
  • src/components/video-editor/hooks/useEditorProject.ts
  • src/components/video-editor/hooks/useEditorRegions.ts
  • src/components/video-editor/hooks/useEditorSideEffects.ts
  • src/components/video-editor/hooks/useEditorWiring.ts
  • src/components/video-editor/projectPersistence.ts
  • src/components/video-editor/projectPersistenceNormalization.ts
  • src/components/video-editor/projectPersistencePaths.ts
  • src/components/video-editor/projectPersistenceRegions.ts
  • src/components/video-editor/projectPersistenceShared.ts
  • src/components/video-editor/settings/BackgroundSection.tsx
  • src/components/video-editor/settings/CaptionsSection.tsx
  • src/components/video-editor/settings/ClipSection.tsx
  • src/components/video-editor/settings/CursorSection.tsx
  • src/components/video-editor/settings/FrameSection.tsx
  • src/components/video-editor/settings/GeneralSettingsSection.tsx
  • src/components/video-editor/settings/WebcamSection.tsx
  • src/components/video-editor/settings/ZoomSection.tsx
  • src/components/video-editor/settingsPanelConstants.tsx
  • src/components/video-editor/settingsPanelUtils.ts
  • src/components/video-editor/timeline/TimelineEditor.tsx
  • src/components/video-editor/timeline/TimelineEditor/TimelineDecorations.tsx
  • src/components/video-editor/timeline/TimelineEditor/TimelineSurface.tsx
  • src/components/video-editor/timeline/TimelineEditor/TimelineToolbar.tsx
  • src/components/video-editor/timeline/TimelineEditor/index.tsx
  • src/components/video-editor/timeline/TimelineEditor/shared.ts
  • src/components/video-editor/timeline/TimelineEditor/timelineActionUtils.ts
  • src/components/video-editor/timeline/TimelineEditor/useTimelineEditorActions.ts
  • src/components/video-editor/timeline/TimelineEditor/useTimelineEditorState.ts
  • src/components/video-editor/timeline/TimelineEditor/useTimelineEditorTimeline.ts
  • src/components/video-editor/timeline/TimelineEditor/useTimelineKeyboardShortcuts.ts
  • src/components/video-editor/timeline/TimelineEditor/useTimelineRegionOperations.ts
  • src/components/video-editor/types.ts
  • src/components/video-editor/videoEditorUtils.ts
  • src/components/video-editor/videoPlayback/cursorRenderer.ts
  • src/components/video-editor/videoPlayback/cursorRenderer/assets.ts
  • src/components/video-editor/videoPlayback/cursorRenderer/canvasRenderer.ts
  • src/components/video-editor/videoPlayback/cursorRenderer/index.ts
  • src/components/video-editor/videoPlayback/cursorRenderer/pixiOverlay.ts
  • src/components/video-editor/videoPlayback/cursorRenderer/shared.ts
  • src/components/video-editor/videoPlayback/cursorRenderer/smoothedState.ts
  • src/components/video-editor/videoPlayback/cursorRenderer/telemetry.ts
  • src/components/video-editor/videoPlayback/zoomAnimation.test.ts
  • src/components/video-editor/videoPlaybackComponent/VideoPlaybackOverlay.tsx
  • src/components/video-editor/videoPlaybackComponent/index.tsx
  • src/components/video-editor/videoPlaybackComponent/shared.ts
  • src/components/video-editor/videoPlaybackComponent/useCaptionLayout.ts
  • src/components/video-editor/videoPlaybackComponent/useCursorOverlayRefresh.ts
  • src/components/video-editor/videoPlaybackComponent/usePixiApp.ts
  • src/components/video-editor/videoPlaybackComponent/usePixiVideoScene.ts
  • src/components/video-editor/videoPlaybackComponent/usePlaybackTicker.ts
  • src/components/video-editor/videoPlaybackComponent/useResolvedWallpaper.ts
  • src/components/video-editor/videoPlaybackComponent/useVideoElementLifecycle.ts
  • src/components/video-editor/videoPlaybackComponent/useVideoPlaybackLayout.ts
  • src/components/video-editor/videoPlaybackComponent/useVideoPlaybackRefs.ts
  • src/components/video-editor/videoPlaybackComponent/useVideoPlaybackSync.ts
  • src/hooks/useScreenRecorder.ts
  • src/hooks/useScreenRecorder/index.ts
  • src/hooks/useScreenRecorder/lifecycle.ts
  • src/hooks/useScreenRecorder/nativeRecording.ts
  • src/hooks/useScreenRecorder/recordingControls.ts
  • src/hooks/useScreenRecorder/recordingCore.ts
  • src/hooks/useScreenRecorder/recordingStopHelpers.ts
  • src/hooks/useScreenRecorder/shared.ts
  • src/hooks/useScreenRecorder/webcamRecording.ts
  • src/lib/exporter/audioEncoder.ts
  • src/lib/exporter/audioEncoder/decoding.ts
  • src/lib/exporter/audioEncoder/index.ts
  • src/lib/exporter/audioEncoder/offlineRender.ts
  • src/lib/exporter/audioEncoder/renderHelpers.ts
  • src/lib/exporter/audioEncoder/shared.ts
  • src/lib/exporter/audioEncoder/trimTranscode.ts
  • src/lib/exporter/frameRenderer.ts
  • src/lib/exporter/frameRenderer/types.ts
  • src/lib/exporter/frameRendererBackground.ts
  • src/lib/exporter/frameRendererCaptions.ts
  • src/lib/exporter/frameRendererCompositing.ts
  • src/lib/exporter/frameRendererHelpers.ts
  • src/lib/exporter/frameRendererTypes.ts
  • src/lib/exporter/frameRendererWebcam.ts
  • src/lib/exporter/frameRendererWebcamSync.ts
  • src/lib/exporter/frameRendererZoom.ts
  • src/lib/exporter/modernFrameRenderer.ts
  • src/lib/exporter/modernFrameRendererFilters.ts
  • src/lib/exporter/modernFrameRendererLifecycle.ts
  • src/lib/exporter/modernVideoExporter.ts
  • src/lib/exporter/modernVideoExporter/audioPlan.ts
  • src/lib/exporter/modernVideoExporter/encoding.ts
  • src/lib/exporter/modernVideoExporter/errorFormatting.ts
  • src/lib/exporter/modernVideoExporter/exporterTypes.ts
  • src/lib/exporter/modernVideoExporter/index.ts
  • src/lib/exporter/modernVideoExporter/nativeExport.ts
  • src/lib/exporter/modernVideoExporter/progress.ts
  • src/lib/exporter/streamingDecoder.ts
  • src/lib/exporter/streamingDecoderHelpers.ts
  • src/lib/exporter/video-exporter/audioBase.ts
  • src/lib/exporter/video-exporter/encoderBase.ts
  • src/lib/exporter/video-exporter/progressBase.ts
  • src/lib/exporter/video-exporter/shared.ts
  • src/lib/exporter/videoExporter.ts
  • src/lib/extensions/extensionApiTypes.ts
  • src/lib/extensions/extensionHookTypes.ts
  • src/lib/extensions/extensionHost.ts
  • src/lib/extensions/extensionHostApiFactory.ts
  • src/lib/extensions/extensionHostQueryApi.ts
  • src/lib/extensions/extensionHostRegistrationApi.ts
  • src/lib/extensions/extensionHostShared.ts
  • src/lib/extensions/extensionHostState.ts
  • src/lib/extensions/extensionManifestTypes.ts
  • src/lib/extensions/extensionMarketplaceTypes.ts
  • src/lib/extensions/types.ts

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/split-large-files

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.

@webadderall
Copy link
Copy Markdown
Collaborator Author

@coderabbitai full review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 20, 2026

✅ Actions performed

Full review triggered.

@webadderall
Copy link
Copy Markdown
Collaborator Author

@coderabbitai review

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Apr 20, 2026

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@webadderall
Copy link
Copy Markdown
Collaborator Author

Splitting into 2 PRs to stay under CodeRabbit's 150-file review limit.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant