valor-software/angular2-bootstrap

View on GitHub
src/typeahead/typeahead-utils.ts

Summary

Maintainability
A
35 mins
Test Coverage
import { latinMap } from './latin-map';

export function latinize(str: string): string {
  if (!str) {
    return '';
  }

  return str.replace(/[^A-Za-z0-9\[\] ]/g, function (a: string): string {
    return latinMap[a] || a;
  });
}

export function escapeRegexp(queryToEscape: string): string {
  // Regex: capture the whole query string and replace it with the string
  // that will be used to match the results, for example if the capture is
  // 'a' the result will be \a
  return queryToEscape.replace(/([.?*+^$[\]\\(){}|-])/g, '\\$1');
}

/* tslint:disable */
export function tokenize(str: string,
                         wordRegexDelimiters = ' ',
                         phraseRegexDelimiters = ''): Array<string> {
  /* tslint:enable */
  const regexStr = `(?:[${phraseRegexDelimiters}])([^${phraseRegexDelimiters}]+)` +
    `(?:[${phraseRegexDelimiters}])|([^${wordRegexDelimiters}]+)`;
  const preTokenized: string[] = str.split(new RegExp(regexStr, 'g'));
  const result: string[] = [];
  const preTokenizedLength: number = preTokenized.length;
  let token: string;
  const replacePhraseDelimiters = new RegExp(`[${phraseRegexDelimiters}]+`, 'g');

  for (let i = 0; i < preTokenizedLength; i += 1) {
    token = preTokenized[i];
    if (token && token.length && token !== wordRegexDelimiters) {
      result.push(token.replace(replacePhraseDelimiters, ''));
    }
  }

  return result;
}

export function getValueFromObject(object: any, option: string): string {
  if (!option || typeof object !== 'object') {
    return object.toString();
  }

  if (option.endsWith('()')) {
    const functionName = option.slice(0, option.length - 2);

    return object[functionName]().toString();
  }

  const properties: string = option
    .replace(/\[(\w+)\]/g, '.$1')
    .replace(/^\./, '');
  const propertiesArray: string[] = properties.split('.');

  for (const property of propertiesArray) {
    if (property in object) {
      // tslint:disable-next-line
      object = object[property];
    }
  }
  if (!object) {return ''; }

  return object.toString();
}