import fs from 'fs' import path from 'path' import { builtinModules } from 'module' import { get } from 'http' import { green } from 'chalk' import { Plugin } from 'rollup' import { parse as parseEnv } from 'dotenv' /** 轮询监听 vite 启动 */ export function waitOn(arg0: { port: string | number; interval?: number; }) { return new Promise(resolve => { const { port, interval = 149 } = arg0 const url = `http://localhost:${port}` let counter = 0 const timer: NodeJS.Timer = setInterval(() => { get(url, res => { clearInterval(timer) console.log('[waitOn]', green(`"${url}" are already responsive.`), `(${res.statusCode}: ${res.statusMessage})`) resolve(res.statusCode) }).on('error', err => { console.log('[waitOn]', `counter: ${counter++}`) }) }, interval) }) } /** node.js builtins module */ export const builtins = () => builtinModules.filter(x => !/^_|^(internal|v8|node-inspect)\/|\//.test(x)) /** * @todo * typescript with esbuild */ export function typescript(): Plugin { return { name: 'cxmh:rollup-typescript-esbuild', } } export function getEnv(): Record { try { if (getEnv.env) { return getEnv.env } const env = parseEnv(fs.readFileSync(path.join(process.cwd(), '.env'))) return getEnv.env = env } catch (error) { return {} } } getEnv.env = undefined as (Record | undefined) // Just fix ts check