mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
53 lines
1.6 KiB
TypeScript
53 lines
1.6 KiB
TypeScript
import nodePath from 'path'
|
|
import { PluginObj } from '@babel/core'
|
|
import { InjectMetadataAction } from './types'
|
|
import { injectCoreInfo } from './core-info'
|
|
import { injectDescription } from './description'
|
|
import { injectI18n } from './i18n'
|
|
|
|
const injectActions: InjectMetadataAction[] = [
|
|
injectCoreInfo,
|
|
injectDescription,
|
|
injectI18n,
|
|
]
|
|
|
|
export const injectMetadata = (): PluginObj => ({
|
|
visitor: {
|
|
ExportNamedDeclaration(path, state) {
|
|
const { filename } = state.file.opts
|
|
const isFromRegistry = filename.startsWith(
|
|
nodePath.resolve('./registry'),
|
|
)
|
|
const isFromCore = filename.startsWith(
|
|
nodePath.resolve('./src/components'),
|
|
) || filename.startsWith(
|
|
nodePath.resolve('./src/plugins'),
|
|
)
|
|
const isEntryFile = nodePath.basename(filename) === 'index.ts'
|
|
if (!((isFromRegistry || isFromCore) && isEntryFile)) {
|
|
return
|
|
}
|
|
const { node } = path
|
|
if (node.declaration?.type !== 'VariableDeclaration') {
|
|
return
|
|
}
|
|
node.declaration.declarations?.forEach(d => {
|
|
const isNameValid = d.id?.type === 'Identifier' && ['component', 'plugin'].includes(d.id.name)
|
|
if (!isNameValid) {
|
|
return
|
|
}
|
|
const targetExpression = d.init.type === 'CallExpression' ? d.init.arguments[0] : d.init
|
|
if (targetExpression.type !== 'ObjectExpression') {
|
|
return
|
|
}
|
|
targetExpression.properties.push(
|
|
...injectActions.flatMap(action => action({
|
|
expression: targetExpression,
|
|
filename,
|
|
})),
|
|
)
|
|
})
|
|
},
|
|
},
|
|
})
|