// Copyright 2022 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only

const WHITESPACE = new Set([
  ' ',
  '\u200E', // left-to-right mark
  '\u200F', // right-to-left mark
  '\u2007', // figure space
  '\u200B', // zero-width space
  '\u2800', // braille blank
]);

export function trim(str: string): string {
  let start = 0;
  let end = str.length - 1;

  for (start; start < str.length; start += 1) {
    const char = str[start];
    if (!WHITESPACE.has(char)) {
      break;
    }
  }

  for (end; end > 0; end -= 1) {
    const char = str[end];
    if (!WHITESPACE.has(char)) {
      break;
    }
  }

  if (start > 0 || end < str.length - 1) {
    return str.substring(start, end + 1);
  }

  return str;
}

export function isWhitespace(str: string): boolean {
  for (let i = 0; i < str.length; i += 1) {
    const char = str[i];
    if (!WHITESPACE.has(char)) {
      return false;
    }
  }

  return true;
}