{"version":3,"file":"sqlite_where_builder.cjs","names":[],"sources":["../../src/utils/sqlite_where_builder.ts"],"sourcesContent":["import { InStatement, InValue } from \"@libsql/client\";\n\nexport type WhereCondition<\n  // oxlint-disable-next-line typescript/no-explicit-any\n  Metadata extends Record<string, any> = Record<string, any>,\n> = {\n  [Key in keyof Metadata]:\n    | {\n        operator: \"=\" | \">\" | \"<\" | \">=\" | \"<=\" | \"<>\" | \"LIKE\";\n        value: InValue;\n      }\n    | {\n        operator: \"IN\";\n        value: InValue[];\n      };\n};\n\ntype WhereInStatement = Exclude<InStatement, string>;\n\nexport class SqliteWhereBuilder {\n  private conditions: WhereCondition;\n\n  constructor(conditions: WhereCondition) {\n    this.conditions = conditions;\n  }\n\n  buildWhereClause(): WhereInStatement {\n    const sqlParts: string[] = [];\n    const args: Record<string, InValue> = {};\n\n    for (const [column, condition] of Object.entries(this.conditions)) {\n      const { operator, value } = condition;\n\n      if (operator === \"IN\") {\n        const placeholders = value\n          .map((_, index) => `:${column}${index}`)\n          .join(\", \");\n        sqlParts.push(\n          `json_extract(metadata, '$.${column}') IN (${placeholders})`\n        );\n\n        const values = value.reduce(\n          (previousValue: Record<string, InValue>, currentValue, index) => {\n            return { ...previousValue, [`${column}${index}`]: currentValue };\n          },\n          {}\n        );\n\n        Object.assign(args, values);\n      } else {\n        sqlParts.push(\n          `json_extract(metadata, '$.${column}') ${operator} :${column}`\n        );\n        args[column] = value;\n      }\n    }\n\n    const sql = sqlParts.length ? `${sqlParts.join(\" AND \")}` : \"\";\n    return { sql, args };\n  }\n}\n"],"mappings":";AAmBA,IAAa,qBAAb,MAAgC;CAC9B;CAEA,YAAY,YAA4B;AACtC,OAAK,aAAa;;CAGpB,mBAAqC;EACnC,MAAM,WAAqB,EAAE;EAC7B,MAAM,OAAgC,EAAE;AAExC,OAAK,MAAM,CAAC,QAAQ,cAAc,OAAO,QAAQ,KAAK,WAAW,EAAE;GACjE,MAAM,EAAE,UAAU,UAAU;AAE5B,OAAI,aAAa,MAAM;IACrB,MAAM,eAAe,MAClB,KAAK,GAAG,UAAU,IAAI,SAAS,QAAQ,CACvC,KAAK,KAAK;AACb,aAAS,KACP,6BAA6B,OAAO,SAAS,aAAa,GAC3D;IAED,MAAM,SAAS,MAAM,QAClB,eAAwC,cAAc,UAAU;AAC/D,YAAO;MAAE,GAAG;OAAgB,GAAG,SAAS,UAAU;MAAc;OAElE,EAAE,CACH;AAED,WAAO,OAAO,MAAM,OAAO;UACtB;AACL,aAAS,KACP,6BAA6B,OAAO,KAAK,SAAS,IAAI,SACvD;AACD,SAAK,UAAU;;;AAKnB,SAAO;GAAE,KADG,SAAS,SAAS,GAAG,SAAS,KAAK,QAAQ,KAAK;GAC9C;GAAM"}