"use strict";
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
  if (from && typeof from === "object" || typeof from === "function") {
    for (let key of __getOwnPropNames(from))
      if (!__hasOwnProp.call(to, key) && key !== except)
        __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  }
  return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var searcher_exports = {};
__export(searcher_exports, {
  Searcher: () => Searcher
});
module.exports = __toCommonJS(searcher_exports);
class Searcher {
  constructor(db) {
    this.db = db;
  }
  search(query, kindOrOpts, limit = 20) {
    const opts = typeof kindOrOpts === "string" ? { kinds: [kindOrOpts], limit } : { limit, ...kindOrOpts };
    const exact = this.db.findNodesByExactName(query, opts.kinds, opts.limit);
    if (exact.length > 0) {
      return exact.map((n) => ({ node: n, score: 1, matchType: "exact" }));
    }
    let nodes = [];
    try {
      nodes = this.db.searchNodes(query, opts);
    } catch {
    }
    if (nodes.length === 0) {
      nodes = this.db.searchNodesByName(query, opts);
    }
    return nodes.map((n) => ({ node: n, score: 1, matchType: "fuzzy" }));
  }
}
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
  Searcher
});
//# sourceMappingURL=searcher.js.map
