123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const type_1 = require("../utils/type");
- const datatype_1 = require("./datatype");
- function flatten(query, shouldPreserverObject, parents, visited) {
- const cloned = Object.assign({}, query);
- for (const key in query) {
- if (/^\$/.test(key))
- continue;
- const value = query[key];
- if (value === undefined) {
- delete cloned[key];
- continue;
- }
- if (!value)
- continue;
- if (type_1.isObject(value) && !shouldPreserverObject(value)) {
- if (visited.indexOf(value) > -1) {
- throw new Error('Cannot convert circular structure to JSON');
- }
- const newParents = [...parents, key];
- const newVisited = [...visited, value];
- const flattenedChild = flatten(value, shouldPreserverObject, newParents, newVisited);
- cloned[key] = flattenedChild;
- let hasKeyNotCombined = false;
- for (const childKey in flattenedChild) {
- if (!/^\$/.test(childKey)) {
- cloned[`${key}.${childKey}`] = flattenedChild[childKey];
- delete cloned[key][childKey];
- }
- else {
- hasKeyNotCombined = true;
- }
- }
- if (!hasKeyNotCombined) {
- delete cloned[key];
- }
- }
- }
- return cloned;
- }
- function flattenQueryObject(query) {
- return flatten(query, isConversionRequired, [], [query]);
- }
- exports.flattenQueryObject = flattenQueryObject;
- function flattenObject(object) {
- return flatten(object, (_) => false, [], [object]);
- }
- exports.flattenObject = flattenObject;
- function mergeConditionAfterEncode(query, condition, key) {
- if (!condition[key]) {
- delete query[key];
- }
- for (const conditionKey in condition) {
- if (query[conditionKey]) {
- if (type_1.isArray(query[conditionKey])) {
- query[conditionKey].push(condition[conditionKey]);
- }
- else if (type_1.isObject(query[conditionKey])) {
- if (type_1.isObject(condition[conditionKey])) {
- Object.assign(query[conditionKey], condition[conditionKey]);
- }
- else {
- console.warn(`unmergable condition, query is object but condition is ${type_1.getType(condition)}, can only overwrite`, condition, key);
- query[conditionKey] = condition[conditionKey];
- }
- }
- else {
- console.warn(`to-merge query is of type ${type_1.getType(query)}, can only overwrite`, query, condition, key);
- query[conditionKey] = condition[conditionKey];
- }
- }
- else {
- query[conditionKey] = condition[conditionKey];
- }
- }
- }
- exports.mergeConditionAfterEncode = mergeConditionAfterEncode;
- function isConversionRequired(val) {
- return type_1.isInternalObject(val) || type_1.isDate(val) || type_1.isRegExp(val);
- }
- exports.isConversionRequired = isConversionRequired;
- function encodeInternalDataType(val) {
- return datatype_1.serialize(val);
- }
- exports.encodeInternalDataType = encodeInternalDataType;
- function decodeInternalDataType(object) {
- return datatype_1.deserialize(object);
- }
- exports.decodeInternalDataType = decodeInternalDataType;
|