44 lines
1.4 KiB
TypeScript
44 lines
1.4 KiB
TypeScript
/**
|
|
* @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);
|
|
|
|
/**
|
|
* Checks if a query string potentially represents an '/' command.
|
|
* It triggers if the query starts with '/'
|
|
*
|
|
* @param query The input query string.
|
|
* @returns True if the query looks like an '/' command, false otherwise.
|
|
*/
|
|
export const isSlashCommand = (query: string): boolean => query.startsWith('/');
|
|
|
|
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];
|
|
};
|