runStart

tcmts.cli.run.runStart · #do5t7nsz · term · runs on the server

uses process

Runs tcm start.

import { routeStart } from "#codebase/tcmts/cli/commands";
import { execute } from "#codebase/tcmts/cli/main";
import type { Context } from "#codebase/tcmts/cli/run";
import { tlsMaterial } from "#codebase/tcmts/cli/sync";
import { chooseName } from "#codebase/tcmts/cli/ui";
import { parseHttpFlag, start } from "#codebase/tcmts/cli/web";
import { parse } from "@bomb.sh/router";

export async function runStart({ cb, cmd, rest }: Context): Promise<number> {
  // started by another tcm, to end with it (`tcm serve`'s web UI): however that one ends, a signal or a kill that
  // skips its exit handlers too, this one is given to another parent, and stops
  if (process.env.TCM_STOP_WITH_PARENT) {
    delete process.env.TCM_STOP_WITH_PARENT;
    const parent = process.ppid;
    setInterval(() => {
      if (process.ppid !== parent) process.exit(0);
    }, 500).unref();
  }
  const { model } = execute(cmd, parse(routeStart(), { argv: rest }));
  const app =
    model.app ?? (await chooseName(cb, "start <app> [--port 8080]", "Which app?", "value"));
  const tls =
    model.tls || model["tls-cert"]
      ? tlsMaterial(cb, model["tls-cert"], model["tls-key"])
      : undefined;
  await start(cb, app, {
    port: model.port,
    host: model.host,
    tls,
    keep: model.keep,
    http: model.http === undefined ? undefined : parseHttpFlag(model.http),
    base: model.base ?? undefined,
  });
  return -1; // keep serving
}

uses

used by