Compare commits

..

2 Commits

Author SHA1 Message Date
Chris Wanstrath
da28a739df run scripts from the backend 2025-09-29 18:28:52 -07:00
Chris Wanstrath
a6bdd6bb29 run scripts 2025-09-29 18:25:58 -07:00
4 changed files with 25 additions and 5 deletions

View File

@ -13,7 +13,10 @@ export default async function () {
if (/up to date/.test(out)) {
return "Up to date."
} else {
setTimeout(() => process.exit(), 1000)
return "Restarting in 1 second..."
setTimeout(() => process.exit(), 500)
return {
text: "Reloading in 3 seconds...",
script: `setTimeout(() => (window as any).location = window.location, 3000)`
}
}
}

View File

@ -2,7 +2,7 @@
// The scrollback shows your history of interacting with the shell.
// input, output, etc
import { scrollback, $, $$ } from "./dom.js"
import { scrollback, $$ } from "./dom.js"
import { randomId } from "../shared/utils.js"
import type { CommandOutput } from "../shared/types.js"
@ -123,6 +123,12 @@ function processOutput(output: CommandOutput): ["html" | "text", string] {
} else if ("html" in output) {
html = true
content = output.html
if (output.script) eval(output.script)
} else if ("text" in output) {
content = output.text
if (output.script) eval(output.script)
} else if ("script" in output) {
eval(output.script!)
} else {
content = JSON.stringify(output)
}

View File

@ -9,7 +9,11 @@ export type MessageType = "error" | "input" | "output" | "commands" | "save-file
| "game:start"
| "stream:start" | "stream:end" | "stream:append" | "stream:replace"
export type CommandOutput = string | string[] | { html: string } | { game: string }
export type CommandOutput = string | string[]
| { text: string, script?: string }
| { html: string, script?: string }
| { script: string }
| { game: string }
export type CommandResult = {
status: "ok" | "error"

View File

@ -47,8 +47,11 @@ export function processExecOutput(output: string | any): ["ok" | "error", Comman
} else if (typeof output === "object") {
if (output.error) {
return ["error", output.error]
} else if (output.tag && output.props && output.children) {
} else if (isJSX(output)) {
return ["ok", { html: output.toString() }]
} else if (output.html && isJSX(output.html)) {
output.html = output.html.toString()
return ["ok", output]
} else {
return ["ok", output]
}
@ -78,3 +81,7 @@ function errorMessage(error: Error | any): string {
if (error.stack) msg += `\n${error.stack}`
return msg
}
function isJSX(obj: any): boolean {
return 'tag' in obj && 'props' in obj && 'children' in obj
}