mirror of
https://github.com/idrawjs/idraw
synced 2026-05-21 16:48:23 +00:00
56 lines
1.4 KiB
TypeScript
56 lines
1.4 KiB
TypeScript
/* eslint-disable @typescript-eslint/ban-ts-comment */
|
|
import AutoComplete from 'enquirer/lib/prompts/autocomplete';
|
|
import chalk from 'chalk';
|
|
import { createServer } from 'vite';
|
|
import type { UserConfig } from 'vite';
|
|
import { joinPackagePath } from './util/project';
|
|
import { packages } from './config';
|
|
|
|
dev();
|
|
|
|
async function dev() {
|
|
const pkgName = await inputPackageName();
|
|
const viteConfig = getViteConfig(pkgName);
|
|
const server = await createServer({
|
|
configFile: false,
|
|
...viteConfig
|
|
});
|
|
await server.listen();
|
|
server.printUrls();
|
|
const { port, host = '127.0.0.1' } = server.config?.server || {};
|
|
console.log(`Open: ` + chalk.green(`http://${host}:${port}/dev/index.html`));
|
|
}
|
|
|
|
function getViteConfig(pkgName: string): UserConfig {
|
|
const viteConfig: UserConfig = {
|
|
root: joinPackagePath(pkgName),
|
|
publicDir: joinPackagePath(pkgName, 'dev'),
|
|
server: {
|
|
port: 8080,
|
|
host: '127.0.0.1'
|
|
},
|
|
plugins: [],
|
|
esbuild: {
|
|
include: [/\.ts$/, /\.js$/],
|
|
exclude: [/\.html$/]
|
|
},
|
|
optimizeDeps: {}
|
|
};
|
|
return viteConfig;
|
|
}
|
|
|
|
async function inputPackageName() {
|
|
const choices = packages.map((pkg) => {
|
|
return pkg.dirName;
|
|
});
|
|
const prompt = new AutoComplete({
|
|
name: 'Package Name',
|
|
message: 'Pick your dev package',
|
|
limit: choices.length,
|
|
initial: 0,
|
|
choices: choices
|
|
});
|
|
// @ts-ignore
|
|
const pkgName = await prompt.run();
|
|
return pkgName;
|
|
}
|