|
import { type UserConfig, type Plugin } from 'vite' |
|
import { type OutputOptions } from 'rollup' |
|
import { resolve } from 'path' |
|
import { rename } from 'fs/promises' |
|
|
|
export default function (): Plugin { |
|
return { |
|
name: 'extension', |
|
async writeBundle(options, bundle) { |
|
for (const key in bundle) { |
|
const b = bundle[key] |
|
const type = b.type |
|
if (type !== 'chunk' && type !== 'asset') { |
|
continue |
|
} |
|
const fileName = resolve(options.dir, b.fileName) |
|
await rename(fileName, fileName.replace(/\?[0-9a-f]+$/, '')) |
|
} |
|
}, |
|
config(config, env) { |
|
const common: UserConfig = { |
|
base: './', |
|
resolve: { |
|
alias: [ |
|
{ |
|
find: /.*\/assets(\.ts)?$/, |
|
replacement: resolve( |
|
__dirname, |
|
'src/environments/extension/assets.ts' |
|
), |
|
}, |
|
], |
|
}, |
|
build: { |
|
target: 'ESNext', |
|
emptyOutDir: false, |
|
rollupOptions: { |
|
output: { |
|
entryFileNames: '[name].js?[hash]', |
|
chunkFileNames: '[name].js?[hash]', |
|
assetFileNames: '[name][extname]?[hash]', |
|
}, |
|
}, |
|
}, |
|
} |
|
switch (env.mode) { |
|
case 'extension-editor': |
|
{ |
|
common.build.outDir = 'pages' |
|
common.build.rollupOptions.input = { |
|
index: resolve(__dirname, 'index.html'), |
|
} |
|
} |
|
break |
|
case 'extension-entry': |
|
{ |
|
common.build.outDir = 'javascript' |
|
common.build.rollupOptions.input = { |
|
index: resolve( |
|
__dirname, |
|
'src/environments/extension/entry.ts' |
|
), |
|
} |
|
common.publicDir = false |
|
const output = common.build.rollupOptions |
|
.output as OutputOptions |
|
output.format = 'iife' |
|
} |
|
|
|
break |
|
default: |
|
throw Error(`Unknown mode: ${env.mode}`) |
|
} |
|
return common |
|
}, |
|
} |
|
} |
|
|