import * as NodeRuntime from "@effect/platform-node/NodeRuntime";import * as NodeServices from "@effect/platform-node/NodeServices";import * as Effect from "effect/Effect";import * as Layer from "effect/Layer";import { Argument, Command } from "effect/unstable/cli";import * as CliError from "effect/unstable/cli/CliError"; import * as NetService from "@t3tools/shared/Net";import packageJson from "../package.json" with { type: "json" };import { authCommand } from "./cli/auth.ts";import { appCommand } from "./cli/app.ts";import { connectCommand } from "./cli/connect.ts";import { pairCommand } from "./cli/pair.ts";import { hasCloudPublicConfig } from "./cloud/publicConfig.ts";import { sharedServerCommandFlags } from "./cli/config.ts";import { isEntrypoint } from "./entrypoint.ts";import { projectCommand } from "./cli/project.ts";import { runServerCommand, serveCommand, startCommand } from "./cli/server.ts";import { serviceCommand } from "./cli/service.ts";import { servicePreflightCommand } from "./cli/servicePreflight.ts";import { themeCommand } from "./cli/theme.ts";import { triageCommand } from "./cli/triage.ts"; const CliRuntimeLayer = Layer.mergeAll(NodeServices.layer, NetService.layer); const connectPublicConfigMissingMessage = "T3 Connect commands are unavailable: this build is missing T3 Connect public configuration."; class ConnectPublicConfigMissingError extends CliError.UserError { override get message() { return connectPublicConfigMissingMessage; }} const connectUnavailableCommand = Command.make("connect", { command: Argument.string("command").pipe(Argument.variadic),}).pipe( Command.withDescription("T3 Connect is unavailable in builds without public configuration."), Command.unlisted, Command.withHandler(() => Effect.fail( new CliError.ShowHelp({ commandPath: ["t3", "connect"], errors: [new ConnectPublicConfigMissingError({ cause: connectPublicConfigMissingMessage })], }), ), ),); export const makeCli = ({ cloudEnabled = hasCloudPublicConfig } = {}) => Command.make("t3", { ...sharedServerCommandFlags }).pipe( Command.withDescription("Run the T3 Code server."), Command.withHandler((flags) => runServerCommand(flags)), Command.withSubcommands([ startCommand, serveCommand, appCommand, pairCommand, authCommand, projectCommand, serviceCommand, servicePreflightCommand, themeCommand, triageCommand, cloudEnabled ? connectCommand : connectUnavailableCommand, ]), ); export const cli = makeCli(); if ( isEntrypoint({ moduleUrl: import.meta.url, entryPath: process.argv[1], runtimeMain: import.meta.main, })) { Command.run(cli, { version: packageJson.version }).pipe( Effect.scoped, Effect.provide(CliRuntimeLayer), NodeRuntime.runMain, );}
import * as NodeRuntime from "@effect/platform-node/NodeRuntime";
import * as NodeServices from "@effect/platform-node/NodeServices";
import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import { Argument, Command } from "effect/unstable/cli";
import * as CliError from "effect/unstable/cli/CliError";
import * as NetService from "@t3tools/shared/Net";
import packageJson from "../package.json" with { type: "json" };
import { authCommand } from "./cli/auth.ts";
import { appCommand } from "./cli/app.ts";
import { connectCommand } from "./cli/connect.ts";
import { pairCommand } from "./cli/pair.ts";
import { hasCloudPublicConfig } from "./cloud/publicConfig.ts";
import { sharedServerCommandFlags } from "./cli/config.ts";
import { isEntrypoint } from "./entrypoint.ts";
import { projectCommand } from "./cli/project.ts";
import { runServerCommand, serveCommand, startCommand } from "./cli/server.ts";
import { serviceCommand } from "./cli/service.ts";
import { servicePreflightCommand } from "./cli/servicePreflight.ts";
import { themeCommand } from "./cli/theme.ts";
import { triageCommand } from "./cli/triage.ts";
const CliRuntimeLayer = Layer.mergeAll(NodeServices.layer, NetService.layer);
const connectPublicConfigMissingMessage =
"T3 Connect commands are unavailable: this build is missing T3 Connect public configuration.";
class ConnectPublicConfigMissingError extends CliError.UserError {
override get message() {
return connectPublicConfigMissingMessage;
}
}
const connectUnavailableCommand = Command.make("connect", {
command: Argument.string("command").pipe(Argument.variadic),
}).pipe(
Command.withDescription("T3 Connect is unavailable in builds without public configuration."),
Command.unlisted,
Command.withHandler(() =>
Effect.fail(
new CliError.ShowHelp({
commandPath: ["t3", "connect"],
errors: [new ConnectPublicConfigMissingError({ cause: connectPublicConfigMissingMessage })],
}),
),
),
);
export const makeCli = ({ cloudEnabled = hasCloudPublicConfig } = {}) =>
Command.make("t3", { ...sharedServerCommandFlags }).pipe(
Command.withDescription("Run the T3 Code server."),
Command.withHandler((flags) => runServerCommand(flags)),
Command.withSubcommands([
startCommand,
serveCommand,
appCommand,
pairCommand,
authCommand,
projectCommand,
serviceCommand,
servicePreflightCommand,
themeCommand,
triageCommand,
cloudEnabled ? connectCommand : connectUnavailableCommand,
]),
);
export const cli = makeCli();
if (
isEntrypoint({
moduleUrl: import.meta.url,
entryPath: process.argv[1],
runtimeMain: import.meta.main,
})
) {
Command.run(cli, { version: packageJson.version }).pipe(
Effect.scoped,
Effect.provide(CliRuntimeLayer),
NodeRuntime.runMain,
);
}