interface IPreRenderedAsset {
  name?: string | any
  source?: string | Uint8Array
  type?: 'asset'
}

export const cerateViteBuild = (viteEnv: ViteEnv, banner: string) => {
  const { VITE_DROP_CONSOLE, VITE_OUT_DIR, VITE_ASSETS_DIR, VITE_SOURCEMAP } = viteEnv
  return {
    outDir: VITE_OUT_DIR,
    assetsDir: VITE_ASSETS_DIR,
    cssCodeSplit: true,
    sourcemap: VITE_SOURCEMAP,
    terserOptions: {
      compress: {
        drop_console: VITE_DROP_CONSOLE, //打包时删除console
        drop_debugger: VITE_DROP_CONSOLE, //打包时删除 debugger
        pure_funcs: VITE_DROP_CONSOLE ? ['console.log', 'debugger'] : []
      },
      output: {
        comments: true
      }
    },
    rollupOptions: {
      output: {
        banner,
        chunkFileNames: `${VITE_ASSETS_DIR}/js/[hash].js`,
        entryFileNames: `${VITE_ASSETS_DIR}/js/[hash].js`,
        // assetFileNames: 'static/[ext]/[hash].[ext]',
        assetFileNames: (chunkInfo: IPreRenderedAsset) => {
          const { name } = chunkInfo
          const fileExt = name.split('.')
          return `${VITE_ASSETS_DIR}/${fileExt[1] === 'css' ? 'css' : 'imgs'}/[hash].${fileExt[1]}`
        },
        manualChunks: {
          vue: ['vue', 'vue-router'],
          pinia: ['pinia'],
          'lodash-es': ['lodash-es']
        }
      }
    }
  }
}
