Files
dify/web/plugins/vite/next-static-image-test.ts
2026-03-16 16:48:22 +08:00

31 lines
888 B
TypeScript

import type { Plugin } from 'vite'
import path from 'node:path'
import { normalizeViteModuleId } from './utils'
type NextStaticImageTestPluginOptions = {
projectRoot: string
}
const STATIC_ASSET_RE = /\.(?:svg|png|jpe?g|gif)$/i
const EXCLUDED_QUERY_RE = /[?&](?:raw|url)\b/
export const nextStaticImageTestPlugin = ({ projectRoot }: NextStaticImageTestPluginOptions): Plugin => {
return {
name: 'next-static-image-test',
enforce: 'pre',
load(id) {
if (EXCLUDED_QUERY_RE.test(id))
return null
const cleanId = normalizeViteModuleId(id)
if (!cleanId.startsWith(projectRoot) || !STATIC_ASSET_RE.test(cleanId))
return null
const relativePath = path.relative(projectRoot, cleanId).split(path.sep).join('/')
const src = `/__static__/${relativePath}`
return `export default { src: ${JSON.stringify(src)} }\n`
},
}
}