mirror of
https://github.com/the1812/Bilibili-Evolved.git
synced 2025-11-04 21:22:45 +08:00
50 lines
1.3 KiB
TypeScript
50 lines
1.3 KiB
TypeScript
import { existsSync } from 'fs'
|
|
import { dirname, join } from 'path'
|
|
import { objectProperty, identifier } from '@babel/types'
|
|
import { parseExpression } from '@babel/parser'
|
|
import { InjectMetadataAction } from './types'
|
|
|
|
/**
|
|
* 当入口文件 index.ts 旁边还有 index.md 时, 将其作为中文的 description 注入.
|
|
* 如果还有 index.{language}.md, 也会一并作为多语言的 description 注入.
|
|
* 注意 index.ts 中原有的 description 会被覆盖.
|
|
*
|
|
* 例子:
|
|
* - index.ts
|
|
* - index.md
|
|
* - index.en-US.md
|
|
*
|
|
* 可以自动在 index.ts 中的定义中注入 zh-CN 和 en-US 的 description
|
|
*/
|
|
export const injectDescription: InjectMetadataAction = ({ filename }) => {
|
|
const folder = dirname(filename)
|
|
const defaultDesc = join(folder, 'index.md')
|
|
if (!existsSync(defaultDesc)) {
|
|
return []
|
|
}
|
|
const regex = /index\.(.+)\.md$/
|
|
return [
|
|
objectProperty(
|
|
identifier('description'),
|
|
parseExpression(
|
|
`
|
|
(() => {
|
|
const context = require.context('./', false, ${regex})
|
|
return {
|
|
...Object.fromEntries(context
|
|
.keys()
|
|
.map(path => {
|
|
const key = path.match(${regex})[1]
|
|
const value = context(path)
|
|
return [key, value]
|
|
})),
|
|
'zh-CN': () => import('./index.md').then(m => m.default),
|
|
}
|
|
})()
|
|
`,
|
|
{ plugins: ['typescript'] },
|
|
),
|
|
),
|
|
]
|
|
}
|