{"version":3,"sources":["../src/operator.ts"],"names":["Condition"],"mappings":"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","file":"operator.mjs","sourcesContent":["type OperatorValuesSingle = string | number | boolean;\nexport type OperatorValuesList = string[] | number[] | boolean[] | any[];\nexport type OperatorValues = OperatorValuesSingle | OperatorValuesList;\n\nexport enum Condition {\n  Equal = \"equal\",\n  NotEqual = \"notEqual\",\n  GreaterThan = \"greaterThan\",\n  GreaterThanEqual = \"greaterThanEqual\",\n  LessThan = \"lessThan\",\n  LessThanEqual = \"lessThanEqual\",\n  Contains = \"contains\",\n  IsNull = \"isNull\",\n  IsNotNull = \"isNotNull\",\n}\n\n/**\n * Helper class to generate operator strings for atomic operations.\n */\nexport class Operator {\n  method: string;\n  values: OperatorValuesList | undefined;\n\n  /**\n   * Constructor for Operator class.\n   *\n   * @param {string} method\n   * @param {OperatorValues} values\n   */\n  constructor(\n    method: string,\n    values?: OperatorValues\n  ) {\n    this.method = method;\n\n    if (values !== undefined) {\n      if (Array.isArray(values)) {\n        this.values = values;\n      } else {\n        this.values = [values] as OperatorValuesList;\n      }\n    }\n  }\n\n  /**\n   * Convert the operator object to a JSON string.\n   *\n   * @returns {string}\n   */\n  toString(): string {\n    return JSON.stringify({\n      method: this.method,\n      values: this.values,\n    });\n  }\n\n  /**\n   * Increment a numeric attribute by a specified value.\n   *\n   * @param {number} value\n   * @param {number} max\n   * @returns {string}\n   */\n  static increment = (value: number = 1, max?: number): string => {\n    if (isNaN(value) || !isFinite(value)) {\n      throw new Error(\"Value cannot be NaN or Infinity\");\n    }\n    if (max !== undefined && (isNaN(max) || !isFinite(max))) {\n      throw new Error(\"Max cannot be NaN or Infinity\");\n    }\n    const values: any[] = [value];\n    if (max !== undefined) {\n      values.push(max);\n    }\n    return new Operator(\"increment\", values).toString();\n  };\n\n  /**\n   * Decrement a numeric attribute by a specified value.\n   *\n   * @param {number} value\n   * @param {number} min\n   * @returns {string}\n   */\n  static decrement = (value: number = 1, min?: number): string => {\n    if (isNaN(value) || !isFinite(value)) {\n      throw new Error(\"Value cannot be NaN or Infinity\");\n    }\n    if (min !== undefined && (isNaN(min) || !isFinite(min))) {\n      throw new Error(\"Min cannot be NaN or Infinity\");\n    }\n    const values: any[] = [value];\n    if (min !== undefined) {\n      values.push(min);\n    }\n    return new Operator(\"decrement\", values).toString();\n  };\n\n  /**\n   * Multiply a numeric attribute by a specified factor.\n   *\n   * @param {number} factor\n   * @param {number} max\n   * @returns {string}\n   */\n  static multiply = (factor: number, max?: number): string => {\n    if (isNaN(factor) || !isFinite(factor)) {\n      throw new Error(\"Factor cannot be NaN or Infinity\");\n    }\n    if (max !== undefined && (isNaN(max) || !isFinite(max))) {\n      throw new Error(\"Max cannot be NaN or Infinity\");\n    }\n    const values: any[] = [factor];\n    if (max !== undefined) {\n      values.push(max);\n    }\n    return new Operator(\"multiply\", values).toString();\n  };\n\n  /**\n   * Divide a numeric attribute by a specified divisor.\n   *\n   * @param {number} divisor\n   * @param {number} min\n   * @returns {string}\n   */\n  static divide = (divisor: number, min?: number): string => {\n    if (isNaN(divisor) || !isFinite(divisor)) {\n      throw new Error(\"Divisor cannot be NaN or Infinity\");\n    }\n    if (min !== undefined && (isNaN(min) || !isFinite(min))) {\n      throw new Error(\"Min cannot be NaN or Infinity\");\n    }\n    if (divisor === 0) {\n      throw new Error(\"Divisor cannot be zero\");\n    }\n    const values: any[] = [divisor];\n    if (min !== undefined) {\n      values.push(min);\n    }\n    return new Operator(\"divide\", values).toString();\n  };\n\n  /**\n   * Apply modulo operation on a numeric attribute.\n   *\n   * @param {number} divisor\n   * @returns {string}\n   */\n  static modulo = (divisor: number): string => {\n    if (isNaN(divisor) || !isFinite(divisor)) {\n      throw new Error(\"Divisor cannot be NaN or Infinity\");\n    }\n    if (divisor === 0) {\n      throw new Error(\"Divisor cannot be zero\");\n    }\n    return new Operator(\"modulo\", [divisor]).toString();\n  };\n\n  /**\n   * Raise a numeric attribute to a specified power.\n   *\n   * @param {number} exponent\n   * @param {number} max\n   * @returns {string}\n   */\n  static power = (exponent: number, max?: number): string => {\n    if (isNaN(exponent) || !isFinite(exponent)) {\n      throw new Error(\"Exponent cannot be NaN or Infinity\");\n    }\n    if (max !== undefined && (isNaN(max) || !isFinite(max))) {\n      throw new Error(\"Max cannot be NaN or Infinity\");\n    }\n    const values: any[] = [exponent];\n    if (max !== undefined) {\n      values.push(max);\n    }\n    return new Operator(\"power\", values).toString();\n  };\n\n  /**\n   * Append values to an array attribute.\n   *\n   * @param {any[]} values\n   * @returns {string}\n   */\n  static arrayAppend = (values: any[]): string =>\n    new Operator(\"arrayAppend\", values).toString();\n\n  /**\n   * Prepend values to an array attribute.\n   *\n   * @param {any[]} values\n   * @returns {string}\n   */\n  static arrayPrepend = (values: any[]): string =>\n    new Operator(\"arrayPrepend\", values).toString();\n\n  /**\n   * Insert a value at a specific index in an array attribute.\n   *\n   * @param {number} index\n   * @param {any} value\n   * @returns {string}\n   */\n  static arrayInsert = (index: number, value: any): string =>\n    new Operator(\"arrayInsert\", [index, value]).toString();\n\n  /**\n   * Remove a value from an array attribute.\n   *\n   * @param {any} value\n   * @returns {string}\n   */\n  static arrayRemove = (value: any): string =>\n    new Operator(\"arrayRemove\", [value]).toString();\n\n  /**\n   * Remove duplicate values from an array attribute.\n   *\n   * @returns {string}\n   */\n  static arrayUnique = (): string =>\n    new Operator(\"arrayUnique\", []).toString();\n\n  /**\n   * Keep only values that exist in both the current array and the provided array.\n   *\n   * @param {any[]} values\n   * @returns {string}\n   */\n  static arrayIntersect = (values: any[]): string =>\n    new Operator(\"arrayIntersect\", values).toString();\n\n  /**\n   * Remove values from the array that exist in the provided array.\n   *\n   * @param {any[]} values\n   * @returns {string}\n   */\n  static arrayDiff = (values: any[]): string =>\n    new Operator(\"arrayDiff\", values).toString();\n\n  /**\n   * Filter array values based on a condition.\n   *\n   * @param {Condition} condition\n   * @param {any} value\n   * @returns {string}\n   */\n  static arrayFilter = (condition: Condition, value?: any): string => {\n    const values: any[] = [condition as string, value === undefined ? null : value];\n    return new Operator(\"arrayFilter\", values).toString();\n  };\n\n  /**\n   * Concatenate a value to a string or array attribute.\n   *\n   * @param {any} value\n   * @returns {string}\n   */\n  static stringConcat = (value: any): string =>\n    new Operator(\"stringConcat\", [value]).toString();\n\n  /**\n   * Replace occurrences of a search string with a replacement string.\n   *\n   * @param {string} search\n   * @param {string} replace\n   * @returns {string}\n   */\n  static stringReplace = (search: string, replace: string): string =>\n    new Operator(\"stringReplace\", [search, replace]).toString();\n\n  /**\n   * Toggle a boolean attribute.\n   *\n   * @returns {string}\n   */\n  static toggle = (): string =>\n    new Operator(\"toggle\", []).toString();\n\n  /**\n   * Add days to a date attribute.\n   *\n   * @param {number} days\n   * @returns {string}\n   */\n  static dateAddDays = (days: number): string =>\n    new Operator(\"dateAddDays\", [days]).toString();\n\n  /**\n   * Subtract days from a date attribute.\n   *\n   * @param {number} days\n   * @returns {string}\n   */\n  static dateSubDays = (days: number): string =>\n    new Operator(\"dateSubDays\", [days]).toString();\n\n  /**\n   * Set a date attribute to the current date and time.\n   *\n   * @returns {string}\n   */\n  static dateSetNow = (): string =>\n    new Operator(\"dateSetNow\", []).toString();\n}\n"]}