Skip to content

Commit 489617b

Browse files
committed
feat(namespace): add useAliases option to locate()
1 parent 0729615 commit 489617b

File tree

4 files changed

+16
-12
lines changed

4 files changed

+16
-12
lines changed

packages/@ionic/cli-framework/src/definitions.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,11 +69,15 @@ export type NamespaceMapGetter<C extends ICommand<C, N, M, I, O>, N extends INam
6969
export type ICommandMap<C extends ICommand<C, N, M, I, O>, N extends INamespace<C, N, M, I, O>, M extends CommandMetadata<I, O>, I extends CommandMetadataInput, O extends CommandMetadataOption> = ζobject.AliasedMap<string, CommandMapGetter<C, N, M, I, O>>;
7070
export type INamespaceMap<C extends ICommand<C, N, M, I, O>, N extends INamespace<C, N, M, I, O>, M extends CommandMetadata<I, O>, I extends CommandMetadataInput, O extends CommandMetadataOption> = ζobject.AliasedMap<string, NamespaceMapGetter<C, N, M, I, O>>;
7171

72+
export interface NamespaceLocateOptions {
73+
useAliases?: boolean;
74+
}
75+
7276
export interface INamespace<C extends ICommand<C, N, M, I, O>, N extends INamespace<C, N, M, I, O>, M extends CommandMetadata<I, O>, I extends CommandMetadataInput, O extends CommandMetadataOption> {
7377
root: N;
7478
parent: N | undefined;
7579

76-
locate(argv: ReadonlyArray<string>): Promise<NamespaceLocateResult<C, N, M, I, O>>;
80+
locate(argv: ReadonlyArray<string>, options?: NamespaceLocateOptions): Promise<NamespaceLocateResult<C, N, M, I, O>>;
7781
getMetadata(): Promise<NamespaceMetadata>;
7882
getNamespaces(): Promise<INamespaceMap<C, N, M, I, O>>;
7983

packages/@ionic/cli-framework/src/lib/command.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as lodash from 'lodash';
22

3-
import { CommandInstanceInfo, CommandLineInputs, CommandLineOptions, CommandMapGetter, CommandMetadata, CommandMetadataInput, CommandMetadataOption, CommandPathItem, HydratedCommandMetadata, HydratedNamespaceMetadata, ICommand, ICommandMap, INamespace, INamespaceMap, NamespaceLocateResult, NamespaceMapGetter, NamespaceMetadata, ValidationError } from '../definitions';
3+
import { CommandInstanceInfo, CommandLineInputs, CommandLineOptions, CommandMapGetter, CommandMetadata, CommandMetadataInput, CommandMetadataOption, CommandPathItem, HydratedCommandMetadata, HydratedNamespaceMetadata, ICommand, ICommandMap, INamespace, INamespaceMap, NamespaceLocateOptions, NamespaceLocateResult, NamespaceMapGetter, NamespaceMetadata, ValidationError } from '../definitions';
44
import { InputValidationError } from '../errors';
55
import { AliasedMap } from '../utils/object';
66
import { strcmp } from '../utils/string';
@@ -96,17 +96,17 @@ export abstract class BaseNamespace<C extends ICommand<C, N, M, I, O>, N extends
9696
*
9797
* @param argv The set of command-line arguments to use to locate.
9898
*/
99-
async locate(argv: ReadonlyArray<string>): Promise<NamespaceLocateResult<C, N, M, I, O>> {
99+
async locate(argv: ReadonlyArray<string>, { useAliases = true }: NamespaceLocateOptions = {}): Promise<NamespaceLocateResult<C, N, M, I, O>> {
100100
const _locate = async (inputs: ReadonlyArray<string>, parent: N, path: CommandPathItem<C, N, M, I, O>[]): Promise<NamespaceLocateResult<C, N, M, I, O>> => {
101101
const [ key ] = inputs;
102102
const children = await parent.getNamespaces();
103-
const nsgetter = children.resolveAliases(key);
103+
const nsgetter = useAliases ? children.resolveAlias(key) : children.get(key);
104104

105-
if (!nsgetter) {
105+
if (!nsgetter || typeof nsgetter === 'string' || typeof nsgetter === 'symbol') {
106106
const commands = await parent.getCommands();
107-
const cmdgetter = commands.resolveAliases(key);
107+
const cmdgetter = useAliases ? commands.resolveAlias(key) : commands.get(key);
108108

109-
if (cmdgetter) {
109+
if (cmdgetter && typeof cmdgetter !== 'string' && typeof cmdgetter !== 'symbol') {
110110
const cmd = await cmdgetter();
111111
return { args: inputs.slice(1), obj: cmd, path: [...path, [key, cmd]] };
112112
}

packages/@ionic/cli-framework/src/utils/__tests__/object.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,17 +101,17 @@ describe('@ionic/cli-framework', () => {
101101

102102
});
103103

104-
describe('resolveAliases', () => {
104+
describe('resolveAlias', () => {
105105

106106
it('should return undefined for unknown command', () => {
107107
const m = new MyAliasedMap([]);
108-
expect(m.resolveAliases('bar')).toBeUndefined();
108+
expect(m.resolveAlias('bar')).toBeUndefined();
109109
});
110110

111111
it('should return command when immediately found', async () => {
112112
const obj = { foo: 'bar' };
113113
const m = new MyAliasedMap([['foo', obj]]);
114-
const result = m.resolveAliases('foo');
114+
const result = m.resolveAlias('foo');
115115
expect(result).toBe(obj);
116116
});
117117

packages/@ionic/cli-framework/src/utils/object.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,13 @@ export class AliasedMap<K, V> extends Map<AliasedMapKey | K, AliasedMapKey | V>
3838
return aliasmap;
3939
}
4040

41-
resolveAliases(key: AliasedMapKey | K): V | undefined {
41+
resolveAlias(key: AliasedMapKey | K): V | undefined {
4242
const r = this.get(key);
4343

4444
if (typeof r !== 'string' && typeof r !== 'symbol') {
4545
return r;
4646
}
4747

48-
return this.resolveAliases(r);
48+
return this.resolveAlias(r);
4949
}
5050
}

0 commit comments

Comments
 (0)