Bilibili-Evolved/registry/lib/components/utils/dev-client/index.ts
2022-05-21 16:24:08 +08:00

43 lines
1.2 KiB
TypeScript

import { defineComponentMetadata } from '@/components/define'
import { isIframe } from '@/core/utils'
import { devClientOptionsMetadata, autoUpdateOptions } from './options'
import { setupPlugin } from './plugin'
export const component = defineComponentMetadata({
name: 'devClient',
displayName: 'DevClient',
tags: [componentsTags.utils],
description: '本地开发工具',
entry: async ({ settings: { options } }) => {
if (isIframe()) {
return
}
const { devClient, DevClientEvents } = await import('./client')
const cleanUpDevRecords = () => {
Object.entries(options.devRecords).forEach(([, { name, originalUrl }]) => {
const autoUpdateRecord = autoUpdateOptions.urls.components[name]
if (autoUpdateRecord) {
autoUpdateRecord.url = originalUrl
}
delete options.devRecords[name]
})
}
if (devClient.isConnected) {
cleanUpDevRecords()
} else {
devClient.addEventListener(
DevClientEvents.ServerConnected,
() => cleanUpDevRecords(),
{ once: true },
)
}
},
options: devClientOptionsMetadata,
widget: {
component: () => import('./Widget.vue').then(m => m.default),
},
plugin: {
setup: setupPlugin,
},
})