From c1a06ab955b5414b8cf0f2101c00fd8b1fef0c6e Mon Sep 17 00:00:00 2001 From: JellyBrick Date: Sat, 6 Sep 2025 22:31:02 +0900 Subject: [PATCH] feat: remove unnecessary `export default` for better tree-shaking --- src/config/defaults.ts | 4 +- src/config/index.ts | 41 +++++++++---------- src/config/plugins.ts | 12 +----- src/config/store.ts | 4 +- src/index.ts | 2 +- src/loader/main.ts | 2 +- src/loader/menu.ts | 2 +- src/loader/preload.ts | 2 +- src/menu.ts | 2 +- .../api-server/backend/routes/control.ts | 2 +- .../auth-proxy-adapter/backend/index.ts | 8 ++-- src/plugins/downloader/renderer.tsx | 2 +- src/plugins/notifications/interactive.ts | 2 +- src/plugins/shortcuts/main.ts | 4 +- src/plugins/shortcuts/mpris.ts | 8 ++-- .../synced-lyrics/providers/MusixMatch.ts | 2 +- src/plugins/taskbar-mediacontrol/index.ts | 2 +- src/plugins/touchbar/index.ts | 2 +- src/preload.ts | 2 +- src/providers/app-controls.ts | 2 +- src/providers/dom-elements.ts | 2 - src/providers/protocol-handler.ts | 9 +--- src/providers/song-controls.ts | 2 +- src/providers/song-info-front.ts | 2 +- src/providers/song-info.ts | 2 +- src/renderer.ts | 2 +- src/reset.d.ts | 2 +- src/tray.ts | 4 +- src/utils/testing.ts | 2 - 29 files changed, 53 insertions(+), 81 deletions(-) diff --git a/src/config/defaults.ts b/src/config/defaults.ts index ccd00b0d..60602927 100644 --- a/src/config/defaults.ts +++ b/src/config/defaults.ts @@ -40,7 +40,7 @@ export interface DefaultConfig { 'plugins': Record; } -const defaultConfig: DefaultConfig = { +export const defaultConfig: DefaultConfig = { 'window-size': { width: 1100, height: 550, @@ -74,5 +74,3 @@ const defaultConfig: DefaultConfig = { }, 'plugins': {}, }; - -export default defaultConfig; diff --git a/src/config/index.ts b/src/config/index.ts index 0496c890..b5845f7a 100644 --- a/src/config/index.ts +++ b/src/config/index.ts @@ -1,30 +1,36 @@ import { deepmergeCustom } from 'deepmerge-ts'; -import defaultConfig from './defaults'; - -import store, { type IStore } from './store'; -import plugins from './plugins'; - +import { store, type IStore } from './store'; import { restart } from '@/providers/app-controls'; +import type { defaultConfig } from './defaults'; + const deepmerge = deepmergeCustom({ mergeArrays: false, }); -const set = (key: string, value: unknown) => { +export { defaultConfig } from './defaults'; +export * as plugins from './plugins'; + +export const set = (key: string, value: unknown) => { store.set(key, value); }; -const setPartial = (key: string, value: object, defaultValue?: object) => { + +export const setPartial = ( + key: string, + value: object, + defaultValue?: object, +) => { const newValue = deepmerge(defaultValue ?? {}, store.get(key) ?? {}, value); store.set(key, newValue); }; -function setMenuOption(key: string, value: unknown) { +export const setMenuOption = (key: string, value: unknown) => { set(key, value); if (store.get('options.restartOnConfigChanges')) { restart(); } -} +}; // MAGIC OF TYPESCRIPT @@ -74,18 +80,11 @@ type PathValue = ? PathValue : T; -const get = >(key: Key) => +export const get = >(key: Key) => store.get(key) as PathValue; -export default { - defaultConfig, - get, - set, - setPartial, - setMenuOption, - edit: () => store.openInEditor(), - watch(cb: Parameters[0]) { - store.onDidAnyChange(cb); - }, - plugins, +export const edit = () => store.openInEditor(); + +export const watch = (cb: Parameters[0]) => { + store.onDidAnyChange(cb); }; diff --git a/src/config/plugins.ts b/src/config/plugins.ts index a91bfd97..e4420464 100644 --- a/src/config/plugins.ts +++ b/src/config/plugins.ts @@ -1,7 +1,7 @@ import { deepmerge } from 'deepmerge-ts'; import { allPlugins } from 'virtual:plugins'; -import store from './store'; +import { store } from './store'; import { restart } from '@/providers/app-controls'; @@ -68,13 +68,3 @@ export function enable(plugin: string) { export function disable(plugin: string) { setMenuOptions(plugin, { enabled: false }, []); } - -export default { - isEnabled, - getPlugins, - enable, - disable, - setOptions, - setMenuOptions, - getOptions, -}; diff --git a/src/config/store.ts b/src/config/store.ts index 106cc62c..253b298a 100644 --- a/src/config/store.ts +++ b/src/config/store.ts @@ -1,6 +1,6 @@ import Store from 'electron-store'; -import defaults from './defaults'; +import { defaultConfig as defaults } from './defaults'; import { DefaultPresetList, type Preset } from '@/plugins/downloader/types'; @@ -257,7 +257,7 @@ const migrations = { }, }; -export default new Store({ +export const store = new Store({ defaults: { ...defaults, // README: 'plugin' uses deepmerge to populate the default values, so it is not necessary to include it here diff --git a/src/index.ts b/src/index.ts index d9442eb0..a46e33fe 100644 --- a/src/index.ts +++ b/src/index.ts @@ -29,7 +29,7 @@ import { allPlugins, mainPlugins } from 'virtual:plugins'; import { languageResources } from 'virtual:i18n'; -import config from '@/config'; +import * as config from '@/config'; import { refreshMenu, setApplicationMenu } from '@/menu'; import { fileExists, injectCSS, injectCSSAsFile } from '@/plugins/utils/main'; diff --git a/src/loader/main.ts b/src/loader/main.ts index e02629f1..c6202e7c 100644 --- a/src/loader/main.ts +++ b/src/loader/main.ts @@ -3,7 +3,7 @@ import { type BrowserWindow, ipcMain } from 'electron'; import { deepmerge } from 'deepmerge-ts'; import { allPlugins, mainPlugins } from 'virtual:plugins'; -import config from '@/config'; +import * as config from '@/config'; import { LoggerPrefix, startPlugin, stopPlugin } from '@/utils'; import { t } from '@/i18n'; diff --git a/src/loader/menu.ts b/src/loader/menu.ts index 13e47f93..7f1ab5fc 100644 --- a/src/loader/menu.ts +++ b/src/loader/menu.ts @@ -1,7 +1,7 @@ import { deepmerge } from 'deepmerge-ts'; import { allPlugins } from 'virtual:plugins'; -import config from '@/config'; +import * as config from '@/config'; import { setApplicationMenu } from '@/menu'; import { LoggerPrefix } from '@/utils'; diff --git a/src/loader/preload.ts b/src/loader/preload.ts index 48477049..4a0a4821 100644 --- a/src/loader/preload.ts +++ b/src/loader/preload.ts @@ -3,7 +3,7 @@ import { allPlugins, preloadPlugins } from 'virtual:plugins'; import { LoggerPrefix, startPlugin, stopPlugin } from '@/utils'; -import config from '@/config'; +import * as config from '@/config'; import { t } from '@/i18n'; diff --git a/src/menu.ts b/src/menu.ts index 1d7818c7..01d8d9ff 100644 --- a/src/menu.ts +++ b/src/menu.ts @@ -15,7 +15,7 @@ import { allPlugins } from 'virtual:plugins'; import { languageResources } from 'virtual:i18n'; -import config from './config'; +import * as config from './config'; import { restart } from './providers/app-controls'; import { startingPages } from './providers/extracted-data'; diff --git a/src/plugins/api-server/backend/routes/control.ts b/src/plugins/api-server/backend/routes/control.ts index 82583e59..3352e3a8 100644 --- a/src/plugins/api-server/backend/routes/control.ts +++ b/src/plugins/api-server/backend/routes/control.ts @@ -1,7 +1,7 @@ import { createRoute, z } from '@hono/zod-openapi'; import { ipcMain } from 'electron'; -import getSongControls from '@/providers/song-controls'; +import { getSongControls } from '@/providers/song-controls'; import { LikeType, type RepeatMode, diff --git a/src/plugins/auth-proxy-adapter/backend/index.ts b/src/plugins/auth-proxy-adapter/backend/index.ts index 16d6876e..33440a5a 100644 --- a/src/plugins/auth-proxy-adapter/backend/index.ts +++ b/src/plugins/auth-proxy-adapter/backend/index.ts @@ -1,17 +1,15 @@ -import net from 'net'; +import * as net from 'node:net'; import { SocksClient, type SocksClientOptions } from 'socks'; - import is from 'electron-is'; import { createBackend, LoggerPrefix } from '@/utils'; -import { type BackendType } from './types'; - -import config from '@/config'; +import * as config from '@/config'; import { type AuthProxyConfig, defaultAuthProxyConfig } from '../config'; +import type { BackendType } from './types'; import type { BackendContext } from '@/types/contexts'; // Parsing the upstream authentication SOCK proxy URL diff --git a/src/plugins/downloader/renderer.tsx b/src/plugins/downloader/renderer.tsx index 9ca5abf2..533179e7 100644 --- a/src/plugins/downloader/renderer.tsx +++ b/src/plugins/downloader/renderer.tsx @@ -2,7 +2,7 @@ import { createSignal } from 'solid-js'; import { render } from 'solid-js/web'; -import defaultConfig from '@/config/defaults'; +import { defaultConfig } from '@/config/defaults'; import { getSongMenu } from '@/providers/dom-elements'; import { getSongInfo } from '@/providers/song-info-front'; import { t } from '@/i18n'; diff --git a/src/plugins/notifications/interactive.ts b/src/plugins/notifications/interactive.ts index 26148337..e660d6ff 100644 --- a/src/plugins/notifications/interactive.ts +++ b/src/plugins/notifications/interactive.ts @@ -7,7 +7,7 @@ import previousIcon from '@assets/media-icons-black/previous.png?asset&asarUnpac import { notificationImage, secondsToMinutes, ToastStyles } from './utils'; -import getSongControls from '@/providers/song-controls'; +import { getSongControls } from '@/providers/song-controls'; import { registerCallback, type SongInfo, diff --git a/src/plugins/shortcuts/main.ts b/src/plugins/shortcuts/main.ts index b63be7a0..202557d7 100644 --- a/src/plugins/shortcuts/main.ts +++ b/src/plugins/shortcuts/main.ts @@ -2,8 +2,8 @@ import { type BrowserWindow, globalShortcut } from 'electron'; import is from 'electron-is'; import { register as registerElectronLocalShortcut } from 'electron-localshortcut'; -import registerMPRIS from './mpris'; -import getSongControls from '@/providers/song-controls'; +import { registerMPRIS } from './mpris'; +import { getSongControls } from '@/providers/song-controls'; import type { ShortcutMappingType, ShortcutsPluginConfig } from './index'; diff --git a/src/plugins/shortcuts/mpris.ts b/src/plugins/shortcuts/mpris.ts index b6689013..83c10b85 100644 --- a/src/plugins/shortcuts/mpris.ts +++ b/src/plugins/shortcuts/mpris.ts @@ -19,8 +19,8 @@ import { type SongInfo, SongInfoEvent, } from '@/providers/song-info'; -import getSongControls from '@/providers/song-controls'; -import config from '@/config'; +import { getSongControls } from '@/providers/song-controls'; +import * as config from '@/config'; import { LoggerPrefix } from '@/utils'; import type { RepeatMode, VolumeState } from '@/types/datahost-get-state'; @@ -84,7 +84,7 @@ function setupMPRIS() { return instance; } -function registerMPRIS(win: BrowserWindow) { +export function registerMPRIS(win: BrowserWindow) { const songControls = getSongControls(win); const { playPause, @@ -363,5 +363,3 @@ function registerMPRIS(win: BrowserWindow) { console.trace(error); } } - -export default registerMPRIS; diff --git a/src/plugins/synced-lyrics/providers/MusixMatch.ts b/src/plugins/synced-lyrics/providers/MusixMatch.ts index 3abe159f..275c1332 100644 --- a/src/plugins/synced-lyrics/providers/MusixMatch.ts +++ b/src/plugins/synced-lyrics/providers/MusixMatch.ts @@ -1,4 +1,4 @@ -import { z } from 'zod'; +import * as z from 'zod'; import { LRC } from '../parsers/lrc'; import { netFetch } from '../renderer'; diff --git a/src/plugins/taskbar-mediacontrol/index.ts b/src/plugins/taskbar-mediacontrol/index.ts index 5eb3991e..92609239 100644 --- a/src/plugins/taskbar-mediacontrol/index.ts +++ b/src/plugins/taskbar-mediacontrol/index.ts @@ -7,7 +7,7 @@ import nextIcon from '@assets/media-icons-black/next.png?asset&asarUnpack'; import previousIcon from '@assets/media-icons-black/previous.png?asset&asarUnpack'; import { createPlugin } from '@/utils'; -import getSongControls from '@/providers/song-controls'; +import { getSongControls } from '@/providers/song-controls'; import { registerCallback, type SongInfo, diff --git a/src/plugins/touchbar/index.ts b/src/plugins/touchbar/index.ts index f2cceba5..7b5ce5f7 100644 --- a/src/plugins/touchbar/index.ts +++ b/src/plugins/touchbar/index.ts @@ -1,7 +1,7 @@ import { nativeImage, type NativeImage, TouchBar } from 'electron'; import { createPlugin } from '@/utils'; -import getSongControls from '@/providers/song-controls'; +import { getSongControls } from '@/providers/song-controls'; import { registerCallback, SongInfoEvent } from '@/providers/song-info'; import { t } from '@/i18n'; diff --git a/src/preload.ts b/src/preload.ts index e977bbeb..33a5d77f 100644 --- a/src/preload.ts +++ b/src/preload.ts @@ -6,7 +6,7 @@ import { } from 'electron'; import is from 'electron-is'; -import config from './config'; +import * as config from './config'; import { forceLoadPreloadPlugin, diff --git a/src/providers/app-controls.ts b/src/providers/app-controls.ts index fd60ff16..0bac3abc 100644 --- a/src/providers/app-controls.ts +++ b/src/providers/app-controls.ts @@ -2,7 +2,7 @@ import path from 'node:path'; import { app, BrowserWindow, ipcMain } from 'electron'; -import config from '@/config'; +import * as config from '@/config'; export const restart = () => restartInternal(); diff --git a/src/providers/dom-elements.ts b/src/providers/dom-elements.ts index 43674f1e..df43f25a 100644 --- a/src/providers/dom-elements.ts +++ b/src/providers/dom-elements.ts @@ -2,5 +2,3 @@ export const getSongMenu = () => document.querySelector( 'ytmusic-menu-popup-renderer tp-yt-paper-listbox', ); - -export default { getSongMenu }; diff --git a/src/providers/protocol-handler.ts b/src/providers/protocol-handler.ts index cc30e91a..8ffa39de 100644 --- a/src/providers/protocol-handler.ts +++ b/src/providers/protocol-handler.ts @@ -2,7 +2,7 @@ import path from 'node:path'; import { app, type BrowserWindow } from 'electron'; -import getSongControls from './song-controls'; +import { getSongControls } from './song-controls'; export const APP_PROTOCOL = 'youtubemusic'; @@ -36,10 +36,3 @@ export function changeProtocolHandler( ) { protocolHandler = f; } - -export default { - APP_PROTOCOL, - setupProtocolHandler, - handleProtocol, - changeProtocolHandler, -}; diff --git a/src/providers/song-controls.ts b/src/providers/song-controls.ts index c24069ed..97a12b6c 100644 --- a/src/providers/song-controls.ts +++ b/src/providers/song-controls.ts @@ -36,7 +36,7 @@ const parseStringFromArgsType = (args: ArgsType) => { } }; -export default (win: BrowserWindow) => { +export const getSongControls = (win: BrowserWindow) => { return { // Playback previous: () => win.webContents.send('ytmd:previous-video'), diff --git a/src/providers/song-info-front.ts b/src/providers/song-info-front.ts index 23c08c7e..680e9449 100644 --- a/src/providers/song-info-front.ts +++ b/src/providers/song-info-front.ts @@ -189,7 +189,7 @@ export const setupAutoPlayChangedListener = singleton(() => { }); }); -export default (api: YoutubePlayer) => { +export const setupSongInfo = (api: YoutubePlayer) => { window.ipcRenderer.on('ytmd:setup-time-changed-listener', () => { setupTimeChangedListener(); }); diff --git a/src/providers/song-info.ts b/src/providers/song-info.ts index e9c73dec..614eb072 100644 --- a/src/providers/song-info.ts +++ b/src/providers/song-info.ts @@ -2,7 +2,7 @@ import { type BrowserWindow, ipcMain, nativeImage, net } from 'electron'; import { Mutex } from 'async-mutex'; -import config from '@/config'; +import * as config from '@/config'; import type { GetPlayerResponse } from '@/types/get-player-response'; diff --git a/src/renderer.ts b/src/renderer.ts index 30996892..b535a89b 100644 --- a/src/renderer.ts +++ b/src/renderer.ts @@ -1,7 +1,7 @@ import i18next from 'i18next'; import { startingPages } from './providers/extracted-data'; -import setupSongInfo from './providers/song-info-front'; +import { setupSongInfo } from './providers/song-info-front'; import { createContext, forceLoadRendererPlugin, diff --git a/src/reset.d.ts b/src/reset.d.ts index 262e470b..ed47e506 100644 --- a/src/reset.d.ts +++ b/src/reset.d.ts @@ -3,7 +3,7 @@ import '@total-typescript/ts-reset'; import type { ipcRenderer as electronIpcRenderer } from 'electron'; import type is from 'electron-is'; -import type config from './config'; +import type * as config from './config'; import type { VideoDataChanged } from '@/types/video-data-changed'; import type { t } from '@/i18n'; import type { trustedTypes } from 'trusted-types'; diff --git a/src/tray.ts b/src/tray.ts index a9a1c7c0..a9e8a476 100644 --- a/src/tray.ts +++ b/src/tray.ts @@ -4,11 +4,11 @@ import is from 'electron-is'; import defaultTrayIconAsset from '@assets/youtube-music-tray.png?asset&asarUnpack'; import pausedTrayIconAsset from '@assets/youtube-music-tray-paused.png?asset&asarUnpack'; -import config from './config'; +import * as config from './config'; import { restart } from './providers/app-controls'; import { registerCallback, SongInfoEvent } from './providers/song-info'; -import getSongControls from './providers/song-controls'; +import { getSongControls } from './providers/song-controls'; import { t } from '@/i18n'; diff --git a/src/utils/testing.ts b/src/utils/testing.ts index 42c31f28..2d997dad 100644 --- a/src/utils/testing.ts +++ b/src/utils/testing.ts @@ -1,3 +1 @@ export const isTesting = () => process.env.NODE_ENV === 'test'; - -export default { isTesting };