{"version":3,"sources":["../src/query.ts"],"names":[],"mappings":"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","file":"query.mjs","sourcesContent":["import JSONbigModule from 'json-bigint';\nconst JSONbig = JSONbigModule({ useNativeBigInt: true });\n\ntype QueryTypesSingle = string | number | bigint | boolean;\nexport type QueryTypesList =\n    string[] | number[] | bigint[] | boolean[] | Query[] | any[];\nexport type QueryTypes = QueryTypesSingle | QueryTypesList;\ntype AttributesTypes = string | string[];\n\n/**\n * Helper class to generate query strings.\n */\nexport class Query {\n    method: string;\n    attribute: AttributesTypes | undefined;\n    values: QueryTypesList | undefined;\n\n    /**\n     * Constructor for Query class.\n     *\n     * @param {string} method\n     * @param {AttributesTypes} attribute\n     * @param {QueryTypes} values\n     */\n    constructor(\n        method: string,\n        attribute?: AttributesTypes,\n        values?: QueryTypes,\n    ) {\n        this.method = method;\n        this.attribute = attribute;\n\n        if (values !== undefined) {\n            if (Array.isArray(values)) {\n                this.values = values;\n            } else {\n                this.values = [values] as QueryTypesList;\n            }\n        }\n    }\n\n    /**\n     * Convert the query object to a JSON string.\n     *\n     * @returns {string}\n     */\n    toString(): string {\n        return JSONbig.stringify({\n            method: this.method,\n            attribute: this.attribute,\n            values: this.values,\n        });\n    }\n\n    /**\n     * Filter resources where attribute is equal to value.\n     *\n     * @param {string} attribute\n     * @param {QueryTypes} value\n     * @returns {string}\n     */\n    static equal = (attribute: string, value: QueryTypes): string =>\n        new Query('equal', attribute, value).toString();\n\n    /**\n     * Filter resources where attribute is not equal to value.\n     *\n     * @param {string} attribute\n     * @param {QueryTypes} value\n     * @returns {string}\n     */\n    static notEqual = (attribute: string, value: QueryTypes): string =>\n        new Query('notEqual', attribute, value).toString();\n\n    /**\n     * Filter resources where attribute matches a regular expression pattern.\n     *\n     * @param {string} attribute The attribute to filter on.\n     * @param {string} pattern The regular expression pattern to match.\n     * @returns {string}\n     */\n    static regex = (attribute: string, pattern: string): string =>\n        new Query('regex', attribute, pattern).toString();\n\n    /**\n     * Filter resources where attribute is less than value.\n     *\n     * @param {string} attribute\n     * @param {QueryTypes} value\n     * @returns {string}\n     */\n    static lessThan = (attribute: string, value: QueryTypes): string =>\n        new Query('lessThan', attribute, value).toString();\n\n    /**\n     * Filter resources where attribute is less than or equal to value.\n     *\n     * @param {string} attribute\n     * @param {QueryTypes} value\n     * @returns {string}\n     */\n    static lessThanEqual = (attribute: string, value: QueryTypes): string =>\n        new Query('lessThanEqual', attribute, value).toString();\n\n    /**\n     * Filter resources where attribute is greater than value.\n     *\n     * @param {string} attribute\n     * @param {QueryTypes} value\n     * @returns {string}\n     */\n    static greaterThan = (attribute: string, value: QueryTypes): string =>\n        new Query('greaterThan', attribute, value).toString();\n\n    /**\n     * Filter resources where attribute is greater than or equal to value.\n     *\n     * @param {string} attribute\n     * @param {QueryTypes} value\n     * @returns {string}\n     */\n    static greaterThanEqual = (attribute: string, value: QueryTypes): string =>\n        new Query('greaterThanEqual', attribute, value).toString();\n\n    /**\n     * Filter resources where attribute is null.\n     *\n     * @param {string} attribute\n     * @returns {string}\n     */\n    static isNull = (attribute: string): string =>\n        new Query('isNull', attribute).toString();\n\n    /**\n     * Filter resources where attribute is not null.\n     *\n     * @param {string} attribute\n     * @returns {string}\n     */\n    static isNotNull = (attribute: string): string =>\n        new Query('isNotNull', attribute).toString();\n\n    /**\n     * Filter resources where the specified attributes exist.\n     *\n     * @param {string[]} attributes The list of attributes that must exist.\n     * @returns {string}\n     */\n    static exists = (attributes: string[]): string =>\n        new Query('exists', undefined, attributes).toString();\n\n    /**\n     * Filter resources where the specified attributes do not exist.\n     *\n     * @param {string[]} attributes The list of attributes that must not exist.\n     * @returns {string}\n     */\n    static notExists = (attributes: string[]): string =>\n        new Query('notExists', undefined, attributes).toString();\n\n    /**\n     * Filter resources where attribute is between start and end (inclusive).\n     *\n     * @param {string} attribute\n     * @param {string | number | bigint} start\n     * @param {string | number | bigint} end\n     * @returns {string}\n     */\n    static between = (\n        attribute: string,\n        start: string | number | bigint,\n        end: string | number | bigint,\n    ): string =>\n        new Query('between', attribute, [\n            start,\n            end,\n        ] as QueryTypesList).toString();\n\n    /**\n     * Filter resources where attribute starts with value.\n     *\n     * @param {string} attribute\n     * @param {string} value\n     * @returns {string}\n     */\n    static startsWith = (attribute: string, value: string): string =>\n        new Query('startsWith', attribute, value).toString();\n\n    /**\n     * Filter resources where attribute ends with value.\n     *\n     * @param {string} attribute\n     * @param {string} value\n     * @returns {string}\n     */\n    static endsWith = (attribute: string, value: string): string =>\n        new Query('endsWith', attribute, value).toString();\n\n    /**\n     * Specify which attributes should be returned by the API call.\n     *\n     * @param {string[]} attributes\n     * @returns {string}\n     */\n    static select = (attributes: string[]): string =>\n        new Query('select', undefined, attributes).toString();\n\n    /**\n     * Filter resources by searching attribute for value.\n     * A fulltext index on attribute is required for this query to work.\n     *\n     * @param {string} attribute\n     * @param {string} value\n     * @returns {string}\n     */\n    static search = (attribute: string, value: string): string =>\n        new Query('search', attribute, value).toString();\n\n    /**\n     * Sort results by attribute descending.\n     *\n     * @param {string} attribute\n     * @returns {string}\n     */\n    static orderDesc = (attribute: string): string =>\n        new Query('orderDesc', attribute).toString();\n\n    /**\n     * Sort results by attribute ascending.\n     *\n     * @param {string} attribute\n     * @returns {string}\n     */\n    static orderAsc = (attribute: string): string =>\n        new Query('orderAsc', attribute).toString();\n\n    /**\n     * Sort results randomly.\n     *\n     * @returns {string}\n     */\n    static orderRandom = (): string => new Query('orderRandom').toString();\n\n    /**\n     * Return results after documentId.\n     *\n     * @param {string} documentId\n     * @returns {string}\n     */\n    static cursorAfter = (documentId: string): string =>\n        new Query('cursorAfter', undefined, documentId).toString();\n\n    /**\n     * Return results before documentId.\n     *\n     * @param {string} documentId\n     * @returns {string}\n     */\n    static cursorBefore = (documentId: string): string =>\n        new Query('cursorBefore', undefined, documentId).toString();\n\n    /**\n     * Return only limit results.\n     *\n     * @param {number} limit\n     * @returns {string}\n     */\n    static limit = (limit: number): string =>\n        new Query('limit', undefined, limit).toString();\n\n    /**\n     * Filter resources by skipping the first offset results.\n     *\n     * @param {number} offset\n     * @returns {string}\n     */\n    static offset = (offset: number): string =>\n        new Query('offset', undefined, offset).toString();\n\n    /**\n     * Filter resources where attribute contains the specified value.\n     * For string attributes, checks if the string contains the substring.\n     *\n     * Note: For array attributes, use {@link containsAny} or {@link containsAll} instead.\n     * @param {string} attribute\n     * @param {string | string[]} value\n     * @returns {string}\n     */\n    static contains = (attribute: string, value: string | any[]): string =>\n        new Query('contains', attribute, value).toString();\n\n    /**\n     * Filter resources where attribute contains ANY of the specified values.\n     * For array and relationship attributes, matches documents where the attribute\n     * contains at least one of the given values.\n     *\n     * @param {string} attribute\n     * @param {any[]} value\n     * @returns {string}\n     */\n    static containsAny = (attribute: string, value: any[]): string =>\n        new Query('containsAny', attribute, value).toString();\n\n    /**\n     * Filter resources where attribute contains ALL of the specified values.\n     * For array and relationship attributes, matches documents where the attribute\n     * contains every one of the given values.\n     *\n     * @param {string} attribute\n     * @param {any[]} value\n     * @returns {string}\n     */\n    static containsAll = (attribute: string, value: any[]): string =>\n        new Query('containsAll', attribute, value).toString();\n\n    /**\n     * Filter resources where attribute does not contain the specified value.\n     *\n     * @param {string} attribute\n     * @param {string | any[]} value\n     * @returns {string}\n     */\n    static notContains = (attribute: string, value: string | any[]): string =>\n        new Query('notContains', attribute, value).toString();\n\n    /**\n     * Filter resources by searching attribute for value (inverse of search).\n     * A fulltext index on attribute is required for this query to work.\n     *\n     * @param {string} attribute\n     * @param {string} value\n     * @returns {string}\n     */\n    static notSearch = (attribute: string, value: string): string =>\n        new Query('notSearch', attribute, value).toString();\n\n    /**\n     * Filter resources where attribute is not between start and end (exclusive).\n     *\n     * @param {string} attribute\n     * @param {string | number | bigint} start\n     * @param {string | number | bigint} end\n     * @returns {string}\n     */\n    static notBetween = (\n        attribute: string,\n        start: string | number | bigint,\n        end: string | number | bigint,\n    ): string =>\n        new Query('notBetween', attribute, [\n            start,\n            end,\n        ] as QueryTypesList).toString();\n\n    /**\n     * Filter resources where attribute does not start with value.\n     *\n     * @param {string} attribute\n     * @param {string} value\n     * @returns {string}\n     */\n    static notStartsWith = (attribute: string, value: string): string =>\n        new Query('notStartsWith', attribute, value).toString();\n\n    /**\n     * Filter resources where attribute does not end with value.\n     *\n     * @param {string} attribute\n     * @param {string} value\n     * @returns {string}\n     */\n    static notEndsWith = (attribute: string, value: string): string =>\n        new Query('notEndsWith', attribute, value).toString();\n\n    /**\n     * Filter resources where document was created before date.\n     *\n     * @param {string} value\n     * @returns {string}\n     */\n    static createdBefore = (value: string): string =>\n        Query.lessThan('$createdAt', value);\n\n    /**\n     * Filter resources where document was created after date.\n     *\n     * @param {string} value\n     * @returns {string}\n     */\n    static createdAfter = (value: string): string =>\n        Query.greaterThan('$createdAt', value);\n\n    /**\n     * Filter resources where document was created between dates.\n     *\n     * @param {string} start\n     * @param {string} end\n     * @returns {string}\n     */\n    static createdBetween = (start: string, end: string): string =>\n        Query.between('$createdAt', start, end);\n\n    /**\n     * Filter resources where document was updated before date.\n     *\n     * @param {string} value\n     * @returns {string}\n     */\n    static updatedBefore = (value: string): string =>\n        Query.lessThan('$updatedAt', value);\n\n    /**\n     * Filter resources where document was updated after date.\n     *\n     * @param {string} value\n     * @returns {string}\n     */\n    static updatedAfter = (value: string): string =>\n        Query.greaterThan('$updatedAt', value);\n\n    /**\n     * Filter resources where document was updated between dates.\n     *\n     * @param {string} start\n     * @param {string} end\n     * @returns {string}\n     */\n    static updatedBetween = (start: string, end: string): string =>\n        Query.between('$updatedAt', start, end);\n\n    /**\n     * Combine multiple queries using logical OR operator.\n     *\n     * @param {string[]} queries\n     * @returns {string}\n     */\n    static or = (queries: string[]) =>\n        new Query(\n            'or',\n            undefined,\n            queries.map((query) => JSONbig.parse(query)),\n        ).toString();\n\n    /**\n     * Combine multiple queries using logical AND operator.\n     *\n     * @param {string[]} queries\n     * @returns {string}\n     */\n    static and = (queries: string[]) =>\n        new Query(\n            'and',\n            undefined,\n            queries.map((query) => JSONbig.parse(query)),\n        ).toString();\n\n    /**\n     * Filter array elements where at least one element matches all the specified queries.\n     *\n     * @param {string} attribute The attribute containing the array to filter on.\n     * @param {string[]} queries The list of query strings to match against array elements.\n     * @returns {string}\n     */\n    static elemMatch = (attribute: string, queries: string[]): string =>\n        new Query(\n            'elemMatch',\n            attribute,\n            queries.map((query) => JSONbig.parse(query)),\n        ).toString();\n\n    /**\n     * Filter resources where attribute is at a specific distance from the given coordinates.\n     *\n     * @param {string} attribute\n     * @param {any[]} values\n     * @param {number} distance\n     * @param {boolean} meters\n     * @returns {string}\n     */\n    static distanceEqual = (\n        attribute: string,\n        values: any[],\n        distance: number,\n        meters: boolean = true,\n    ): string =>\n        new Query('distanceEqual', attribute, [\n            [values, distance, meters],\n        ] as QueryTypesList).toString();\n\n    /**\n     * Filter resources where attribute is not at a specific distance from the given coordinates.\n     *\n     * @param {string} attribute\n     * @param {any[]} values\n     * @param {number} distance\n     * @param {boolean} meters\n     * @returns {string}\n     */\n    static distanceNotEqual = (\n        attribute: string,\n        values: any[],\n        distance: number,\n        meters: boolean = true,\n    ): string =>\n        new Query('distanceNotEqual', attribute, [\n            [values, distance, meters],\n        ] as QueryTypesList).toString();\n\n    /**\n     * Filter resources where attribute is at a distance greater than the specified value from the given coordinates.\n     *\n     * @param {string} attribute\n     * @param {any[]} values\n     * @param {number} distance\n     * @param {boolean} meters\n     * @returns {string}\n     */\n    static distanceGreaterThan = (\n        attribute: string,\n        values: any[],\n        distance: number,\n        meters: boolean = true,\n    ): string =>\n        new Query('distanceGreaterThan', attribute, [\n            [values, distance, meters],\n        ] as QueryTypesList).toString();\n\n    /**\n     * Filter resources where attribute is at a distance less than the specified value from the given coordinates.\n     *\n     * @param {string} attribute\n     * @param {any[]} values\n     * @param {number} distance\n     * @param {boolean} meters\n     * @returns {string}\n     */\n    static distanceLessThan = (\n        attribute: string,\n        values: any[],\n        distance: number,\n        meters: boolean = true,\n    ): string =>\n        new Query('distanceLessThan', attribute, [\n            [values, distance, meters],\n        ] as QueryTypesList).toString();\n\n    /**\n     * Filter resources using vector dot product similarity.\n     *\n     * @param {string} attribute\n     * @param {number[]} vector\n     * @returns {string}\n     */\n    static vectorDot = (attribute: string, vector: number[]): string =>\n        new Query('vectorDot', attribute, [\n            vector,\n        ] as QueryTypesList).toString();\n\n    /**\n     * Filter resources using vector cosine similarity.\n     *\n     * @param {string} attribute\n     * @param {number[]} vector\n     * @returns {string}\n     */\n    static vectorCosine = (attribute: string, vector: number[]): string =>\n        new Query('vectorCosine', attribute, [\n            vector,\n        ] as QueryTypesList).toString();\n\n    /**\n     * Filter resources using vector Euclidean distance.\n     *\n     * @param {string} attribute\n     * @param {number[]} vector\n     * @returns {string}\n     */\n    static vectorEuclidean = (attribute: string, vector: number[]): string =>\n        new Query('vectorEuclidean', attribute, [\n            vector,\n        ] as QueryTypesList).toString();\n\n    /**\n     * Filter resources where attribute intersects with the given geometry.\n     *\n     * @param {string} attribute\n     * @param {any[]} values\n     * @returns {string}\n     */\n    static intersects = (attribute: string, values: any[]): string =>\n        new Query('intersects', attribute, [values]).toString();\n\n    /**\n     * Filter resources where attribute does not intersect with the given geometry.\n     *\n     * @param {string} attribute\n     * @param {any[]} values\n     * @returns {string}\n     */\n    static notIntersects = (attribute: string, values: any[]): string =>\n        new Query('notIntersects', attribute, [values]).toString();\n\n    /**\n     * Filter resources where attribute crosses the given geometry.\n     *\n     * @param {string} attribute\n     * @param {any[]} values\n     * @returns {string}\n     */\n    static crosses = (attribute: string, values: any[]): string =>\n        new Query('crosses', attribute, [values]).toString();\n\n    /**\n     * Filter resources where attribute does not cross the given geometry.\n     *\n     * @param {string} attribute\n     * @param {any[]} values\n     * @returns {string}\n     */\n    static notCrosses = (attribute: string, values: any[]): string =>\n        new Query('notCrosses', attribute, [values]).toString();\n\n    /**\n     * Filter resources where attribute overlaps with the given geometry.\n     *\n     * @param {string} attribute\n     * @param {any[]} values\n     * @returns {string}\n     */\n    static overlaps = (attribute: string, values: any[]): string =>\n        new Query('overlaps', attribute, [values]).toString();\n\n    /**\n     * Filter resources where attribute does not overlap with the given geometry.\n     *\n     * @param {string} attribute\n     * @param {any[]} values\n     * @returns {string}\n     */\n    static notOverlaps = (attribute: string, values: any[]): string =>\n        new Query('notOverlaps', attribute, [values]).toString();\n\n    /**\n     * Filter resources where attribute touches the given geometry.\n     *\n     * @param {string} attribute\n     * @param {any[]} values\n     * @returns {string}\n     */\n    static touches = (attribute: string, values: any[]): string =>\n        new Query('touches', attribute, [values]).toString();\n\n    /**\n     * Filter resources where attribute does not touch the given geometry.\n     *\n     * @param {string} attribute\n     * @param {any[]} values\n     * @returns {string}\n     */\n    static notTouches = (attribute: string, values: any[]): string =>\n        new Query('notTouches', attribute, [values]).toString();\n}\n"]}