electron-vite-vue/script/utils.ts
2021-09-09 09:35:21 +08:00

52 lines
1.5 KiB
TypeScript

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<number | undefined>(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<string, string> {
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<string, string> | undefined) // Just fix ts check