aliaset
Version:
twind monorepo
85 lines (74 loc) • 2.2 kB
text/typescript
import fs from 'node:fs'
import path from 'node:path'
import process from 'node:process'
import fg from 'fast-glob'
import { sveltekit } from '@sveltejs/kit/vite'
import { searchForWorkspaceRoot, defineConfig } from 'vite'
export default defineConfig((env) => {
const docsPath = path.resolve('../../documentation')
return {
plugins: [
sveltekit(),
env.command === 'serve' && {
name: 'watch-external', // https://stackoverflow.com/questions/63373804/rollup-watch-include-directory/63548394#63548394
async buildStart() {
for (const file of await fg('**/*.md', {
cwd: docsPath,
ignore: ['**/README.md'],
absolute: true,
})) {
this.addWatchFile(file)
}
if (!process.env.CI) {
try {
fs.watch(docsPath, { recursive: true, persistent: false }, (event, filename) => {
this.addWatchFile(path.resolve(docsPath, filename))
})
} catch (error) {
if ((error as NodeJS.ErrnoException).code === 'ERR_FEATURE_UNAVAILABLE_ON_PLATFORM') {
console.warn('watching for changes is not supported on this platform')
} else {
throw error
}
}
}
},
handleHotUpdate({ file, timestamp, server }) {
if (file.startsWith(docsPath)) {
server.ws.send({
type: 'custom',
event: 'docs-update',
data: { file },
})
return []
}
},
},
],
resolve: {
// no browser condition because this is sometimes used for umd builds
exportConditions: [
env.mode,
'esnext',
'modern',
'esmodules',
'es2015',
'module',
'import',
'require',
'default',
env.ssrBuild && 'node',
].filter(Boolean),
},
clearScreen: false,
build: {
sourcemap: !process.env.CI,
},
server: {
fs: {
// search up for workspace root
allow: [searchForWorkspaceRoot(process.cwd())],
},
},
}
})