// generate stub index.html files for dev entry
import { execSync } from 'node:child_process'
import chokidar from 'chokidar'
import fs from 'fs-extra'
import { isDev, isFirefox, isSafari, log, r } from './utils'
/**
* Stub index.html to use Vite in development
*/
async function stubIndexHtml() {
const views = [
'options',
'popup',
]
for (const view of views) {
await fs.ensureDir(r(
isFirefox
? `extension-firefox/dist/${view}`
: isSafari ? `extension-safari/dist/${view}` : `extension/dist/${view}`,
))
let data = await fs.readFile(r(`src/${view}/index.html`), 'utf-8')
data = data
.replace('"./main.ts"', `"/${view}/main.ts.js"`)
.replace('
', 'Vite server did not start
')
await fs.writeFile(r(
isFirefox
? `extension-firefox/dist/${view}/index.html`
: isSafari ? `extension-safari/dist/${view}/index.html` : `extension/dist/${view}/index.html`,
), data, 'utf-8')
log('PRE', `stub ${view}`)
}
}
function writeManifest() {
execSync('npx esno ./scripts/manifest.ts', { stdio: 'inherit' })
}
fs.ensureDirSync(r(isFirefox ? 'extension-firefox' : isSafari ? 'extension-safari' : 'extension'))
fs.copySync(r('assets'), r(isFirefox ? 'extension-firefox/assets' : isSafari ? 'extension-safari/assets' : 'extension/assets'))
writeManifest()
if (isDev) {
stubIndexHtml()
chokidar.watch(r('src/**/*.html'))
.on('change', () => {
stubIndexHtml()
})
chokidar.watch([r('src/manifest.ts'), r('package.json')])
.on('change', () => {
writeManifest()
})
}