123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const logic_1 = require("./logic");
- const symbol_1 = require("../helper/symbol");
- const index_1 = require("../geo/index");
- const type_1 = require("../utils/type");
- const validate_1 = require("../validate");
- exports.EQ = 'eq';
- exports.NEQ = 'neq';
- exports.GT = 'gt';
- exports.GTE = 'gte';
- exports.LT = 'lt';
- exports.LTE = 'lte';
- exports.IN = 'in';
- exports.NIN = 'nin';
- exports.ALL = 'all';
- exports.ELEM_MATCH = 'elemMatch';
- exports.EXISTS = 'exists';
- exports.SIZE = 'size';
- exports.MOD = 'mod';
- var QUERY_COMMANDS_LITERAL;
- (function (QUERY_COMMANDS_LITERAL) {
- QUERY_COMMANDS_LITERAL["EQ"] = "eq";
- QUERY_COMMANDS_LITERAL["NEQ"] = "neq";
- QUERY_COMMANDS_LITERAL["GT"] = "gt";
- QUERY_COMMANDS_LITERAL["GTE"] = "gte";
- QUERY_COMMANDS_LITERAL["LT"] = "lt";
- QUERY_COMMANDS_LITERAL["LTE"] = "lte";
- QUERY_COMMANDS_LITERAL["IN"] = "in";
- QUERY_COMMANDS_LITERAL["NIN"] = "nin";
- QUERY_COMMANDS_LITERAL["ALL"] = "all";
- QUERY_COMMANDS_LITERAL["ELEM_MATCH"] = "elemMatch";
- QUERY_COMMANDS_LITERAL["EXISTS"] = "exists";
- QUERY_COMMANDS_LITERAL["SIZE"] = "size";
- QUERY_COMMANDS_LITERAL["MOD"] = "mod";
- QUERY_COMMANDS_LITERAL["GEO_NEAR"] = "geoNear";
- QUERY_COMMANDS_LITERAL["GEO_WITHIN"] = "geoWithin";
- QUERY_COMMANDS_LITERAL["GEO_INTERSECTS"] = "geoIntersects";
- })(QUERY_COMMANDS_LITERAL = exports.QUERY_COMMANDS_LITERAL || (exports.QUERY_COMMANDS_LITERAL = {}));
- class QueryCommand extends logic_1.LogicCommand {
- constructor(operator, operands, fieldName) {
- super(operator, operands, fieldName);
- this.operator = operator;
- this._internalType = symbol_1.SYMBOL_QUERY_COMMAND;
- }
- toJSON() {
- switch (this.operator) {
- case QUERY_COMMANDS_LITERAL.IN:
- case QUERY_COMMANDS_LITERAL.NIN:
- return {
- ['$' + this.operator]: this.operands
- };
- case QUERY_COMMANDS_LITERAL.NEQ:
- return {
- ['$ne']: this.operands[0]
- };
- default:
- return {
- ['$' + this.operator]: this.operands[0]
- };
- }
- }
- _setFieldName(fieldName) {
- const command = new QueryCommand(this.operator, this.operands, fieldName);
- return command;
- }
- eq(val) {
- const command = new QueryCommand(QUERY_COMMANDS_LITERAL.EQ, [val], this.fieldName);
- return this.and(command);
- }
- neq(val) {
- const command = new QueryCommand(QUERY_COMMANDS_LITERAL.NEQ, [val], this.fieldName);
- return this.and(command);
- }
- gt(val) {
- const command = new QueryCommand(QUERY_COMMANDS_LITERAL.GT, [val], this.fieldName);
- return this.and(command);
- }
- gte(val) {
- const command = new QueryCommand(QUERY_COMMANDS_LITERAL.GTE, [val], this.fieldName);
- return this.and(command);
- }
- lt(val) {
- const command = new QueryCommand(QUERY_COMMANDS_LITERAL.LT, [val], this.fieldName);
- return this.and(command);
- }
- lte(val) {
- const command = new QueryCommand(QUERY_COMMANDS_LITERAL.LTE, [val], this.fieldName);
- return this.and(command);
- }
- in(list) {
- const command = new QueryCommand(QUERY_COMMANDS_LITERAL.IN, list, this.fieldName);
- return this.and(command);
- }
- nin(list) {
- const command = new QueryCommand(QUERY_COMMANDS_LITERAL.NIN, list, this.fieldName);
- return this.and(command);
- }
- geoNear(val) {
- if (!(val.geometry instanceof index_1.Point)) {
- throw new TypeError(`"geometry" must be of type Point. Received type ${typeof val.geometry}`);
- }
- if (val.maxDistance !== undefined && !type_1.isNumber(val.maxDistance)) {
- throw new TypeError(`"maxDistance" must be of type Number. Received type ${typeof val.maxDistance}`);
- }
- if (val.minDistance !== undefined && !type_1.isNumber(val.minDistance)) {
- throw new TypeError(`"minDistance" must be of type Number. Received type ${typeof val.minDistance}`);
- }
- const command = new QueryCommand(QUERY_COMMANDS_LITERAL.GEO_NEAR, [val], this.fieldName);
- return this.and(command);
- }
- geoWithin(val) {
- if (!(val.geometry instanceof index_1.MultiPolygon) &&
- !(val.geometry instanceof index_1.Polygon) &&
- !validate_1.Validate.isCentersPhere(val.centerSphere)) {
- throw new TypeError(`"geometry" must be of type Polygon or MultiPolygon. Received type ${typeof val.geometry}`);
- }
- const command = new QueryCommand(QUERY_COMMANDS_LITERAL.GEO_WITHIN, [val], this.fieldName);
- return this.and(command);
- }
- geoIntersects(val) {
- if (!(val.geometry instanceof index_1.Point) &&
- !(val.geometry instanceof index_1.LineString) &&
- !(val.geometry instanceof index_1.Polygon) &&
- !(val.geometry instanceof index_1.MultiPoint) &&
- !(val.geometry instanceof index_1.MultiLineString) &&
- !(val.geometry instanceof index_1.MultiPolygon)) {
- throw new TypeError(`"geometry" must be of type Point, LineString, Polygon, MultiPoint, MultiLineString or MultiPolygon. Received type ${typeof val.geometry}`);
- }
- const command = new QueryCommand(QUERY_COMMANDS_LITERAL.GEO_INTERSECTS, [val], this.fieldName);
- return this.and(command);
- }
- }
- exports.QueryCommand = QueryCommand;
- function isQueryCommand(object) {
- return object && object instanceof QueryCommand && object._internalType === symbol_1.SYMBOL_QUERY_COMMAND;
- }
- exports.isQueryCommand = isQueryCommand;
- function isKnownQueryCommand(object) {
- return isQueryCommand(object) && object.operator.toUpperCase() in QUERY_COMMANDS_LITERAL;
- }
- exports.isKnownQueryCommand = isKnownQueryCommand;
- function isComparisonCommand(object) {
- return isQueryCommand(object);
- }
- exports.isComparisonCommand = isComparisonCommand;
- exports.default = QueryCommand;
|