| 'use strict'; |
| |
| const { isString } = require('./validateTypes'); |
| |
| /** @typedef {false | { match: string, pattern: string }} ReturnValue */ |
| |
| /** |
| * Checks if a string contains a value. The comparison value can be a string or |
| * an array of strings. |
| * |
| * Any strings starting and ending with `/` are ignored. Use the |
| * matchesStringOrRegExp() util to match regexes. |
| * |
| * @param {string} input |
| * @param {string | string[]} comparison |
| * |
| * @returns {ReturnValue} |
| */ |
| module.exports = function containsString(input, comparison) { |
| if (!Array.isArray(comparison)) { |
| return testAgainstString(input, comparison); |
| } |
| |
| for (const comparisonItem of comparison) { |
| const testResult = testAgainstString(input, comparisonItem); |
| |
| if (testResult) { |
| return testResult; |
| } |
| } |
| |
| return false; |
| }; |
| |
| /** |
| * |
| * @param {string} value |
| * @param {string} comparison |
| * |
| * @returns {ReturnValue} |
| */ |
| function testAgainstString(value, comparison) { |
| if (!comparison) return false; |
| |
| if (!isString(comparison)) return false; |
| |
| if (comparison.startsWith('/') && comparison.endsWith('/')) { |
| return false; |
| } |
| |
| if (value.includes(comparison)) { |
| return { match: value, pattern: comparison }; |
| } |
| |
| return false; |
| } |