@alexaegis/match
Version:
Matches objects based on a matcher
31 lines (30 loc) • 1.28 kB
JavaScript
;
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;