@fibery/expression-utils 6.0.0 → 6.0.1

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.
@@ -193,21 +193,6 @@ var paramsPlaceholders = {
193
193
  dateToDateTimeIntervalLookup: dateToDateTimeIntervalLookup
194
194
  };
195
195
 
196
- function _extends() {
197
- _extends = Object.assign ? Object.assign.bind() : function (target) {
198
- for (var i = 1; i < arguments.length; i++) {
199
- var source = arguments[i];
200
- for (var key in source) {
201
- if (Object.prototype.hasOwnProperty.call(source, key)) {
202
- target[key] = source[key];
203
- }
204
- }
205
- }
206
- return target;
207
- };
208
- return _extends.apply(this, arguments);
209
- }
210
-
211
196
  const stringify = x => {
212
197
  if (x === undefined) {
213
198
  return "undefined";
@@ -254,30 +239,17 @@ const isAccessFunctionExpression = expresion => expresion.length === 2 && expres
254
239
  const isBinaryExpression = expression => expression.length === 3 && binaryOperations.has(expression[0]);
255
240
  const isNaryExpression = expression => expression.length > 1 && naryOperations.has(expression[0]);
256
241
  const isVariableExpression = expression => ___default["default"].isString(expression) && expression.startsWith("$");
257
- const isFieldExpression = expression => Array.isArray(expression) && expression.every(x => !isVariableExpression(x) && !binaryOperations.has(x) && ___default["default"].isString(x));
242
+ const isMultiFieldAccess = expression => ___default["default"].isArray(expression) && expression.length === 2 && !isFunctionCallExpression(expression) && expression.every(x => ___default["default"].isString(x));
243
+ const isMultiFieldExpression = expression => Array.isArray(expression) && !isFunctionCallExpression(expression) && expression.some(x => isMultiFieldAccess(x)) && expression.every(x => !isVariableExpression(x) && !binaryOperations.has(x) && (___default["default"].isString(x) || isMultiFieldAccess(x)));
244
+ const isFieldExpression = expression => Array.isArray(expression) && !isFunctionCallExpression(expression) && expression.every(x => !isVariableExpression(x) && ___default["default"].isString(x));
258
245
  const isQueryExpression = expression => {
259
246
  if (___default["default"].isObject(expression) && "q/from" in expression) {
260
247
  const fromExpression = expression["q/from"];
261
248
  //asc: fromExpression === null for denormalizeSelect for reference collection case
262
- return fromExpression === null || isFieldExpression(fromExpression);
249
+ return fromExpression === null || isFieldExpression(fromExpression) || isFromRootFieldExpression(fromExpression) || isMultiFieldExpression(fromExpression);
263
250
  }
264
251
  return false;
265
252
  };
266
- // [q/count, [..., collection]]
267
- // [q/start, [..., range]]
268
- // [q/end, [..., range]]
269
- // [q/access?, [..., field-expr]]
270
- const isFunctionExpression = expression => {
271
- if (!Array.isArray(expression)) {
272
- return false;
273
- }
274
- if (isFieldExpression(expression)) {
275
- return false;
276
- } else if (isDateRangeFunctionExpression(expression) || isCollectionFunctionExpression(expression) || isAccessFunctionExpression(expression)) {
277
- return true;
278
- }
279
- throw new Error("invalid expression:" + JSON.stringify(expression));
280
- };
281
253
  const collectFieldExpressions = (memo, expression) => {
282
254
  if (isVariableExpression(expression)) ; else if (isFunctionCallExpression(expression)) {
283
255
  for (const part of expression.slice(1)) {
@@ -315,6 +287,7 @@ const createExpressionVisitor = visitor => {
315
287
  visitFunctionCallExpression: ([fnName, ...args]) => [fnName, ...args.map(x => visitorWithDefault.visitExpression(x))],
316
288
  visitFromRootFieldExpression: ([fromRootKeyword, ...rest]) => [fromRootKeyword, ...rest.map(x => visitorWithDefault.visitExpression(x))],
317
289
  visitFieldExpression: expression => expression,
290
+ visitMultiFieldExpression: expression => expression,
318
291
  visitOrderByExpression: orderByExpression => orderByExpression.map(x => {
319
292
  const [fieldExpression, orderDir] = x;
320
293
  const fieldExpressionNew = visitorWithDefault.visitExpression(fieldExpression);
@@ -327,15 +300,21 @@ const createExpressionVisitor = visitor => {
327
300
  "q/where": whereExpression,
328
301
  "q/order-by": orderByExpression
329
302
  } = subQueryExpression;
330
- return _extends({}, subQueryExpression, fromExpression ? {
331
- "q/from": visitorWithDefault.visitFieldExpression(fromExpression)
332
- } : null, selectExpression ? {
333
- "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => visitorWithDefault.visitExpression(val)) : visitorWithDefault.visitExpression(selectExpression)
334
- } : null, whereExpression ? {
335
- "q/where": visitorWithDefault.visitExpression(whereExpression)
336
- } : null, orderByExpression ? {
337
- "q/order-by": visitorWithDefault.visitOrderByExpression(orderByExpression)
338
- } : null);
303
+ return {
304
+ ...subQueryExpression,
305
+ ...(fromExpression ? {
306
+ "q/from": visitorWithDefault.visitFieldExpression(fromExpression)
307
+ } : null),
308
+ ...(selectExpression ? {
309
+ "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => visitorWithDefault.visitExpression(val)) : visitorWithDefault.visitExpression(selectExpression)
310
+ } : null),
311
+ ...(whereExpression ? {
312
+ "q/where": visitorWithDefault.visitExpression(whereExpression)
313
+ } : null),
314
+ ...(orderByExpression ? {
315
+ "q/order-by": visitorWithDefault.visitOrderByExpression(orderByExpression)
316
+ } : null)
317
+ };
339
318
  },
340
319
  visitExpression: expression => {
341
320
  if (expression === null) {
@@ -348,6 +327,8 @@ const createExpressionVisitor = visitor => {
348
327
  return visitorWithDefault.visitFunctionCallExpression(expression, visitorDefault);
349
328
  } else if (isFieldExpression(expression)) {
350
329
  return visitorWithDefault.visitFieldExpression(expression, visitorDefault);
330
+ } else if (isMultiFieldExpression(expression)) {
331
+ return visitorWithDefault.visitMultiFieldExpression(expression, visitorDefault);
351
332
  } else if (isQueryExpression(expression)) {
352
333
  return visitorWithDefault.visitQueryExpression(expression, visitorDefault);
353
334
  } else {
@@ -355,7 +336,10 @@ const createExpressionVisitor = visitor => {
355
336
  }
356
337
  }
357
338
  };
358
- visitorWithDefault = _extends({}, visitorDefault, visitor);
339
+ visitorWithDefault = {
340
+ ...visitorDefault,
341
+ ...visitor
342
+ };
359
343
  return visitorWithDefault;
360
344
  };
361
345
 
@@ -376,9 +360,9 @@ var utils = {
376
360
  isBinaryExpression: isBinaryExpression,
377
361
  isNaryExpression: isNaryExpression,
378
362
  isVariableExpression: isVariableExpression,
363
+ isMultiFieldExpression: isMultiFieldExpression,
379
364
  isFieldExpression: isFieldExpression,
380
365
  isQueryExpression: isQueryExpression,
381
- isFunctionExpression: isFunctionExpression,
382
366
  extractFieldExpressions: extractFieldExpressions,
383
367
  createExpressionVisitor: createExpressionVisitor
384
368
  };
@@ -439,14 +423,19 @@ const replaceIdsWithNamesVisitor = (typeObject, onFieldNotFound = defaultIdsWith
439
423
  }).currentTypeObject;
440
424
  if (subQueryTypeObject) {
441
425
  const subQueryVisitor = replaceIdsWithNamesVisitor(subQueryTypeObject, onFieldNotFound);
442
- return _extends({}, subQueryExpression, {
443
- "q/from": visitor.visitFieldExpression(fromExpression),
444
- "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => subQueryVisitor.visitExpression(val)) : subQueryVisitor.visitExpression(selectExpression)
445
- }, whereExpression ? {
446
- "q/where": subQueryVisitor.visitExpression(whereExpression)
447
- } : null, orderByExpression ? {
448
- "q/order-by": subQueryVisitor.visitOrderByExpression(orderByExpression)
449
- } : null);
426
+ return {
427
+ ...subQueryExpression,
428
+ ...{
429
+ "q/from": visitor.visitFieldExpression(fromExpression),
430
+ "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => subQueryVisitor.visitExpression(val)) : subQueryVisitor.visitExpression(selectExpression)
431
+ },
432
+ ...(whereExpression ? {
433
+ "q/where": subQueryVisitor.visitExpression(whereExpression)
434
+ } : null),
435
+ ...(orderByExpression ? {
436
+ "q/order-by": subQueryVisitor.visitOrderByExpression(orderByExpression)
437
+ } : null)
438
+ };
450
439
  }
451
440
  return subQueryExpression;
452
441
  }
@@ -509,14 +498,19 @@ const replaceNamesWithIdsVisitor = (typeObject, onFieldNotFound = defaultNamesWi
509
498
  }).currentTypeObject;
510
499
  if (subQueryTypeObject) {
511
500
  const subQueryVisitor = replaceNamesWithIdsVisitor(subQueryTypeObject, onFieldNotFound);
512
- return _extends({}, subQueryExpression, {
513
- "q/from": visitor.visitFieldExpression(fromExpression),
514
- "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => subQueryVisitor.visitExpression(val)) : subQueryVisitor.visitExpression(selectExpression)
515
- }, whereExpression ? {
516
- "q/where": subQueryVisitor.visitExpression(whereExpression)
517
- } : null, orderByExpression ? {
518
- "q/order-by": subQueryVisitor.visitOrderByExpression(orderByExpression)
519
- } : null);
501
+ return {
502
+ ...subQueryExpression,
503
+ ...{
504
+ "q/from": visitor.visitFieldExpression(fromExpression),
505
+ "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => subQueryVisitor.visitExpression(val)) : subQueryVisitor.visitExpression(selectExpression)
506
+ },
507
+ ...(whereExpression ? {
508
+ "q/where": subQueryVisitor.visitExpression(whereExpression)
509
+ } : null),
510
+ ...(orderByExpression ? {
511
+ "q/order-by": subQueryVisitor.visitOrderByExpression(orderByExpression)
512
+ } : null)
513
+ };
520
514
  }
521
515
  return subQueryExpression;
522
516
  }
@@ -557,14 +551,19 @@ const deleteExpressionsWithNotFoundFieldsVisitor = typeObject => {
557
551
  const subQueryTypeObject = fromExpression.reduce((typeObject, field) => typeObject && typeObject.fieldObjectsByName.hasOwnProperty(field) ? typeObject.fieldObjectsByName[field].typeObject : null, typeObject);
558
552
  if (subQueryTypeObject) {
559
553
  const subQueryVisitor = deleteExpressionsWithNotFoundFieldsVisitor(subQueryTypeObject);
560
- const subQueryExpressionNew = ___default["default"].pickBy(_extends({}, subQueryExpression, {
561
- "q/from": visitor.visitFieldExpression(fromExpression),
562
- "q/select": subQueryVisitor.visitExpression(selectExpression)
563
- }, whereExpression ? {
564
- "q/where": subQueryVisitor.visitExpression(whereExpression)
565
- } : null, orderByExpression ? {
566
- "q/order-by": subQueryVisitor.visitOrderByExpression(orderByExpression)
567
- } : null));
554
+ const subQueryExpressionNew = ___default["default"].pickBy({
555
+ ...subQueryExpression,
556
+ ...{
557
+ "q/from": visitor.visitFieldExpression(fromExpression),
558
+ "q/select": subQueryVisitor.visitExpression(selectExpression)
559
+ },
560
+ ...(whereExpression ? {
561
+ "q/where": subQueryVisitor.visitExpression(whereExpression)
562
+ } : null),
563
+ ...(orderByExpression ? {
564
+ "q/order-by": subQueryVisitor.visitOrderByExpression(orderByExpression)
565
+ } : null)
566
+ });
568
567
  const {
569
568
  "q/select": selectExpressionNew
570
569
  } = subQueryExpressionNew;
package/lib/utils.js CHANGED
@@ -5,21 +5,6 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
5
5
 
6
6
  var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
7
7
 
8
- function _extends() {
9
- _extends = Object.assign ? Object.assign.bind() : function (target) {
10
- for (var i = 1; i < arguments.length; i++) {
11
- var source = arguments[i];
12
- for (var key in source) {
13
- if (Object.prototype.hasOwnProperty.call(source, key)) {
14
- target[key] = source[key];
15
- }
16
- }
17
- }
18
- return target;
19
- };
20
- return _extends.apply(this, arguments);
21
- }
22
-
23
8
  const stringify = x => {
24
9
  if (x === undefined) {
25
10
  return "undefined";
@@ -66,30 +51,17 @@ const isAccessFunctionExpression = expresion => expresion.length === 2 && expres
66
51
  const isBinaryExpression = expression => expression.length === 3 && binaryOperations.has(expression[0]);
67
52
  const isNaryExpression = expression => expression.length > 1 && naryOperations.has(expression[0]);
68
53
  const isVariableExpression = expression => ___default["default"].isString(expression) && expression.startsWith("$");
69
- const isFieldExpression = expression => Array.isArray(expression) && expression.every(x => !isVariableExpression(x) && !binaryOperations.has(x) && ___default["default"].isString(x));
54
+ const isMultiFieldAccess = expression => ___default["default"].isArray(expression) && expression.length === 2 && !isFunctionCallExpression(expression) && expression.every(x => ___default["default"].isString(x));
55
+ const isMultiFieldExpression = expression => Array.isArray(expression) && !isFunctionCallExpression(expression) && expression.some(x => isMultiFieldAccess(x)) && expression.every(x => !isVariableExpression(x) && !binaryOperations.has(x) && (___default["default"].isString(x) || isMultiFieldAccess(x)));
56
+ const isFieldExpression = expression => Array.isArray(expression) && !isFunctionCallExpression(expression) && expression.every(x => !isVariableExpression(x) && ___default["default"].isString(x));
70
57
  const isQueryExpression = expression => {
71
58
  if (___default["default"].isObject(expression) && "q/from" in expression) {
72
59
  const fromExpression = expression["q/from"];
73
60
  //asc: fromExpression === null for denormalizeSelect for reference collection case
74
- return fromExpression === null || isFieldExpression(fromExpression);
61
+ return fromExpression === null || isFieldExpression(fromExpression) || isFromRootFieldExpression(fromExpression) || isMultiFieldExpression(fromExpression);
75
62
  }
76
63
  return false;
77
64
  };
78
- // [q/count, [..., collection]]
79
- // [q/start, [..., range]]
80
- // [q/end, [..., range]]
81
- // [q/access?, [..., field-expr]]
82
- const isFunctionExpression = expression => {
83
- if (!Array.isArray(expression)) {
84
- return false;
85
- }
86
- if (isFieldExpression(expression)) {
87
- return false;
88
- } else if (isDateRangeFunctionExpression(expression) || isCollectionFunctionExpression(expression) || isAccessFunctionExpression(expression)) {
89
- return true;
90
- }
91
- throw new Error("invalid expression:" + JSON.stringify(expression));
92
- };
93
65
  const collectFieldExpressions = (memo, expression) => {
94
66
  if (isVariableExpression(expression)) ; else if (isFunctionCallExpression(expression)) {
95
67
  for (const part of expression.slice(1)) {
@@ -127,6 +99,7 @@ const createExpressionVisitor = visitor => {
127
99
  visitFunctionCallExpression: ([fnName, ...args]) => [fnName, ...args.map(x => visitorWithDefault.visitExpression(x))],
128
100
  visitFromRootFieldExpression: ([fromRootKeyword, ...rest]) => [fromRootKeyword, ...rest.map(x => visitorWithDefault.visitExpression(x))],
129
101
  visitFieldExpression: expression => expression,
102
+ visitMultiFieldExpression: expression => expression,
130
103
  visitOrderByExpression: orderByExpression => orderByExpression.map(x => {
131
104
  const [fieldExpression, orderDir] = x;
132
105
  const fieldExpressionNew = visitorWithDefault.visitExpression(fieldExpression);
@@ -139,15 +112,21 @@ const createExpressionVisitor = visitor => {
139
112
  "q/where": whereExpression,
140
113
  "q/order-by": orderByExpression
141
114
  } = subQueryExpression;
142
- return _extends({}, subQueryExpression, fromExpression ? {
143
- "q/from": visitorWithDefault.visitFieldExpression(fromExpression)
144
- } : null, selectExpression ? {
145
- "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => visitorWithDefault.visitExpression(val)) : visitorWithDefault.visitExpression(selectExpression)
146
- } : null, whereExpression ? {
147
- "q/where": visitorWithDefault.visitExpression(whereExpression)
148
- } : null, orderByExpression ? {
149
- "q/order-by": visitorWithDefault.visitOrderByExpression(orderByExpression)
150
- } : null);
115
+ return {
116
+ ...subQueryExpression,
117
+ ...(fromExpression ? {
118
+ "q/from": visitorWithDefault.visitFieldExpression(fromExpression)
119
+ } : null),
120
+ ...(selectExpression ? {
121
+ "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => visitorWithDefault.visitExpression(val)) : visitorWithDefault.visitExpression(selectExpression)
122
+ } : null),
123
+ ...(whereExpression ? {
124
+ "q/where": visitorWithDefault.visitExpression(whereExpression)
125
+ } : null),
126
+ ...(orderByExpression ? {
127
+ "q/order-by": visitorWithDefault.visitOrderByExpression(orderByExpression)
128
+ } : null)
129
+ };
151
130
  },
152
131
  visitExpression: expression => {
153
132
  if (expression === null) {
@@ -160,6 +139,8 @@ const createExpressionVisitor = visitor => {
160
139
  return visitorWithDefault.visitFunctionCallExpression(expression, visitorDefault);
161
140
  } else if (isFieldExpression(expression)) {
162
141
  return visitorWithDefault.visitFieldExpression(expression, visitorDefault);
142
+ } else if (isMultiFieldExpression(expression)) {
143
+ return visitorWithDefault.visitMultiFieldExpression(expression, visitorDefault);
163
144
  } else if (isQueryExpression(expression)) {
164
145
  return visitorWithDefault.visitQueryExpression(expression, visitorDefault);
165
146
  } else {
@@ -167,7 +148,10 @@ const createExpressionVisitor = visitor => {
167
148
  }
168
149
  }
169
150
  };
170
- visitorWithDefault = _extends({}, visitorDefault, visitor);
151
+ visitorWithDefault = {
152
+ ...visitorDefault,
153
+ ...visitor
154
+ };
171
155
  return visitorWithDefault;
172
156
  };
173
157
 
@@ -184,7 +168,7 @@ exports.isDateRangeFunctionExpression = isDateRangeFunctionExpression;
184
168
  exports.isFieldExpression = isFieldExpression;
185
169
  exports.isFromRootFieldExpression = isFromRootFieldExpression;
186
170
  exports.isFunctionCallExpression = isFunctionCallExpression;
187
- exports.isFunctionExpression = isFunctionExpression;
171
+ exports.isMultiFieldExpression = isMultiFieldExpression;
188
172
  exports.isNaryExpression = isNaryExpression;
189
173
  exports.isQueryExpression = isQueryExpression;
190
174
  exports.isVariableExpression = isVariableExpression;
package/lib/visitors.js CHANGED
@@ -5,21 +5,6 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
5
5
 
6
6
  var ___default = /*#__PURE__*/_interopDefaultLegacy(_);
7
7
 
8
- function _extends() {
9
- _extends = Object.assign ? Object.assign.bind() : function (target) {
10
- for (var i = 1; i < arguments.length; i++) {
11
- var source = arguments[i];
12
- for (var key in source) {
13
- if (Object.prototype.hasOwnProperty.call(source, key)) {
14
- target[key] = source[key];
15
- }
16
- }
17
- }
18
- return target;
19
- };
20
- return _extends.apply(this, arguments);
21
- }
22
-
23
8
  const stringify = x => {
24
9
  if (x === undefined) {
25
10
  return "undefined";
@@ -50,12 +35,14 @@ const isCollectionFunctionExpression = expression =>
50
35
  //expression has length 3 in case of q/join
51
36
  (expression.length === 2 || expression.length === 3) && collectionOps.has(expression[0]);
52
37
  const isVariableExpression = expression => ___default["default"].isString(expression) && expression.startsWith("$");
53
- const isFieldExpression = expression => Array.isArray(expression) && expression.every(x => !isVariableExpression(x) && !binaryOperations.has(x) && ___default["default"].isString(x));
38
+ const isMultiFieldAccess = expression => ___default["default"].isArray(expression) && expression.length === 2 && !isFunctionCallExpression(expression) && expression.every(x => ___default["default"].isString(x));
39
+ const isMultiFieldExpression = expression => Array.isArray(expression) && !isFunctionCallExpression(expression) && expression.some(x => isMultiFieldAccess(x)) && expression.every(x => !isVariableExpression(x) && !binaryOperations.has(x) && (___default["default"].isString(x) || isMultiFieldAccess(x)));
40
+ const isFieldExpression = expression => Array.isArray(expression) && !isFunctionCallExpression(expression) && expression.every(x => !isVariableExpression(x) && ___default["default"].isString(x));
54
41
  const isQueryExpression = expression => {
55
42
  if (___default["default"].isObject(expression) && "q/from" in expression) {
56
43
  const fromExpression = expression["q/from"];
57
44
  //asc: fromExpression === null for denormalizeSelect for reference collection case
58
- return fromExpression === null || isFieldExpression(fromExpression);
45
+ return fromExpression === null || isFieldExpression(fromExpression) || isFromRootFieldExpression(fromExpression) || isMultiFieldExpression(fromExpression);
59
46
  }
60
47
  return false;
61
48
  };
@@ -66,6 +53,7 @@ const createExpressionVisitor = visitor => {
66
53
  visitFunctionCallExpression: ([fnName, ...args]) => [fnName, ...args.map(x => visitorWithDefault.visitExpression(x))],
67
54
  visitFromRootFieldExpression: ([fromRootKeyword, ...rest]) => [fromRootKeyword, ...rest.map(x => visitorWithDefault.visitExpression(x))],
68
55
  visitFieldExpression: expression => expression,
56
+ visitMultiFieldExpression: expression => expression,
69
57
  visitOrderByExpression: orderByExpression => orderByExpression.map(x => {
70
58
  const [fieldExpression, orderDir] = x;
71
59
  const fieldExpressionNew = visitorWithDefault.visitExpression(fieldExpression);
@@ -78,15 +66,21 @@ const createExpressionVisitor = visitor => {
78
66
  "q/where": whereExpression,
79
67
  "q/order-by": orderByExpression
80
68
  } = subQueryExpression;
81
- return _extends({}, subQueryExpression, fromExpression ? {
82
- "q/from": visitorWithDefault.visitFieldExpression(fromExpression)
83
- } : null, selectExpression ? {
84
- "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => visitorWithDefault.visitExpression(val)) : visitorWithDefault.visitExpression(selectExpression)
85
- } : null, whereExpression ? {
86
- "q/where": visitorWithDefault.visitExpression(whereExpression)
87
- } : null, orderByExpression ? {
88
- "q/order-by": visitorWithDefault.visitOrderByExpression(orderByExpression)
89
- } : null);
69
+ return {
70
+ ...subQueryExpression,
71
+ ...(fromExpression ? {
72
+ "q/from": visitorWithDefault.visitFieldExpression(fromExpression)
73
+ } : null),
74
+ ...(selectExpression ? {
75
+ "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => visitorWithDefault.visitExpression(val)) : visitorWithDefault.visitExpression(selectExpression)
76
+ } : null),
77
+ ...(whereExpression ? {
78
+ "q/where": visitorWithDefault.visitExpression(whereExpression)
79
+ } : null),
80
+ ...(orderByExpression ? {
81
+ "q/order-by": visitorWithDefault.visitOrderByExpression(orderByExpression)
82
+ } : null)
83
+ };
90
84
  },
91
85
  visitExpression: expression => {
92
86
  if (expression === null) {
@@ -99,6 +93,8 @@ const createExpressionVisitor = visitor => {
99
93
  return visitorWithDefault.visitFunctionCallExpression(expression, visitorDefault);
100
94
  } else if (isFieldExpression(expression)) {
101
95
  return visitorWithDefault.visitFieldExpression(expression, visitorDefault);
96
+ } else if (isMultiFieldExpression(expression)) {
97
+ return visitorWithDefault.visitMultiFieldExpression(expression, visitorDefault);
102
98
  } else if (isQueryExpression(expression)) {
103
99
  return visitorWithDefault.visitQueryExpression(expression, visitorDefault);
104
100
  } else {
@@ -106,7 +102,10 @@ const createExpressionVisitor = visitor => {
106
102
  }
107
103
  }
108
104
  };
109
- visitorWithDefault = _extends({}, visitorDefault, visitor);
105
+ visitorWithDefault = {
106
+ ...visitorDefault,
107
+ ...visitor
108
+ };
110
109
  return visitorWithDefault;
111
110
  };
112
111
 
@@ -166,14 +165,19 @@ const replaceIdsWithNamesVisitor = (typeObject, onFieldNotFound = defaultIdsWith
166
165
  }).currentTypeObject;
167
166
  if (subQueryTypeObject) {
168
167
  const subQueryVisitor = replaceIdsWithNamesVisitor(subQueryTypeObject, onFieldNotFound);
169
- return _extends({}, subQueryExpression, {
170
- "q/from": visitor.visitFieldExpression(fromExpression),
171
- "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => subQueryVisitor.visitExpression(val)) : subQueryVisitor.visitExpression(selectExpression)
172
- }, whereExpression ? {
173
- "q/where": subQueryVisitor.visitExpression(whereExpression)
174
- } : null, orderByExpression ? {
175
- "q/order-by": subQueryVisitor.visitOrderByExpression(orderByExpression)
176
- } : null);
168
+ return {
169
+ ...subQueryExpression,
170
+ ...{
171
+ "q/from": visitor.visitFieldExpression(fromExpression),
172
+ "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => subQueryVisitor.visitExpression(val)) : subQueryVisitor.visitExpression(selectExpression)
173
+ },
174
+ ...(whereExpression ? {
175
+ "q/where": subQueryVisitor.visitExpression(whereExpression)
176
+ } : null),
177
+ ...(orderByExpression ? {
178
+ "q/order-by": subQueryVisitor.visitOrderByExpression(orderByExpression)
179
+ } : null)
180
+ };
177
181
  }
178
182
  return subQueryExpression;
179
183
  }
@@ -236,14 +240,19 @@ const replaceNamesWithIdsVisitor = (typeObject, onFieldNotFound = defaultNamesWi
236
240
  }).currentTypeObject;
237
241
  if (subQueryTypeObject) {
238
242
  const subQueryVisitor = replaceNamesWithIdsVisitor(subQueryTypeObject, onFieldNotFound);
239
- return _extends({}, subQueryExpression, {
240
- "q/from": visitor.visitFieldExpression(fromExpression),
241
- "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => subQueryVisitor.visitExpression(val)) : subQueryVisitor.visitExpression(selectExpression)
242
- }, whereExpression ? {
243
- "q/where": subQueryVisitor.visitExpression(whereExpression)
244
- } : null, orderByExpression ? {
245
- "q/order-by": subQueryVisitor.visitOrderByExpression(orderByExpression)
246
- } : null);
243
+ return {
244
+ ...subQueryExpression,
245
+ ...{
246
+ "q/from": visitor.visitFieldExpression(fromExpression),
247
+ "q/select": ___default["default"].isPlainObject(selectExpression) ? ___default["default"].mapValues(selectExpression, val => subQueryVisitor.visitExpression(val)) : subQueryVisitor.visitExpression(selectExpression)
248
+ },
249
+ ...(whereExpression ? {
250
+ "q/where": subQueryVisitor.visitExpression(whereExpression)
251
+ } : null),
252
+ ...(orderByExpression ? {
253
+ "q/order-by": subQueryVisitor.visitOrderByExpression(orderByExpression)
254
+ } : null)
255
+ };
247
256
  }
248
257
  return subQueryExpression;
249
258
  }
@@ -284,14 +293,19 @@ const deleteExpressionsWithNotFoundFieldsVisitor = typeObject => {
284
293
  const subQueryTypeObject = fromExpression.reduce((typeObject, field) => typeObject && typeObject.fieldObjectsByName.hasOwnProperty(field) ? typeObject.fieldObjectsByName[field].typeObject : null, typeObject);
285
294
  if (subQueryTypeObject) {
286
295
  const subQueryVisitor = deleteExpressionsWithNotFoundFieldsVisitor(subQueryTypeObject);
287
- const subQueryExpressionNew = ___default["default"].pickBy(_extends({}, subQueryExpression, {
288
- "q/from": visitor.visitFieldExpression(fromExpression),
289
- "q/select": subQueryVisitor.visitExpression(selectExpression)
290
- }, whereExpression ? {
291
- "q/where": subQueryVisitor.visitExpression(whereExpression)
292
- } : null, orderByExpression ? {
293
- "q/order-by": subQueryVisitor.visitOrderByExpression(orderByExpression)
294
- } : null));
296
+ const subQueryExpressionNew = ___default["default"].pickBy({
297
+ ...subQueryExpression,
298
+ ...{
299
+ "q/from": visitor.visitFieldExpression(fromExpression),
300
+ "q/select": subQueryVisitor.visitExpression(selectExpression)
301
+ },
302
+ ...(whereExpression ? {
303
+ "q/where": subQueryVisitor.visitExpression(whereExpression)
304
+ } : null),
305
+ ...(orderByExpression ? {
306
+ "q/order-by": subQueryVisitor.visitOrderByExpression(orderByExpression)
307
+ } : null)
308
+ });
295
309
  const {
296
310
  "q/select": selectExpressionNew
297
311
  } = subQueryExpressionNew;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fibery/expression-utils",
3
- "version": "6.0.0",
3
+ "version": "6.0.1",
4
4
  "description": "utils for working with fibery api expressions",
5
5
  "exports": {
6
6
  ".": "./lib/expression-utils.js",
@@ -29,16 +29,16 @@
29
29
  "@fibery/helpers": "1.2.0"
30
30
  },
31
31
  "devDependencies": {
32
- "@babel/core": "7.20.5",
32
+ "@babel/core": "7.23.9",
33
33
  "@swc/jest": "0.2.29",
34
34
  "jest": "27.5.1",
35
35
  "jest-junit": "13.0.0",
36
- "microbundle": "0.15.0",
37
- "@fibery/babel-preset": "7.3.0",
38
- "@fibery/eslint-config": "8.5.0"
36
+ "microbundle": "0.15.1",
37
+ "@fibery/babel-preset": "7.4.0",
38
+ "@fibery/eslint-config": "8.5.1"
39
39
  },
40
40
  "peerDependencies": {
41
- "@fibery/schema": "10.0.0"
41
+ "@fibery/schema": "10.0.1"
42
42
  },
43
43
  "jest": {
44
44
  "testEnvironment": "node",
package/index.js DELETED
@@ -1,6 +0,0 @@
1
- import * as paramsPlaceholders from "./paramsPlaceholders";
2
- import * as utils from "./utils";
3
- import * as visitors from "./visitors";
4
- import * as contextVariables from "./contextVariables";
5
-
6
- export {utils, visitors, paramsPlaceholders, contextVariables};