{"version":3,"file":"vectara.cjs","names":["BaseTranslator","Operators","Comparators"],"sources":["../../src/structured_query/vectara.ts"],"sourcesContent":["import {\n  BaseTranslator,\n  isFilterEmpty,\n  Comparator,\n  Comparators,\n  Comparison,\n  NOT,\n  Operation,\n  Operator,\n  Operators,\n  StructuredQuery,\n  Visitor,\n} from \"@langchain/core/structured_query\";\nimport { VectaraFilter, VectaraStore } from \"../vectorstores/vectara.js\";\n\ntype AllowedOperator = Exclude<Operator, NOT>;\n\nexport type VectaraVisitorResult =\n  | VectaraOperationResult\n  | VectaraComparisonResult\n  | VectaraVisitorStructuredQueryResult;\nexport type VectaraOperationResult = String;\nexport type VectaraComparisonResult = String;\nexport type VectaraVisitorStructuredQueryResult = {\n  filter?: { filter?: VectaraOperationResult | VectaraComparisonResult };\n};\n\ntype Value = number | string;\nfunction processValue(value: Value): string {\n  /** Convert a value to a string and add single quotes if it is a string. */\n  if (typeof value === \"string\") {\n    return `'${value}'`;\n  } else {\n    return String(value);\n  }\n}\n\nexport class VectaraTranslator<\n  T extends VectaraStore,\n> extends BaseTranslator<T> {\n  declare VisitOperationOutput: VectaraOperationResult;\n\n  declare VisitComparisonOutput: VectaraComparisonResult;\n\n  allowedOperators: Operator[] = [Operators.and, Operators.or];\n\n  allowedComparators: Comparator[] = [\n    Comparators.eq,\n    Comparators.ne,\n    Comparators.lt,\n    Comparators.lte,\n    Comparators.gt,\n    Comparators.gte,\n  ];\n\n  formatFunction(func: Operator | Comparator): string {\n    if (func in Comparators) {\n      if (\n        this.allowedComparators.length > 0 &&\n        this.allowedComparators.indexOf(func as Comparator) === -1\n      ) {\n        throw new Error(\n          `Comparator ${func} not allowed. Allowed operators: ${this.allowedComparators.join(\n            \", \"\n          )}`\n        );\n      }\n    } else if (func in Operators) {\n      if (\n        this.allowedOperators.length > 0 &&\n        this.allowedOperators.indexOf(func as Operator) === -1\n      ) {\n        throw new Error(\n          `Operator ${func} not allowed. Allowed operators: ${this.allowedOperators.join(\n            \", \"\n          )}`\n        );\n      }\n    } else {\n      throw new Error(\"Unknown comparator or operator\");\n    }\n\n    const mapDict = {\n      and: \" and \",\n      or: \" or \",\n      eq: \"=\",\n      ne: \"!=\",\n      lt: \"<\",\n      lte: \"<=\",\n      gt: \">\",\n      gte: \">=\",\n    };\n    return mapDict[func as Comparator | AllowedOperator];\n  }\n\n  /**\n   * Visits an operation and returns a VectaraOperationResult. The\n   * operation's arguments are visited and the operator is formatted.\n   * @param operation The operation to visit.\n   * @returns A VectaraOperationResult.\n   */\n  visitOperation(operation: Operation): this[\"VisitOperationOutput\"] {\n    const args = operation.args?.map((arg) =>\n      arg.accept(this as Visitor)\n    ) as VectaraVisitorResult[];\n    const operator = this.formatFunction(operation.operator);\n    return `( ${args.join(operator)} )`;\n  }\n\n  /**\n   * Visits a comparison and returns a VectaraComparisonResult. The\n   * comparison's value is checked for type and the comparator is formatted.\n   * Throws an error if the value type is not supported.\n   * @param comparison The comparison to visit.\n   * @returns A VectaraComparisonResult.\n   */\n  visitComparison(comparison: Comparison): this[\"VisitComparisonOutput\"] {\n    const comparator = this.formatFunction(comparison.comparator);\n    return `( doc.${comparison.attribute} ${comparator} ${processValue(\n      comparison.value\n    )} )`;\n  }\n\n  /**\n   * Visits a structured query and returns a VectaraStructuredQueryResult.\n   * If the query has a filter, it is visited.\n   * @param query The structured query to visit.\n   * @returns A VectaraStructuredQueryResult.\n   */\n  visitStructuredQuery(\n    query: StructuredQuery\n  ): this[\"VisitStructuredQueryOutput\"] {\n    let nextArg = {};\n    if (query.filter) {\n      nextArg = {\n        filter: { filter: query.filter.accept(this as Visitor) },\n      };\n    }\n    return nextArg;\n  }\n\n  mergeFilters(\n    defaultFilter: VectaraFilter | undefined,\n    generatedFilter: VectaraFilter | undefined,\n    mergeType = \"and\",\n    forceDefaultFilter = false\n  ): VectaraFilter | undefined {\n    if (isFilterEmpty(defaultFilter) && isFilterEmpty(generatedFilter)) {\n      return undefined;\n    }\n    if (isFilterEmpty(defaultFilter) || mergeType === \"replace\") {\n      if (isFilterEmpty(generatedFilter)) {\n        return undefined;\n      }\n      return generatedFilter;\n    }\n    if (isFilterEmpty(generatedFilter)) {\n      if (forceDefaultFilter) {\n        return defaultFilter;\n      }\n      if (mergeType === \"and\") {\n        return undefined;\n      }\n      return defaultFilter;\n    }\n\n    if (mergeType === \"and\") {\n      return {\n        filter: `${defaultFilter} and ${generatedFilter}`,\n      } as VectaraFilter;\n    } else if (mergeType === \"or\") {\n      return {\n        filter: `${defaultFilter} or ${generatedFilter}`,\n      };\n    } else {\n      throw new Error(\"Unknown merge type\");\n    }\n  }\n}\n"],"mappings":";;;;;AA4BA,SAAS,aAAa,OAAsB;;AAE1C,KAAI,OAAO,UAAU,SACnB,QAAO,IAAI,MAAM;KAEjB,QAAO,OAAO,MAAM;;AAIxB,IAAa,oBAAb,cAEUA,iCAAAA,eAAkB;CAK1B,mBAA+B,CAACC,iCAAAA,UAAU,KAAKA,iCAAAA,UAAU,GAAG;CAE5D,qBAAmC;EACjCC,iCAAAA,YAAY;EACZA,iCAAAA,YAAY;EACZA,iCAAAA,YAAY;EACZA,iCAAAA,YAAY;EACZA,iCAAAA,YAAY;EACZA,iCAAAA,YAAY;EACb;CAED,eAAe,MAAqC;AAClD,MAAI,QAAQA,iCAAAA;OAER,KAAK,mBAAmB,SAAS,KACjC,KAAK,mBAAmB,QAAQ,KAAmB,KAAK,GAExD,OAAM,IAAI,MACR,cAAc,KAAK,mCAAmC,KAAK,mBAAmB,KAC5E,KACD,GACF;aAEM,QAAQD,iCAAAA;OAEf,KAAK,iBAAiB,SAAS,KAC/B,KAAK,iBAAiB,QAAQ,KAAiB,KAAK,GAEpD,OAAM,IAAI,MACR,YAAY,KAAK,mCAAmC,KAAK,iBAAiB,KACxE,KACD,GACF;QAGH,OAAM,IAAI,MAAM,iCAAiC;AAanD,SAVgB;GACd,KAAK;GACL,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,KAAK;GACL,IAAI;GACJ,KAAK;GACN,CACc;;;;;;;;CASjB,eAAe,WAAoD;EACjE,MAAM,OAAO,UAAU,MAAM,KAAK,QAChC,IAAI,OAAO,KAAgB,CAC5B;EACD,MAAM,WAAW,KAAK,eAAe,UAAU,SAAS;AACxD,SAAO,KAAK,KAAK,KAAK,SAAS,CAAC;;;;;;;;;CAUlC,gBAAgB,YAAuD;EACrE,MAAM,aAAa,KAAK,eAAe,WAAW,WAAW;AAC7D,SAAO,SAAS,WAAW,UAAU,GAAG,WAAW,GAAG,aACpD,WAAW,MACZ,CAAC;;;;;;;;CASJ,qBACE,OACoC;EACpC,IAAI,UAAU,EAAE;AAChB,MAAI,MAAM,OACR,WAAU,EACR,QAAQ,EAAE,QAAQ,MAAM,OAAO,OAAO,KAAgB,EAAE,EACzD;AAEH,SAAO;;CAGT,aACE,eACA,iBACA,YAAY,OACZ,qBAAqB,OACM;AAC3B,OAAA,GAAA,iCAAA,eAAkB,cAAc,KAAA,GAAA,iCAAA,eAAkB,gBAAgB,CAChE;AAEF,OAAA,GAAA,iCAAA,eAAkB,cAAc,IAAI,cAAc,WAAW;AAC3D,QAAA,GAAA,iCAAA,eAAkB,gBAAgB,CAChC;AAEF,UAAO;;AAET,OAAA,GAAA,iCAAA,eAAkB,gBAAgB,EAAE;AAClC,OAAI,mBACF,QAAO;AAET,OAAI,cAAc,MAChB;AAEF,UAAO;;AAGT,MAAI,cAAc,MAChB,QAAO,EACL,QAAQ,GAAG,cAAc,OAAO,mBACjC;WACQ,cAAc,KACvB,QAAO,EACL,QAAQ,GAAG,cAAc,MAAM,mBAChC;MAED,OAAM,IAAI,MAAM,qBAAqB"}