36 lines
982 B
TypeScript
36 lines
982 B
TypeScript
import type { Item } from '../fs/Item'
|
|
import type { SimpleStream } from '../utils/SimpleStream'
|
|
import { Program } from './Program'
|
|
|
|
export class Eval extends Program {
|
|
async Exec(stdin: SimpleStream<string>, stdout: SimpleStream<string>, _workdir: Item, args: string[]): Promise<number> {
|
|
const inlineArgs = args.slice(1)
|
|
const source = inlineArgs.length > 0
|
|
? inlineArgs.join(' ')
|
|
: await stdin.wait()
|
|
|
|
if (source.trim().length === 0) {
|
|
stdout.emit('eval: error: missing javascript input\n')
|
|
return 1
|
|
}
|
|
|
|
try {
|
|
this.RunJs(source, stdout)
|
|
} catch {
|
|
return 1
|
|
}
|
|
|
|
return 0
|
|
}
|
|
|
|
private RunJs(javascript: string, stdout: SimpleStream<string>) {
|
|
try {
|
|
// todo: pass workdir to the program
|
|
eval(javascript)
|
|
} catch (e) {
|
|
stdout.emit(`${String(e)}\n`)
|
|
throw e
|
|
}
|
|
}
|
|
}
|