1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
| 'use strict';
|
| const isOperator = require('./isOperator');
|
| module.exports = function castFilterPath(query, schematype, val) {
| const ctx = query;
| const any$conditionals = Object.keys(val).some(isOperator);
|
| if (!any$conditionals) {
| return schematype.castForQueryWrapper({
| val: val,
| context: ctx
| });
| }
|
| const ks = Object.keys(val);
|
| let k = ks.length;
|
| while (k--) {
| const $cond = ks[k];
| const nested = val[$cond];
|
| if ($cond === '$not') {
| if (nested && schematype && !schematype.caster) {
| const _keys = Object.keys(nested);
| if (_keys.length && isOperator(_keys[0])) {
| for (const key of Object.keys(nested)) {
| nested[key] = schematype.castForQueryWrapper({
| $conditional: key,
| val: nested[key],
| context: ctx
| });
| }
| } else {
| val[$cond] = schematype.castForQueryWrapper({
| $conditional: $cond,
| val: nested,
| context: ctx
| });
| }
| continue;
| }
| // cast(schematype.caster ? schematype.caster.schema : schema, nested, options, context);
| } else {
| val[$cond] = schematype.castForQueryWrapper({
| $conditional: $cond,
| val: nested,
| context: ctx
| });
| }
| }
|
| return val;
| };
|
|