@theojs/lumen
Version:
专为 VitePress 打造的主题美化与 Vue 扩展组件库
50 lines (40 loc) • 1.22 kB
text/typescript
declare global {
interface Window {
umami: Function
}
}
export interface Umami {
id: string
src: string
domains?: string
}
export type UmamiOption = Umami | Umami[]
function mountUmami(options: UmamiOption) {
// 确保只有在生产环境下执行
if (process.env.NODE_ENV !== 'production') {
return
}
let properties: Umami[] = []
// 如果是数组,展开并处理
Array.isArray(options) ? properties.push(...options) : properties.push(options)
// 过滤掉没有 id 的属性
properties = properties.filter((property) => Boolean(property.id))
// 如果没有有效的 Umami 配置,直接返回
if (!properties.length) return
// 创建并插入 script 标签
for (const property of properties) {
const script = document.createElement('script')
script.async = true
script.defer = true
script.setAttribute('data-website-id', property.id)
if (property.domains) {
script.setAttribute('data-domains', property.domains)
}
script.src = property.src
document.head.appendChild(script)
}
}
export default (options: UmamiOption) => {
// 确保只在浏览器环境中运行
if (typeof window !== 'undefined') mountUmami(options)
}