@dra2020/baseclient 1.0.8 → 1.0.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -597,6 +597,40 @@ function wordyDate(s) {
597
597
  // But this is close enough to match what gets displayed by "prettyDate" while also letting selection by month year
598
598
  return s;
599
599
  }
600
+ function clauseEqual(c1, c2) {
601
+ if (c1 == null && c2 == null)
602
+ return true;
603
+ if (c1 == null || c2 == null)
604
+ return false;
605
+ if (c1.op.tt === c2.op.tt) {
606
+ if (c1.op.tt === TokType.Text)
607
+ return c1.op.text === c2.op.text;
608
+ else
609
+ return clauseEqual(c1.operand1, c2.operand1) && clauseEqual(c1.operand2, c2.operand2);
610
+ }
611
+ else
612
+ return false;
613
+ }
614
+ function containsClause(c, s) {
615
+ if (clauseEqual(c, s))
616
+ return true;
617
+ if (c == null || s == null)
618
+ return false;
619
+ return containsClause(c.operand1, s) || containsClause(c.operand2, s);
620
+ }
621
+ function removeClause(c, s) {
622
+ if (c == null || (c.op.tt === TokType.Text && c.op.tt !== s.op.tt))
623
+ return c;
624
+ else if (clauseEqual(c, s))
625
+ return null;
626
+ else {
627
+ c.operand1 = removeClause(c.operand1, s);
628
+ c.operand2 = removeClause(c.operand2, s);
629
+ if ((c.op.tt === TokType.And || c.op.tt === TokType.Or) && (c.operand1 == null || c.operand2 == null))
630
+ return c.operand1 || c.operand2;
631
+ return c;
632
+ }
633
+ }
600
634
  class FilterExpr {
601
635
  constructor(coder, expr) {
602
636
  this.lexer = new Lexer(coder);
@@ -614,13 +648,38 @@ class FilterExpr {
614
648
  asString() {
615
649
  return this.asStringClause(this.parser.clause);
616
650
  }
651
+ containsClause(expr) {
652
+ let sub = new FilterExpr(this.lexer.coder, expr);
653
+ return containsClause(this.parser.clause, sub.parser.clause);
654
+ }
655
+ addClause(expr) {
656
+ let sub = new FilterExpr(this.lexer.coder, expr);
657
+ if (!containsClause(this.parser.clause, sub.parser.clause)) {
658
+ if (this.parser.clause)
659
+ this.parser.clauses = [{ op: { tt: TokType.And }, operand1: this.parser.clause, operand2: sub.parser.clause }];
660
+ else
661
+ this.parser.clauses = [sub.parser.clause];
662
+ }
663
+ }
664
+ removeClause(expr) {
665
+ if (this.containsClause(expr)) {
666
+ let sub = new FilterExpr(this.lexer.coder, expr);
667
+ this.parser.clauses = [removeClause(this.parser.clause, sub.parser.clause)];
668
+ }
669
+ }
617
670
  asStringClause(clause) {
618
671
  if (clause == null)
619
672
  return '';
620
- if (clause.op.tt == TokType.Text)
621
- return `'${clause.op.text}'`;
673
+ if (clause.op.tt == TokType.Text) {
674
+ this.lexer.set(clause.op.text);
675
+ if (this.lexer.tokens.length == 1 && this.lexer.tokens[0].tt === TokType.Text)
676
+ return clause.op.text;
677
+ else
678
+ return `'${clause.op.text}'`;
679
+ }
622
680
  let a = [];
623
- a.push('(');
681
+ if (clause !== this.parser.clause)
682
+ a.push('(');
624
683
  switch (clause.op.tt) {
625
684
  case TokType.And:
626
685
  a.push(this.asStringClause(clause.operand1));
@@ -637,8 +696,7 @@ class FilterExpr {
637
696
  a.push(this.asStringClause(clause.operand1));
638
697
  break;
639
698
  case TokType.Colon:
640
- a.push(this.asStringClause(clause.operand1));
641
- a.push(':');
699
+ a.push(`${this.asStringClause(clause.operand1)}:`);
642
700
  a.push(this.asStringClause(clause.operand2));
643
701
  break;
644
702
  case TokType.Equal:
@@ -653,7 +711,8 @@ class FilterExpr {
653
711
  default:
654
712
  throw 'Unexpected token in asString';
655
713
  }
656
- a.push(')');
714
+ if (clause !== this.parser.clause)
715
+ a.push(')');
657
716
  return a.join(' ');
658
717
  }
659
718
  testClause(o, types, clause, prop, relation) {
@@ -4328,7 +4387,7 @@ exports.OTServerEngine = OTServerEngine;
4328
4387
 
4329
4388
 
4330
4389
  Object.defineProperty(exports, "__esModule", ({ value: true }));
4331
- exports.SessionFilterFunction = exports.accessMapFindUser = exports.accessFindUser = exports.ServerStateMaintenance = exports.ServerStateRunning = exports.PermAll = exports.PermEdit = exports.PermAdmin = exports.PermOwner = exports.PermWrite = exports.PermRead = exports.PermNone = exports.FilterCount = exports.FilterOfficial = exports.FilterPublic = exports.FilterTrash = exports.FilterRecent = exports.FilterMyPublic = exports.FilterSharedWithMe = exports.FilterMyMaps = exports.EClockAnomaly = exports.EMaintenance = exports.ENoAccess = exports.ENoPerm = exports.ELoadFailed = exports.EBadRequest = exports.ENoUser = exports.EClockReset = exports.EClockFailure = exports.EClockSeen = exports.ENoSession = exports.ERetry = exports.EFull = exports.EFail = exports.ESuccess = void 0;
4390
+ exports.SessionFilterFunction = exports.accessMapFindUser = exports.accessFindUser = exports.ServerStateMaintenance = exports.ServerStateRunning = exports.PermAll = exports.PermEdit = exports.PermAdmin = exports.PermOwner = exports.PermWrite = exports.PermRead = exports.PermNone = exports.FilterCount = exports.FilterCOI = exports.FilterOfficial = exports.FilterPublic = exports.FilterTrash = exports.FilterRecent = exports.FilterMyPublic = exports.FilterSharedWithMe = exports.FilterMyMaps = exports.EClockAnomaly = exports.EMaintenance = exports.ENoAccess = exports.ENoPerm = exports.ELoadFailed = exports.EBadRequest = exports.ENoUser = exports.EClockReset = exports.EClockFailure = exports.EClockSeen = exports.ENoSession = exports.ERetry = exports.EFull = exports.EFail = exports.ESuccess = void 0;
4332
4391
  // Errors
4333
4392
  exports.ESuccess = 0; // Generic success
4334
4393
  exports.EFail = 1; // Generic failure
@@ -4353,7 +4412,8 @@ exports.FilterRecent = 3;
4353
4412
  exports.FilterTrash = 4;
4354
4413
  exports.FilterPublic = 5;
4355
4414
  exports.FilterOfficial = 6;
4356
- exports.FilterCount = 7;
4415
+ exports.FilterCOI = 7;
4416
+ exports.FilterCount = 8;
4357
4417
  // Permissions
4358
4418
  exports.PermNone = 0; // No permissions
4359
4419
  exports.PermRead = 1; // Can view