UNPKG

tsbase

Version:

Base class libraries for TypeScript

75 lines 3.29 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SearchIndex = void 0; var tslib_1 = require("tslib"); var Queryable_1 = require("../Queryable/Queryable"); var SearchIndex = /** @class */ (function () { function SearchIndex() { this.index = {}; } SearchIndex.prototype.Insert = function (indexer, items) { return tslib_1.__awaiter(this, void 0, void 0, function () { var _this = this; return tslib_1.__generator(this, function (_a) { (items || [1]).forEach(function (item) { var entries = indexer(item); entries.forEach(function (entry) { _this.index[entry[0]] = !!_this.index[entry[0]] ? _this.index[entry[0]].concat([entry[1]]) : [entry[1]]; }); }); return [2 /*return*/]; }); }); }; SearchIndex.prototype.GetIndexesForQuery = function (query, limit) { if (limit === void 0) { limit = 10; } return tslib_1.__awaiter(this, void 0, void 0, function () { return tslib_1.__generator(this, function (_a) { return [2 /*return*/, Queryable_1.Queryable.From(Object.keys(this.index)).Search(query).slice(0, limit)]; }); }); }; SearchIndex.prototype.Search = function (query, limit) { if (limit === void 0) { limit = 10; } return tslib_1.__awaiter(this, void 0, void 0, function () { var matchingIndexes, results; var _this = this; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.GetIndexesForQuery(query, limit)]; case 1: matchingIndexes = _a.sent(); results = []; matchingIndexes.forEach(function (i) { var qualifiedResults = _this.index[i].filter(function (e) { return !_this.isQualifiedResult(e) || (e.qualifier(query)); }); results = results.concat(qualifiedResults.map(function (r) { return _this.isQualifiedResult(r) ? r.item : r; })); }); return [2 /*return*/, Queryable_1.Queryable.From(results).Distinct().slice(0, limit)]; } }); }); }; SearchIndex.prototype.Answer = function (query) { return tslib_1.__awaiter(this, void 0, void 0, function () { var results; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, this.Search(query)]; case 1: results = _a.sent(); return [2 /*return*/, results[0] || null]; } }); }); }; SearchIndex.prototype.Reset = function () { this.index = {}; }; SearchIndex.prototype.isQualifiedResult = function (result) { return result['item'] && result['qualifier']; }; return SearchIndex; }()); exports.SearchIndex = SearchIndex; //# sourceMappingURL=SearchIndex.js.map