logic.js 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. const symbol_1 = require("../helper/symbol");
  4. const query_1 = require("./query");
  5. exports.AND = 'and';
  6. exports.OR = 'or';
  7. exports.NOT = 'not';
  8. exports.NOR = 'nor';
  9. var LOGIC_COMMANDS_LITERAL;
  10. (function (LOGIC_COMMANDS_LITERAL) {
  11. LOGIC_COMMANDS_LITERAL["AND"] = "and";
  12. LOGIC_COMMANDS_LITERAL["OR"] = "or";
  13. LOGIC_COMMANDS_LITERAL["NOT"] = "not";
  14. LOGIC_COMMANDS_LITERAL["NOR"] = "nor";
  15. })(LOGIC_COMMANDS_LITERAL = exports.LOGIC_COMMANDS_LITERAL || (exports.LOGIC_COMMANDS_LITERAL = {}));
  16. class LogicCommand {
  17. constructor(operator, operands, fieldName) {
  18. this._internalType = symbol_1.SYMBOL_LOGIC_COMMAND;
  19. Object.defineProperties(this, {
  20. _internalType: {
  21. enumerable: false,
  22. configurable: false,
  23. },
  24. });
  25. this.operator = operator;
  26. this.operands = operands;
  27. this.fieldName = fieldName || symbol_1.SYMBOL_UNSET_FIELD_NAME;
  28. if (this.fieldName !== symbol_1.SYMBOL_UNSET_FIELD_NAME) {
  29. if (Array.isArray(operands)) {
  30. operands = operands.slice();
  31. this.operands = operands;
  32. for (let i = 0, len = operands.length; i < len; i++) {
  33. const query = operands[i];
  34. if (isLogicCommand(query) || query_1.isQueryCommand(query)) {
  35. operands[i] = query._setFieldName(this.fieldName);
  36. }
  37. }
  38. }
  39. else {
  40. const query = operands;
  41. if (isLogicCommand(query) || query_1.isQueryCommand(query)) {
  42. operands = query._setFieldName(this.fieldName);
  43. }
  44. }
  45. }
  46. }
  47. _setFieldName(fieldName) {
  48. const operands = this.operands.map(operand => {
  49. if (operand instanceof LogicCommand) {
  50. return operand._setFieldName(fieldName);
  51. }
  52. else {
  53. return operand;
  54. }
  55. });
  56. const command = new LogicCommand(this.operator, operands, fieldName);
  57. return command;
  58. }
  59. and(...__expressions__) {
  60. const expressions = Array.isArray(arguments[0]) ? arguments[0] : Array.from(arguments);
  61. expressions.unshift(this);
  62. return new LogicCommand(LOGIC_COMMANDS_LITERAL.AND, expressions, this.fieldName);
  63. }
  64. or(...__expressions__) {
  65. const expressions = Array.isArray(arguments[0]) ? arguments[0] : Array.from(arguments);
  66. expressions.unshift(this);
  67. return new LogicCommand(LOGIC_COMMANDS_LITERAL.OR, expressions, this.fieldName);
  68. }
  69. }
  70. exports.LogicCommand = LogicCommand;
  71. function isLogicCommand(object) {
  72. return object && (object instanceof LogicCommand) && (object._internalType === symbol_1.SYMBOL_LOGIC_COMMAND);
  73. }
  74. exports.isLogicCommand = isLogicCommand;
  75. function isKnownLogicCommand(object) {
  76. return isLogicCommand && (object.operator.toUpperCase() in LOGIC_COMMANDS_LITERAL);
  77. }
  78. exports.isKnownLogicCommand = isKnownLogicCommand;
  79. exports.default = LogicCommand;