UNPKG

@alexaegis/match

Version:

Matches objects based on a matcher

31 lines (30 loc) 1.28 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const isCustomJsonValueMatcher = (t) => { return typeof t === "function"; }; const match = (target, matcher) => { if (typeof matcher === "string") { return typeof target === "string" && new RegExp(matcher).test(target); } else if (typeof matcher === "number") { return typeof target === "number" && target === matcher; } else if (typeof matcher === "boolean") { return typeof target === "boolean" && target === matcher; } else if (matcher === void 0) { return target === void 0 || target === null; } else if (matcher === null) { return target === null; } else if (isCustomJsonValueMatcher(matcher)) { return matcher(target) ?? false; } else if (matcher instanceof RegExp) { return typeof target === "string" && matcher.test(target); } else if (Array.isArray(matcher)) { return Array.isArray(target) ? matcher.every((itemMatcher, i) => match(target[i], itemMatcher)) : false; } else { return Object.entries(matcher).every(([filterKey, filter]) => { return typeof target === "object" && target !== null && // typeof null === 'object' !Array.isArray(target) && match(target[filterKey], filter); }); } }; exports.match = match;