Files
2026-08-29 18:59:33 +08:00

42 lines
1.2 KiB
TypeScript

import { spawn } from 'node:child_process'
import type { ChildProcess } from 'node:child_process'
import { createRequire } from 'node:module'
import { hashPresenterToken } from './token.ts'
const require = createRequire(import.meta.url)
const slidevCli = require.resolve('@slidev/cli/bin/slidev.mjs')
interface RunSlidevOptions {
env?: NodeJS.ProcessEnv
}
export function startSlidev(args: string[], options: RunSlidevOptions = {}) {
const token = options.env?.PRESENTER_TOKEN ?? process.env.PRESENTER_TOKEN
const presenterHash = token?.trim() ? hashPresenterToken(token) : ''
return spawn(process.execPath, [slidevCli, ...args], {
cwd: process.cwd(),
env: {
...process.env,
...options.env,
VITE_EASY_SLIDES_PRESENTER_HASH: presenterHash,
},
stdio: 'inherit',
})
}
export async function waitForSlidev(child: ChildProcess) {
await new Promise<void>((resolve, reject) => {
child.once('error', reject)
child.once('exit', (code, signal) => {
if (code === 0)
resolve()
else
reject(new Error(`Slidev 退出:${signal ?? `code ${code}`}`))
})
})
}
export async function runSlidev(args: string[], options: RunSlidevOptions = {}) {
await waitForSlidev(startSlidev(args, options))
}