@beenotung/tslib
Version:
utils library in Typescript
77 lines (76 loc) • 2.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.search = void 0;
const type_1 = require("./type");
var search;
(function (search) {
function str_contains(base, query, caseInsensitive = true) {
if (caseInsensitive) {
return base.toLocaleLowerCase().indexOf(query.toLocaleLowerCase()) !== -1;
}
else {
return base.indexOf(query) !== -1;
}
}
search.str_contains = str_contains;
function object_contains_str(base, query, caseInsensitive = true) {
if (typeof base === 'string' && typeof query === 'string') {
return str_contains(base, query, caseInsensitive);
}
if (typeof base !== 'object') {
return base === query;
}
for (const k of Object.keys(base)) {
const v = base[k];
if (typeof v === 'string' && typeof query === 'string') {
if (str_contains(v, query, caseInsensitive)) {
return true;
}
}
else if (v === query) {
return true;
}
else if (Array.isArray(v)) {
if (v.some(base => object_contains_str(base, query, caseInsensitive))) {
return true;
}
}
}
return false;
}
search.object_contains_str = object_contains_str;
function partialMatch(query, target) {
const queryType = (0, type_1.getObjectType)(query);
const targetType = (0, type_1.getObjectType)(target);
if (queryType !== targetType) {
return false;
}
switch (queryType) {
case 'AsyncFunction':
case 'Function':
throw new Error('unsupported partial match on type: ' + queryType);
case 'Number':
case 'Null':
case 'Undefined':
case 'String':
return query === target;
case 'Array':
return target.some(t => query.indexOf(t) !== -1);
case 'Set':
return partialMatch(Array.from(query), Array.from(target));
case 'Map': {
let matched = false;
const targetMap = target;
query.forEach((v, k) => {
matched = matched || partialMatch(v, targetMap.get(k));
});
return matched;
}
case 'Object':
return Object.keys(query).some(key => partialMatch(query[key], target[key]));
default:
return query === target;
}
}
search.partialMatch = partialMatch;
})(search || (exports.search = search = {}));