summaryrefslogtreecommitdiff
path: root/packages/cli/src/ui/utils/commandUtils.ts
blob: 6404665832c763d5e732da9d2c5e067f288134ff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/**
 * @license
 * Copyright 2025 Google LLC
 * SPDX-License-Identifier: Apache-2.0
 */

/**
 * Checks if a query string potentially represents an '@' command.
 * It triggers if the query starts with '@' or contains '@' preceded by whitespace
 * and followed by a non-whitespace character.
 *
 * @param query The input query string.
 * @returns True if the query looks like an '@' command, false otherwise.
 */
export const isAtCommand = (query: string): boolean =>
  // Check if starts with @ OR has a space, then @, then a non-space character.
  query.startsWith('@') || /\s@\S/.test(query);

const control_symbols: string[] = ['/', '@', '!', '?', '$'];
/**
 * Returns the first word of query with optional leading slash, ampersand, bang.
 *
 * @param query The input query string.
 * @returns optional leading symbol and first word of query
 */
export const getCommandFromQuery = (
  query: string,
): [string | undefined, string] => {
  const word = query.trim().split(/\s/, 1)[0];
  if (word.length > 0 && control_symbols.includes(word[0])) {
    return [word[0], word.slice(1)];
  }
  return [undefined, word];
};