Skip to content

Commit a7d8bf5

Browse files
committed
fix: register aliases from Root CLI when mounted via cli.command()
1 parent 5a19855 commit a7d8bf5

3 files changed

Lines changed: 23 additions & 0 deletions

File tree

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"incur": patch
3+
---
4+
5+
Fixed Root CLIs created with `Cli.create` and `aliases` not registering those aliases as command aliases when mounted via `cli.command()`.

src/Cli.test.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4617,4 +4617,15 @@ describe('command aliases', () => {
46174617
const { output } = await serve(makeAliasedCli(), ['exten'])
46184618
expect(output).toMatch(/did you mean.*extension/i)
46194619
})
4620+
4621+
test('root CLI aliases register as command aliases', async () => {
4622+
const update = Cli.create('update', {
4623+
aliases: ['upgrade'],
4624+
description: 'Update packages',
4625+
run: () => ({ result: 'updated' }),
4626+
})
4627+
const cli = Cli.create('pkg').command(update)
4628+
const { output } = await serve(cli, ['upgrade'])
4629+
expect(output).toContain('updated')
4630+
})
46204631
})

src/Cli.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -252,6 +252,9 @@ export function create(
252252
const mountedRootDef = toRootDefinition.get(nameOrCli)
253253
if (mountedRootDef) {
254254
commands.set(nameOrCli.name, mountedRootDef)
255+
const rootAliases = toRootAliases.get(nameOrCli)
256+
if (rootAliases)
257+
for (const a of rootAliases) commands.set(a, { _alias: true, target: nameOrCli.name })
255258
return cli
256259
}
257260
const sub = nameOrCli as Cli
@@ -308,6 +311,7 @@ export function create(
308311
}
309312

310313
if (rootDef) toRootDefinition.set(cli as unknown as Root, rootDef)
314+
if (rootDef && def.aliases) toRootAliases.set(cli as unknown as Root, def.aliases)
311315
if (def.options) toRootOptions.set(cli, def.options)
312316
if (def.config !== undefined) toConfigEnabled.set(cli, true)
313317
if (def.outputPolicy) toOutputPolicy.set(cli, def.outputPolicy)
@@ -2414,6 +2418,9 @@ export const toConfigEnabled = new WeakMap<Cli, boolean>()
24142418
/** @internal Maps CLI instances to their output policy. */
24152419
const toOutputPolicy = new WeakMap<Cli, OutputPolicy>()
24162420

2421+
/** @internal Maps root CLI instances to their command aliases. */
2422+
const toRootAliases = new WeakMap<Root, string[]>()
2423+
24172424
/** @internal Sentinel symbol for `ok()` and `error()` return values. */
24182425
const sentinel = Symbol.for('incur.sentinel')
24192426

0 commit comments

Comments
 (0)