1 | "use strict";
|
2 |
|
3 |
|
4 |
|
5 | var __assign = (this && this.__assign) || function () {
|
6 | __assign = Object.assign || function(t) {
|
7 | for (var s, i = 1, n = arguments.length; i < n; i++) {
|
8 | s = arguments[i];
|
9 | for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
10 | t[p] = s[p];
|
11 | }
|
12 | return t;
|
13 | };
|
14 | return __assign.apply(this, arguments);
|
15 | };
|
16 | Object.defineProperty(exports, "__esModule", { value: true });
|
17 | exports.normalize = exports.isOperator = exports.removeValue = exports.setValue = exports.traverse = exports.filterMissing = exports.resolveGraph = exports.resolve = exports.memoize = exports.into = exports.groupBy = exports.sortBy = exports.compare = exports.hashCode = exports.unique = exports.isEqual = exports.flatten = exports.union = exports.intersection = exports.merge = exports.objectMap = exports.has = exports.ensureArray = exports.isEmpty = exports.truthy = exports.notInArray = exports.inArray = exports.isUndefined = exports.isNull = exports.isNil = exports.isFunction = exports.isRegExp = exports.isDate = exports.isObjectLike = exports.isObject = exports.isArray = exports.isNumber = exports.isString = exports.isBoolean = exports.getType = exports.cloneDeep = exports.assert = exports.BsonType = exports.JsType = exports.MIN_LONG = exports.MAX_LONG = exports.MIN_INT = exports.MAX_INT = void 0;
|
18 | exports.MAX_INT = 2147483647;
|
19 | exports.MIN_INT = -2147483648;
|
20 | exports.MAX_LONG = Number.MAX_SAFE_INTEGER;
|
21 | exports.MIN_LONG = Number.MIN_SAFE_INTEGER;
|
22 |
|
23 | var MISSING = {};
|
24 | var DEFAULT_HASH_FUNC = function (value) {
|
25 | var s = encode(value);
|
26 | var hash = 0;
|
27 | var i = s.length;
|
28 | while (i)
|
29 | hash = ((hash << 5) - hash) ^ s.charCodeAt(--i);
|
30 | var code = hash >>> 0;
|
31 | return code.toString();
|
32 | };
|
33 |
|
34 | var JsType;
|
35 | (function (JsType) {
|
36 | JsType["NULL"] = "null";
|
37 | JsType["UNDEFINED"] = "undefined";
|
38 | JsType["BOOLEAN"] = "boolean";
|
39 | JsType["NUMBER"] = "number";
|
40 | JsType["STRING"] = "string";
|
41 | JsType["DATE"] = "date";
|
42 | JsType["REGEXP"] = "regexp";
|
43 | JsType["ARRAY"] = "array";
|
44 | JsType["OBJECT"] = "object";
|
45 | JsType["FUNCTION"] = "function";
|
46 | })(JsType = exports.JsType || (exports.JsType = {}));
|
47 |
|
48 | var BsonType;
|
49 | (function (BsonType) {
|
50 | BsonType["BOOL"] = "bool";
|
51 | BsonType["INT"] = "int";
|
52 | BsonType["LONG"] = "long";
|
53 | BsonType["DOUBLE"] = "double";
|
54 | BsonType["DECIMAL"] = "decimal";
|
55 | BsonType["REGEX"] = "regex";
|
56 | })(BsonType = exports.BsonType || (exports.BsonType = {}));
|
57 |
|
58 | var JS_SIMPLE_TYPES = [
|
59 | JsType.NULL,
|
60 | JsType.UNDEFINED,
|
61 | JsType.BOOLEAN,
|
62 | JsType.NUMBER,
|
63 | JsType.STRING,
|
64 | JsType.DATE,
|
65 | JsType.REGEXP,
|
66 | ];
|
67 | var OBJECT_PROTOTYPE = Object.getPrototypeOf({});
|
68 | var OBJECT_TAG = "[object Object]";
|
69 | var OBJECT_TYPE_RE = /^\[object ([a-zA-Z0-9]+)\]$/;
|
70 | function assert(condition, message) {
|
71 | if (!condition)
|
72 | throw new Error(message);
|
73 | }
|
74 | exports.assert = assert;
|
75 |
|
76 |
|
77 |
|
78 | function cloneDeep(obj) {
|
79 | if (obj instanceof Array)
|
80 | return obj.map(cloneDeep);
|
81 | if (obj instanceof Date)
|
82 | return new Date(obj);
|
83 | if (isObject(obj))
|
84 | return objectMap(obj, cloneDeep);
|
85 | return obj;
|
86 | }
|
87 | exports.cloneDeep = cloneDeep;
|
88 |
|
89 |
|
90 |
|
91 |
|
92 | function getType(v) {
|
93 | return OBJECT_TYPE_RE.exec(Object.prototype.toString.call(v))[1];
|
94 | }
|
95 | exports.getType = getType;
|
96 | function isBoolean(v) {
|
97 | return typeof v === JsType.BOOLEAN;
|
98 | }
|
99 | exports.isBoolean = isBoolean;
|
100 | function isString(v) {
|
101 | return typeof v === JsType.STRING;
|
102 | }
|
103 | exports.isString = isString;
|
104 | function isNumber(v) {
|
105 | return !isNaN(v) && typeof v === JsType.NUMBER;
|
106 | }
|
107 | exports.isNumber = isNumber;
|
108 | exports.isArray = Array.isArray;
|
109 | function isObject(v) {
|
110 | if (!v)
|
111 | return false;
|
112 | var proto = Object.getPrototypeOf(v);
|
113 | return ((proto === OBJECT_PROTOTYPE || proto === null) &&
|
114 | OBJECT_TAG === Object.prototype.toString.call(v));
|
115 | }
|
116 | exports.isObject = isObject;
|
117 | function isObjectLike(v) {
|
118 | return v === Object(v);
|
119 | }
|
120 | exports.isObjectLike = isObjectLike;
|
121 | function isDate(v) {
|
122 | return v instanceof Date;
|
123 | }
|
124 | exports.isDate = isDate;
|
125 | function isRegExp(v) {
|
126 | return v instanceof RegExp;
|
127 | }
|
128 | exports.isRegExp = isRegExp;
|
129 | function isFunction(v) {
|
130 | return typeof v === JsType.FUNCTION;
|
131 | }
|
132 | exports.isFunction = isFunction;
|
133 | function isNil(v) {
|
134 | return v === null || v === undefined;
|
135 | }
|
136 | exports.isNil = isNil;
|
137 | function isNull(v) {
|
138 | return v === null;
|
139 | }
|
140 | exports.isNull = isNull;
|
141 | function isUndefined(v) {
|
142 | return v === undefined;
|
143 | }
|
144 | exports.isUndefined = isUndefined;
|
145 | exports.inArray = (function () {
|
146 |
|
147 | if (!Array.prototype.includes) {
|
148 | return function (arr, item) {
|
149 | return isNaN(item) && !isString(item)
|
150 | ? arr.some(function (v) { return isNaN(v) && !isString(v); })
|
151 | : arr.indexOf(item) > -1;
|
152 | };
|
153 | }
|
154 |
|
155 | return function (arr, item) { return arr.includes(item); };
|
156 | })();
|
157 | function notInArray(arr, item) {
|
158 | return !(0, exports.inArray)(arr, item);
|
159 | }
|
160 | exports.notInArray = notInArray;
|
161 | function truthy(arg) {
|
162 | return !!arg;
|
163 | }
|
164 | exports.truthy = truthy;
|
165 | function isEmpty(x) {
|
166 | return (isNil(x) ||
|
167 | (isString(x) && !x) ||
|
168 | (x instanceof Array && x.length === 0) ||
|
169 | (isObject(x) && Object.keys(x).length === 0));
|
170 | }
|
171 | exports.isEmpty = isEmpty;
|
172 |
|
173 | function ensureArray(x) {
|
174 | return x instanceof Array ? x : [x];
|
175 | }
|
176 | exports.ensureArray = ensureArray;
|
177 | function has(obj, prop) {
|
178 | return !!obj && Object.prototype.hasOwnProperty.call(obj, prop);
|
179 | }
|
180 | exports.has = has;
|
181 |
|
182 |
|
183 |
|
184 |
|
185 |
|
186 |
|
187 |
|
188 | function objectMap(obj, fn) {
|
189 | var o = {};
|
190 | var objKeys = Object.keys(obj);
|
191 | for (var i = 0; i < objKeys.length; i++) {
|
192 | var k = objKeys[i];
|
193 | o[k] = fn(obj[k], k);
|
194 | }
|
195 | return o;
|
196 | }
|
197 | exports.objectMap = objectMap;
|
198 |
|
199 |
|
200 |
|
201 |
|
202 |
|
203 |
|
204 |
|
205 |
|
206 | function merge(target, obj, options) {
|
207 |
|
208 | if (target === MISSING)
|
209 | return obj;
|
210 | if (obj === MISSING)
|
211 | return target;
|
212 | var inputs = [target, obj];
|
213 | if (!(inputs.every(isObject) || inputs.every(exports.isArray))) {
|
214 | throw Error("mismatched types. must both be array or object");
|
215 | }
|
216 |
|
217 | options = options || { flatten: false };
|
218 | if ((0, exports.isArray)(target)) {
|
219 | var result = target;
|
220 | var input = obj;
|
221 | if (options.flatten) {
|
222 | var i = 0;
|
223 | var j = 0;
|
224 | while (i < result.length && j < input.length) {
|
225 | result[i] = merge(result[i++], input[j++], options);
|
226 | }
|
227 | while (j < input.length) {
|
228 | result.push(obj[j++]);
|
229 | }
|
230 | }
|
231 | else {
|
232 | Array.prototype.push.apply(result, input);
|
233 | }
|
234 | }
|
235 | else {
|
236 | Object.keys(obj).forEach(function (k) {
|
237 | if (has(obj, k)) {
|
238 | if (has(target, k)) {
|
239 | target[k] = merge(target[k], obj[k], options);
|
240 | }
|
241 | else {
|
242 | target[k] = obj[k];
|
243 | }
|
244 | }
|
245 | });
|
246 | }
|
247 | return target;
|
248 | }
|
249 | exports.merge = merge;
|
250 |
|
251 |
|
252 |
|
253 |
|
254 |
|
255 |
|
256 |
|
257 |
|
258 | function intersection(a, b, hashFunction) {
|
259 | var flipped = false;
|
260 |
|
261 | if (a.length > b.length) {
|
262 | var t = a;
|
263 | a = b;
|
264 | b = t;
|
265 | flipped = true;
|
266 | }
|
267 | var maxSize = Math.max(a.length, b.length);
|
268 | var maxResult = Math.min(a.length, b.length);
|
269 | var lookup = a.reduce(function (memo, v, i) {
|
270 | memo[hashCode(v, hashFunction)] = i;
|
271 | return memo;
|
272 | }, {});
|
273 | var indexes = new Array();
|
274 | for (var i = 0, j = 0; i < maxSize && j < maxResult; i++) {
|
275 | var k = lookup[hashCode(b[i], hashFunction)];
|
276 | if (k !== undefined) {
|
277 | indexes.push(k);
|
278 | j++;
|
279 | }
|
280 | }
|
281 |
|
282 | if (!flipped)
|
283 | indexes.sort();
|
284 | return indexes.map(function (i) { return a[i]; });
|
285 | }
|
286 | exports.intersection = intersection;
|
287 |
|
288 |
|
289 |
|
290 |
|
291 |
|
292 |
|
293 |
|
294 | function union(xs, ys, hashFunction) {
|
295 | var hash = {};
|
296 | xs.concat(ys).forEach(function (e, i) {
|
297 | var k = hashCode(e, hashFunction);
|
298 | if (!hash[k])
|
299 | hash[k] = [e, i];
|
300 | });
|
301 | var result = Object.values(hash)
|
302 | .sort(function (a, b) { return (a[1] < b[1] ? -1 : a[1] > b[1] ? 1 : 0); })
|
303 | .map(function (e) { return e[0]; });
|
304 | return result;
|
305 | }
|
306 | exports.union = union;
|
307 |
|
308 |
|
309 |
|
310 |
|
311 |
|
312 |
|
313 | function flatten(xs, depth) {
|
314 | var arr = [];
|
315 | function flatten2(ys, n) {
|
316 | for (var i = 0, len = ys.length; i < len; i++) {
|
317 | if ((0, exports.isArray)(ys[i]) && (n > 0 || n < 0)) {
|
318 | flatten2(ys[i], Math.max(-1, n - 1));
|
319 | }
|
320 | else {
|
321 | arr.push(ys[i]);
|
322 | }
|
323 | }
|
324 | }
|
325 | flatten2(xs, depth);
|
326 | return arr;
|
327 | }
|
328 | exports.flatten = flatten;
|
329 |
|
330 |
|
331 |
|
332 |
|
333 |
|
334 |
|
335 |
|
336 | function isEqual(a, b) {
|
337 | var lhs = [a];
|
338 | var rhs = [b];
|
339 | while (lhs.length > 0) {
|
340 | a = lhs.pop();
|
341 | b = rhs.pop();
|
342 |
|
343 | if (a === b)
|
344 | continue;
|
345 |
|
346 | var nativeType = getType(a).toLowerCase();
|
347 | if (nativeType !== getType(b).toLowerCase() ||
|
348 | nativeType === JsType.FUNCTION) {
|
349 | return false;
|
350 | }
|
351 |
|
352 | if (nativeType === JsType.ARRAY) {
|
353 | var xs = a;
|
354 | var ys = b;
|
355 | if (xs.length !== ys.length)
|
356 | return false;
|
357 | if (xs.length === ys.length && xs.length === 0)
|
358 | continue;
|
359 | into(lhs, xs);
|
360 | into(rhs, ys);
|
361 | }
|
362 | else if (nativeType === JsType.OBJECT) {
|
363 |
|
364 | var ka = Object.keys(a);
|
365 | var kb = Object.keys(b);
|
366 |
|
367 | if (ka.length !== kb.length)
|
368 | return false;
|
369 |
|
370 | ka.sort();
|
371 | kb.sort();
|
372 |
|
373 | for (var i = 0, len = ka.length; i < len; i++) {
|
374 | var tempKey = ka[i];
|
375 | if (tempKey !== kb[i]) {
|
376 | return false;
|
377 | }
|
378 | else {
|
379 |
|
380 | lhs.push(a[tempKey]);
|
381 | rhs.push(b[tempKey]);
|
382 | }
|
383 | }
|
384 | }
|
385 | else {
|
386 |
|
387 | if (encode(a) !== encode(b))
|
388 | return false;
|
389 | }
|
390 | }
|
391 | return lhs.length === 0;
|
392 | }
|
393 | exports.isEqual = isEqual;
|
394 |
|
395 |
|
396 |
|
397 |
|
398 |
|
399 | function unique(xs, hashFunction) {
|
400 | var h = {};
|
401 | var arr = [];
|
402 | for (var _i = 0, xs_1 = xs; _i < xs_1.length; _i++) {
|
403 | var item = xs_1[_i];
|
404 | var k = hashCode(item, hashFunction);
|
405 | if (!has(h, k)) {
|
406 | arr.push(item);
|
407 | h[k] = 0;
|
408 | }
|
409 | }
|
410 | return arr;
|
411 | }
|
412 | exports.unique = unique;
|
413 |
|
414 |
|
415 |
|
416 |
|
417 |
|
418 |
|
419 | function encode(value) {
|
420 | var type = getType(value).toLowerCase();
|
421 | switch (type) {
|
422 | case JsType.BOOLEAN:
|
423 | case JsType.NUMBER:
|
424 | case JsType.REGEXP:
|
425 | return value.toString();
|
426 | case JsType.STRING:
|
427 | return JSON.stringify(value);
|
428 | case JsType.DATE:
|
429 | return value.toISOString();
|
430 | case JsType.NULL:
|
431 | case JsType.UNDEFINED:
|
432 | return type;
|
433 | case JsType.ARRAY:
|
434 | return "[" + value.map(encode).join(",") + "]";
|
435 | default:
|
436 | break;
|
437 | }
|
438 |
|
439 | var prefix = type === JsType.OBJECT ? "" : "" + getType(value);
|
440 | var objKeys = Object.keys(value);
|
441 | objKeys.sort();
|
442 | return (prefix + "{" +
|
443 | objKeys.map(function (k) { return encode(k) + ":" + encode(value[k]); }).join(",") +
|
444 | "}");
|
445 | }
|
446 |
|
447 |
|
448 |
|
449 |
|
450 |
|
451 |
|
452 |
|
453 |
|
454 | function hashCode(value, hashFunction) {
|
455 | if (hashFunction === void 0) { hashFunction = DEFAULT_HASH_FUNC; }
|
456 | if (isNil(value))
|
457 | return null;
|
458 | return hashFunction(value);
|
459 | }
|
460 | exports.hashCode = hashCode;
|
461 |
|
462 |
|
463 |
|
464 |
|
465 |
|
466 | function compare(a, b) {
|
467 | if (a < b)
|
468 | return -1;
|
469 | if (a > b)
|
470 | return 1;
|
471 | return 0;
|
472 | }
|
473 | exports.compare = compare;
|
474 |
|
475 |
|
476 |
|
477 |
|
478 |
|
479 |
|
480 |
|
481 |
|
482 |
|
483 |
|
484 | function sortBy(collection, keyFn, comparator) {
|
485 | var sorted = new Array();
|
486 | var result = new Array();
|
487 | var hash = {};
|
488 | comparator = comparator || compare;
|
489 | if (isEmpty(collection))
|
490 | return collection;
|
491 | for (var i = 0; i < collection.length; i++) {
|
492 | var obj = collection[i];
|
493 | var key = keyFn(obj, i);
|
494 |
|
495 | if (isNil(key)) {
|
496 | result.push(obj);
|
497 | }
|
498 | else {
|
499 |
|
500 | if (isString(key))
|
501 | key += "\0";
|
502 | if (hash[key]) {
|
503 | hash[key].push(obj);
|
504 | }
|
505 | else {
|
506 | hash[key] = [obj];
|
507 | }
|
508 | sorted.push(key);
|
509 | }
|
510 | }
|
511 |
|
512 | sorted.sort(comparator);
|
513 | for (var i = 0; i < sorted.length; i++) {
|
514 | into(result, hash[sorted[i]]);
|
515 | }
|
516 | return result;
|
517 | }
|
518 | exports.sortBy = sortBy;
|
519 |
|
520 |
|
521 |
|
522 |
|
523 |
|
524 |
|
525 |
|
526 | function groupBy(collection, keyFn, hashFunction) {
|
527 | var result = {
|
528 | keys: new Array(),
|
529 | groups: new Array(),
|
530 | };
|
531 | var lookup = {};
|
532 | for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {
|
533 | var obj = collection_1[_i];
|
534 | var key = keyFn(obj);
|
535 | var hash = hashCode(key, hashFunction);
|
536 | var index = -1;
|
537 | if (lookup[hash] === undefined) {
|
538 | index = result.keys.length;
|
539 | lookup[hash] = index;
|
540 | result.keys.push(key);
|
541 | result.groups.push([]);
|
542 | }
|
543 | index = lookup[hash];
|
544 | result.groups[index].push(obj);
|
545 | }
|
546 | return result;
|
547 | }
|
548 | exports.groupBy = groupBy;
|
549 |
|
550 |
|
551 | var MAX_ARRAY_PUSH = 50000;
|
552 |
|
553 |
|
554 |
|
555 |
|
556 |
|
557 |
|
558 | function into(target) {
|
559 | var rest = [];
|
560 | for (var _i = 1; _i < arguments.length; _i++) {
|
561 | rest[_i - 1] = arguments[_i];
|
562 | }
|
563 | if (target instanceof Array) {
|
564 | return rest.reduce(function (acc, arr) {
|
565 |
|
566 | var i = Math.ceil(arr.length / MAX_ARRAY_PUSH);
|
567 | var begin = 0;
|
568 | while (i-- > 0) {
|
569 | Array.prototype.push.apply(acc, arr.slice(begin, begin + MAX_ARRAY_PUSH));
|
570 | begin += MAX_ARRAY_PUSH;
|
571 | }
|
572 | return acc;
|
573 | }, target);
|
574 | }
|
575 | else if (isObject(target)) {
|
576 |
|
577 | return rest.filter(isObjectLike).reduce(function (acc, item) {
|
578 | Object.assign(acc, item);
|
579 | return acc;
|
580 | }, target);
|
581 | }
|
582 | return null;
|
583 | }
|
584 | exports.into = into;
|
585 |
|
586 |
|
587 |
|
588 |
|
589 |
|
590 |
|
591 |
|
592 |
|
593 | function memoize(fn, hashFunction) {
|
594 | var _this = this;
|
595 | return (function (memo) {
|
596 | return function () {
|
597 | var args = [];
|
598 | for (var _i = 0; _i < arguments.length; _i++) {
|
599 | args[_i] = arguments[_i];
|
600 | }
|
601 | var key = hashCode(args, hashFunction);
|
602 | if (!has(memo, key)) {
|
603 | memo[key] = fn.apply(_this, args);
|
604 | }
|
605 | return memo[key];
|
606 | };
|
607 | })({
|
608 |
|
609 | });
|
610 | }
|
611 | exports.memoize = memoize;
|
612 |
|
613 |
|
614 |
|
615 |
|
616 |
|
617 |
|
618 |
|
619 |
|
620 | function getValue(obj, key) {
|
621 | return isObjectLike(obj) ? obj[key] : undefined;
|
622 | }
|
623 |
|
624 |
|
625 |
|
626 |
|
627 |
|
628 | function unwrap(arr, depth) {
|
629 | if (depth < 1)
|
630 | return arr;
|
631 | while (depth-- && arr.length === 1)
|
632 | arr = arr[0];
|
633 | return arr;
|
634 | }
|
635 |
|
636 |
|
637 |
|
638 |
|
639 |
|
640 |
|
641 | function resolve(obj, selector, options) {
|
642 | var depth = 0;
|
643 |
|
644 | options = options || { unwrapArray: false };
|
645 | function resolve2(o, path) {
|
646 | var value = o;
|
647 | var _loop_1 = function (i) {
|
648 | var field = path[i];
|
649 | var isText = /^\d+$/.exec(field) === null;
|
650 |
|
651 | if (isText && value instanceof Array) {
|
652 |
|
653 |
|
654 |
|
655 | if (i === 0 && depth > 0)
|
656 | return "break";
|
657 | depth += 1;
|
658 |
|
659 | var subpath_1 = path.slice(i);
|
660 | value = value.reduce(function (acc, item) {
|
661 | var v = resolve2(item, subpath_1);
|
662 | if (v !== undefined)
|
663 | acc.push(v);
|
664 | return acc;
|
665 | }, []);
|
666 | return "break";
|
667 | }
|
668 | else {
|
669 | value = getValue(value, field);
|
670 | }
|
671 | if (value === undefined)
|
672 | return "break";
|
673 | };
|
674 | for (var i = 0; i < path.length; i++) {
|
675 | var state_1 = _loop_1(i);
|
676 | if (state_1 === "break")
|
677 | break;
|
678 | }
|
679 | return value;
|
680 | }
|
681 | var result = (0, exports.inArray)(JS_SIMPLE_TYPES, getType(obj).toLowerCase())
|
682 | ? obj
|
683 | : resolve2(obj, selector.split("."));
|
684 | return result instanceof Array && options.unwrapArray
|
685 | ? unwrap(result, depth)
|
686 | : result;
|
687 | }
|
688 | exports.resolve = resolve;
|
689 |
|
690 |
|
691 |
|
692 |
|
693 |
|
694 |
|
695 |
|
696 | function resolveGraph(obj, selector, options) {
|
697 |
|
698 | if (options === undefined) {
|
699 | options = { preserveMissing: false };
|
700 | }
|
701 | var names = selector.split(".");
|
702 | var key = names[0];
|
703 |
|
704 | var next = names.slice(1).join(".");
|
705 | var isIndex = /^\d+$/.exec(key) !== null;
|
706 | var hasNext = names.length > 1;
|
707 | var result;
|
708 | var value;
|
709 | if (obj instanceof Array) {
|
710 | if (isIndex) {
|
711 | result = getValue(obj, Number(key));
|
712 | if (hasNext) {
|
713 | result = resolveGraph(result, next, options);
|
714 | }
|
715 | result = [result];
|
716 | }
|
717 | else {
|
718 | result = [];
|
719 | for (var _i = 0, obj_1 = obj; _i < obj_1.length; _i++) {
|
720 | var item = obj_1[_i];
|
721 | value = resolveGraph(item, selector, options);
|
722 | if (options.preserveMissing) {
|
723 | if (value === undefined) {
|
724 | value = MISSING;
|
725 | }
|
726 | result.push(value);
|
727 | }
|
728 | else if (value !== undefined) {
|
729 | result.push(value);
|
730 | }
|
731 | }
|
732 | }
|
733 | }
|
734 | else {
|
735 | value = getValue(obj, key);
|
736 | if (hasNext) {
|
737 | value = resolveGraph(value, next, options);
|
738 | }
|
739 | if (value === undefined)
|
740 | return undefined;
|
741 | result = options.preserveKeys ? __assign({}, obj) : {};
|
742 | result[key] = value;
|
743 | }
|
744 | return result;
|
745 | }
|
746 | exports.resolveGraph = resolveGraph;
|
747 |
|
748 |
|
749 |
|
750 |
|
751 |
|
752 | function filterMissing(obj) {
|
753 | if (obj instanceof Array) {
|
754 | for (var i = obj.length - 1; i >= 0; i--) {
|
755 | if (obj[i] === MISSING) {
|
756 | obj.splice(i, 1);
|
757 | }
|
758 | else {
|
759 | filterMissing(obj[i]);
|
760 | }
|
761 | }
|
762 | }
|
763 | else if (isObject(obj)) {
|
764 | for (var k in obj) {
|
765 | if (has(obj, k)) {
|
766 | filterMissing(obj[k]);
|
767 | }
|
768 | }
|
769 | }
|
770 | }
|
771 | exports.filterMissing = filterMissing;
|
772 |
|
773 |
|
774 |
|
775 |
|
776 |
|
777 |
|
778 |
|
779 |
|
780 |
|
781 | function traverse(obj, selector, fn, force) {
|
782 | var names = selector.split(".");
|
783 | var key = names[0];
|
784 | var next = names.slice(1).join(".");
|
785 | if (names.length === 1) {
|
786 | fn(obj, key);
|
787 | }
|
788 | else {
|
789 |
|
790 | if (force === true && isNil(obj[key])) {
|
791 | obj[key] = {};
|
792 | }
|
793 | traverse(obj[key], next, fn, force);
|
794 | }
|
795 | }
|
796 | exports.traverse = traverse;
|
797 |
|
798 |
|
799 |
|
800 |
|
801 |
|
802 |
|
803 |
|
804 | function setValue(obj, selector, value) {
|
805 | traverse(obj, selector, function (item, key) {
|
806 | item[key] = value;
|
807 | }, true);
|
808 | }
|
809 | exports.setValue = setValue;
|
810 |
|
811 |
|
812 |
|
813 |
|
814 |
|
815 |
|
816 |
|
817 |
|
818 | function removeValue(obj, selector) {
|
819 | traverse(obj, selector, function (item, key) {
|
820 | if (item instanceof Array) {
|
821 | if (/^\d+$/.test(key)) {
|
822 | item.splice(parseInt(key), 1);
|
823 | }
|
824 | else {
|
825 | for (var _i = 0, item_1 = item; _i < item_1.length; _i++) {
|
826 | var elem = item_1[_i];
|
827 | if (isObject(elem)) {
|
828 | delete elem[key];
|
829 | }
|
830 | }
|
831 | }
|
832 | }
|
833 | else if (isObject(item)) {
|
834 | delete item[key];
|
835 | }
|
836 | });
|
837 | }
|
838 | exports.removeValue = removeValue;
|
839 | var OPERATOR_NAME_PATTERN = /^\$[a-zA-Z0-9_]+$/;
|
840 |
|
841 |
|
842 |
|
843 |
|
844 |
|
845 | function isOperator(name) {
|
846 | return OPERATOR_NAME_PATTERN.test(name);
|
847 | }
|
848 | exports.isOperator = isOperator;
|
849 |
|
850 |
|
851 |
|
852 |
|
853 |
|
854 | function normalize(expr) {
|
855 |
|
856 | if ((0, exports.inArray)(JS_SIMPLE_TYPES, getType(expr).toLowerCase())) {
|
857 | return isRegExp(expr) ? { $regex: expr } : { $eq: expr };
|
858 | }
|
859 |
|
860 | if (isObjectLike(expr)) {
|
861 |
|
862 | if (!Object.keys(expr).some(isOperator)) {
|
863 | return { $eq: expr };
|
864 | }
|
865 |
|
866 | if (has(expr, "$regex")) {
|
867 | return {
|
868 | $regex: new RegExp(expr["$regex"], expr["$options"]),
|
869 | };
|
870 | }
|
871 | }
|
872 | return expr;
|
873 | }
|
874 | exports.normalize = normalize;
|