Huakun Shen f89cf8fe6a
Feature: Headless Command (#44)
* chore: add check-types

* refactor: api package file structure update

* feat: add headless worker extension API

* feat: add HeadlessCmd to manifest schema

* feat: make each type of cmds optional in manifest

There may be more types of cmds in the future, this makes backward compatibility easier.

* feat: implement headless extension command in app

A demo cmd implemented as well.

* refactor: move api package's API server files

* refactor: reformat all
2025-01-05 21:12:56 -05:00

34 lines
1.0 KiB
TypeScript

import {
CmdTypeEnum,
CustomUiCmd,
ExtPackageJsonExtra,
HeadlessCmd,
TemplateUiCmd
} from "@kksh/api/models"
import type { CommandLaunchers, OnExtCmdSelect } from "@kksh/ui/types"
import * as v from "valibot"
import { onCustomUiCmdSelect, onHeadlessCmdSelect, onTemplateUiCmdSelect } from "./ext"
import { onQuickLinkSelect } from "./quick-links"
const onExtCmdSelect: OnExtCmdSelect = (
ext: ExtPackageJsonExtra,
cmd: CustomUiCmd | TemplateUiCmd,
{ isDev, hmr }: { isDev: boolean; hmr: boolean }
) => {
switch (cmd.type) {
case CmdTypeEnum.UiIframe:
onCustomUiCmdSelect(ext, v.parse(CustomUiCmd, cmd), { isDev, hmr })
break
case CmdTypeEnum.UiWorker:
onTemplateUiCmdSelect(ext, v.parse(TemplateUiCmd, cmd), { isDev, hmr })
break
case CmdTypeEnum.HeadlessWorker:
onHeadlessCmdSelect(ext, v.parse(HeadlessCmd, cmd), { isDev, hmr })
break
default:
console.error("Unknown command type", cmd.type)
}
}
export const commandLaunchers = { onExtCmdSelect, onQuickLinkSelect } satisfies CommandLaunchers