@wix/filter-builder 1.0.39 → 1.0.41

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.
@@ -17,6 +17,5 @@ exports.FilterBuilder = FilterBuilder;
17
17
  function filterBuilder(params = {}) {
18
18
  return new FilterBuilder(params);
19
19
  }
20
- var _default = filterBuilder;
21
- exports.default = _default;
20
+ var _default = exports.default = filterBuilder;
22
21
  //# sourceMappingURL=filter-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_filterMixin","_interopRequireDefault","require","FilterBuilder","filterMixin","constructorName","_build","getFilterModel","exports","filterBuilder","params","_default","default"],"sources":["../../src/filter-builder.ts"],"sourcesContent":["import filterMixin from './filter-mixin'\n\nexport class FilterBuilder extends filterMixin() {\n get constructorName() {\n return 'FilterBuilder'\n }\n\n _build() {\n return this.getFilterModel()\n }\n}\n\nexport function filterBuilder(params = {}) {\n return new FilterBuilder(params)\n}\n\nexport default filterBuilder\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEO,MAAMC,aAAa,SAAS,IAAAC,oBAAW,EAAC,CAAC,CAAC;EAC/C,IAAIC,eAAeA,CAAA,EAAG;IACpB,OAAO,eAAe;EACxB;EAEAC,MAAMA,CAAA,EAAG;IACP,OAAO,IAAI,CAACC,cAAc,CAAC,CAAC;EAC9B;AACF;AAACC,OAAA,CAAAL,aAAA,GAAAA,aAAA;AAEM,SAASM,aAAaA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;EACzC,OAAO,IAAIP,aAAa,CAACO,MAAM,CAAC;AAClC;AAAC,IAAAC,QAAA,GAEcF,aAAa;AAAAD,OAAA,CAAAI,OAAA,GAAAD,QAAA"}
1
+ {"version":3,"names":["_filterMixin","_interopRequireDefault","require","FilterBuilder","filterMixin","constructorName","_build","getFilterModel","exports","filterBuilder","params","_default","default"],"sources":["../../src/filter-builder.ts"],"sourcesContent":["import filterMixin from './filter-mixin'\n\nexport class FilterBuilder extends filterMixin() {\n get constructorName() {\n return 'FilterBuilder'\n }\n\n _build() {\n return this.getFilterModel()\n }\n}\n\nexport function filterBuilder(params = {}) {\n return new FilterBuilder(params)\n}\n\nexport default filterBuilder\n"],"mappings":";;;;;;AAAA,IAAAA,YAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEO,MAAMC,aAAa,SAAS,IAAAC,oBAAW,EAAC,CAAC,CAAC;EAC/C,IAAIC,eAAeA,CAAA,EAAG;IACpB,OAAO,eAAe;EACxB;EAEAC,MAAMA,CAAA,EAAG;IACP,OAAO,IAAI,CAACC,cAAc,CAAC,CAAC;EAC9B;AACF;AAACC,OAAA,CAAAL,aAAA,GAAAA,aAAA;AAEM,SAASM,aAAaA,CAACC,MAAM,GAAG,CAAC,CAAC,EAAE;EACzC,OAAO,IAAIP,aAAa,CAACO,MAAM,CAAC;AAClC;AAAC,IAAAC,QAAA,GAAAH,OAAA,CAAAI,OAAA,GAEcH,aAAa"}
@@ -39,18 +39,14 @@ const filterMixin = (Base = class {}) => class extends Base {
39
39
  return this._AndLogicalEquivalence('$lt', '.lt', args);
40
40
  }
41
41
  isNotEmpty(field) {
42
- const _this$_filterValidato = this._filterValidator('.isNotEmpty').arityIsOne(arguments).validFieldName(field).validateAndAggregate(),
43
- newInvalidArguments = _this$_filterValidato[0],
44
- valid = _this$_filterValidato[1];
42
+ const [newInvalidArguments, valid] = this._filterValidator('.isNotEmpty').arityIsOne(arguments).validFieldName(field).validateAndAggregate();
45
43
  if (valid) {
46
44
  return this.ne(field, null);
47
45
  }
48
46
  return this._copy(this.filterTree, newInvalidArguments);
49
47
  }
50
48
  isEmpty(field) {
51
- const _this$_filterValidato2 = this._filterValidator('.isEmpty').arityIsOne(arguments).validFieldName(field).validateAndAggregate(),
52
- newInvalidArguments = _this$_filterValidato2[0],
53
- valid = _this$_filterValidato2[1];
49
+ const [newInvalidArguments, valid] = this._filterValidator('.isEmpty').arityIsOne(arguments).validFieldName(field).validateAndAggregate();
54
50
  if (valid) {
55
51
  return this.eq(field, null);
56
52
  }
@@ -72,9 +68,7 @@ const filterMixin = (Base = class {}) => class extends Base {
72
68
  return this._AndSetOperand('$hasAll', '.hasAll', args);
73
69
  }
74
70
  or(orQuery) {
75
- const _this$_filterValidato3 = this._filterValidator('.or').arityIsOne(arguments).isInstanceOfSameClass(orQuery).validateAndAggregate(),
76
- newInvalidArguments = _this$_filterValidato3[0],
77
- valid = _this$_filterValidato3[1];
71
+ const [newInvalidArguments, valid] = this._filterValidator('.or').arityIsOne(arguments).isInstanceOfSameClass(orQuery).validateAndAggregate();
78
72
  if (valid) {
79
73
  const prefix = isEmptyAnd(this.filterTree) ? [] : [this.filterTree];
80
74
  return this._copy(inAnd({
@@ -85,9 +79,7 @@ const filterMixin = (Base = class {}) => class extends Base {
85
79
  }
86
80
  }
87
81
  and(andQuery) {
88
- const _this$_filterValidato4 = this._filterValidator('.and').arityIsOne(arguments).isInstanceOfSameClass(andQuery).validateAndAggregate(),
89
- newInvalidArguments = _this$_filterValidato4[0],
90
- valid = _this$_filterValidato4[1];
82
+ const [newInvalidArguments, valid] = this._filterValidator('.and').arityIsOne(arguments).isInstanceOfSameClass(andQuery).validateAndAggregate();
91
83
  if (valid) {
92
84
  const prefix = isEmptyAnd(this.filterTree) ? [] : [this.filterTree];
93
85
  return this._copy(inAnd(...prefix, andQuery.filterTree), newInvalidArguments.concat(andQuery.invalidArguments));
@@ -96,9 +88,7 @@ const filterMixin = (Base = class {}) => class extends Base {
96
88
  }
97
89
  }
98
90
  not(notQuery) {
99
- const _this$_filterValidato5 = this._filterValidator('.not').arityIsOne(arguments).isInstanceOfSameClass(notQuery).validateAndAggregate(),
100
- newInvalidArguments = _this$_filterValidato5[0],
101
- valid = _this$_filterValidato5[1];
91
+ const [newInvalidArguments, valid] = this._filterValidator('.not').arityIsOne(arguments).isInstanceOfSameClass(notQuery).validateAndAggregate();
102
92
  if (valid) {
103
93
  const newFilterTree = (0, _clone.default)(this.filterTree);
104
94
  const notClause = {
@@ -111,9 +101,7 @@ const filterMixin = (Base = class {}) => class extends Base {
111
101
  }
112
102
  }
113
103
  between(field, rangeStart, rangeEnd) {
114
- const _this$_filterValidato6 = this._filterValidator('.between').arityIsThree(arguments).sameType(rangeStart, rangeEnd).typeIsStringNumberOrDate(rangeStart).typeIsStringNumberOrDate(rangeEnd).validateAndAggregate(),
115
- newInvalidArguments = _this$_filterValidato6[0],
116
- valid = _this$_filterValidato6[1];
104
+ const [newInvalidArguments, valid] = this._filterValidator('.between').arityIsThree(arguments).sameType(rangeStart, rangeEnd).typeIsStringNumberOrDate(rangeStart).typeIsStringNumberOrDate(rangeEnd).validateAndAggregate();
117
105
  if (valid) {
118
106
  return this.ge(field, rangeStart).lt(field, rangeEnd);
119
107
  }
@@ -129,39 +117,27 @@ const filterMixin = (Base = class {}) => class extends Base {
129
117
  return this._copy(filterModel, []);
130
118
  }
131
119
  _binaryAnd(filterOperatorSymbol, operatorName, args) {
132
- const _Array$prototype$slic = Array.prototype.slice.call(args),
133
- field = _Array$prototype$slic[0],
134
- operand = _Array$prototype$slic[1];
135
- const _this$_filterValidato7 = this._filterValidator(operatorName).arityIsTwo(args).validFieldName(field).validateAndAggregate(),
136
- newInvalidArguments = _this$_filterValidato7[0];
120
+ const [field, operand] = Array.prototype.slice.call(args);
121
+ const [newInvalidArguments] = this._filterValidator(operatorName).arityIsTwo(args).validFieldName(field).validateAndAggregate();
137
122
  const newFilterTree = this._makeNewFilter(field, filterOperatorSymbol, operand);
138
123
  return this._copy(newFilterTree, newInvalidArguments);
139
124
  }
140
125
  _AndLogicalEquivalence(filterOperatorSymbol, operatorName, args) {
141
- const _Array$prototype$slic2 = Array.prototype.slice.call(args),
142
- field = _Array$prototype$slic2[0],
143
- operand = _Array$prototype$slic2[1];
144
- const _this$_filterValidato8 = this._filterValidator(operatorName).arityIsTwo(args).validFieldName(field).typeIsStringNumberOrDate(operand).validateAndAggregate(),
145
- newInvalidArguments = _this$_filterValidato8[0];
126
+ const [field, operand] = Array.prototype.slice.call(args);
127
+ const [newInvalidArguments] = this._filterValidator(operatorName).arityIsTwo(args).validFieldName(field).typeIsStringNumberOrDate(operand).validateAndAggregate();
146
128
  const newFilterTree = this._makeNewFilter(field, filterOperatorSymbol, operand);
147
129
  return this._copy(newFilterTree, newInvalidArguments);
148
130
  }
149
131
  _AndStringOperand(filterOperatorName, operatorName, args) {
150
- const _Array$prototype$slic3 = Array.prototype.slice.call(args),
151
- field = _Array$prototype$slic3[0],
152
- operand = _Array$prototype$slic3[1];
153
- const _this$_filterValidato9 = this._filterValidator(operatorName).arityIsTwo(args).validFieldName(field).typeIsString(operand).validateAndAggregate(),
154
- newInvalidArguments = _this$_filterValidato9[0];
132
+ const [field, operand] = Array.prototype.slice.call(args);
133
+ const [newInvalidArguments] = this._filterValidator(operatorName).arityIsTwo(args).validFieldName(field).typeIsString(operand).validateAndAggregate();
155
134
  const newFilterTree = this._makeNewFilter(field, filterOperatorName, operand);
156
135
  return this._copy(newFilterTree, newInvalidArguments);
157
136
  }
158
137
  _AndSetOperand(filterOperatorName, operatorName, args) {
159
- const _Array$prototype$slic4 = Array.prototype.slice.call(args),
160
- field = _Array$prototype$slic4[0],
161
- rawOperands = _Array$prototype$slic4.slice(1);
138
+ const [field, ...rawOperands] = Array.prototype.slice.call(args);
162
139
  const operands = (0, _typeUtils.isArray)(rawOperands[0]) ? rawOperands[0] : rawOperands;
163
- const _this$_filterValidato10 = this._filterValidator(operatorName).arityIsAtLeastTwo(args).validFieldName(field).typeIsStringNumberOrDateForAll(operands).validateAndAggregate(),
164
- newInvalidArguments = _this$_filterValidato10[0];
140
+ const [newInvalidArguments] = this._filterValidator(operatorName).arityIsAtLeastTwo(args).validFieldName(field).typeIsStringNumberOrDateForAll(operands).validateAndAggregate();
165
141
  const newFilterTree = this._makeNewFilter(field, filterOperatorName, operands);
166
142
  return this._copy(newFilterTree, newInvalidArguments);
167
143
  }
@@ -231,6 +207,5 @@ function inAndOptimized(...args) {
231
207
  function isEmptyAnd(node) {
232
208
  return node && node.$and && node.$and.length === 0;
233
209
  }
234
- var _default = filterMixin;
235
- exports.default = _default;
210
+ var _default = exports.default = filterMixin;
236
211
  //# sourceMappingURL=filter-mixin.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_typeUtils","require","_clone","_interopRequireDefault","_filterValidator","_queryOptimiser","filterMixin","Base","constructor","obj","_defineProperty2","default","filterTree","$and","invalidArguments","encoder","eq","args","_binaryAnd","ne","ge","_AndLogicalEquivalence","gt","le","lt","isNotEmpty","field","_this$_filterValidato","arityIsOne","arguments","validFieldName","validateAndAggregate","newInvalidArguments","valid","_copy","isEmpty","_this$_filterValidato2","startsWith","_AndStringOperand","endsWith","contains","hasSome","_AndSetOperand","hasAll","or","orQuery","_this$_filterValidato3","isInstanceOfSameClass","prefix","isEmptyAnd","inAnd","$or","concat","and","andQuery","_this$_filterValidato4","not","notQuery","_this$_filterValidato5","newFilterTree","clone","notClause","$not","resultingFilter","inAndOptimized","between","rangeStart","rangeEnd","_this$_filterValidato6","arityIsThree","sameType","typeIsStringNumberOrDate","getFilterModel","length","Error","join","optimisedQuery","setFilterModel","filterModel","filterOperatorSymbol","operatorName","_Array$prototype$slic","Array","prototype","slice","call","operand","_this$_filterValidato7","arityIsTwo","_makeNewFilter","_Array$prototype$slic2","_this$_filterValidato8","filterOperatorName","_Array$prototype$slic3","_this$_filterValidato9","typeIsString","_Array$prototype$slic4","rawOperands","operands","isArray","_this$_filterValidato10","arityIsAtLeastTwo","typeIsStringNumberOrDateForAll","serializableOperand","undefined","newFilter","_buildFilter","push","result","isEmptyObject","_encode","isFunction","FilterValidator","isConjunctiveFormFilter","Object","keys","reduce","aggr","val","node","_default","exports"],"sources":["../../src/filter-mixin.ts"],"sourcesContent":["import { isArray, isFunction } from './type-utils'\nimport clone from './clone'\nimport { FilterValidator } from './filter-validator'\nimport { Validator } from './validator'\nimport { optimisedQuery } from './query-optimiser'\n\nconst filterMixin = (Base: any = class {}) =>\n class extends Base {\n filterTree\n invalidArguments\n encoder\n\n constructor(obj: { filterTree?; invalidArguments?; encoder? } = {}) {\n super(obj)\n this.filterTree = obj.filterTree || { $and: [] }\n this.invalidArguments = obj.invalidArguments || []\n this.encoder = obj.encoder || {}\n }\n\n eq(...args) {\n return this._binaryAnd('$eq', '.eq', args)\n }\n\n ne(...args) {\n return this._binaryAnd('$ne', '.ne', args)\n }\n\n ge(...args) {\n return this._AndLogicalEquivalence('$gte', '.ge', args)\n }\n\n gt(...args) {\n return this._AndLogicalEquivalence('$gt', '.gt', args)\n }\n\n le(...args) {\n return this._AndLogicalEquivalence('$lte', '.le', args)\n }\n\n lt(...args) {\n return this._AndLogicalEquivalence('$lt', '.lt', args)\n }\n\n isNotEmpty(field) {\n const [newInvalidArguments, valid] = this._filterValidator('.isNotEmpty')\n .arityIsOne(arguments)\n .validFieldName(field)\n .validateAndAggregate()\n\n if (valid) {\n return this.ne(field, null)\n }\n\n return this._copy(this.filterTree, newInvalidArguments)\n }\n\n isEmpty(field) {\n const [newInvalidArguments, valid] = this._filterValidator('.isEmpty')\n .arityIsOne(arguments)\n .validFieldName(field)\n .validateAndAggregate()\n\n if (valid) {\n return this.eq(field, null)\n }\n\n return this._copy(this.filterTree, newInvalidArguments)\n }\n\n startsWith(...args) {\n return this._AndStringOperand('$startsWith', '.startsWith', args)\n }\n\n endsWith(...args) {\n return this._AndStringOperand('$endsWith', '.endsWith', args)\n }\n\n contains(...args) {\n return this._AndStringOperand('$contains', '.contains', args)\n }\n\n hasSome(...args) {\n return this._AndSetOperand('$hasSome', '.hasSome', args)\n }\n\n hasAll(...args) {\n return this._AndSetOperand('$hasAll', '.hasAll', args)\n }\n\n or(orQuery) {\n const [newInvalidArguments, valid] = this._filterValidator('.or')\n .arityIsOne(arguments)\n .isInstanceOfSameClass(orQuery)\n .validateAndAggregate()\n\n if (valid) {\n const prefix = isEmptyAnd(this.filterTree) ? [] : [this.filterTree]\n return this._copy(\n inAnd({ $or: [...prefix, orQuery.filterTree] }),\n newInvalidArguments.concat(orQuery.invalidArguments)\n )\n } else {\n return this._copy(this.filterTree, newInvalidArguments)\n }\n }\n\n and(andQuery) {\n const [newInvalidArguments, valid] = this._filterValidator('.and')\n .arityIsOne(arguments)\n .isInstanceOfSameClass(andQuery)\n .validateAndAggregate()\n\n if (valid) {\n const prefix = isEmptyAnd(this.filterTree) ? [] : [this.filterTree]\n return this._copy(\n inAnd(...prefix, andQuery.filterTree),\n newInvalidArguments.concat(andQuery.invalidArguments)\n )\n } else {\n return this._copy(this.filterTree, newInvalidArguments)\n }\n }\n\n not(notQuery) {\n const [newInvalidArguments, valid] = this._filterValidator('.not')\n .arityIsOne(arguments)\n .isInstanceOfSameClass(notQuery)\n .validateAndAggregate()\n\n if (valid) {\n const newFilterTree = clone(this.filterTree)\n const notClause = { $not: [notQuery.filterTree] }\n const resultingFilter = inAndOptimized(newFilterTree, notClause)\n\n return this._copy(\n resultingFilter,\n newInvalidArguments.concat(notQuery.invalidArguments)\n )\n } else {\n return this._copy(this.filterTree, newInvalidArguments)\n }\n }\n\n between(field, rangeStart, rangeEnd) {\n const [newInvalidArguments, valid] = this._filterValidator('.between')\n .arityIsThree(arguments)\n .sameType(rangeStart, rangeEnd)\n .typeIsStringNumberOrDate(rangeStart)\n .typeIsStringNumberOrDate(rangeEnd)\n .validateAndAggregate()\n\n if (valid) {\n return this.ge(field, rangeStart).lt(field, rangeEnd)\n }\n\n return this._copy(this.filterTree, newInvalidArguments)\n }\n\n getFilterModel() {\n if (this.invalidArguments.length > 0) {\n throw new Error(this.invalidArguments.join(' '))\n }\n return optimisedQuery(this.filterTree)\n }\n\n setFilterModel(filterModel) {\n return this._copy(filterModel, [])\n }\n\n _binaryAnd(filterOperatorSymbol, operatorName, args) {\n const [field, operand] = Array.prototype.slice.call(args)\n\n const [newInvalidArguments] = this._filterValidator(operatorName)\n .arityIsTwo(args)\n .validFieldName(field)\n .validateAndAggregate()\n\n const newFilterTree = this._makeNewFilter(\n field,\n filterOperatorSymbol,\n operand\n )\n\n return this._copy(newFilterTree, newInvalidArguments)\n }\n\n _AndLogicalEquivalence(filterOperatorSymbol, operatorName, args) {\n const [field, operand] = Array.prototype.slice.call(args)\n\n const [newInvalidArguments] = this._filterValidator(operatorName)\n .arityIsTwo(args)\n .validFieldName(field)\n .typeIsStringNumberOrDate(operand)\n .validateAndAggregate()\n\n const newFilterTree = this._makeNewFilter(\n field,\n filterOperatorSymbol,\n operand\n )\n return this._copy(newFilterTree, newInvalidArguments)\n }\n\n _AndStringOperand(filterOperatorName, operatorName, args) {\n const [field, operand] = Array.prototype.slice.call(args)\n\n const [newInvalidArguments] = this._filterValidator(operatorName)\n .arityIsTwo(args)\n .validFieldName(field)\n .typeIsString(operand)\n .validateAndAggregate()\n\n const newFilterTree = this._makeNewFilter(\n field,\n filterOperatorName,\n operand\n )\n\n return this._copy(newFilterTree, newInvalidArguments)\n }\n\n _AndSetOperand(filterOperatorName, operatorName, args) {\n const [field, ...rawOperands] = Array.prototype.slice.call(args)\n const operands = isArray(rawOperands[0]) ? rawOperands[0] : rawOperands\n\n const [newInvalidArguments] = this._filterValidator(operatorName)\n .arityIsAtLeastTwo(args)\n .validFieldName(field)\n .typeIsStringNumberOrDateForAll(operands)\n .validateAndAggregate()\n\n const newFilterTree = this._makeNewFilter(\n field,\n filterOperatorName,\n operands\n )\n return this._copy(newFilterTree, newInvalidArguments)\n }\n\n _makeNewFilter(field, filterOperatorName, operand) {\n const newFilterTree = clone(this.filterTree)\n\n // filters with 'undefined' value are lost during serialization,\n // e.g. { val: { $ne: undefined } | translates to { val: {} }\n // Replacing 'undefined' with 'null' retains the filter.\n const serializableOperand = operand === undefined ? null : operand\n const newFilter = this._buildFilter(\n field,\n filterOperatorName,\n serializableOperand\n )\n\n if (isArray(newFilterTree.$and)) {\n newFilterTree.$and.push(newFilter)\n return newFilterTree\n } else {\n const result = isEmptyObject(newFilterTree)\n ? inAnd(newFilter)\n : inAnd(newFilterTree, newFilter)\n return result\n }\n }\n\n _buildFilter(field, filterOperatorName, operand) {\n if (filterOperatorName !== '$eq') {\n const newFilter = {}\n newFilter[field] = {}\n newFilter[field][filterOperatorName] = this._encode(operand)\n return newFilter\n } else {\n const newFilter = {}\n newFilter[field] = this._encode(operand)\n return newFilter\n }\n }\n\n _encode(operand) {\n if (isFunction(this.encoder)) {\n return this.encoder(operand)\n } else {\n return operand\n }\n }\n\n _copy(filterTree, invalidArguments) {\n // @ts-ignore-next-line\n return new this.constructor({ ...this, filterTree, invalidArguments })\n }\n\n _filterValidator(filterOperatorName): Validator {\n return new FilterValidator(\n filterOperatorName,\n this.invalidArguments,\n this.constructor\n )\n }\n }\n\nfunction isConjunctiveFormFilter(filterTree) {\n return isArray(filterTree.$and)\n}\n\nfunction isEmptyObject(obj) {\n return Object.keys(obj).length === 0\n}\n\nfunction inAnd(...args) {\n return {\n $and: args,\n }\n}\n\nfunction inAndOptimized(...args) {\n return {\n $and: args.reduce(\n (aggr, val) =>\n isConjunctiveFormFilter(val)\n ? aggr.concat(val.$and)\n : aggr.concat([val]),\n []\n ),\n }\n}\n\nfunction isEmptyAnd(node) {\n return node && node.$and && node.$and.length === 0\n}\n\nexport default filterMixin\n"],"mappings":"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"}
1
+ {"version":3,"names":["_typeUtils","require","_clone","_interopRequireDefault","_filterValidator","_queryOptimiser","filterMixin","Base","constructor","obj","_defineProperty2","default","filterTree","$and","invalidArguments","encoder","eq","args","_binaryAnd","ne","ge","_AndLogicalEquivalence","gt","le","lt","isNotEmpty","field","newInvalidArguments","valid","arityIsOne","arguments","validFieldName","validateAndAggregate","_copy","isEmpty","startsWith","_AndStringOperand","endsWith","contains","hasSome","_AndSetOperand","hasAll","or","orQuery","isInstanceOfSameClass","prefix","isEmptyAnd","inAnd","$or","concat","and","andQuery","not","notQuery","newFilterTree","clone","notClause","$not","resultingFilter","inAndOptimized","between","rangeStart","rangeEnd","arityIsThree","sameType","typeIsStringNumberOrDate","getFilterModel","length","Error","join","optimisedQuery","setFilterModel","filterModel","filterOperatorSymbol","operatorName","operand","Array","prototype","slice","call","arityIsTwo","_makeNewFilter","filterOperatorName","typeIsString","rawOperands","operands","isArray","arityIsAtLeastTwo","typeIsStringNumberOrDateForAll","serializableOperand","undefined","newFilter","_buildFilter","push","result","isEmptyObject","_encode","isFunction","FilterValidator","isConjunctiveFormFilter","Object","keys","reduce","aggr","val","node","_default","exports"],"sources":["../../src/filter-mixin.ts"],"sourcesContent":["import { isArray, isFunction } from './type-utils'\nimport clone from './clone'\nimport { FilterValidator } from './filter-validator'\nimport { Validator } from './validator'\nimport { optimisedQuery } from './query-optimiser'\n\nconst filterMixin = (Base: any = class {}) =>\n class extends Base {\n filterTree\n invalidArguments\n encoder\n\n constructor(obj: { filterTree?; invalidArguments?; encoder? } = {}) {\n super(obj)\n this.filterTree = obj.filterTree || { $and: [] }\n this.invalidArguments = obj.invalidArguments || []\n this.encoder = obj.encoder || {}\n }\n\n eq(...args) {\n return this._binaryAnd('$eq', '.eq', args)\n }\n\n ne(...args) {\n return this._binaryAnd('$ne', '.ne', args)\n }\n\n ge(...args) {\n return this._AndLogicalEquivalence('$gte', '.ge', args)\n }\n\n gt(...args) {\n return this._AndLogicalEquivalence('$gt', '.gt', args)\n }\n\n le(...args) {\n return this._AndLogicalEquivalence('$lte', '.le', args)\n }\n\n lt(...args) {\n return this._AndLogicalEquivalence('$lt', '.lt', args)\n }\n\n isNotEmpty(field) {\n const [newInvalidArguments, valid] = this._filterValidator('.isNotEmpty')\n .arityIsOne(arguments)\n .validFieldName(field)\n .validateAndAggregate()\n\n if (valid) {\n return this.ne(field, null)\n }\n\n return this._copy(this.filterTree, newInvalidArguments)\n }\n\n isEmpty(field) {\n const [newInvalidArguments, valid] = this._filterValidator('.isEmpty')\n .arityIsOne(arguments)\n .validFieldName(field)\n .validateAndAggregate()\n\n if (valid) {\n return this.eq(field, null)\n }\n\n return this._copy(this.filterTree, newInvalidArguments)\n }\n\n startsWith(...args) {\n return this._AndStringOperand('$startsWith', '.startsWith', args)\n }\n\n endsWith(...args) {\n return this._AndStringOperand('$endsWith', '.endsWith', args)\n }\n\n contains(...args) {\n return this._AndStringOperand('$contains', '.contains', args)\n }\n\n hasSome(...args) {\n return this._AndSetOperand('$hasSome', '.hasSome', args)\n }\n\n hasAll(...args) {\n return this._AndSetOperand('$hasAll', '.hasAll', args)\n }\n\n or(orQuery) {\n const [newInvalidArguments, valid] = this._filterValidator('.or')\n .arityIsOne(arguments)\n .isInstanceOfSameClass(orQuery)\n .validateAndAggregate()\n\n if (valid) {\n const prefix = isEmptyAnd(this.filterTree) ? [] : [this.filterTree]\n return this._copy(\n inAnd({ $or: [...prefix, orQuery.filterTree] }),\n newInvalidArguments.concat(orQuery.invalidArguments)\n )\n } else {\n return this._copy(this.filterTree, newInvalidArguments)\n }\n }\n\n and(andQuery) {\n const [newInvalidArguments, valid] = this._filterValidator('.and')\n .arityIsOne(arguments)\n .isInstanceOfSameClass(andQuery)\n .validateAndAggregate()\n\n if (valid) {\n const prefix = isEmptyAnd(this.filterTree) ? [] : [this.filterTree]\n return this._copy(\n inAnd(...prefix, andQuery.filterTree),\n newInvalidArguments.concat(andQuery.invalidArguments)\n )\n } else {\n return this._copy(this.filterTree, newInvalidArguments)\n }\n }\n\n not(notQuery) {\n const [newInvalidArguments, valid] = this._filterValidator('.not')\n .arityIsOne(arguments)\n .isInstanceOfSameClass(notQuery)\n .validateAndAggregate()\n\n if (valid) {\n const newFilterTree = clone(this.filterTree)\n const notClause = { $not: [notQuery.filterTree] }\n const resultingFilter = inAndOptimized(newFilterTree, notClause)\n\n return this._copy(\n resultingFilter,\n newInvalidArguments.concat(notQuery.invalidArguments)\n )\n } else {\n return this._copy(this.filterTree, newInvalidArguments)\n }\n }\n\n between(field, rangeStart, rangeEnd) {\n const [newInvalidArguments, valid] = this._filterValidator('.between')\n .arityIsThree(arguments)\n .sameType(rangeStart, rangeEnd)\n .typeIsStringNumberOrDate(rangeStart)\n .typeIsStringNumberOrDate(rangeEnd)\n .validateAndAggregate()\n\n if (valid) {\n return this.ge(field, rangeStart).lt(field, rangeEnd)\n }\n\n return this._copy(this.filterTree, newInvalidArguments)\n }\n\n getFilterModel() {\n if (this.invalidArguments.length > 0) {\n throw new Error(this.invalidArguments.join(' '))\n }\n return optimisedQuery(this.filterTree)\n }\n\n setFilterModel(filterModel) {\n return this._copy(filterModel, [])\n }\n\n _binaryAnd(filterOperatorSymbol, operatorName, args) {\n const [field, operand] = Array.prototype.slice.call(args)\n\n const [newInvalidArguments] = this._filterValidator(operatorName)\n .arityIsTwo(args)\n .validFieldName(field)\n .validateAndAggregate()\n\n const newFilterTree = this._makeNewFilter(\n field,\n filterOperatorSymbol,\n operand\n )\n\n return this._copy(newFilterTree, newInvalidArguments)\n }\n\n _AndLogicalEquivalence(filterOperatorSymbol, operatorName, args) {\n const [field, operand] = Array.prototype.slice.call(args)\n\n const [newInvalidArguments] = this._filterValidator(operatorName)\n .arityIsTwo(args)\n .validFieldName(field)\n .typeIsStringNumberOrDate(operand)\n .validateAndAggregate()\n\n const newFilterTree = this._makeNewFilter(\n field,\n filterOperatorSymbol,\n operand\n )\n return this._copy(newFilterTree, newInvalidArguments)\n }\n\n _AndStringOperand(filterOperatorName, operatorName, args) {\n const [field, operand] = Array.prototype.slice.call(args)\n\n const [newInvalidArguments] = this._filterValidator(operatorName)\n .arityIsTwo(args)\n .validFieldName(field)\n .typeIsString(operand)\n .validateAndAggregate()\n\n const newFilterTree = this._makeNewFilter(\n field,\n filterOperatorName,\n operand\n )\n\n return this._copy(newFilterTree, newInvalidArguments)\n }\n\n _AndSetOperand(filterOperatorName, operatorName, args) {\n const [field, ...rawOperands] = Array.prototype.slice.call(args)\n const operands = isArray(rawOperands[0]) ? rawOperands[0] : rawOperands\n\n const [newInvalidArguments] = this._filterValidator(operatorName)\n .arityIsAtLeastTwo(args)\n .validFieldName(field)\n .typeIsStringNumberOrDateForAll(operands)\n .validateAndAggregate()\n\n const newFilterTree = this._makeNewFilter(\n field,\n filterOperatorName,\n operands\n )\n return this._copy(newFilterTree, newInvalidArguments)\n }\n\n _makeNewFilter(field, filterOperatorName, operand) {\n const newFilterTree = clone(this.filterTree)\n\n // filters with 'undefined' value are lost during serialization,\n // e.g. { val: { $ne: undefined } | translates to { val: {} }\n // Replacing 'undefined' with 'null' retains the filter.\n const serializableOperand = operand === undefined ? null : operand\n const newFilter = this._buildFilter(\n field,\n filterOperatorName,\n serializableOperand\n )\n\n if (isArray(newFilterTree.$and)) {\n newFilterTree.$and.push(newFilter)\n return newFilterTree\n } else {\n const result = isEmptyObject(newFilterTree)\n ? inAnd(newFilter)\n : inAnd(newFilterTree, newFilter)\n return result\n }\n }\n\n _buildFilter(field, filterOperatorName, operand) {\n if (filterOperatorName !== '$eq') {\n const newFilter = {}\n newFilter[field] = {}\n newFilter[field][filterOperatorName] = this._encode(operand)\n return newFilter\n } else {\n const newFilter = {}\n newFilter[field] = this._encode(operand)\n return newFilter\n }\n }\n\n _encode(operand) {\n if (isFunction(this.encoder)) {\n return this.encoder(operand)\n } else {\n return operand\n }\n }\n\n _copy(filterTree, invalidArguments) {\n // @ts-ignore-next-line\n return new this.constructor({ ...this, filterTree, invalidArguments })\n }\n\n _filterValidator(filterOperatorName): Validator {\n return new FilterValidator(\n filterOperatorName,\n this.invalidArguments,\n this.constructor\n )\n }\n }\n\nfunction isConjunctiveFormFilter(filterTree) {\n return isArray(filterTree.$and)\n}\n\nfunction isEmptyObject(obj) {\n return Object.keys(obj).length === 0\n}\n\nfunction inAnd(...args) {\n return {\n $and: args,\n }\n}\n\nfunction inAndOptimized(...args) {\n return {\n $and: args.reduce(\n (aggr, val) =>\n isConjunctiveFormFilter(val)\n ? aggr.concat(val.$and)\n : aggr.concat([val]),\n []\n ),\n }\n}\n\nfunction isEmptyAnd(node) {\n return node && node.$and && node.$and.length === 0\n}\n\nexport default filterMixin\n"],"mappings":"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"}
package/dist/cjs/index.js CHANGED
@@ -13,6 +13,5 @@ var _validator = require("./validator");
13
13
  exports.Validator = _validator.Validator;
14
14
  var _wixDataEncoder = require("./wix-data-encoder");
15
15
  exports.wixDataEncoder = _wixDataEncoder.wixDataEncoder;
16
- var _default = _filterBuilder.filterBuilder;
17
- exports.default = _default;
16
+ var _default = exports.default = _filterBuilder.filterBuilder;
18
17
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_filterBuilder","require","exports","filterBuilder","_filterMixin","_interopRequireDefault","filterMixin","default","_queryOptimiser","optimiseQuery","optimisedQuery","_validator","Validator","_wixDataEncoder","wixDataEncoder","_default"],"sources":["../../src/index.ts"],"sourcesContent":["import { filterBuilder } from './filter-builder'\nimport filterMixin from './filter-mixin'\nimport { optimisedQuery as optimiseQuery } from './query-optimiser'\nimport { Validator } from './validator'\nimport { wixDataEncoder } from './wix-data-encoder'\n\nexport { filterMixin, filterBuilder, optimiseQuery, Validator, wixDataEncoder }\n\nexport default filterBuilder\n"],"mappings":";;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAAgDC,OAAA,CAAAC,aAAA,GAAAH,cAAA,CAAAG,aAAA;AAChD,IAAAC,YAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAAwCC,OAAA,CAAAI,WAAA,GAAAF,YAAA,CAAAG,OAAA;AACxC,IAAAC,eAAA,GAAAP,OAAA;AAAmEC,OAAA,CAAAO,aAAA,GAAAD,eAAA,CAAAE,cAAA;AACnE,IAAAC,UAAA,GAAAV,OAAA;AAAuCC,OAAA,CAAAU,SAAA,GAAAD,UAAA,CAAAC,SAAA;AACvC,IAAAC,eAAA,GAAAZ,OAAA;AAAmDC,OAAA,CAAAY,cAAA,GAAAD,eAAA,CAAAC,cAAA;AAAA,IAAAC,QAAA,GAIpCZ,4BAAa;AAAAD,OAAA,CAAAK,OAAA,GAAAQ,QAAA"}
1
+ {"version":3,"names":["_filterBuilder","require","exports","filterBuilder","_filterMixin","_interopRequireDefault","filterMixin","default","_queryOptimiser","optimiseQuery","optimisedQuery","_validator","Validator","_wixDataEncoder","wixDataEncoder","_default"],"sources":["../../src/index.ts"],"sourcesContent":["import { filterBuilder } from './filter-builder'\nimport filterMixin from './filter-mixin'\nimport { optimisedQuery as optimiseQuery } from './query-optimiser'\nimport { Validator } from './validator'\nimport { wixDataEncoder } from './wix-data-encoder'\n\nexport { filterMixin, filterBuilder, optimiseQuery, Validator, wixDataEncoder }\n\nexport default filterBuilder\n"],"mappings":";;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAAgDC,OAAA,CAAAC,aAAA,GAAAH,cAAA,CAAAG,aAAA;AAChD,IAAAC,YAAA,GAAAC,sBAAA,CAAAJ,OAAA;AAAwCC,OAAA,CAAAI,WAAA,GAAAF,YAAA,CAAAG,OAAA;AACxC,IAAAC,eAAA,GAAAP,OAAA;AAAmEC,OAAA,CAAAO,aAAA,GAAAD,eAAA,CAAAE,cAAA;AACnE,IAAAC,UAAA,GAAAV,OAAA;AAAuCC,OAAA,CAAAU,SAAA,GAAAD,UAAA,CAAAC,SAAA;AACvC,IAAAC,eAAA,GAAAZ,OAAA;AAAmDC,OAAA,CAAAY,cAAA,GAAAD,eAAA,CAAAC,cAAA;AAAA,IAAAC,QAAA,GAAAb,OAAA,CAAAK,OAAA,GAIpCJ,4BAAa"}
@@ -4,8 +4,7 @@ exports.__esModule = true;
4
4
  exports.optimisedQuery = optimisedQuery;
5
5
  const optimisations = [optimisedUnaryAnd, optimisedEmptyAnd, optimisedAndsAsObjects, optimisedNestedAnds, optimisedNestedOrs];
6
6
  function optimisedQuery(query) {
7
- const _fullyOptimised = fullyOptimised(query),
8
- newQuery = _fullyOptimised[0];
7
+ const [newQuery] = fullyOptimised(query);
9
8
  return newQuery;
10
9
  }
11
10
  function fullyOptimised(query) {
@@ -24,12 +23,8 @@ function fullyOptimisedArray(query) {
24
23
  return [newElements, somethingChanged];
25
24
  }
26
25
  function fullyOptimisedObject(query) {
27
- const _fullEntriesOptimisat = fullEntriesOptimisation(query),
28
- queryAfterOptimisingEntries = _fullEntriesOptimisat[0],
29
- changedStage1 = _fullEntriesOptimisat[1];
30
- const _fullObjectOptimisati = fullObjectOptimisation(queryAfterOptimisingEntries),
31
- queryAfterFullOptimisation = _fullObjectOptimisati[0],
32
- changedStage2 = _fullObjectOptimisati[1];
26
+ const [queryAfterOptimisingEntries, changedStage1] = fullEntriesOptimisation(query);
27
+ const [queryAfterFullOptimisation, changedStage2] = fullObjectOptimisation(queryAfterOptimisingEntries);
33
28
  const changed = changedStage1 || changedStage2;
34
29
  return [queryAfterFullOptimisation, changed];
35
30
  function fullObjectOptimisation(query) {
@@ -37,8 +32,7 @@ function fullyOptimisedObject(query) {
37
32
  if (!updatedQuery) {
38
33
  return [query, false];
39
34
  }
40
- const _fullyOptimised2 = fullyOptimised(updatedQuery),
41
- finalQuery = _fullyOptimised2[0];
35
+ const [finalQuery] = fullyOptimised(updatedQuery);
42
36
  return [finalQuery, true];
43
37
  }
44
38
  function fullEntriesOptimisation(query) {
@@ -51,9 +45,7 @@ function fullyOptimisedObject(query) {
51
45
  return [newQuery, changed];
52
46
  }
53
47
  function entryOptimisation([key, value]) {
54
- const _fullyOptimised3 = fullyOptimised(value),
55
- newValue = _fullyOptimised3[0],
56
- changed = _fullyOptimised3[1];
48
+ const [newValue, changed] = fullyOptimised(value);
57
49
  return [key, newValue, changed];
58
50
  }
59
51
  function entriesAsObject(entries) {
@@ -1 +1 @@
1
- {"version":3,"names":["optimisations","optimisedUnaryAnd","optimisedEmptyAnd","optimisedAndsAsObjects","optimisedNestedAnds","optimisedNestedOrs","optimisedQuery","query","_fullyOptimised","fullyOptimised","newQuery","Array","isArray","fullyOptimisedArray","instanceOfIgnoredType","fullyOptimisedObject","optimisedElements","map","somethingChanged","filter","elementChanged","length","newElements","element","_fullEntriesOptimisat","fullEntriesOptimisation","queryAfterOptimisingEntries","changedStage1","_fullObjectOptimisati","fullObjectOptimisation","queryAfterFullOptimisation","changedStage2","changed","updatedQuery","applyFirstOptimisation","_fullyOptimised2","finalQuery","changedEntries","Object","entries","entryOptimisation","entriesAsObject","key","value","_fullyOptimised3","newValue","reduce","acc","node","optimisation","newNode","args","$and","basicObjects","operatorObjects","forEach","arg","isOperator","haveOverlappingFields","combinedBasicObjects","assign","keys","every","name","startsWith","objects","nonUniqueKeys","it","a","b","uniqueKeys","unique","values","dict","v","hasNestedAnds","find","newArgs","result","current","and","$or","hasNestedOrs","or","obj","Date"],"sources":["../../src/query-optimiser.ts"],"sourcesContent":["const optimisations = [\n optimisedUnaryAnd,\n optimisedEmptyAnd,\n optimisedAndsAsObjects,\n optimisedNestedAnds,\n optimisedNestedOrs,\n]\n\nexport function optimisedQuery(query) {\n const [newQuery] = fullyOptimised(query)\n return newQuery\n}\n\nfunction fullyOptimised(query) {\n if (Array.isArray(query)) {\n return fullyOptimisedArray(query)\n }\n if (\n typeof query === 'object' &&\n query !== null &&\n !instanceOfIgnoredType(query)\n ) {\n return fullyOptimisedObject(query)\n }\n return [query, false]\n}\n\nfunction fullyOptimisedArray(query) {\n const optimisedElements = query.map(fullyOptimised)\n const somethingChanged =\n 0 < optimisedElements.filter(([, elementChanged]) => elementChanged).length\n const newElements = optimisedElements.map(([element]) => element)\n return [newElements, somethingChanged]\n}\n\nfunction fullyOptimisedObject(query) {\n const [queryAfterOptimisingEntries, changedStage1] =\n fullEntriesOptimisation(query)\n const [queryAfterFullOptimisation, changedStage2] = fullObjectOptimisation(\n queryAfterOptimisingEntries\n )\n const changed = changedStage1 || changedStage2\n return [queryAfterFullOptimisation, changed]\n\n function fullObjectOptimisation(query) {\n const updatedQuery = applyFirstOptimisation(query)\n if (!updatedQuery) {\n return [query, false]\n }\n const [finalQuery] = fullyOptimised(updatedQuery)\n return [finalQuery, true]\n }\n\n function fullEntriesOptimisation(query) {\n const changedEntries = Object.entries(query)\n .map(entryOptimisation)\n .filter(([, , changed]) => changed)\n const newQuery = { ...query, ...entriesAsObject(changedEntries) }\n const changed = !!changedEntries.length\n return [newQuery, changed]\n }\n\n function entryOptimisation([key, value]) {\n const [newValue, changed] = fullyOptimised(value)\n return [key, newValue, changed]\n }\n\n function entriesAsObject(entries) {\n return entries.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})\n }\n}\n\nfunction applyFirstOptimisation(node) {\n for (const optimisation of optimisations) {\n const newNode = optimisation(node)\n if (newNode) {\n return newNode\n }\n }\n}\n\nfunction optimisedUnaryAnd(node) {\n const args = node.$and\n if (Array.isArray(args) && args.length === 1) {\n return args[0]\n }\n}\n\nfunction optimisedEmptyAnd(node) {\n const args = node.$and\n if (Array.isArray(args) && args.length === 0) {\n return {}\n }\n return null\n}\n\nfunction optimisedAndsAsObjects(node) {\n const args = node.$and\n if (!args) {\n return\n }\n\n let basicObjects: any[] = []\n let operatorObjects: any[] = []\n\n args.forEach((arg) => {\n if (isOperator(arg)) {\n operatorObjects = [...operatorObjects, arg]\n } else {\n basicObjects = [...basicObjects, arg]\n }\n })\n\n if (basicObjects.length <= 1 || haveOverlappingFields(basicObjects)) {\n return\n }\n const combinedBasicObjects = Object.assign({}, ...basicObjects)\n\n return { $and: [combinedBasicObjects, ...operatorObjects] }\n\n function isOperator(node) {\n const keys = Object.keys(node)\n return keys.every((name) => name.startsWith('$')) && keys.length > 0\n }\n\n function haveOverlappingFields(objects) {\n const nonUniqueKeys = objects\n .map((it) => Object.keys(it))\n .reduce((a, b) => [...a, ...b], [])\n const uniqueKeys = unique(nonUniqueKeys)\n return uniqueKeys.length !== nonUniqueKeys.length\n }\n\n function unique(values) {\n const dict = {}\n values.forEach((v) => (dict[v] = true))\n return Object.keys(dict)\n }\n}\n\nfunction optimisedNestedAnds(node) {\n const args = node.$and\n if (!args) {\n return\n }\n\n const hasNestedAnds = !!args.find((it) => it.$and)\n if (!hasNestedAnds) {\n return\n }\n\n const newArgs = args.reduce((result, current) => {\n const and = current.$and\n if (!and) {\n return [...result, current]\n }\n return [...result, ...and]\n }, [])\n return { $and: newArgs }\n}\n\nfunction optimisedNestedOrs(node) {\n const args = node.$or\n if (!args) {\n return\n }\n\n const hasNestedOrs = !!args.find((it) => it.$or)\n if (!hasNestedOrs) {\n return\n }\n\n const newArgs = args.reduce((result, current) => {\n const or = current.$or\n if (!or) {\n return [...result, current]\n }\n return [...result, ...or]\n }, [])\n return { $or: newArgs }\n}\n\nfunction instanceOfIgnoredType(obj) {\n return obj instanceof Date\n}\n"],"mappings":"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"}
1
+ {"version":3,"names":["optimisations","optimisedUnaryAnd","optimisedEmptyAnd","optimisedAndsAsObjects","optimisedNestedAnds","optimisedNestedOrs","optimisedQuery","query","newQuery","fullyOptimised","Array","isArray","fullyOptimisedArray","instanceOfIgnoredType","fullyOptimisedObject","optimisedElements","map","somethingChanged","filter","elementChanged","length","newElements","element","queryAfterOptimisingEntries","changedStage1","fullEntriesOptimisation","queryAfterFullOptimisation","changedStage2","fullObjectOptimisation","changed","updatedQuery","applyFirstOptimisation","finalQuery","changedEntries","Object","entries","entryOptimisation","entriesAsObject","key","value","newValue","reduce","acc","node","optimisation","newNode","args","$and","basicObjects","operatorObjects","forEach","arg","isOperator","haveOverlappingFields","combinedBasicObjects","assign","keys","every","name","startsWith","objects","nonUniqueKeys","it","a","b","uniqueKeys","unique","values","dict","v","hasNestedAnds","find","newArgs","result","current","and","$or","hasNestedOrs","or","obj","Date"],"sources":["../../src/query-optimiser.ts"],"sourcesContent":["const optimisations = [\n optimisedUnaryAnd,\n optimisedEmptyAnd,\n optimisedAndsAsObjects,\n optimisedNestedAnds,\n optimisedNestedOrs,\n]\n\nexport function optimisedQuery(query) {\n const [newQuery] = fullyOptimised(query)\n return newQuery\n}\n\nfunction fullyOptimised(query) {\n if (Array.isArray(query)) {\n return fullyOptimisedArray(query)\n }\n if (\n typeof query === 'object' &&\n query !== null &&\n !instanceOfIgnoredType(query)\n ) {\n return fullyOptimisedObject(query)\n }\n return [query, false]\n}\n\nfunction fullyOptimisedArray(query) {\n const optimisedElements = query.map(fullyOptimised)\n const somethingChanged =\n 0 < optimisedElements.filter(([, elementChanged]) => elementChanged).length\n const newElements = optimisedElements.map(([element]) => element)\n return [newElements, somethingChanged]\n}\n\nfunction fullyOptimisedObject(query) {\n const [queryAfterOptimisingEntries, changedStage1] =\n fullEntriesOptimisation(query)\n const [queryAfterFullOptimisation, changedStage2] = fullObjectOptimisation(\n queryAfterOptimisingEntries\n )\n const changed = changedStage1 || changedStage2\n return [queryAfterFullOptimisation, changed]\n\n function fullObjectOptimisation(query) {\n const updatedQuery = applyFirstOptimisation(query)\n if (!updatedQuery) {\n return [query, false]\n }\n const [finalQuery] = fullyOptimised(updatedQuery)\n return [finalQuery, true]\n }\n\n function fullEntriesOptimisation(query) {\n const changedEntries = Object.entries(query)\n .map(entryOptimisation)\n .filter(([, , changed]) => changed)\n const newQuery = { ...query, ...entriesAsObject(changedEntries) }\n const changed = !!changedEntries.length\n return [newQuery, changed]\n }\n\n function entryOptimisation([key, value]) {\n const [newValue, changed] = fullyOptimised(value)\n return [key, newValue, changed]\n }\n\n function entriesAsObject(entries) {\n return entries.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {})\n }\n}\n\nfunction applyFirstOptimisation(node) {\n for (const optimisation of optimisations) {\n const newNode = optimisation(node)\n if (newNode) {\n return newNode\n }\n }\n}\n\nfunction optimisedUnaryAnd(node) {\n const args = node.$and\n if (Array.isArray(args) && args.length === 1) {\n return args[0]\n }\n}\n\nfunction optimisedEmptyAnd(node) {\n const args = node.$and\n if (Array.isArray(args) && args.length === 0) {\n return {}\n }\n return null\n}\n\nfunction optimisedAndsAsObjects(node) {\n const args = node.$and\n if (!args) {\n return\n }\n\n let basicObjects: any[] = []\n let operatorObjects: any[] = []\n\n args.forEach((arg) => {\n if (isOperator(arg)) {\n operatorObjects = [...operatorObjects, arg]\n } else {\n basicObjects = [...basicObjects, arg]\n }\n })\n\n if (basicObjects.length <= 1 || haveOverlappingFields(basicObjects)) {\n return\n }\n const combinedBasicObjects = Object.assign({}, ...basicObjects)\n\n return { $and: [combinedBasicObjects, ...operatorObjects] }\n\n function isOperator(node) {\n const keys = Object.keys(node)\n return keys.every((name) => name.startsWith('$')) && keys.length > 0\n }\n\n function haveOverlappingFields(objects) {\n const nonUniqueKeys = objects\n .map((it) => Object.keys(it))\n .reduce((a, b) => [...a, ...b], [])\n const uniqueKeys = unique(nonUniqueKeys)\n return uniqueKeys.length !== nonUniqueKeys.length\n }\n\n function unique(values) {\n const dict = {}\n values.forEach((v) => (dict[v] = true))\n return Object.keys(dict)\n }\n}\n\nfunction optimisedNestedAnds(node) {\n const args = node.$and\n if (!args) {\n return\n }\n\n const hasNestedAnds = !!args.find((it) => it.$and)\n if (!hasNestedAnds) {\n return\n }\n\n const newArgs = args.reduce((result, current) => {\n const and = current.$and\n if (!and) {\n return [...result, current]\n }\n return [...result, ...and]\n }, [])\n return { $and: newArgs }\n}\n\nfunction optimisedNestedOrs(node) {\n const args = node.$or\n if (!args) {\n return\n }\n\n const hasNestedOrs = !!args.find((it) => it.$or)\n if (!hasNestedOrs) {\n return\n }\n\n const newArgs = args.reduce((result, current) => {\n const or = current.$or\n if (!or) {\n return [...result, current]\n }\n return [...result, ...or]\n }, [])\n return { $or: newArgs }\n}\n\nfunction instanceOfIgnoredType(obj) {\n return obj instanceof Date\n}\n"],"mappings":"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"}