diff --git a/registry/lib/components/live/badge-helper/index.ts b/registry/lib/components/live/badge-helper/index.ts index 3718d8b08..b1131932d 100644 --- a/registry/lib/components/live/badge-helper/index.ts +++ b/registry/lib/components/live/badge-helper/index.ts @@ -1,8 +1,8 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { getNumberValidator, getUID, none } from '@/core/utils' import { autoMatchMedal } from './auto-match' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'badgeHelper', displayName: '直播勋章快速更换', description: { @@ -37,4 +37,4 @@ export const component: ComponentMetadata = { urlInclude: [ '//live.bilibili.com', ], -} +}) diff --git a/registry/lib/components/live/danmaku-sendbar/index.ts b/registry/lib/components/live/danmaku-sendbar/index.ts index fb68743c6..c3c7e1ff0 100644 --- a/registry/lib/components/live/danmaku-sendbar/index.ts +++ b/registry/lib/components/live/danmaku-sendbar/index.ts @@ -1,5 +1,5 @@ import { waitForControlBar } from '@/components/live/live-control-bar' -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { getUID } from '@/core/utils' import { liveUrls } from '@/core/utils/urls' import { leftControllerSelector } from './original-elements' @@ -27,7 +27,7 @@ const entry = async () => { }, }) } -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'liveDanmakuSendbar', displayName: '直播弹幕发送栏', tags: [ @@ -40,4 +40,4 @@ export const component: ComponentMetadata = { reload: () => document.body.classList.remove('danmaku-send-bar-unloaded'), unload: () => document.body.classList.add('danmaku-send-bar-unloaded'), urlInclude: liveUrls, -} +}) diff --git a/registry/lib/components/live/download-records/index.ts b/registry/lib/components/live/download-records/index.ts index 56c1278d7..fd5779620 100644 --- a/registry/lib/components/live/download-records/index.ts +++ b/registry/lib/components/live/download-records/index.ts @@ -1,6 +1,6 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'downloadLiveRecords', displayName: '直播录像下载', description: { @@ -16,4 +16,4 @@ export const component: ComponentMetadata = { urlInclude: [ /^https:\/\/live\.bilibili\.com\/record\/(.+)/, ], -} +}) diff --git a/registry/lib/components/live/gift-box/index.ts b/registry/lib/components/live/gift-box/index.ts index d62e03f1c..cdaa93838 100644 --- a/registry/lib/components/live/gift-box/index.ts +++ b/registry/lib/components/live/gift-box/index.ts @@ -1,5 +1,5 @@ import { waitForControlBar } from '@/components/live/live-control-bar' -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { select as spinSelect } from '@/core/spin-query' import { addStyle, removeStyle } from '@/core/style' import { liveUrls } from '@/core/utils/urls' @@ -220,7 +220,7 @@ function unload() { removeStyle(componentName) } -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: componentName, displayName: '直播全屏包裹', description: { @@ -231,4 +231,4 @@ export const component: ComponentMetadata = { entry, reload, unload, -} +}) diff --git a/registry/lib/components/live/home-mute/index.ts b/registry/lib/components/live/home-mute/index.ts index c04b21bcf..7ca881a04 100644 --- a/registry/lib/components/live/home-mute/index.ts +++ b/registry/lib/components/live/home-mute/index.ts @@ -1,9 +1,9 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { addComponentListener } from '@/core/settings' import { addStyle, removeStyle } from '@/core/style' const liveHome = /^https:\/\/live\.bilibili\.com\/(index\.html)?$/ -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'liveHomeMute', displayName: '直播首页静音', tags: [ @@ -47,4 +47,4 @@ export const component: ComponentMetadata = { }) }, }, -} +}) diff --git a/registry/lib/components/live/remove-watermark/index.ts b/registry/lib/components/live/remove-watermark/index.ts index 27d4c15cf..49cb9bea1 100644 --- a/registry/lib/components/live/remove-watermark/index.ts +++ b/registry/lib/components/live/remove-watermark/index.ts @@ -1,8 +1,8 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { toggleStyle } from '@/components/styled-component' import { liveUrls } from '@/core/utils/urls' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ ...toggleStyle('removeLiveWatermark', () => import('./remove-watermark.scss')), displayName: '删除直播水印', tags: [ @@ -13,4 +13,4 @@ export const component: ComponentMetadata = { 'zh-CN': '删除观看直播时角落的水印.', }, urlInclude: liveUrls, -} +}) diff --git a/registry/lib/components/live/showgirl/index.ts b/registry/lib/components/live/showgirl/index.ts index 8efee2d4a..5736e0b28 100644 --- a/registry/lib/components/live/showgirl/index.ts +++ b/registry/lib/components/live/showgirl/index.ts @@ -1,4 +1,4 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { liveUrls } from '@/core/utils/urls' const id = 'dpi-live-showgirl' @@ -14,7 +14,7 @@ const entry = async () => { `, id) } } -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'dpiLiveShowgirl', displayName: '直播看板娘高 DPI 适配', enabledByDefault: window.devicePixelRatio > 1, @@ -31,4 +31,4 @@ export const component: ComponentMetadata = { document.getElementById(id)?.remove() }, urlInclude: liveUrls, -} +}) diff --git a/registry/lib/components/live/side-bar/index.ts b/registry/lib/components/live/side-bar/index.ts index 0aab7875f..5a84e08a0 100644 --- a/registry/lib/components/live/side-bar/index.ts +++ b/registry/lib/components/live/side-bar/index.ts @@ -1,7 +1,7 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { liveUrls } from '@/core/utils/urls' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'collapseLiveSideBar', entry: none, instantStyles: [ @@ -17,4 +17,4 @@ export const component: ComponentMetadata = { componentsTags.style, ], urlInclude: liveUrls, -} +}) diff --git a/registry/lib/components/style/always-show-duration/index.ts b/registry/lib/components/style/always-show-duration/index.ts index 24338b414..a02bb0771 100644 --- a/registry/lib/components/style/always-show-duration/index.ts +++ b/registry/lib/components/style/always-show-duration/index.ts @@ -1,11 +1,11 @@ import { toggleStyle } from '@/components/styled-component' -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ ...toggleStyle('alwaysShowDuration', () => import('./always-show-duration.scss')), displayName: '总是显示视频时长', description: { 'zh-CN': '使脚本展示的各种视频卡片中的时长无需鼠标经过也能一直显示.', }, tags: [componentsTags.video, componentsTags.style], -} +}) diff --git a/registry/lib/components/style/auto-hide-sidebar/index.ts b/registry/lib/components/style/auto-hide-sidebar/index.ts index 510cf3c30..3384b9926 100644 --- a/registry/lib/components/style/auto-hide-sidebar/index.ts +++ b/registry/lib/components/style/auto-hide-sidebar/index.ts @@ -1,8 +1,8 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { addComponentListener } from '@/core/settings' import { getNumberValidator } from '@/core/utils' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'autoHideSidebar', entry: () => { addComponentListener('autoHideSidebar.triggerWidth', (value: number) => { @@ -28,4 +28,4 @@ export const component: ComponentMetadata = { description: { 'zh-CN': '自动隐藏脚本的侧栏 (功能和设置图标). 设置面板停靠在右侧时不建议使用, 因为网页的滚动条会占用右边缘的触发区域.', }, -} +}) diff --git a/registry/lib/components/style/custom-navbar/index.ts b/registry/lib/components/style/custom-navbar/index.ts index 70a2e5fa3..45f08a1c5 100644 --- a/registry/lib/components/style/custom-navbar/index.ts +++ b/registry/lib/components/style/custom-navbar/index.ts @@ -1,10 +1,10 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { LaunchBarActionProvider } from '@/components/launch-bar/launch-bar-action' import { urlInclude, urlExclude } from './urls' import { entry } from './entry' const styleID = 'custom-navbar-style' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'customNavbar', displayName: '自定义顶栏', description: ` @@ -121,4 +121,4 @@ export const component: ComponentMetadata = { }) }, }, -} +}) diff --git a/registry/lib/components/style/dark-mode/index.ts b/registry/lib/components/style/dark-mode/index.ts index 460d3bddc..75e15cc5a 100644 --- a/registry/lib/components/style/dark-mode/index.ts +++ b/registry/lib/components/style/dark-mode/index.ts @@ -1,4 +1,4 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { darkExcludes } from './dark-urls' const changeDelay = 200 @@ -27,7 +27,7 @@ const remove = async () => { } } -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'darkMode', displayName: '夜间模式', entry: () => { @@ -73,4 +73,4 @@ export const component: ComponentMetadata = { }, }, urlExclude: darkExcludes, -} +}) diff --git a/registry/lib/components/style/hide/bangumi/reviews/index.ts b/registry/lib/components/style/hide/bangumi/reviews/index.ts index a60454de1..d0e358b13 100644 --- a/registry/lib/components/style/hide/bangumi/reviews/index.ts +++ b/registry/lib/components/style/hide/bangumi/reviews/index.ts @@ -1,8 +1,8 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { toggleStyle } from '@/components/styled-component' import { bangumiUrls } from '@/core/utils/urls' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ displayName: '隐藏番剧点评', tags: [ componentsTags.style, @@ -12,4 +12,4 @@ export const component: ComponentMetadata = { description: { 'zh-CN': '隐藏番剧播放页面里的点评板块.', }, -} +}) diff --git a/registry/lib/components/style/hide/bangumi/sponsors/index.ts b/registry/lib/components/style/hide/bangumi/sponsors/index.ts index fc96d94e1..43953eee7 100644 --- a/registry/lib/components/style/hide/bangumi/sponsors/index.ts +++ b/registry/lib/components/style/hide/bangumi/sponsors/index.ts @@ -1,8 +1,8 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { toggleStyle } from '@/components/styled-component' import { bangumiUrls } from '@/core/utils/urls' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ displayName: '隐藏番剧承包', tags: [ componentsTags.style, @@ -12,4 +12,4 @@ export const component: ComponentMetadata = { description: { 'zh-CN': '隐藏番剧页面下方的承包榜, 以及右边的承包按钮.', }, -} +}) diff --git a/registry/lib/components/style/hide/banner/index.ts b/registry/lib/components/style/hide/banner/index.ts index 388f61385..daceca330 100644 --- a/registry/lib/components/style/hide/banner/index.ts +++ b/registry/lib/components/style/hide/banner/index.ts @@ -1,7 +1,7 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { mainSiteUrls } from '@/core/utils/urls' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'hideBanner', entry: none, displayName: '隐藏顶部横幅', @@ -16,4 +16,4 @@ export const component: ComponentMetadata = { 'zh-CN': '隐藏首页顶部横幅.', }, urlInclude: mainSiteUrls, -} +}) diff --git a/registry/lib/components/style/hide/video/recommended-live/index.ts b/registry/lib/components/style/hide/video/recommended-live/index.ts index bec1de90d..5777272fb 100644 --- a/registry/lib/components/style/hide/video/recommended-live/index.ts +++ b/registry/lib/components/style/hide/video/recommended-live/index.ts @@ -1,7 +1,7 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { videoUrls } from '@/core/utils/urls' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'hideRecommendedLive', entry: none, instantStyles: [ @@ -19,4 +19,4 @@ export const component: ComponentMetadata = { 'zh-CN': '隐藏视频页面右侧下方的直播推荐.', }, urlInclude: videoUrls, -} +}) diff --git a/registry/lib/components/style/hide/video/related-videos/index.ts b/registry/lib/components/style/hide/video/related-videos/index.ts index 8ad980eed..b437233b6 100644 --- a/registry/lib/components/style/hide/video/related-videos/index.ts +++ b/registry/lib/components/style/hide/video/related-videos/index.ts @@ -1,7 +1,7 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { videoAndBangumiUrls } from '@/core/utils/urls' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'hideRelatedVideos', displayName: '隐藏视频推荐', entry: none, @@ -19,4 +19,4 @@ export const component: ComponentMetadata = { 'zh-CN': '隐藏番剧和视频页面右侧的推荐视频列表. 注意: 如果你想关闭 b 站的自动连播 (自动播放下一个推荐视频) 功能, 需要先取消隐藏视频推荐才能看到开关.', }, urlInclude: videoAndBangumiUrls, -} +}) diff --git a/registry/lib/components/style/hide/video/top-mask/index.ts b/registry/lib/components/style/hide/video/top-mask/index.ts index 89add8f7e..5c8dd7a57 100644 --- a/registry/lib/components/style/hide/video/top-mask/index.ts +++ b/registry/lib/components/style/hide/video/top-mask/index.ts @@ -1,8 +1,8 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { toggleStyle } from '@/components/styled-component' import { playerUrls } from '@/core/utils/urls' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ displayName: '隐藏视频标题层', ...toggleStyle('hideVideoTopMask', () => import('./top-mask.scss')), tags: [ @@ -12,4 +12,4 @@ export const component: ComponentMetadata = { 'zh-CN': '隐藏视频里鼠标经过时出现在右上角的覆盖层.', }, urlInclude: playerUrls, -} +}) diff --git a/registry/lib/components/style/home-redesign/fresh/index.ts b/registry/lib/components/style/home-redesign/fresh/index.ts index 069d21f88..da014d664 100644 --- a/registry/lib/components/style/home-redesign/fresh/index.ts +++ b/registry/lib/components/style/home-redesign/fresh/index.ts @@ -1,10 +1,10 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { contentLoaded } from '@/core/life-cycle' import { addComponentListener } from '@/core/settings' import { getNumberValidator, mountVueComponent } from '@/core/utils' import { homeUrls } from '../urls' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'freshHome', displayName: '清爽首页', urlInclude: homeUrls, @@ -56,4 +56,4 @@ export const component: ComponentMetadata = { style: () => import('../hide-original.scss'), }, ], -} +}) diff --git a/registry/lib/components/style/player-on-top/index.ts b/registry/lib/components/style/player-on-top/index.ts index 17c70c868..3dd901c43 100644 --- a/registry/lib/components/style/player-on-top/index.ts +++ b/registry/lib/components/style/player-on-top/index.ts @@ -1,6 +1,6 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'playerOnTop', displayName: '播放器置顶', description: { @@ -14,4 +14,4 @@ export const component: ComponentMetadata = { ], tags: [componentsTags.style, componentsTags.video], entry: none, -} +}) diff --git a/registry/lib/components/style/player-shadow/index.ts b/registry/lib/components/style/player-shadow/index.ts index b02b32578..253883e5f 100644 --- a/registry/lib/components/style/player-shadow/index.ts +++ b/registry/lib/components/style/player-shadow/index.ts @@ -1,7 +1,7 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { allVideoUrls } from '@/core/utils/urls' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'playerShadow', displayName: '播放器投影', entry: none, @@ -19,4 +19,4 @@ export const component: ComponentMetadata = { 'zh-CN': '为播放器添加主题色投影.', }, urlInclude: allVideoUrls, -} +}) diff --git a/registry/lib/components/style/scrollbar/index.ts b/registry/lib/components/style/scrollbar/index.ts index a25dd4c91..8acee6697 100644 --- a/registry/lib/components/style/scrollbar/index.ts +++ b/registry/lib/components/style/scrollbar/index.ts @@ -1,6 +1,6 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'elegantScrollbar', entry: none, displayName: '使用细滚动条', @@ -15,4 +15,4 @@ export const component: ComponentMetadata = { style: () => import('./scrollbar.scss'), }, ], -} +}) diff --git a/registry/lib/components/style/sidebar-offset/index.ts b/registry/lib/components/style/sidebar-offset/index.ts index f24d12d3e..41a7fe37f 100644 --- a/registry/lib/components/style/sidebar-offset/index.ts +++ b/registry/lib/components/style/sidebar-offset/index.ts @@ -1,8 +1,8 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' import { addComponentListener } from '@/core/settings' import { getNumberValidator } from '@/core/utils' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'sidebarOffset', displayName: '侧栏垂直偏移', tags: [componentsTags.style], @@ -27,4 +27,4 @@ export const component: ComponentMetadata = { validator: getNumberValidator(-40, 40), }, }, -} +}) diff --git a/registry/lib/components/style/simplify/comments/index.ts b/registry/lib/components/style/simplify/comments/index.ts index b0ceb019e..4a19f849f 100644 --- a/registry/lib/components/style/simplify/comments/index.ts +++ b/registry/lib/components/style/simplify/comments/index.ts @@ -1,7 +1,7 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' const name = 'simplifyComments' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name, entry: async ({ metadata }) => { const { addComponentListener } = await import('@/core/settings') @@ -32,4 +32,4 @@ export const component: ComponentMetadata = { tags: [ componentsTags.style, ], -} +}) diff --git a/registry/lib/components/style/special-danmaku/index.ts b/registry/lib/components/style/special-danmaku/index.ts index 1924682d6..28d36863b 100644 --- a/registry/lib/components/style/special-danmaku/index.ts +++ b/registry/lib/components/style/special-danmaku/index.ts @@ -1,16 +1,31 @@ -import { ComponentEntry, ComponentMetadata } from '@/components/types' +import { defineComponentMetadata, defineOptionsMetadata, OptionsOfMetadata } from '@/components/define' +import { ComponentEntry } from '@/components/types' import { toggleStyle } from '@/components/styled-component' import { playerUrls } from '@/core/utils/urls' import { addComponentListener } from '@/core/settings' -const entry: ComponentEntry = ({ metadata, settings: { options } }) => { - Object.keys(options).forEach(disableType => { +const options = defineOptionsMetadata({ + highlight: { + displayName: '禁用高赞弹幕', + defaultValue: true, + }, + up: { + displayName: '禁用UP主弹幕', + defaultValue: true, + }, +}) + +type Options = OptionsOfMetadata + +const entry: ComponentEntry = ({ metadata, settings }) => { + Object.keys(settings.options).forEach(disableType => { addComponentListener(`${metadata.name}.${disableType}`, (value: boolean) => { document.body.classList.toggle(`disable-${disableType}-danmaku-style`, value) }, true) }) } -export const component: ComponentMetadata = { + +export const component = defineComponentMetadata({ displayName: '禁用特殊弹幕样式', tags: [ componentsTags.style, @@ -20,14 +35,5 @@ export const component: ComponentMetadata = { description: { 'zh-CN': '移除高赞弹幕或 UP 主弹幕的特殊样式, 弹幕内容不会移除.', }, - options: { - highlight: { - displayName: '禁用高赞弹幕', - defaultValue: true, - }, - up: { - displayName: '禁用UP主弹幕', - defaultValue: true, - }, - }, -} + options, +}) diff --git a/registry/lib/components/style/v1-panel/index.ts b/registry/lib/components/style/v1-panel/index.ts index 061fdfc2f..586253557 100644 --- a/registry/lib/components/style/v1-panel/index.ts +++ b/registry/lib/components/style/v1-panel/index.ts @@ -1,6 +1,6 @@ -import { ComponentMetadata } from '@/components/types' +import { defineComponentMetadata } from '@/components/define' -export const component: ComponentMetadata = { +export const component = defineComponentMetadata({ name: 'v1PanelStyle', displayName: 'v1 风格设置面板', tags: [componentsTags.style], @@ -12,4 +12,4 @@ export const component: ComponentMetadata = { name: 'v1PanelStyle', style: () => import('./v1-panel.scss'), }], -} +}) diff --git a/registry/lib/components/video/outer-watchlater/index.ts b/registry/lib/components/video/outer-watchlater/index.ts index 5c27fbc83..f3f6573d4 100644 --- a/registry/lib/components/video/outer-watchlater/index.ts +++ b/registry/lib/components/video/outer-watchlater/index.ts @@ -1,4 +1,6 @@ -import { defineComponentMetadata, defineOptionsMetadata } from '@/components/define' +import { + defineComponentMetadata, defineOptionsMetadata, OptionsOfMetadata, +} from '@/components/define' import { ComponentEntry } from '@/components/types' import { matchUrlPattern } from '@/core/utils' import { videoUrls, watchlaterUrls } from '@/core/utils/urls' @@ -10,7 +12,10 @@ const options = defineOptionsMetadata({ displayName: '在稍后再看页面中仍然显示', }, }) -const entry: ComponentEntry = async ({ settings }) => { + +type Options = OptionsOfMetadata + +const entry: ComponentEntry = async ({ settings }) => { if (watchlaterUrls.some(matchUrlPattern) && !settings.options.showInWatchlaterPages) { return } diff --git a/registry/lib/components/video/player/extend-speed/component.ts b/registry/lib/components/video/player/extend-speed/component.ts index 8fd935013..c8004f525 100644 --- a/registry/lib/components/video/player/extend-speed/component.ts +++ b/registry/lib/components/video/player/extend-speed/component.ts @@ -278,8 +278,12 @@ export class ExtendSpeedComponent extends EntrySpeedComponent { protected unpatch: TeardownLogic protected migrate() { + type MixedRememberSpeedOptions = Partial & { + extendList?: number[] + extend?: unknown + } const { options } = this.settings - const { options: rememberSpeedOptions } = getComponentSettings('rememberVideoSpeed') as ComponentSettings + const { options: rememberSpeedOptions } = getComponentSettings('rememberVideoSpeed') as ComponentSettings if (rememberSpeedOptions.extendList) { options.extendSpeedList = Array.from(rememberSpeedOptions.extendList as number[]) delete rememberSpeedOptions.extendList diff --git a/registry/lib/components/video/player/remember-speed/component.ts b/registry/lib/components/video/player/remember-speed/component.ts index 2dcebd61a..0ff501f26 100644 --- a/registry/lib/components/video/player/remember-speed/component.ts +++ b/registry/lib/components/video/player/remember-speed/component.ts @@ -62,7 +62,12 @@ export class RememberSpeedComponent extends EntrySpeedComponent { } protected migrate() { - const { options } = this.settings + type MinedOptions = Partial & { + speed?: number + individualRememberList?: Record + remember?: boolean + } + const { options }: { options: MinedOptions } = this.settings let flag = false if (options.speed) { options.globalSpeed = +options.speed || 1 @@ -72,7 +77,7 @@ export class RememberSpeedComponent extends EntrySpeedComponent { if (options.individualRememberList) { options.individualRememberRecord = lodash.cloneDeep( options.individualRememberList, - ) as Record + ) delete options.individualRememberList flag = true } diff --git a/registry/lib/components/video/quick-favorite/index.ts b/registry/lib/components/video/quick-favorite/index.ts index 6cf468598..dfcb1bb64 100644 --- a/registry/lib/components/video/quick-favorite/index.ts +++ b/registry/lib/components/video/quick-favorite/index.ts @@ -1,4 +1,6 @@ -import { defineComponentMetadata, defineOptionsMetadata } from '@/components/define' +import { + defineComponentMetadata, defineOptionsMetadata, OptionsOfMetadata, +} from '@/components/define' import { ComponentEntry } from '@/components/types' import { matchUrlPattern } from '@/core/utils' import { favoriteListUrls, videoUrls } from '@/core/utils/urls' @@ -15,7 +17,10 @@ const options = defineOptionsMetadata({ displayName: '在收藏夹播放页面仍然显示', }, }) -const entry: ComponentEntry = async ({ settings }) => { + +type Options = OptionsOfMetadata + +const entry: ComponentEntry = async ({ settings }) => { if (favoriteListUrls.some(matchUrlPattern) && !settings.options.showInFavoritePages) { return } diff --git a/registry/lib/plugins/settings-panel/recent-components/index.ts b/registry/lib/plugins/settings-panel/recent-components/index.ts index c599e2b48..09c318d1d 100644 --- a/registry/lib/plugins/settings-panel/recent-components/index.ts +++ b/registry/lib/plugins/settings-panel/recent-components/index.ts @@ -1,6 +1,11 @@ import { PluginMetadata } from '@/plugins/plugin' import { TagFilter } from '@/components/settings-panel/tag-filter' import { ComponentMetadata } from '@/components/types' +import type { Options as SettingPanelOptions } from '@/components/settings-panel' + +type ExtendedOptions = SettingPanelOptions & { + recentComponents?: Record +} export const plugin: PluginMetadata = { name: 'settingsPanel.tagFilters.recentComponents', @@ -9,7 +14,7 @@ export const plugin: PluginMetadata = { setup: ({ addData, addHook }) => { const getRecentComponents = async () => { const { getGeneralSettings } = await import('@/core/settings') - const generalSettings = getGeneralSettings() + const generalSettings: ExtendedOptions = getGeneralSettings() if (!generalSettings.recentComponents) { generalSettings.recentComponents = {} } diff --git a/src/components/auto-update/index.ts b/src/components/auto-update/index.ts index 34d2e7251..e120f749f 100644 --- a/src/components/auto-update/index.ts +++ b/src/components/auto-update/index.ts @@ -62,7 +62,9 @@ const optionsMetadata = defineOptionsMetadata({ }, }) -const entry: ComponentEntry = async ({ +type Options = OptionsOfMetadata + +const entry: ComponentEntry = async ({ settings: { options: opt }, }) => { if (isIframe()) { diff --git a/src/components/define.ts b/src/components/define.ts index b5dbbef59..b955ef9d0 100644 --- a/src/components/define.ts +++ b/src/components/define.ts @@ -1,6 +1,5 @@ import { - ComponentMetadata, - OptionalOptionsMetadata, + ComponentMetadata, EmptyOptions, OptionMetadata, OptionsMetadata, UnknownOptions, @@ -23,5 +22,5 @@ export const defineOptionsMetadata = < /** 定义组件 */ export const defineComponentMetadata = < - Om extends OptionalOptionsMetadata ->(m: ComponentMetadata): ComponentMetadata => m + O extends UnknownOptions = EmptyOptions +>(m: ComponentMetadata): ComponentMetadata => m diff --git a/src/components/settings-panel/index.ts b/src/components/settings-panel/index.ts index 8b2df14a4..ac0e69938 100644 --- a/src/components/settings-panel/index.ts +++ b/src/components/settings-panel/index.ts @@ -71,7 +71,7 @@ const options = defineOptionsMetadata({ export type Options = OptionsOfMetadata -const entry: ComponentEntry = async ({ metadata }) => { +const entry: ComponentEntry = async ({ metadata }) => { const { isIframe } = await import('@/core/utils') if (isIframe()) { return diff --git a/src/components/types.ts b/src/components/types.ts index c14d60658..86bf1be91 100644 --- a/src/components/types.ts +++ b/src/components/types.ts @@ -154,41 +154,32 @@ export const componentsTags = { } as ComponentTag, } -/** - * 从 OptionalOptionsMetadata 中获取 Options 信息。 - * 当其为 undefined 时,返回类型 EmptyOptions。 - */ -export type OptionsFromOptionalMetadata = ( - M extends undefined | Record ? EmptyOptions : - M extends OptionsMetadata ? O : never -) - /** 组件入口函数的参数 */ export interface ComponentEntryContext< - Om extends OptionalOptionsMetadata = OptionalOptionsMetadata + O extends UnknownOptions = UnknownOptions > { /** 当前组件的设置 */ - settings: ComponentSettings> + settings: ComponentSettings /** 当前组件的信息 */ - metadata: ComponentMetadata + metadata: ComponentMetadata /** 核心 API */ coreApis: CoreApis } /** 组件入口函数 */ export type ComponentEntry< - Om extends OptionalOptionsMetadata = OptionalOptionsMetadata, + O extends UnknownOptions = UnknownOptions, T = unknown > = ( - context: ComponentEntryContext + context: ComponentEntryContext ) => T | Promise /** 带有函数/复杂对象的组件信息 */ export interface FunctionalMetadata< - Om extends OptionalOptionsMetadata = OptionalOptionsMetadata + O extends UnknownOptions = UnknownOptions > { /** 主入口, 重新开启时不会再运行 */ - entry: ComponentEntry + entry: ComponentEntry /** 导出小组件 */ widget?: Omit /** 首屏样式, 会尽快注入 (before DCL) */ @@ -216,15 +207,10 @@ export interface FunctionalMetadata< i18n?: Record> } -/** ComponentMetadata 的类型参数,用于表达其可选参数 options 的类型 */ -export type OptionalOptionsMetadata = ( - OptionsMetadata | undefined -) - /** 组件基本信息 */ export interface ComponentMetadata< - Om extends OptionalOptionsMetadata = OptionalOptionsMetadata -> extends FeatureBase, FunctionalMetadata { + O extends UnknownOptions = UnknownOptions +> extends FeatureBase, FunctionalMetadata { /** 组件名称 */ name: string /** 显示名称 */ @@ -238,7 +224,7 @@ export interface ComponentMetadata< /** 是否在设置界面中隐藏 (代码仍可操作) */ hidden?: boolean /** 组件子选项 */ - options?: Om + options?: OptionsMetadata /** 是否支持热重载 */ // allowHotReload?: boolean } diff --git a/src/core/settings/helpers.ts b/src/core/settings/helpers.ts index 3397f7b6d..ff8bd48ba 100644 --- a/src/core/settings/helpers.ts +++ b/src/core/settings/helpers.ts @@ -1,8 +1,6 @@ import { ComponentMetadata, componentsMap, - OptionalOptionsMetadata, - OptionsFromOptionalMetadata, OptionsMetadata, UnknownOptions, } from '@/components/component' @@ -24,9 +22,9 @@ export const metadataToOptions = ( * 生成组件设置 * @param component 组件定义 */ -export const componentToSettings = ( - component: ComponentMetadata, -): ComponentSettings> => { +export const componentToSettings = ( + component: ComponentMetadata, +): ComponentSettings => { const { options: meta } = component return { enabled: component.enabledByDefault ?? true,