Source: loosely-matches.js

"use strict";

const flow    = require("lodash.flow");
const deburr  = require("lodash.deburr");
const toLower = require("lodash.tolower");

const looseMatchTransform = flow(deburr, toLower);

/**
 * Function that returns true when `needle` is found in `haystack`.
 * The main advantages of this function are that it removes accented characters and that
 * it is case-insensitive.
 *
 * Powered by lodash's {@link https://lodash.com/docs/#deburr deburr}.
 *
 * @function looselyMatches
 *
 * @param haystack {String} The string to inspect.
 * @param needle   {String} The substring to look for.
 *
 * @return {Boolean} True when variations of `needle` can be found inside `haystack`.
 */
module.exports = (haystack, needle) => {
    return looseMatchTransform(haystack).indexOf(looseMatchTransform(needle)) !== -1;
};