Add CLI module deduplication and improve conflict reporting

Individual CLI modules now silently take precedence over array-sourced
modules (e.g. from cli-defaults) when their commands overlap. Conflict
errors between non-array modules include both package names for easier
debugging.

Commands reference their parent module instead of storing a raw package
name string. createCliModule now validates that packageJson has a name.

Signed-off-by: Patrik Oldsberg <poldsberg@gmail.com>
Made-with: Cursor
This commit is contained in:
Patrik Oldsberg
2026-03-15 21:16:00 +01:00
parent 4f2d7d555b
commit 7879215cca
7 changed files with 244 additions and 21 deletions
@@ -55,6 +55,12 @@ export function createCliModule(options: {
addCommand: (command: CliCommand) => void;
}) => Promise<void>;
}): CliModule {
if (!options.packageJson.name) {
throw new Error(
'The packageJson provided to createCliModule must have a name',
);
}
const commands: CliCommand[] = [];
const commandsPromise = options
.init({ addCommand: command => commands.push(command) })