// deno-lint-ignore-file ban-types import type { Check, Fold, Materialize, Unary } from "./pipeline.ts"; import type { Definition, Done, Route } from "./types.ts"; export type CommandZero = Route< N, "help" | "execute", {}, [], [Done<{}, []>] >; export function command< const N extends string, const E extends readonly Unary[], >( start: Definition, ...elements: E & Check, E> ): Materialize, E>> { let zero: CommandZero = { ...start, methods: ["help", "execute"], phases: [{ params: {}, routes: [], values: [], envs: [], }], }; return elements.reduce( (value, element) => element(value as never), zero, ) as Materialize, E>>; }