Files
vue-flow/docs/src/.vitepress/plugins/copy.ts

63 lines
1.7 KiB
TypeScript

import { existsSync, readFileSync, writeFileSync } from 'node:fs'
import { resolve } from 'node:path'
import type { Plugin } from 'vite'
function getPkgPath(pkgName: string, fileName) {
return resolve(__dirname, `../../../node_modules/@vue-flow/${pkgName}/dist/${fileName}`)
}
function getPublicPath(fileName: string) {
return resolve(__dirname, `../../public/${fileName}`)
}
function copyFiles(emit: any) {
;['core', 'background', 'controls', 'minimap', 'node-resizer', 'node-toolbar'].forEach((name) => {
const fileName = `vue-flow-${name}.mjs`
const filePath = resolve(__dirname, getPkgPath(name, fileName))
if (!existsSync(filePath)) {
throw new Error(`${name} not built. ` + `Run "pnpm -w build" first.`)
}
emit({
type: 'asset',
fileName,
filePath,
source: readFileSync(filePath, 'utf-8'),
})
console.log(`Copied ${fileName} to /public/${fileName}`)
})
}
export function copyVueFlowPlugin(): Plugin {
return {
name: 'copy-vue-flow',
buildStart() {
// use fs to copy files
copyFiles((file: any) => {
// remove existing files
if (existsSync(getPublicPath(file.fileName))) {
writeFileSync(getPublicPath(file.fileName), '')
}
writeFileSync(getPublicPath(file.fileName), file.source)
})
},
watchChange() {
// use fs to copy files
copyFiles((file: any) => {
// remove existing files
if (existsSync(getPublicPath(file.fileName))) {
writeFileSync(getPublicPath(file.fileName), '')
}
writeFileSync(getPublicPath(file.fileName), file.source)
})
},
generateBundle() {
copyFiles((file: any) => this.emitFile(file))
},
}
}