{"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(method: string, values?: OperatorValues) {\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[] = [\n            condition as string,\n            value === undefined ? null : value,\n        ];\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 => 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 => new Operator('dateSetNow', []).toString();\n}\n"]}