Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Socket
Sign inDemoInstall

objection

Package Overview
Dependencies
Maintainers
2
Versions
201
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

objection - npm Package Compare versions

Comparing version 0.7.8 to 0.7.9

lib/queryBuilder/operations/eager/EagerOperation.js

8

lib/model/AjvValidator.js

@@ -202,3 +202,7 @@ 'use strict';

function hasDefaults(obj) {
return Array.isArray(obj) ? arrayHasDefaults(obj) : objectHasDefaults(obj);
if (Array.isArray(obj)) {
return arrayHasDefaults(obj);
} else {
return objectHasDefaults(obj);
}
}

@@ -237,2 +241,2 @@

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFqdlZhbGlkYXRvci5qcyJdLCJuYW1lcyI6WyJBanZWYWxpZGF0b3IiLCJjb25mIiwiYWp2IiwiZGVmYXVsdHMiLCJvcHRpb25zIiwidXNlRGVmYXVsdHMiLCJhanZOb0RlZmF1bHRzIiwiYXNzaWduIiwiY2FjaGUiLCJvbkNyZWF0ZUFqdiIsImJlZm9yZVZhbGlkYXRlIiwibW9kZWwiLCJqc29uIiwiY3R4IiwianNvblNjaGVtYSIsImNvbnN0cnVjdG9yIiwiZ2V0SnNvblNjaGVtYSIsIiRiZWZvcmVWYWxpZGF0ZSIsInByb3RvdHlwZSIsImNsb25lRGVlcCIsInZhbGlkYXRlIiwidmFsaWRhdG9yIiwiZ2V0SnNvblNjaGVtYVZhbGlkYXRvciIsInBhdGNoIiwibXV0YWJsZSIsInNldHNEZWZhdWx0VmFsdWVzIiwiZXJyb3JzIiwicGFyc2VWYWxpZGF0aW9uRXJyb3IiLCJNb2RlbENsYXNzIiwic2tpcFJlcXVpcmVkIiwia2V5IiwidmFsaWRhdG9ycyIsImNvbXBpbGVKc29uU2NoZW1hVmFsaWRhdG9yIiwib3JpZ1JlcXVpcmVkIiwicmVxdWlyZWQiLCJjb21waWxlIiwicHJvcGVydGllcyIsImhhc0RlZmF1bHRzIiwiZXJyb3JIYXNoIiwiaW5kZXgiLCJpIiwibGVuZ3RoIiwiZXJyb3IiLCJkYXRhUGF0aCIsInN1YnN0cmluZyIsIm1hdGNoIiwiZXhlYyIsIm1lc3NhZ2UiLCJwYXJhbXMiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJ0b1N0cmluZyIsImtleXdvcmQiLCJvYmoiLCJBcnJheSIsImlzQXJyYXkiLCJhcnJheUhhc0RlZmF1bHRzIiwib2JqZWN0SGFzRGVmYXVsdHMiLCJhcnIiLCJsIiwidmFsIiwia2V5cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7SUFFcUJBLFk7OztBQUVuQix3QkFBWUMsSUFBWixFQUFrQjtBQUFBOztB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TVYsTUFBTThCLEtBQUtwQixDQUFMLENBQVo7O0FBRUEsUUFBSVYsUUFBUSxTQUFaLEVBQXVCO0FBQ3JCLGFBQU8sSUFBUDtBQUNELEtBRkQsTUFFTztBQUNMLFVBQU02QixNQUFNUCxJQUFJdEIsR0FBSixDQUFaOztBQUVBLFVBQUk2QixPQUFPLFFBQU9BLEdBQVAsdURBQU9BLEdBQVAsT0FBZSxRQUF0QixJQUFrQ3RCLFlBQVlzQixHQUFaLENBQXRDLEVBQXdEO0FBQ3RELGVBQU8sSUFBUDtBQUNEO0FBQ0Y7QUFDRjs7QUFFRCxTQUFPLEtBQVA7QUFDRCIsImZpbGUiOiJBanZWYWxpZGF0b3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IEFqdiBmcm9tICdhanYnO1xuaW1wb3J0IE1vZGVsIGZyb20gJy4vTW9kZWwnO1xuaW1wb3J0IFZhbGlkYXRvciBmcm9tICcuL1ZhbGlkYXRvcic7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4vVmFsaWRhdGlvbkVycm9yJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWp2VmFsaWRhdG9yIGV4dGVuZHMgVmFsaWRhdG9yIHtcblxuICBjb25zdHJ1Y3Rvcihjb25mKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuYWp2ID0gbmV3IEFqdihfLmRlZmF1bHRzKHt9LCBjb25mLm9wdGlvbnMsIHtcbiAgICAgIHVzZURlZmF1bHRzOiB0cnVlXG4gICAgfSkpO1xuXG4gICAgdGhpcy5hanZOb0RlZmF1bHRzID0gbmV3IEFqdihfLmFzc2lnbih7fSwgY29uZi5vcHRpb25zLCB7XG4gICAgICB1c2VEZWZhdWx0czogZmFsc2VcbiAgICB9KSk7XG5cbiAgICB0aGlzLmNhY2hlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuICAgIGNvbmYub25DcmVhdGVBanYodGhpcy5hanYpO1xuICAgIGNvbmYub25DcmVhdGVBanYodGhpcy5hanZOb0RlZmF1bHRzKTtcbiAgfVxuXG4gIGJlZm9yZVZhbGlkYXRlKHttb2RlbCwganNvbiwgb3B0aW9ucywgY3R4fSkge1xuICAgIGN0eC5qc29uU2NoZW1hID0gbW9kZWwuY29uc3RydWN0b3IuZ2V0SnNvblNjaGVtYSgpO1xuXG4gICAgaWYgKG1vZGVsLiRiZWZvcmVWYWxpZGF0ZSAhPT0gTW9kZWwucHJvdG90eXBlLiRiZWZvcmVWYWxpZGF0ZSkge1xuICAgICAgY3R4Lmpzb25TY2hlbWEgPSBfLmNsb25lRGVlcChjdHguanNvblNjaGVtYSk7XG4gICAgICBjdHguanNvblNjaGVtYSA9IG1vZGVsLiRiZWZvcmVWYWxpZGF0ZShjdHguanNvblNjaGVtYSwganNvbiwgb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgdmFsaWRhdGUoe21vZGVsLCBqc29uLCBvcHRpb25zLCBjdHh9KSB7XG4gICAgaWYgKCFjdHguanNvblNjaGVtYSkge1xuICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuXG4gICAgY29uc3QgdmFsaWRhdG9yID0gdGhpcy5nZXRKc29uU2NoZW1hVmFsaWRhdG9yKG1vZGVsLmNvbnN0cnVjdG9yLCBjdHguanNvblNjaGVtYSwgISFvcHRpb25zLnBhdGNoKTtcblxuICAgIGlmICghb3B0aW9ucy5tdXRhYmxlICYmICFvcHRpb25zLnBhdGNoICYmIHRoaXMuc2V0c0RlZmF1bHRWYWx1ZXMoY3R4Lmpzb25TY2hlbWEpKSB7XG4gICAgICBqc29uID0gXy5jbG9uZURlZXAoanNvbik7XG4gICAgfVxuXG4gICAgdmFsaWRhdG9yKGpzb24pO1xuXG4gICAgaWYgKHZhbGlkYXRvci5lcnJvcnMpIHtcbiAgICAgIHRocm93IHBhcnNlVmFsaWRhdGlvbkVycm9yKHZhbGlkYXRvci5lcnJvcnMpO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uO1xuICB9XG5cbiAgZ2V0SnNvblNjaGVtYVZhbGlkYXRvcihNb2RlbENsYXNzLCBqc29uU2NoZW1hLCBza2lwUmVxdWlyZWQpIHtcbiAgICBjb25zdCBrZXkgPSBqc29uU2NoZW1hID09PSBNb2RlbENsYXNzLmdldEpzb25TY2hlbWEoKVxuICAgICAgPyAnZGVmYXVsdCdcbiAgICAgIDogSlNPTi5zdHJpbmdpZnkoanNvblNjaGVtYSk7XG5cbiAgICBsZXQgdmFsaWRhdG9ycyA9IHRoaXMuY2FjaGVba2V5XTtcblxuICAgIGlmICghdmFsaWRhdG9ycykge1xuICAgICAgdmFsaWRhdG9ycyA9IHt9O1xuICAgICAgdGhpcy5jYWNoZVtrZXldID0gdmFsaWRhdG9ycztcbiAgICB9XG5cbiAgICBsZXQgdmFsaWRhdG9yID0gdmFsaWRhdG9yc1tza2lwUmVxdWlyZWRdO1xuXG4gICAgaWYgKCF2YWxpZGF0b3IpIHtcbiAgICAgIHZhbGlkYXRvciA9IHRoaXMuY29tcGlsZUpzb25TY2hlbWFWYWxpZGF0b3IoanNvblNjaGVtYSwgc2tpcFJlcXVpcmVkKTtcbiAgICAgIHZhbGlkYXRvcnNbc2tpcFJlcXVpcmVkXSA9IHZhbGlkYXRvcjtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yO1xuICB9XG5cbiAgY29tcGlsZUpzb25TY2hlbWFWYWxpZGF0b3IoanNvblNjaGVtYSwgc2tpcFJlcXVpcmVkKSB7XG4gICAgbGV0IG9yaWdSZXF1aXJlZDtcblxuICAgIHRyeSB7XG4gICAgICBpZiAoc2tpcFJlcXVpcmVkKSB7XG4gICAgICAgIG9yaWdSZXF1aXJlZCA9IGpzb25TY2hlbWEucmVxdWlyZWQ7XG4gICAgICAgIGpzb25TY2hlbWEucmVxdWlyZWQgPSBbXTtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWp2Tm9EZWZhdWx0cy5jb21waWxlKGpzb25TY2hlbWEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWp2LmNvbXBpbGUoanNvblNjaGVtYSk7XG4gICAgICB9XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChza2lwUmVxdWlyZWQpIHtcbiAgICAgICAganNvblNjaGVtYS5yZXF1aXJlZCA9IG9yaWdSZXF1aXJlZDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzZXRzRGVmYXVsdFZhbHVlcyhqc29uU2NoZW1hKSB7XG4gICAgcmV0dXJuIGpzb25TY2hlbWEgJiYganNvblNjaGVtYS5wcm9wZXJ0aWVzICYmIGhhc0RlZmF1bHRzKGpzb25TY2hlbWEucHJvcGVydGllcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VWYWxpZGF0aW9uRXJyb3IoZXJyb3JzKSB7XG4gIGNvbnN0IGVycm9ySGFzaCA9IHt9O1xuICBsZXQgaW5kZXggPSAwO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgZXJyb3JzLmxlbmd0aDsgKytpKSB7XG4gICAgbGV0IGVycm9yID0gZXJyb3JzW2ldO1xuICAgIGxldCBrZXkgPSBlcnJvci5kYXRhUGF0aC5zdWJzdHJpbmcoMSk7XG5cbiAgICBpZiAoIWtleSkge1xuICAgICAgbGV0IG1hdGNoID0gL3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5ICcoLispJy8uZXhlYyhlcnJvci5tZXNzYWdlKTtcbiAgICAgIGlmIChtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAgIGtleSA9IG1hdGNoWzFdO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICgha2V5ICYmIGVycm9yLnBhcmFtcyAmJiBlcnJvci5wYXJhbXMuYWRkaXRpb25hbFByb3BlcnR5KSB7XG4gICAgICBrZXkgPSBlcnJvci5wYXJhbXMuYWRkaXRpb25hbFByb3BlcnR5O1xuICAgIH1cblxuICAgIGlmICgha2V5KSB7XG4gICAgICBrZXkgPSAoaW5kZXgrKykudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBlcnJvckhhc2hba2V5XSA9IFt7XG4gICAgICBtZXNzYWdlOiBlcnJvci5tZXNzYWdlLFxuICAgICAga2V5d29yZDogZXJyb3Iua2V5d29yZCxcbiAgICAgIHBhcmFtczogZXJyb3IucGFyYW1zXG4gICAgfV07XG4gIH1cblxuICByZXR1cm4gbmV3IFZhbGlkYXRpb25FcnJvcihlcnJvckhhc2gpO1xufVxuXG5mdW5jdGlvbiBoYXNEZWZhdWx0cyhvYmopIHtcbiAgcmV0dXJuIEFycmF5LmlzQXJyYXkob2JqKSA/IGFycmF5SGFzRGVmYXVsdHMob2JqKSA6IG9iamVjdEhhc0RlZmF1bHRzKG9iaik7XG59XG5cbmZ1bmN0aW9uIGFycmF5SGFzRGVmYXVsdHMoYXJyKSB7XG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJyLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIGNvbnN0IHZhbCA9IGFycltpXTtcblxuICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgaGFzRGVmYXVsdHModmFsKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBvYmplY3RIYXNEZWZhdWx0cyhvYmopIHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iaik7XG5cbiAgZm9yIChsZXQgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgIGNvbnN0IGtleSA9IGtleXNbaV07XG5cbiAgICBpZiAoa2V5ID09PSAnZGVmYXVsdCcpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB2YWwgPSBvYmpba2V5XTtcblxuICAgICAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiBoYXNEZWZhdWx0cyh2YWwpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkFqdlZhbGlkYXRvci5qcyJdLCJuYW1lcyI6WyJBanZWYWxpZGF0b3IiLCJjb25mIiwiYWp2IiwiZGVmYXVsdHMiLCJvcHRpb25zIiwidXNlRGVmYXVsdHMiLCJhanZOb0RlZmF1bHRzIiwiYXNzaWduIiwiY2FjaGUiLCJvbkNyZWF0ZUFqdiIsImJlZm9yZVZhbGlkYXRlIiwibW9kZWwiLCJqc29uIiwiY3R4IiwianNvblNjaGVtYSIsImNvbnN0cnVjdG9yIiwiZ2V0SnNvblNjaGVtYSIsIiRiZWZvcmVWYWxpZGF0ZSIsInByb3RvdHlwZSIsImNsb25lRGVlcCIsInZhbGlkYXRlIiwidmFsaWRhdG9yIiwiZ2V0SnNvblNjaGVtYVZhbGlkYXRvciIsInBhdGNoIiwibXV0YWJsZSIsInNldHNEZWZhdWx0VmFsdWVzIiwiZXJyb3JzIiwicGFyc2VWYWxpZGF0aW9uRXJyb3IiLCJNb2RlbENsYXNzIiwic2tpcFJlcXVpcmVkIiwia2V5IiwidmFsaWRhdG9ycyIsImNvbXBpbGVKc29uU2NoZW1hVmFsaWRhdG9yIiwib3JpZ1JlcXVpcmVkIiwicmVxdWlyZWQiLCJjb21waWxlIiwicHJvcGVydGllcyIsImhhc0RlZmF1bHRzIiwiZXJyb3JIYXNoIiwiaW5kZXgiLCJpIiwibGVuZ3RoIiwiZXJyb3IiLCJkYXRhUGF0aCIsInN1YnN0cmluZyIsIm1hdGNoIiwiZXhlYyIsIm1lc3NhZ2UiLCJwYXJhbXMiLCJhZGRpdGlvbmFsUHJvcGVydHkiLCJ0b1N0cmluZyIsImtleXdvcmQiLCJvYmoiLCJBcnJheSIsImlzQXJyYXkiLCJhcnJheUhhc0RlZmF1bHRzIiwib2JqZWN0SGFzRGVmYXVsdHMiLCJhcnIiLCJsIiwidmFsIiwia2V5cyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7SUFFcUJBLFk7OztBQUVuQix3QkFBWUMsSUFBWixFQUFrQjtBQUFBOztB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QXJDLEVBQXdDLEVBQUVsQixDQUExQyxFQUE2QztBQUMzQyxRQUFNVixNQUFNOEIsS0FBS3BCLENBQUwsQ0FBWjs7QUFFQSxRQUFJVixRQUFRLFNBQVosRUFBdUI7QUFDckIsYUFBTyxJQUFQO0FBQ0QsS0FGRCxNQUVPO0FBQ0wsVUFBTTZCLE1BQU1QLElBQUl0QixHQUFKLENBQVo7O0FBRUEsVUFBSTZCLE9BQU8sUUFBT0EsR0FBUCx1REFBT0EsR0FBUCxPQUFlLFFBQXRCLElBQWtDdEIsWUFBWXNCLEdBQVosQ0FBdEMsRUFBd0Q7QUFDdEQsZUFBTyxJQUFQO0FBQ0Q7QUFDRjtBQUNGOztBQUVELFNBQU8sS0FBUDtBQUNEIiwiZmlsZSI6IkFqdlZhbGlkYXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgQWp2IGZyb20gJ2Fqdic7XG5pbXBvcnQgTW9kZWwgZnJvbSAnLi9Nb2RlbCc7XG5pbXBvcnQgVmFsaWRhdG9yIGZyb20gJy4vVmFsaWRhdG9yJztcbmltcG9ydCBWYWxpZGF0aW9uRXJyb3IgZnJvbSAnLi9WYWxpZGF0aW9uRXJyb3InO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBanZWYWxpZGF0b3IgZXh0ZW5kcyBWYWxpZGF0b3Ige1xuXG4gIGNvbnN0cnVjdG9yKGNvbmYpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5hanYgPSBuZXcgQWp2KF8uZGVmYXVsdHMoe30sIGNvbmYub3B0aW9ucywge1xuICAgICAgdXNlRGVmYXVsdHM6IHRydWVcbiAgICB9KSk7XG5cbiAgICB0aGlzLmFqdk5vRGVmYXVsdHMgPSBuZXcgQWp2KF8uYXNzaWduKHt9LCBjb25mLm9wdGlvbnMsIHtcbiAgICAgIHVzZURlZmF1bHRzOiBmYWxzZVxuICAgIH0pKTtcblxuICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgY29uZi5vbkNyZWF0ZUFqdih0aGlzLmFqdik7XG4gICAgY29uZi5vbkNyZWF0ZUFqdih0aGlzLmFqdk5vRGVmYXVsdHMpO1xuICB9XG5cbiAgYmVmb3JlVmFsaWRhdGUoe21vZGVsLCBqc29uLCBvcHRpb25zLCBjdHh9KSB7XG4gICAgY3R4Lmpzb25TY2hlbWEgPSBtb2RlbC5jb25zdHJ1Y3Rvci5nZXRKc29uU2NoZW1hKCk7XG5cbiAgICBpZiAobW9kZWwuJGJlZm9yZVZhbGlkYXRlICE9PSBNb2RlbC5wcm90b3R5cGUuJGJlZm9yZVZhbGlkYXRlKSB7XG4gICAgICBjdHguanNvblNjaGVtYSA9IF8uY2xvbmVEZWVwKGN0eC5qc29uU2NoZW1hKTtcbiAgICAgIGN0eC5qc29uU2NoZW1hID0gbW9kZWwuJGJlZm9yZVZhbGlkYXRlKGN0eC5qc29uU2NoZW1hLCBqc29uLCBvcHRpb25zKTtcbiAgICB9XG4gIH1cblxuICB2YWxpZGF0ZSh7bW9kZWwsIGpzb24sIG9wdGlvbnMsIGN0eH0pIHtcbiAgICBpZiAoIWN0eC5qc29uU2NoZW1hKSB7XG4gICAgICByZXR1cm4ganNvbjtcbiAgICB9XG5cbiAgICBjb25zdCB2YWxpZGF0b3IgPSB0aGlzLmdldEpzb25TY2hlbWFWYWxpZGF0b3IobW9kZWwuY29uc3RydWN0b3IsIGN0eC5qc29uU2NoZW1hLCAhIW9wdGlvbnMucGF0Y2gpO1xuXG4gICAgaWYgKCFvcHRpb25zLm11dGFibGUgJiYgIW9wdGlvbnMucGF0Y2ggJiYgdGhpcy5zZXRzRGVmYXVsdFZhbHVlcyhjdHguanNvblNjaGVtYSkpIHtcbiAgICAgIGpzb24gPSBfLmNsb25lRGVlcChqc29uKTtcbiAgICB9XG5cbiAgICB2YWxpZGF0b3IoanNvbik7XG5cbiAgICBpZiAodmFsaWRhdG9yLmVycm9ycykge1xuICAgICAgdGhyb3cgcGFyc2VWYWxpZGF0aW9uRXJyb3IodmFsaWRhdG9yLmVycm9ycyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGpzb247XG4gIH1cblxuICBnZXRKc29uU2NoZW1hVmFsaWRhdG9yKE1vZGVsQ2xhc3MsIGpzb25TY2hlbWEsIHNraXBSZXF1aXJlZCkge1xuICAgIGNvbnN0IGtleSA9IGpzb25TY2hlbWEgPT09IE1vZGVsQ2xhc3MuZ2V0SnNvblNjaGVtYSgpXG4gICAgICA/ICdkZWZhdWx0J1xuICAgICAgOiBKU09OLnN0cmluZ2lmeShqc29uU2NoZW1hKTtcblxuICAgIGxldCB2YWxpZGF0b3JzID0gdGhpcy5jYWNoZVtrZXldO1xuXG4gICAgaWYgKCF2YWxpZGF0b3JzKSB7XG4gICAgICB2YWxpZGF0b3JzID0ge307XG4gICAgICB0aGlzLmNhY2hlW2tleV0gPSB2YWxpZGF0b3JzO1xuICAgIH1cblxuICAgIGxldCB2YWxpZGF0b3IgPSB2YWxpZGF0b3JzW3NraXBSZXF1aXJlZF07XG5cbiAgICBpZiAoIXZhbGlkYXRvcikge1xuICAgICAgdmFsaWRhdG9yID0gdGhpcy5jb21waWxlSnNvblNjaGVtYVZhbGlkYXRvcihqc29uU2NoZW1hLCBza2lwUmVxdWlyZWQpO1xuICAgICAgdmFsaWRhdG9yc1tza2lwUmVxdWlyZWRdID0gdmFsaWRhdG9yO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3I7XG4gIH1cblxuICBjb21waWxlSnNvblNjaGVtYVZhbGlkYXRvcihqc29uU2NoZW1hLCBza2lwUmVxdWlyZWQpIHtcbiAgICBsZXQgb3JpZ1JlcXVpcmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmIChza2lwUmVxdWlyZWQpIHtcbiAgICAgICAgb3JpZ1JlcXVpcmVkID0ganNvblNjaGVtYS5yZXF1aXJlZDtcbiAgICAgICAganNvblNjaGVtYS5yZXF1aXJlZCA9IFtdO1xuICAgICAgICByZXR1cm4gdGhpcy5hanZOb0RlZmF1bHRzLmNvbXBpbGUoanNvblNjaGVtYSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdGhpcy5hanYuY29tcGlsZShqc29uU2NoZW1hKTtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHNraXBSZXF1aXJlZCkge1xuICAgICAgICBqc29uU2NoZW1hLnJlcXVpcmVkID0gb3JpZ1JlcXVpcmVkO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHNldHNEZWZhdWx0VmFsdWVzKGpzb25TY2hlbWEpIHtcbiAgICByZXR1cm4ganNvblNjaGVtYSAmJiBqc29uU2NoZW1hLnByb3BlcnRpZXMgJiYgaGFzRGVmYXVsdHMoanNvblNjaGVtYS5wcm9wZXJ0aWVzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZVZhbGlkYXRpb25FcnJvcihlcnJvcnMpIHtcbiAgY29uc3QgZXJyb3JIYXNoID0ge307XG4gIGxldCBpbmRleCA9IDA7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlcnJvcnMubGVuZ3RoOyArK2kpIHtcbiAgICBsZXQgZXJyb3IgPSBlcnJvcnNbaV07XG4gICAgbGV0IGtleSA9IGVycm9yLmRhdGFQYXRoLnN1YnN0cmluZygxKTtcblxuICAgIGlmICgha2V5KSB7XG4gICAgICBsZXQgbWF0Y2ggPSAvc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgJyguKyknLy5leGVjKGVycm9yLm1lc3NhZ2UpO1xuICAgICAgaWYgKG1hdGNoICYmIG1hdGNoLmxlbmd0aCA+IDEpIHtcbiAgICAgICAga2V5ID0gbWF0Y2hbMV07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFrZXkgJiYgZXJyb3IucGFyYW1zICYmIGVycm9yLnBhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHkpIHtcbiAgICAgIGtleSA9IGVycm9yLnBhcmFtcy5hZGRpdGlvbmFsUHJvcGVydHk7XG4gICAgfVxuXG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIGtleSA9IChpbmRleCsrKS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGVycm9ySGFzaFtrZXldID0gW3tcbiAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICBrZXl3b3JkOiBlcnJvci5rZXl3b3JkLFxuICAgICAgcGFyYW1zOiBlcnJvci5wYXJhbXNcbiAgICB9XTtcbiAgfVxuXG4gIHJldHVybiBuZXcgVmFsaWRhdGlvbkVycm9yKGVycm9ySGFzaCk7XG59XG5cbmZ1bmN0aW9uIGhhc0RlZmF1bHRzKG9iaikge1xuICBpZiAoQXJyYXkuaXNBcnJheShvYmopKSB7XG4gICAgcmV0dXJuIGFycmF5SGFzRGVmYXVsdHMob2JqKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqZWN0SGFzRGVmYXVsdHMob2JqKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBhcnJheUhhc0RlZmF1bHRzKGFycikge1xuICBmb3IgKGxldCBpID0gMCwgbCA9IGFyci5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICBjb25zdCB2YWwgPSBhcnJbaV07XG5cbiAgICBpZiAodmFsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmIGhhc0RlZmF1bHRzKHZhbCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gb2JqZWN0SGFzRGVmYXVsdHMob2JqKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmopO1xuXG4gIGZvciAobGV0IGkgPSAwLCBsID0ga2V5cy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICBjb25zdCBrZXkgPSBrZXlzW2ldO1xuXG4gICAgaWYgKGtleSA9PT0gJ2RlZmF1bHQnKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgdmFsID0gb2JqW2tleV07XG5cbiAgICAgIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgaGFzRGVmYXVsdHModmFsKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG4iXX0=

@@ -8,2 +8,6 @@ 'use strict';

var _assign = require('babel-runtime/core-js/object/assign');
var _assign2 = _interopRequireDefault(_assign);
var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck');

@@ -29,2 +33,10 @@

var _RelationJoinBuilder = require('./eager/RelationJoinBuilder');
var _RelationJoinBuilder2 = _interopRequireDefault(_RelationJoinBuilder);
var _RelationExpression = require('../RelationExpression');
var _RelationExpression2 = _interopRequireDefault(_RelationExpression);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

@@ -40,4 +52,3 @@

_this.joinOperation = opt.joinOperation;
_this.relationName = null;
_this.expression = null;
_this.callOpt = null;

@@ -48,3 +59,3 @@ return _this;

JoinRelationOperation.prototype.call = function call(builder, args) {
this.relationName = args[0];
this.expression = _RelationExpression2.default.parse(args[0]);
this.callOpt = args[1] || {};

@@ -55,17 +66,40 @@ return true;

JoinRelationOperation.prototype.onBeforeBuild = function onBeforeBuild(builder) {
var relation = builder.modelClass().getRelation(this.relationName);
var alias = null;
var modelClass = builder.modelClass();
var opt = (0, _assign2.default)({}, this.callOpt);
if (this.callOpt.alias === false) {
alias = relation.relatedModelClass.tableName;
} else if (this.callOpt.alias === true || !this.callOpt.alias) {
alias = relation.name;
} else if (_lodash2.default.isString(this.callOpt.alias)) {
alias = this.callOpt.alias;
opt.aliases = (0, _assign2.default)({}, opt.aliases);
opt.joinOperation = this.opt.joinOperation;
// Special case for one single relation.
if (this.expression.numChildren === 1) {
var relationName = void 0;
// A bit crappy way to get the only child.
this.expression.forEachChild(function (child, childName) {
relationName = childName;
});
var relation = modelClass.getRelation(relationName);
var alias = null;
if (opt.alias === false) {
alias = relation.relatedModelClass.tableName;
} else if (opt.alias === true || !opt.alias) {
alias = relation.name;
} else if (_lodash2.default.isString(opt.alias)) {
alias = opt.alias;
}
if (alias) {
opt.aliases[relationName] = alias;
}
}
relation.join(builder, {
joinOperation: this.joinOperation,
relatedTableAlias: alias
var joinBuilder = new _RelationJoinBuilder2.default({
modelClass: modelClass,
expression: this.expression,
opt: opt
});
joinBuilder.buildJoinOnly(builder);
};

@@ -77,2 +111,2 @@

exports.default = JoinRelationOperation;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkpvaW5SZWxhdGlvbk9wZXJhdGlvbi5qcyJdLCJuYW1lcyI6WyJKb2luUmVsYXRpb25PcGVyYXRpb24iLCJuYW1lIiwib3B0Iiwiam9pbk9wZXJhdGlvbiIsInJlbGF0aW9uTmFtZSIsImNhbGxPcHQiLCJjYWxsIiwiYnVpbGRlciIsImFyZ3MiLCJvbkJlZm9yZUJ1aWxkIiwicmVsYXRpb24iLCJtb2RlbENsYXNzIiwiZ2V0UmVsYXRpb24iLCJhbGlhcyIsInJlbGF0ZWRNb2RlbENsYXNzIiwidGFibGVOYW1lIiwiaXNTdHJpbmciLCJqb2luIiwicmVsYXRlZFRhYmxlQWxpYXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7Ozs7SUFFcUJBLHFCOzs7QUFFbkIsaUNBQVlDLElBQVosRUFBa0JDLEdBQWxCLEVBQXVCO0FBQUE7O0FBQUEsK0RBQ3JCLGlDQUFNRCxJQUFOLEVBQVlDLEdBQVosQ0FEcUI7O0FBR3JCLFVBQUtDLGFBQUwsR0FBcUJELElBQUlDLGFBQXpCO0FBQ0EsVUFBS0MsWUFBTCxHQUFvQixJQUFwQjtBQUNBLFVBQUtDLE9BQUwsR0FBZSxJQUFmO0FBTHFCO0FBTXRCOztrQ0FFREMsSSxpQkFBS0MsTyxFQUFTQyxJLEVBQU07QUFDbEIsU0FBS0osWUFBTCxHQUFvQkksS0FBSyxDQUFMLENBQXBCO0FBQ0EsU0FBS0gsT0FBTCxHQUFlRyxLQUFLLENBQUwsS0FBVyxFQUExQjtBQUNBLFdBQU8sSUFBUDtBQUNELEc7O2tDQUVEQyxhLDBCQUFjRixPLEVBQVM7QUFDckIsUUFBTUcsV0FBV0gsUUFBUUksVUFBUixHQUFxQkMsV0FBckIsQ0FBaUMsS0FBS1IsWUFBdEMsQ0FBakI7QUFDQSxRQUFJUyxRQUFRLElBQVo7O0FBRUEsUUFBSSxLQUFLUixPQUFMLENBQWFRLEtBQWIsS0FBdUIsS0FBM0IsRUFBa0M7QUFDaENBLGNBQVFILFNBQVNJLGlCQUFULENBQTJCQyxTQUFuQztBQUNELEtBRkQsTUFFTyxJQUFJLEtBQUtWLE9BQUwsQ0FBYVEsS0FBYixLQUF1QixJQUF2QixJQUErQixDQUFDLEtBQUtSLE9BQUwsQ0FBYVEsS0FBakQsRUFBd0Q7QUFDN0RBLGNBQVFILFNBQVNULElBQWpCO0FBQ0QsS0FGTSxNQUVBLElBQUksaUJBQUVlLFFBQUYsQ0FBVyxLQUFLWCxPQUFMLENBQWFRLEtBQXhCLENBQUosRUFBb0M7QUFDekNBLGNBQVEsS0FBS1IsT0FBTCxDQUFhUSxLQUFyQjtBQUNEOztBQUVESCxhQUFTTyxJQUFULENBQWNWLE9BQWQsRUFBdUI7QUFDckJKLHFCQUFlLEtBQUtBLGFBREM7QUFFckJlLHlCQUFtQkw7QUFGRSxLQUF2QjtBQUlELEc7Ozs7O2tCQWhDa0JiLHFCIiwiZmlsZSI6IkpvaW5SZWxhdGlvbk9wZXJhdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUXVlcnlCdWlsZGVyT3BlcmF0aW9uIGZyb20gJy4vUXVlcnlCdWlsZGVyT3BlcmF0aW9uJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgSm9pblJlbGF0aW9uT3BlcmF0aW9uIGV4dGVuZHMgUXVlcnlCdWlsZGVyT3BlcmF0aW9uIHtcblxuICBjb25zdHJ1Y3RvcihuYW1lLCBvcHQpIHtcbiAgICBzdXBlcihuYW1lLCBvcHQpO1xuXG4gICAgdGhpcy5qb2luT3BlcmF0aW9uID0gb3B0LmpvaW5PcGVyYXRpb247XG4gICAgdGhpcy5yZWxhdGlvbk5hbWUgPSBudWxsO1xuICAgIHRoaXMuY2FsbE9wdCA9IG51bGw7XG4gIH1cblxuICBjYWxsKGJ1aWxkZXIsIGFyZ3MpIHtcbiAgICB0aGlzLnJlbGF0aW9uTmFtZSA9IGFyZ3NbMF07XG4gICAgdGhpcy5jYWxsT3B0ID0gYXJnc1sxXSB8fCB7fTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIG9uQmVmb3JlQnVpbGQoYnVpbGRlcikge1xuICAgIGNvbnN0IHJlbGF0aW9uID0gYnVpbGRlci5tb2RlbENsYXNzKCkuZ2V0UmVsYXRpb24odGhpcy5yZWxhdGlvbk5hbWUpO1xuICAgIGxldCBhbGlhcyA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5jYWxsT3B0LmFsaWFzID09PSBmYWxzZSkge1xuICAgICAgYWxpYXMgPSByZWxhdGlvbi5yZWxhdGVkTW9kZWxDbGFzcy50YWJsZU5hbWU7XG4gICAgfSBlbHNlIGlmICh0aGlzLmNhbGxPcHQuYWxpYXMgPT09IHRydWUgfHwgIXRoaXMuY2FsbE9wdC5hbGlhcykge1xuICAgICAgYWxpYXMgPSByZWxhdGlvbi5uYW1lO1xuICAgIH0gZWxzZSBpZiAoXy5pc1N0cmluZyh0aGlzLmNhbGxPcHQuYWxpYXMpKSB7XG4gICAgICBhbGlhcyA9IHRoaXMuY2FsbE9wdC5hbGlhcztcbiAgICB9XG5cbiAgICByZWxhdGlvbi5qb2luKGJ1aWxkZXIsIHtcbiAgICAgIGpvaW5PcGVyYXRpb246IHRoaXMuam9pbk9wZXJhdGlvbixcbiAgICAgIHJlbGF0ZWRUYWJsZUFsaWFzOiBhbGlhc1xuICAgIH0pO1xuICB9XG59XG4iXX0=
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIkpvaW5SZWxhdGlvbk9wZXJhdGlvbi5qcyJdLCJuYW1lcyI6WyJKb2luUmVsYXRpb25PcGVyYXRpb24iLCJuYW1lIiwib3B0IiwiZXhwcmVzc2lvbiIsImNhbGxPcHQiLCJjYWxsIiwiYnVpbGRlciIsImFyZ3MiLCJwYXJzZSIsIm9uQmVmb3JlQnVpbGQiLCJtb2RlbENsYXNzIiwiYWxpYXNlcyIsImpvaW5PcGVyYXRpb24iLCJudW1DaGlsZHJlbiIsInJlbGF0aW9uTmFtZSIsImZvckVhY2hDaGlsZCIsImNoaWxkIiwiY2hpbGROYW1lIiwicmVsYXRpb24iLCJnZXRSZWxhdGlvbiIsImFsaWFzIiwicmVsYXRlZE1vZGVsQ2xhc3MiLCJ0YWJsZU5hbWUiLCJpc1N0cmluZyIsImpvaW5CdWlsZGVyIiwiYnVpbGRKb2luT25seSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0lBRXFCQSxxQjs7O0FBRW5CLGlDQUFZQyxJQUFaLEVBQWtCQyxHQUFsQixFQUF1QjtBQUFBOztBQUFBLCtEQUNyQixpQ0FBTUQsSUFBTixFQUFZQyxHQUFaLENBRHFCOztBQUdyQixVQUFLQyxVQUFMLEdBQWtCLElBQWxCO0FBQ0EsVUFBS0MsT0FBTCxHQUFlLElBQWY7QUFKcUI7QUFLdEI7O2tDQUVEQyxJLGlCQUFLQyxPLEVBQVNDLEksRUFBTTtBQUNsQixTQUFLSixVQUFMLEdBQWtCLDZCQUFtQkssS0FBbkIsQ0FBeUJELEtBQUssQ0FBTCxDQUF6QixDQUFsQjtBQUNBLFNBQUtILE9BQUwsR0FBZUcsS0FBSyxDQUFMLEtBQVcsRUFBMUI7QUFDQSxXQUFPLElBQVA7QUFDRCxHOztrQ0FFREUsYSwwQkFBY0gsTyxFQUFTO0FBQ3JCLFFBQU1JLGFBQWFKLFFBQVFJLFVBQVIsRUFBbkI7QUFDQSxRQUFNUixNQUFNLHNCQUFjLEVBQWQsRUFBa0IsS0FBS0UsT0FBdkIsQ0FBWjs7QUFFQUYsUUFBSVMsT0FBSixHQUFjLHNCQUFjLEVBQWQsRUFBa0JULElBQUlTLE9BQXRCLENBQWQ7QUFDQVQsUUFBSVUsYUFBSixHQUFvQixLQUFLVixHQUFMLENBQVNVLGFBQTdCOztBQUVBO0FBQ0EsUUFBSSxLQUFLVCxVQUFMLENBQWdCVSxXQUFoQixLQUFnQyxDQUFwQyxFQUF1QztBQUNyQyxVQUFJQyxxQkFBSjs7QUFFQTtBQUNBLFdBQUtYLFVBQUwsQ0FBZ0JZLFlBQWhCLENBQTZCLFVBQUNDLEtBQUQsRUFBUUMsU0FBUixFQUFzQjtBQUNqREgsdUJBQWVHLFNBQWY7QUFDRCxPQUZEOztBQUlBLFVBQU1DLFdBQVdSLFdBQVdTLFdBQVgsQ0FBdUJMLFlBQXZCLENBQWpCO0FBQ0EsVUFBSU0sUUFBUSxJQUFaOztBQUVBLFVBQUlsQixJQUFJa0IsS0FBSixLQUFjLEtBQWxCLEVBQXlCO0FBQ3ZCQSxnQkFBUUYsU0FBU0csaUJBQVQsQ0FBMkJDLFNBQW5DO0FBQ0QsT0FGRCxNQUVPLElBQUlwQixJQUFJa0IsS0FBSixLQUFjLElBQWQsSUFBc0IsQ0FBQ2xCLElBQUlrQixLQUEvQixFQUFzQztBQUMzQ0EsZ0JBQVFGLFNBQVNqQixJQUFqQjtBQUNELE9BRk0sTUFFQSxJQUFJLGlCQUFFc0IsUUFBRixDQUFXckIsSUFBSWtCLEtBQWYsQ0FBSixFQUEyQjtBQUNoQ0EsZ0JBQVFsQixJQUFJa0IsS0FBWjtBQUNEOztBQUVELFVBQUlBLEtBQUosRUFBVztBQUNUbEIsWUFBSVMsT0FBSixDQUFZRyxZQUFaLElBQTRCTSxLQUE1QjtBQUNEO0FBQ0Y7O0FBRUQsUUFBTUksY0FBYyxrQ0FBd0I7QUFDMUNkLDRCQUQwQztBQUUxQ1Asa0JBQVksS0FBS0EsVUFGeUI7QUFHMUNELFdBQUtBO0FBSHFDLEtBQXhCLENBQXBCOztBQU1Bc0IsZ0JBQVlDLGFBQVosQ0FBMEJuQixPQUExQjtBQUNELEc7Ozs7O2tCQXREa0JOLHFCIiwiZmlsZSI6IkpvaW5SZWxhdGlvbk9wZXJhdGlvbi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBfIGZyb20gJ2xvZGFzaCc7XG5pbXBvcnQgUXVlcnlCdWlsZGVyT3BlcmF0aW9uIGZyb20gJy4vUXVlcnlCdWlsZGVyT3BlcmF0aW9uJztcbmltcG9ydCBSZWxhdGlvbkpvaW5CdWlsZGVyIGZyb20gJy4vZWFnZXIvUmVsYXRpb25Kb2luQnVpbGRlcic7XG5pbXBvcnQgUmVsYXRpb25FeHByZXNzaW9uIGZyb20gJy4uL1JlbGF0aW9uRXhwcmVzc2lvbic7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEpvaW5SZWxhdGlvbk9wZXJhdGlvbiBleHRlbmRzIFF1ZXJ5QnVpbGRlck9wZXJhdGlvbiB7XG5cbiAgY29uc3RydWN0b3IobmFtZSwgb3B0KSB7XG4gICAgc3VwZXIobmFtZSwgb3B0KTtcblxuICAgIHRoaXMuZXhwcmVzc2lvbiA9IG51bGw7XG4gICAgdGhpcy5jYWxsT3B0ID0gbnVsbDtcbiAgfVxuXG4gIGNhbGwoYnVpbGRlciwgYXJncykge1xuICAgIHRoaXMuZXhwcmVzc2lvbiA9IFJlbGF0aW9uRXhwcmVzc2lvbi5wYXJzZShhcmdzWzBdKTtcbiAgICB0aGlzLmNhbGxPcHQgPSBhcmdzWzFdIHx8IHt9O1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgb25CZWZvcmVCdWlsZChidWlsZGVyKSB7XG4gICAgY29uc3QgbW9kZWxDbGFzcyA9IGJ1aWxkZXIubW9kZWxDbGFzcygpO1xuICAgIGNvbnN0IG9wdCA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuY2FsbE9wdCk7XG5cbiAgICBvcHQuYWxpYXNlcyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdC5hbGlhc2VzKTtcbiAgICBvcHQuam9pbk9wZXJhdGlvbiA9IHRoaXMub3B0LmpvaW5PcGVyYXRpb247XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgZm9yIG9uZSBzaW5nbGUgcmVsYXRpb24uXG4gICAgaWYgKHRoaXMuZXhwcmVzc2lvbi5udW1DaGlsZHJlbiA9PT0gMSkge1xuICAgICAgbGV0IHJlbGF0aW9uTmFtZTtcblxuICAgICAgLy8gQSBiaXQgY3JhcHB5IHdheSB0byBnZXQgdGhlIG9ubHkgY2hpbGQuXG4gICAgICB0aGlzLmV4cHJlc3Npb24uZm9yRWFjaENoaWxkKChjaGlsZCwgY2hpbGROYW1lKSA9PiB7XG4gICAgICAgIHJlbGF0aW9uTmFtZSA9IGNoaWxkTmFtZTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZWxhdGlvbiA9IG1vZGVsQ2xhc3MuZ2V0UmVsYXRpb24ocmVsYXRpb25OYW1lKTtcbiAgICAgIGxldCBhbGlhcyA9IG51bGw7XG5cbiAgICAgIGlmIChvcHQuYWxpYXMgPT09IGZhbHNlKSB7XG4gICAgICAgIGFsaWFzID0gcmVsYXRpb24ucmVsYXRlZE1vZGVsQ2xhc3MudGFibGVOYW1lO1xuICAgICAgfSBlbHNlIGlmIChvcHQuYWxpYXMgPT09IHRydWUgfHwgIW9wdC5hbGlhcykge1xuICAgICAgICBhbGlhcyA9IHJlbGF0aW9uLm5hbWU7XG4gICAgICB9IGVsc2UgaWYgKF8uaXNTdHJpbmcob3B0LmFsaWFzKSkge1xuICAgICAgICBhbGlhcyA9IG9wdC5hbGlhcztcbiAgICAgIH1cblxuICAgICAgaWYgKGFsaWFzKSB7XG4gICAgICAgIG9wdC5hbGlhc2VzW3JlbGF0aW9uTmFtZV0gPSBhbGlhcztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBqb2luQnVpbGRlciA9IG5ldyBSZWxhdGlvbkpvaW5CdWlsZGVyKHtcbiAgICAgIG1vZGVsQ2xhc3MsXG4gICAgICBleHByZXNzaW9uOiB0aGlzLmV4cHJlc3Npb24sXG4gICAgICBvcHQ6IG9wdFxuICAgIH0pO1xuXG4gICAgam9pbkJ1aWxkZXIuYnVpbGRKb2luT25seShidWlsZGVyKTtcbiAgfVxufVxuIl19

@@ -251,7 +251,13 @@ 'use strict';

RelationExpression.prototype.forEachChild = function forEachChild(cb) {
_lodash2.default.forOwn(this.children, function (child, childName) {
if (!ALL_RECURSIVE_REGEX.test(childName) && !RECURSIVE_REGEX.test(childName)) {
cb(child, childName);
if (this.numChildren) {
var keys = (0, _keys2.default)(this.children);
for (var i = 0, l = keys.length; i < l; ++i) {
var childName = keys[i];
if (!ALL_RECURSIVE_REGEX.test(childName) && !RECURSIVE_REGEX.test(childName)) {
cb(this.children[childName], childName);
}
}
});
}
};

@@ -446,2 +452,2 @@

}
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJlbGF0aW9uRXhwcmVzc2lvbi5qcyJdLCJuYW1lcyI6WyJSRUNVUlNJVkVfUkVHRVgiLCJBTExfUkVDVVJTSVZFX1JFR0VYIiwiUmVsYXRpb25FeHByZXNzaW9uIiwibm9kZSIsInJlY3Vyc2lvbkRlcHRoIiwiZmlsdGVycyIsIm5hbWUiLCJhcmdzIiwibnVtQ2hpbGRyZW4iLCJjaGlsZHJlbiIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsInZhbHVlIiwid3JpdGFibGUiLCJwYXJzZSIsImV4cHIiLCJpc1N0cmluZyIsImlzRW1wdHkiLCJ0cmltIiwiZXJyIiwibWVzc2FnZSIsImNhdXNlIiwiZnJvbUdyYXBoIiwiZ3JhcGgiLCJtb2RlbEdyYXBoVG9Ob2RlIiwibmV3Tm9kZSIsIm1lcmdlIiwibWVyZ2VkIiwiY2xvbmUiLCJ2aXNpdCIsImNoaWxkTmFtZXMiLCJtYXhOYW1lIiwibWF4RGVwdGgiLCJyZWN1ckNvdW50IiwiaSIsImwiLCJsZW5ndGgiLCJkZXB0aCIsIm1heFJlY3Vyc2lvbkRlcHRoIiwiaXNTdWJFeHByZXNzaW9uIiwiaXNBbGxSZWN1cnNpdmUiLCJldmVyeSIsImNoaWxkIiwiY2hpbGROYW1lIiwib3duU3ViRXhwcmVzc2lvbiIsImNoaWxkRXhwcmVzc2lvbiIsInN1YkV4cHJlc3Npb24iLCJrZXkiLCJ0ZXN0IiwiX3JlY3Vyc2lvbkRlcHRoIiwiX2ZpbHRlcnMiLCJjbG9uZURlZXAiLCJmb3JFYWNoQ2hpbGQiLCJjYiIsImZvck93biIsImFkZEFub255bW91c0ZpbHRlckF0UGF0aCIsInBhdGgiLCJmaWx0ZXIiLCJmaWx0ZXJOb2RlcyIsIl9ub2Rlc0F0UGF0aCIsImlkeCIsImZpbHRlck5hbWUiLCJlYWNoIiwicHVzaCIsInRvU3RyaW5nIiwicGF0aEV4cHJlc3Npb24iLCJub2RlcyIsIm5vZGVzQXRQYXRoIiwidGFyZ2V0IiwiZXhwcmVzc2lvbnMiLCJ0YXJnZXRDaGlsZCIsInJlYyIsImV4ZWMiLCJwYXJzZUludCIsIk51bWJlciIsIlBPU0lUSVZFX0lORklOSVRZIiwidmlzaXRvciIsImtleXMiLCJjaGlsZE5vZGUiLCJjaGlsZEV4cHIiLCJ2YWx1ZXMiLCJtYXAiLCJqb2luIiwic3RyIiwibW9kZWxzIiwiQXJyYXkiLCJpc0FycmF5IiwibW9kZWxUb05vZGUiLCJtb2RlbCIsIm1vZGVsQ2xhc3MiLCJjb25zdHJ1Y3RvciIsInJlbGF0aW9ucyIsImdldFJlbGF0aW9uQXJyYXkiLCJyIiwibHIiLCJyZWxOYW1lIiwiaGFzT3duUHJvcGVydHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxrQkFBa0IsV0FBeEI7QUFDQSxJQUFNQyxzQkFBc0IsTUFBNUI7O0lBRXFCQyxrQjtBQUVuQiw4QkFBWUMsSUFBWixFQUFrQkMsY0FBbEIsRUFBa0NDLE9BQWxDLEVBQTJDO0FBQUE7O0FBQ3pDRixXQUFPQSxRQUFRLEVBQWY7O0FBRUEsU0FBS0csSUFBTCxHQUFZSCxLQUFLRyxJQUFMLElBQWEsSUFBekI7QUFDQSxTQUFLQyxJQUFMLEdBQVlKLEtBQUtJLElBQUwsSUFBYSxFQUF6QjtBQUNBLFNBQUtDLFdBQUwsR0FBbUJMLEtBQUtLLFdBQUwsSUFBb0IsQ0FBdkM7QUFDQSxTQUFLQyxRQUFMLEdBQWdCTixLQUFLTSxRQUFMLElBQWlCLEVBQWpDOztBQUVBQyxXQUFPQyxjQUFQLENBQXNCLElBQXRCLEVBQTRCLGlCQUE1QixFQUErQztBQUM3Q0Msa0JBQVksS0FEaUM7QUFFN0NDLGFBQU9ULGtCQUFrQjtBQUZvQixLQUEvQzs7QUFLQU0sV0FBT0MsY0FBUCxDQUFzQixJQUF0QixFQUE0QixVQUE1QixFQUF3QztBQUN0Q0Msa0JBQVksS0FEMEI7QUFFdENFLGdCQUFVLElBRjRCO0FBR3RDRCxhQUFPUixXQUFXO0FBSG9CLEtBQXhDO0FBS0Q7O0FBRUQ7Ozs7OztxQkFJT1UsSyxrQkFBTUMsSSxFQUFNO0FBQ2pCLFFBQUlBLGdCQUFn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RCxrQkFBWUgsT0FBT2xELENBQVAsQ0FBWixFQUF1QmhDLElBQXZCO0FBQ0Q7QUFDRixHQUpELE1BSU87QUFDTHFGLGdCQUFZSCxNQUFaLEVBQW9CbEYsSUFBcEI7QUFDRDs7QUFFRCxTQUFPQSxJQUFQO0FBQ0Q7O0FBRUQsU0FBU3FGLFdBQVQsQ0FBcUJDLEtBQXJCLEVBQTRCdEYsSUFBNUIsRUFBa0M7QUFDaEMsTUFBTXVGLGFBQWFELE1BQU1FLFdBQXpCO0FBQ0EsTUFBTUMsWUFBWUYsV0FBV0csZ0JBQVgsRUFBbEI7O0FBRUEsT0FBSyxJQUFJQyxJQUFJLENBQVIsRUFBV0MsS0FBS0gsVUFBVXZELE1BQS9CLEVBQXVDeUQsSUFBSUMsRUFBM0MsRUFBK0MsRUFBRUQsQ0FBakQsRUFBb0Q7QUFDbEQsUUFBTUUsVUFBVUosVUFBVUUsQ0FBVixFQUFheEYsSUFBN0I7O0FBRUEsUUFBSW1GLE1BQU1RLGNBQU4sQ0FBcUJELE9BQXJCLENBQUosRUFBbUM7QUFDakMsVUFBSWpCLFlBQVk1RSxLQUFLTSxRQUFMLENBQWN1RixPQUFkLENBQWhCOztBQUVBLFVBQUksQ0FBQ2pCLFNBQUwsRUFBZ0I7QUFDZEEsb0JBQVlyRCxRQUFRc0UsT0FBUixDQUFaOztBQUVBN0YsYUFBS00sUUFBTCxDQUFjdUYsT0FBZCxJQUF5QmpCLFNBQXpCO0FBQ0E1RSxhQUFLSyxXQUFMO0FBQ0Q7O0FBRURpQix1QkFBaUJnRSxNQUFNTyxPQUFOLENBQWpCLEVBQWlDakIsU0FBakM7QUFDRDtBQUNGO0FBQ0Y7O0FBRUQsU0FBU3JELE9BQVQsQ0FBaUJwQixJQUFqQixFQUF1QjtBQUNyQixTQUFPO0FBQ0xBLFVBQU1BLFFBQVEsRUFEVDtBQUVMQyxVQUFNLEVBRkQ7QUFHTEUsY0FBVSxzQkFBYyxJQUFkLENBSEw7QUFJTEQsaUJBQWE7QUFKUixHQUFQO0FBTUQiLCJmaWxlIjoiUmVsYXRpb25FeHByZXNzaW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXJzZXIgZnJvbSAnLi9wYXJzZXJzL3JlbGF0aW9uRXhwcmVzc2lvblBhcnNlcic7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL21vZGVsL1ZhbGlkYXRpb25FcnJvcic7XG5cbmNvbnN0IFJFQ1VSU0lWRV9SRUdFWCA9IC9eXFxeKFxcZCopJC87XG5jb25zdCBBTExfUkVDVVJTSVZFX1JFR0VYID0gL15cXCokLztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVsYXRpb25FeHByZXNzaW9uIHtcblxuICBjb25zdHJ1Y3Rvcihub2RlLCByZWN1cnNpb25EZXB0aCwgZmlsdGVycykge1xuICAgIG5vZGUgPSBub2RlIHx8IHt9O1xuXG4gICAgdGhpcy5uYW1lID0gbm9kZS5uYW1lIHx8IG51bGw7XG4gICAgdGhpcy5hcmdzID0gbm9kZS5hcmdzIHx8IFtdO1xuICAgIHRoaXMubnVtQ2hpbGRyZW4gPSBub2RlLm51bUNoaWxkcmVuIHx8IDA7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4gfHwge307XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19yZWN1cnNpb25EZXB0aCcsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHJlY3Vyc2lvbkRlcHRoIHx8IDBcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2ZpbHRlcnMnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZpbHRlcnMgfHwge31cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWxhdGlvbkV4cHJlc3Npb259IGV4cHJcbiAgICogQHJldHVybnMge1JlbGF0aW9uRXhwcmVzc2lvbn1cbiAgICovXG4gIHN0YXRpYyBwYXJzZShleHByKSB7XG4gICAgaWYgKGV4cHIgaW5zdGFuY2VvZiBSZWxhdGlvbkV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybiBleHByO1xuICAgIH0gZWxzZSBpZiAoIV8uaXNTdHJpbmcoZXhwcikgfHwgXy5pc0VtcHR5KGV4cHIudHJpbSgpKSkge1xuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbkV4cHJlc3Npb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbkV4cHJlc3Npb24ocGFyc2VyLnBhcnNlKGV4cHIpKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHtcbiAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCByZWxhdGlvbiBleHByZXNzaW9uIFwiJyArIGV4cHIgKyAnXCInLFxuICAgICAgICAgIGNhdXNlOiBlcnIubWVzc2FnZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IGdyYXBoXG4gICAqL1xuICBzdGF0aWMgZnJvbUdyYXBoKGdyYXBoKSB7XG4gICAgaWYgKCFncmFwaCkge1xuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbkV4cHJlc3Npb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlbGF0aW9uRXhwcmVzc2lvbihtb2RlbEdyYXBoVG9Ob2RlKGdyYXBoLCBuZXdOb2RlKCkpKTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJzO1xuICB9XG5cbiAgc2V0IGZpbHRlcnMoZmlsdGVycykge1xuICAgIHRoaXMuX2ZpbHRlcnMgPSBmaWx0ZXJzIHx8IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlbGF0aW9uRXhwcmVzc2lvbn0gZXhwclxuICAgKiBAcmV0dXJucyB7UmVsYXRpb25FeHByZXNzaW9ufVxuICAgKi9cbiAgbWVyZ2UoZXhwcikge1xuICAgIGNvbnN0IG1lcmdlZCA9IHRoaXMuY2xvbmUoKTtcbiAgICBleHByID0gUmVsYXRpb25FeHByZXNzaW9uLnBhcnNlKGV4cHIpO1xuXG4gICAgbWVyZ2VkLm51bUNoaWxkcmVuICs9IGV4cHIubnVtQ2hpbGRyZW47XG4gICAgbWVyZ2VkLmNoaWxkcmVuID0gXy5tZXJnZShtZXJnZWQuY2hpbGRyZW4sIGV4cHIuY2hpbGRyZW4pO1xuICAgIG1lcmdlZC5hcmdzID0gXy5tZXJnZShtZXJnZWQuYXJncywgZXhwci5hcmdzKTtcbiAgICBtZXJnZWQuZmlsdGVycyA9IF8ubWVyZ2UobWVyZ2VkLmZpbHRlcnMsIGV4cHIuZmlsdGVycyk7XG5cbiAgICAvLyBIYW5kbGUgcmVjdXJzaXZlIGFuZCBhbGwgcmVjdXJzaXZlIG5vZGVzLlxuICAgIHZpc2l0KG1lcmdlZCwgKG5vZGUsIGNoaWxkTmFtZXMpID0+IHtcbiAgICAgIGxldCBtYXhOYW1lID0gbnVsbDtcbiAgICAgIGxldCBtYXhEZXB0aCA9IDA7XG4gICAgICBsZXQgcmVjdXJDb3VudCA9IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGROYW1lcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGNoaWxkTmFtZXNbaV07XG4gICAgICAgIGNvbnN0IGRlcHRoID0gbWF4UmVjdXJzaW9uRGVwdGgobmFtZSk7XG5cbiAgICAgICAgaWYgKGRlcHRoID4gMCkge1xuICAgICAgICAgIHJlY3VyQ291bnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXB0aCA+IG1heERlcHRoKSB7XG4gICAgICAgICAgbWF4RGVwdGggPSBkZXB0aDtcbiAgICAgICAgICBtYXhOYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmVjdXJDb3VudCA+IDApIHtcbiAgICAgICAgZGVsZXRlIG5vZGUuY2hpbGRyZW5bbm9kZS5uYW1lXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY3VyQ291bnQgPiAxKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGROYW1lcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gY2hpbGROYW1lc1tpXTtcblxuICAgICAgICAgIGlmIChuYW1lICE9PSBtYXhOYW1lKSB7XG4gICAgICAgICAgICBkZWxldGUgbm9kZS5jaGlsZHJlbltuYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtZXJnZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVsYXRpb25FeHByZXNzaW9ufSBleHByXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNTdWJFeHByZXNzaW9uKGV4cHIpIHtcbiAgICBleHByID0gUmVsYXRpb25FeHByZXNzaW9uLnBhcnNlKGV4cHIpO1xuXG4gICAgaWYgKHRoaXMuaXNBbGxSZWN1cnNpdmUoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGV4cHIuaXNBbGxSZWN1cnNpdmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNBbGxSZWN1cnNpdmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYW1lICE9PSBleHByLm5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhSZWN1cnNpb25EZXB0aCA9IGV4cHIubWF4UmVjdXJzaW9uRGVwdGgoKTtcblxuICAgIGlmIChtYXhSZWN1cnNpb25EZXB0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQWxsUmVjdXJzaXZlKCkgfHwgdGhpcy5tYXhSZWN1cnNpb25EZXB0aCgpID49IG1heFJlY3Vyc2lvbkRlcHRoO1xuICAgIH1cblxuICAgIHJldHVybiBfLmV2ZXJ5KGV4cHIuY2hpbGRyZW4sIChjaGlsZCwgY2hpbGROYW1lKSA9PiB7XG4gICAgICB2YXIgb3duU3ViRXhwcmVzc2lvbiA9IHRoaXMuY2hpbGRFeHByZXNzaW9uKGNoaWxkTmFtZSk7XG4gICAgICB2YXIgc3ViRXhwcmVzc2lvbiA9IGV4cHIuY2hpbGRFeHByZXNzaW9uKGNoaWxkTmFtZSk7XG5cbiAgICAgIHJldHVybiBvd25TdWJFeHByZXNzaW9uICYmIG93blN1YkV4cHJlc3Npb24uaXNTdWJFeHByZXNzaW9uKHN1YkV4cHJlc3Npb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBtYXhSZWN1cnNpb25EZXB0aCgpIHtcbiAgICBpZiAodGhpcy5udW1DaGlsZHJlbiAhPT0gMSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbilbMF07XG4gICAgcmV0dXJuIG1heFJlY3Vyc2lvbkRlcHRoKGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0FsbFJlY3Vyc2l2ZSgpIHtcbiAgICBpZiAodGhpcy5udW1DaGlsZHJlbiAhPT0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pWzBdO1xuICAgIHJldHVybiBBTExfUkVDVVJTSVZFX1JFR0VYLnRlc3Qoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UmVsYXRpb25FeHByZXNzaW9ufVxuICAgKi9cbiAgY2hpbGRFeHByZXNzaW9uKGNoaWxkTmFtZSkge1xuICAgIGlmICh0aGlzLmlzQWxsUmVjdXJzaXZlKCkgfHwgKGNoaWxkTmFtZSA9PT0gdGhpcy5uYW1lICYmIHRoaXMuX3JlY3Vyc2lvbkRlcHRoIDwgdGhpcy5tYXhSZWN1cnNpb25EZXB0aCgpIC0gMSkpIHtcbiAgICAgIHJldHVybiBuZXcgUmVsYXRpb25FeHByZXNzaW9uKHRoaXMsIHRoaXMuX3JlY3Vyc2lvbkRlcHRoICsgMSwgdGhpcy5fZmlsdGVycyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hpbGRyZW5bY2hpbGROYW1lXSkge1xuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbkV4cHJlc3Npb24odGhpcy5jaGlsZHJlbltjaGlsZE5hbWVdLCAwLCB0aGlzLl9maWx0ZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtSZWxhdGlvbkV4cHJlc3Npb259XG4gICAqL1xuICBjbG9uZSgpIHtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgYXJnczogdGhpcy5hcmdzLFxuICAgICAgbnVtQ2hpbGRyZW46IHRoaXMubnVtQ2hpbGRyZW4sXG4gICAgICBjaGlsZHJlbjogXy5jbG9uZURlZXAodGhpcy5jaGlsZHJlbilcbiAgICB9O1xuXG4gICAgY29uc3QgZmlsdGVycyA9IF8uY2xvbmUodGhpcy5fZmlsdGVycyk7XG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbkV4cHJlc3Npb24obm9kZSwgdGhpcy5fcmVjdXJzaW9uRGVwdGgsIGZpbHRlcnMpO1xuICB9XG5cbiAgZm9yRWFjaENoaWxkKGNiKSB7XG4gICAgXy5mb3JPd24odGhpcy5jaGlsZHJlbiwgKGNoaWxkLCBjaGlsZE5hbWUpID0+IHtcbiAgICAgIGlmICghQUxMX1JFQ1VSU0lWRV9SRUdFWC50ZXN0KGNoaWxkTmFtZSkgJiYgIVJFQ1VSU0lWRV9SRUdFWC50ZXN0KGNoaWxkTmFtZSkpIHtcbiAgICAgICAgY2IoY2hpbGQsIGNoaWxkTmFtZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVsYXRpb25FeHByZXNzaW9ufSBwYXRoXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oUXVlcnlCdWlsZGVyKX0gZmlsdGVyXG4gICAqL1xuICBhZGRBbm9ueW1vdXNGaWx0ZXJBdFBhdGgocGF0aCwgZmlsdGVyKSB7XG4gICAgbGV0IGZpbHRlck5vZGVzID0gdGhpcy5fbm9kZXNBdFBhdGgocGF0aCk7XG4gICAgbGV0IGZpbHRlcnMgPSB0aGlzLmZpbHRlcnM7XG5cbiAgICBsZXQgaWR4ID0gMDtcbiAgICBsZXQgZmlsdGVyTmFtZSA9IGBfZWZlMF9gO1xuXG4gICAgd2hpbGUgKGZpbHRlcnNbZmlsdGVyTmFtZV0pIHtcbiAgICAgIGZpbHRlck5hbWUgPSBgX2VmZSR7KytpZHh9X2A7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkoZmlsdGVyTm9kZXMpKSB7XG4gICAgICBmaWx0ZXJzW2ZpbHRlck5hbWVdID0gZmlsdGVyO1xuICAgICAgXy5lYWNoKGZpbHRlck5vZGVzLCBub2RlID0+IG5vZGUuYXJncy5wdXNoKGZpbHRlck5hbWUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0b1N0cmluZyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJuIHtBcnJheS48T2JqZWN0Pn1cbiAgICovXG4gIF9ub2Rlc0F0UGF0aChwYXRoRXhwcmVzc2lvbikge1xuICAgIGxldCBwYXRoID0gUmVsYXRpb25FeHByZXNzaW9uLnBhcnNlKHBhdGhFeHByZXNzaW9uKTtcbiAgICBsZXQgbm9kZXMgPSBbXTtcblxuICAgIFJlbGF0aW9uRXhwcmVzc2lvbi5ub2Rlc0F0UGF0aCh0aGlzLCBwYXRoLCBub2Rlcyk7XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgbm9kZXNBdFBhdGgodGFyZ2V0LCBwYXRoLCBleHByZXNzaW9ucykge1xuICAgIGlmIChwYXRoLm51bUNoaWxkcmVuID09IDApIHtcbiAgICAgIGV4cHJlc3Npb25zLnB1c2godGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgXy5mb3JPd24ocGF0aC5jaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRDaGlsZCA9IHRhcmdldC5jaGlsZHJlbltjaGlsZC5uYW1lXTtcblxuICAgICAgICBpZiAodGFyZ2V0Q2hpbGQpIHtcbiAgICAgICAgICB0aGlzLm5vZGVzQXRQYXRoKHRhcmdldENoaWxkLCBjaGlsZCwgZXhwcmVzc2lvbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF4UmVjdXJzaW9uRGVwdGgoa2V5KSB7XG4gIGNvbnN0IHJlYyA9IFJFQ1VSU0lWRV9SRUdFWC5leGVjKGtleSk7XG5cbiAgaWYgKHJlYykge1xuICAgIGNvbnN0IG1heERlcHRoID0gcmVjWzFdO1xuXG4gICAgaWYgKG1heERlcHRoKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQobWF4RGVwdGgsIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmlzaXQobm9kZSwgdmlzaXRvcikge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZS5jaGlsZHJlbik7XG5cbiAgdmlzaXRvcihub2RlLCBrZXlzKTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBub2RlLmNoaWxkcmVuW2tleV07XG5cbiAgICBpZiAoY2hpbGROb2RlKSB7XG4gICAgICB2aXNpdChjaGlsZE5vZGUsIHZpc2l0b3IpO1xuICAgIH1cbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHRvU3RyaW5nKG5vZGUpIHtcbiAgbGV0IGNoaWxkRXhwciA9IF8udmFsdWVzKG5vZGUuY2hpbGRyZW4pLm1hcCh0b1N0cmluZyk7XG5cbiAgaWYgKGNoaWxkRXhwci5sZW5ndGggPiAxKSB7XG4gICAgY2hpbGRFeHByID0gYFske2NoaWxkRXhwci5qb2luKCcsICcpfV1gO1xuICB9IGVsc2Uge1xuICAgIGNoaWxkRXhwciA9IGNoaWxkRXhwclswXTtcbiAgfVxuXG4gIGxldCBzdHIgPSBub2RlLm5hbWU7XG5cbiAgaWYgKG5vZGUuYXJncy5sZW5ndGgpIHtcbiAgICBzdHIgKz0gYCgke25vZGUuYXJncy5qb2luKCcsICcpfSlgO1xuICB9XG5cbiAgaWYgKGNoaWxkRXhwcikge1xuICAgIGlmIChzdHIpIHtcbiAgICAgIHJldHVybiBgJHtzdHJ9LiR7Y2hpbGRFeHByfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjaGlsZEV4cHI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW9kZWxHcmFwaFRvTm9kZShtb2RlbHMsIG5vZGUpIHtcbiAgaWYgKCFtb2RlbHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbHMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBtb2RlbHMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICBtb2RlbFRvTm9kZShtb2RlbHNbaV0sIG5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBtb2RlbFRvTm9kZShtb2RlbHMsIG5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIG1vZGVsVG9Ob2RlKG1vZGVsLCBub2RlKSB7XG4gIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbC5jb25zdHJ1Y3RvcjtcbiAgY29uc3QgcmVsYXRpb25zID0gbW9kZWxDbGFzcy5nZXRSZWxhdGlvbkFycmF5KCk7XG5cbiAgZm9yIChsZXQgciA9IDAsIGxyID0gcmVsYXRpb25zLmxlbmd0aDsgciA8IGxyOyArK3IpIHtcbiAgICBjb25zdCByZWxOYW1lID0gcmVsYXRpb25zW3JdLm5hbWU7XG5cbiAgICBpZiAobW9kZWwuaGFzT3duUHJvcGVydHkocmVsTmFtZSkpIHtcbiAgICAgIGxldCBjaGlsZE5vZGUgPSBub2RlLmNoaWxkcmVuW3JlbE5hbWVdO1xuXG4gICAgICBpZiAoIWNoaWxkTm9kZSkge1xuICAgICAgICBjaGlsZE5vZGUgPSBuZXdOb2RlKHJlbE5hbWUpO1xuXG4gICAgICAgIG5vZGUuY2hpbGRyZW5bcmVsTmFtZV0gPSBjaGlsZE5vZGU7XG4gICAgICAgIG5vZGUubnVtQ2hpbGRyZW4rKztcbiAgICAgIH1cblxuICAgICAgbW9kZWxHcmFwaFRvTm9kZShtb2RlbFtyZWxOYW1lXSwgY2hpbGROb2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbmV3Tm9kZShuYW1lKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSB8fCAnJyxcbiAgICBhcmdzOiBbXSxcbiAgICBjaGlsZHJlbjogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICBudW1DaGlsZHJlbjogMFxuICB9O1xufSJdfQ==
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlJlbGF0aW9uRXhwcmVzc2lvbi5qcyJdLCJuYW1lcyI6WyJSRUNVUlNJVkVfUkVHRVgiLCJBTExfUkVDVVJTSVZFX1JFR0VYIiwiUmVsYXRpb25FeHByZXNzaW9uIiwibm9kZSIsInJlY3Vyc2lvbkRlcHRoIiwiZmlsdGVycyIsIm5hbWUiLCJhcmdzIiwibnVtQ2hpbGRyZW4iLCJjaGlsZHJlbiIsIk9iamVjdCIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsInZhbHVlIiwid3JpdGFibGUiLCJwYXJzZSIsImV4cHIiLCJpc1N0cmluZyIsImlzRW1wdHkiLCJ0cmltIiwiZXJyIiwibWVzc2FnZSIsImNhdXNlIiwiZnJvbUdyYXBoIiwiZ3JhcGgiLCJtb2RlbEdyYXBoVG9Ob2RlIiwibmV3Tm9kZSIsIm1lcmdlIiwibWVyZ2VkIiwiY2xvbmUiLCJ2aXNpdCIsImNoaWxkTmFtZXMiLCJtYXhOYW1lIiwibWF4RGVwdGgiLCJyZWN1ckNvdW50IiwiaSIsImwiLCJsZW5ndGgiLCJkZXB0aCIsIm1heFJlY3Vyc2lvbkRlcHRoIiwiaXNTdWJFeHByZXNzaW9uIiwiaXNBbGxSZWN1cnNpdmUiLCJldmVyeSIsImNoaWxkIiwiY2hpbGROYW1lIiwib3duU3ViRXhwcmVzc2lvbiIsImNoaWxkRXhwcmVzc2lvbiIsInN1YkV4cHJlc3Npb24iLCJrZXkiLCJ0ZXN0IiwiX3JlY3Vyc2lvbkRlcHRoIiwiX2ZpbHRlcnMiLCJjbG9uZURlZXAiLCJmb3JFYWNoQ2hpbGQiLCJjYiIsImtleXMiLCJhZGRBbm9ueW1vdXNGaWx0ZXJBdFBhdGgiLCJwYXRoIiwiZmlsdGVyIiwiZmlsdGVyTm9kZXMiLCJfbm9kZXNBdFBhdGgiLCJpZHgiLCJmaWx0ZXJOYW1lIiwiZWFjaCIsInB1c2giLCJ0b1N0cmluZyIsInBhdGhFeHByZXNzaW9uIiwibm9kZXMiLCJub2Rlc0F0UGF0aCIsInRhcmdldCIsImV4cHJlc3Npb25zIiwiZm9yT3duIiwidGFyZ2V0Q2hpbGQiLCJyZWMiLCJleGVjIiwicGFyc2VJbnQiLCJOdW1iZXIiLCJQT1NJVElWRV9JTkZJTklUWSIsInZpc2l0b3IiLCJjaGlsZE5vZGUiLCJjaGlsZEV4cHIiLCJ2YWx1ZXMiLCJtYXAiLCJqb2luIiwic3RyIiwibW9kZWxzIiwiQXJyYXkiLCJpc0FycmF5IiwibW9kZWxUb05vZGUiLCJtb2RlbCIsIm1vZGVsQ2xhc3MiLCJjb25zdHJ1Y3RvciIsInJlbGF0aW9ucyIsImdldFJlbGF0aW9uQXJyYXkiLCJyIiwibHIiLCJyZWxOYW1lIiwiaGFzT3duUHJvcGVydHkiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxrQkFBa0IsV0FBeEI7QUFDQSxJQUFNQyxzQkFBc0IsTUFBNUI7O0lBRXFCQyxrQjtBQUVuQiw4QkFBWUMsSUFBWixFQUFrQkMsY0FBbEIsRUFBa0NDLE9BQWxDLEVBQTJDO0FBQUE7O0FBQ3pDRixXQUFPQSxRQUFRLEVBQWY7O0FBRUEsU0FBS0csSUFBTCxHQUFZSCxLQUFLRyxJQUFMLElBQWEsSUFBekI7QUFDQSxTQUFLQyxJQUFMLEdBQVlKLEtBQUtJLElBQUwsSUFBYSxFQUF6QjtBQUNBLFNBQUtDLFdBQUwsR0FBbUJMLEtBQUtLLFdBQUwsSUFBb0IsQ0FBdkM7QUFDQSxTQUFLQyxRQUFMLEdBQWdCTixLQUFLTSxRQUFMLElBQWlCLEVBQWpDOztBQUVBQyxXQUFPQyxjQUFQLENBQXNCLElBQXRCLEVBQTRCLGlCQUE1QixFQUErQztBQUM3Q0Msa0JBQVksS0FEaUM7QUFFN0NDLGFBQU9ULGtCQUFrQjtBQUZvQixLQUEvQzs7QUFLQU0sV0FBT0MsY0FBUCxDQUFzQixJQUF0QixFQUE0QixVQUE1QixFQUF3QztBQUN0Q0Msa0JBQVksS0FEMEI7QUFFdENFLGdCQUFVLElBRjRCO0FBR3RDRCxhQUFPUixXQUFXO0FBSG9CLEtBQXhDO0FBS0Q7O0FBRUQ7Ozs7OztxQkFJT1UsSyxrQkFBTUMsSSxFQUFNO0FBQ2pCLFFBQUlBLGdCQUFn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QUFNLEVBRkQ7QUFHTEUsY0FBVSxzQkFBYyxJQUFkLENBSEw7QUFJTEQsaUJBQWE7QUFKUixHQUFQO0FBTUQiLCJmaWxlIjoiUmVsYXRpb25FeHByZXNzaW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCBwYXJzZXIgZnJvbSAnLi9wYXJzZXJzL3JlbGF0aW9uRXhwcmVzc2lvblBhcnNlcic7XG5pbXBvcnQgVmFsaWRhdGlvbkVycm9yIGZyb20gJy4uL21vZGVsL1ZhbGlkYXRpb25FcnJvcic7XG5cbmNvbnN0IFJFQ1VSU0lWRV9SRUdFWCA9IC9eXFxeKFxcZCopJC87XG5jb25zdCBBTExfUkVDVVJTSVZFX1JFR0VYID0gL15cXCokLztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVsYXRpb25FeHByZXNzaW9uIHtcblxuICBjb25zdHJ1Y3Rvcihub2RlLCByZWN1cnNpb25EZXB0aCwgZmlsdGVycykge1xuICAgIG5vZGUgPSBub2RlIHx8IHt9O1xuXG4gICAgdGhpcy5uYW1lID0gbm9kZS5uYW1lIHx8IG51bGw7XG4gICAgdGhpcy5hcmdzID0gbm9kZS5hcmdzIHx8IFtdO1xuICAgIHRoaXMubnVtQ2hpbGRyZW4gPSBub2RlLm51bUNoaWxkcmVuIHx8IDA7XG4gICAgdGhpcy5jaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW4gfHwge307XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ19yZWN1cnNpb25EZXB0aCcsIHtcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgdmFsdWU6IHJlY3Vyc2lvbkRlcHRoIHx8IDBcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnX2ZpbHRlcnMnLCB7XG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZpbHRlcnMgfHwge31cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xSZWxhdGlvbkV4cHJlc3Npb259IGV4cHJcbiAgICogQHJldHVybnMge1JlbGF0aW9uRXhwcmVzc2lvbn1cbiAgICovXG4gIHN0YXRpYyBwYXJzZShleHByKSB7XG4gICAgaWYgKGV4cHIgaW5zdGFuY2VvZiBSZWxhdGlvbkV4cHJlc3Npb24pIHtcbiAgICAgIHJldHVybiBleHByO1xuICAgIH0gZWxzZSBpZiAoIV8uaXNTdHJpbmcoZXhwcikgfHwgXy5pc0VtcHR5KGV4cHIudHJpbSgpKSkge1xuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbkV4cHJlc3Npb24oKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbkV4cHJlc3Npb24ocGFyc2VyLnBhcnNlKGV4cHIpKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHtcbiAgICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCByZWxhdGlvbiBleHByZXNzaW9uIFwiJyArIGV4cHIgKyAnXCInLFxuICAgICAgICAgIGNhdXNlOiBlcnIubWVzc2FnZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IGdyYXBoXG4gICAqL1xuICBzdGF0aWMgZnJvbUdyYXBoKGdyYXBoKSB7XG4gICAgaWYgKCFncmFwaCkge1xuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbkV4cHJlc3Npb24oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFJlbGF0aW9uRXhwcmVzc2lvbihtb2RlbEdyYXBoVG9Ob2RlKGdyYXBoLCBuZXdOb2RlKCkpKTtcbiAgfVxuXG4gIGdldCBmaWx0ZXJzKCkge1xuICAgIHJldHVybiB0aGlzLl9maWx0ZXJzO1xuICB9XG5cbiAgc2V0IGZpbHRlcnMoZmlsdGVycykge1xuICAgIHRoaXMuX2ZpbHRlcnMgPSBmaWx0ZXJzIHx8IHt9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfFJlbGF0aW9uRXhwcmVzc2lvbn0gZXhwclxuICAgKiBAcmV0dXJucyB7UmVsYXRpb25FeHByZXNzaW9ufVxuICAgKi9cbiAgbWVyZ2UoZXhwcikge1xuICAgIGNvbnN0IG1lcmdlZCA9IHRoaXMuY2xvbmUoKTtcbiAgICBleHByID0gUmVsYXRpb25FeHByZXNzaW9uLnBhcnNlKGV4cHIpO1xuXG4gICAgbWVyZ2VkLm51bUNoaWxkcmVuICs9IGV4cHIubnVtQ2hpbGRyZW47XG4gICAgbWVyZ2VkLmNoaWxkcmVuID0gXy5tZXJnZShtZXJnZWQuY2hpbGRyZW4sIGV4cHIuY2hpbGRyZW4pO1xuICAgIG1lcmdlZC5hcmdzID0gXy5tZXJnZShtZXJnZWQuYXJncywgZXhwci5hcmdzKTtcbiAgICBtZXJnZWQuZmlsdGVycyA9IF8ubWVyZ2UobWVyZ2VkLmZpbHRlcnMsIGV4cHIuZmlsdGVycyk7XG5cbiAgICAvLyBIYW5kbGUgcmVjdXJzaXZlIGFuZCBhbGwgcmVjdXJzaXZlIG5vZGVzLlxuICAgIHZpc2l0KG1lcmdlZCwgKG5vZGUsIGNoaWxkTmFtZXMpID0+IHtcbiAgICAgIGxldCBtYXhOYW1lID0gbnVsbDtcbiAgICAgIGxldCBtYXhEZXB0aCA9IDA7XG4gICAgICBsZXQgcmVjdXJDb3VudCA9IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGROYW1lcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgY29uc3QgbmFtZSA9IGNoaWxkTmFtZXNbaV07XG4gICAgICAgIGNvbnN0IGRlcHRoID0gbWF4UmVjdXJzaW9uRGVwdGgobmFtZSk7XG5cbiAgICAgICAgaWYgKGRlcHRoID4gMCkge1xuICAgICAgICAgIHJlY3VyQ291bnQrKztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChkZXB0aCA+IG1heERlcHRoKSB7XG4gICAgICAgICAgbWF4RGVwdGggPSBkZXB0aDtcbiAgICAgICAgICBtYXhOYW1lID0gbmFtZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAocmVjdXJDb3VudCA+IDApIHtcbiAgICAgICAgZGVsZXRlIG5vZGUuY2hpbGRyZW5bbm9kZS5uYW1lXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY3VyQ291bnQgPiAxKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gY2hpbGROYW1lcy5sZW5ndGg7IGkgPCBsOyArK2kpIHtcbiAgICAgICAgICBjb25zdCBuYW1lID0gY2hpbGROYW1lc1tpXTtcblxuICAgICAgICAgIGlmIChuYW1lICE9PSBtYXhOYW1lKSB7XG4gICAgICAgICAgICBkZWxldGUgbm9kZS5jaGlsZHJlbltuYW1lXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHJldHVybiBtZXJnZWQ7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVsYXRpb25FeHByZXNzaW9ufSBleHByXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgaXNTdWJFeHByZXNzaW9uKGV4cHIpIHtcbiAgICBleHByID0gUmVsYXRpb25FeHByZXNzaW9uLnBhcnNlKGV4cHIpO1xuXG4gICAgaWYgKHRoaXMuaXNBbGxSZWN1cnNpdmUoKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKGV4cHIuaXNBbGxSZWN1cnNpdmUoKSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNBbGxSZWN1cnNpdmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5uYW1lICE9PSBleHByLm5hbWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBtYXhSZWN1cnNpb25EZXB0aCA9IGV4cHIubWF4UmVjdXJzaW9uRGVwdGgoKTtcblxuICAgIGlmIChtYXhSZWN1cnNpb25EZXB0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQWxsUmVjdXJzaXZlKCkgfHwgdGhpcy5tYXhSZWN1cnNpb25EZXB0aCgpID49IG1heFJlY3Vyc2lvbkRlcHRoO1xuICAgIH1cblxuICAgIHJldHVybiBfLmV2ZXJ5KGV4cHIuY2hpbGRyZW4sIChjaGlsZCwgY2hpbGROYW1lKSA9PiB7XG4gICAgICB2YXIgb3duU3ViRXhwcmVzc2lvbiA9IHRoaXMuY2hpbGRFeHByZXNzaW9uKGNoaWxkTmFtZSk7XG4gICAgICB2YXIgc3ViRXhwcmVzc2lvbiA9IGV4cHIuY2hpbGRFeHByZXNzaW9uKGNoaWxkTmFtZSk7XG5cbiAgICAgIHJldHVybiBvd25TdWJFeHByZXNzaW9uICYmIG93blN1YkV4cHJlc3Npb24uaXNTdWJFeHByZXNzaW9uKHN1YkV4cHJlc3Npb24pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBtYXhSZWN1cnNpb25EZXB0aCgpIHtcbiAgICBpZiAodGhpcy5udW1DaGlsZHJlbiAhPT0gMSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXModGhpcy5jaGlsZHJlbilbMF07XG4gICAgcmV0dXJuIG1heFJlY3Vyc2lvbkRlcHRoKGtleSk7XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICBpc0FsbFJlY3Vyc2l2ZSgpIHtcbiAgICBpZiAodGhpcy5udW1DaGlsZHJlbiAhPT0gMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKHRoaXMuY2hpbGRyZW4pWzBdO1xuICAgIHJldHVybiBBTExfUkVDVVJTSVZFX1JFR0VYLnRlc3Qoa2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7UmVsYXRpb25FeHByZXNzaW9ufVxuICAgKi9cbiAgY2hpbGRFeHByZXNzaW9uKGNoaWxkTmFtZSkge1xuICAgIGlmICh0aGlzLmlzQWxsUmVjdXJzaXZlKCkgfHwgKGNoaWxkTmFtZSA9PT0gdGhpcy5uYW1lICYmIHRoaXMuX3JlY3Vyc2lvbkRlcHRoIDwgdGhpcy5tYXhSZWN1cnNpb25EZXB0aCgpIC0gMSkpIHtcbiAgICAgIHJldHVybiBuZXcgUmVsYXRpb25FeHByZXNzaW9uKHRoaXMsIHRoaXMuX3JlY3Vyc2lvbkRlcHRoICsgMSwgdGhpcy5fZmlsdGVycyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2hpbGRyZW5bY2hpbGROYW1lXSkge1xuICAgICAgcmV0dXJuIG5ldyBSZWxhdGlvbkV4cHJlc3Npb24odGhpcy5jaGlsZHJlbltjaGlsZE5hbWVdLCAwLCB0aGlzLl9maWx0ZXJzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtSZWxhdGlvbkV4cHJlc3Npb259XG4gICAqL1xuICBjbG9uZSgpIHtcbiAgICBjb25zdCBub2RlID0ge1xuICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgYXJnczogdGhpcy5hcmdzLFxuICAgICAgbnVtQ2hpbGRyZW46IHRoaXMubnVtQ2hpbGRyZW4sXG4gICAgICBjaGlsZHJlbjogXy5jbG9uZURlZXAodGhpcy5jaGlsZHJlbilcbiAgICB9O1xuXG4gICAgY29uc3QgZmlsdGVycyA9IF8uY2xvbmUodGhpcy5fZmlsdGVycyk7XG4gICAgcmV0dXJuIG5ldyBSZWxhdGlvbkV4cHJlc3Npb24obm9kZSwgdGhpcy5fcmVjdXJzaW9uRGVwdGgsIGZpbHRlcnMpO1xuICB9XG5cbiAgZm9yRWFjaENoaWxkKGNiKSB7XG4gICAgaWYgKHRoaXMubnVtQ2hpbGRyZW4pIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyh0aGlzLmNoaWxkcmVuKTtcblxuICAgICAgZm9yIChsZXQgaSA9IDAsIGwgPSBrZXlzLmxlbmd0aDsgaSA8IGw7ICsraSkge1xuICAgICAgICBjb25zdCBjaGlsZE5hbWUgPSBrZXlzW2ldO1xuXG4gICAgICAgIGlmICghQUxMX1JFQ1VSU0lWRV9SRUdFWC50ZXN0KGNoaWxkTmFtZSkgJiYgIVJFQ1VSU0lWRV9SRUdFWC50ZXN0KGNoaWxkTmFtZSkpIHtcbiAgICAgICAgICBjYih0aGlzLmNoaWxkcmVuW2NoaWxkTmFtZV0sIGNoaWxkTmFtZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd8UmVsYXRpb25FeHByZXNzaW9ufSBwYXRoXG4gICAqIEBwYXJhbSB7ZnVuY3Rpb24oUXVlcnlCdWlsZGVyKX0gZmlsdGVyXG4gICAqL1xuICBhZGRBbm9ueW1vdXNGaWx0ZXJBdFBhdGgocGF0aCwgZmlsdGVyKSB7XG4gICAgbGV0IGZpbHRlck5vZGVzID0gdGhpcy5fbm9kZXNBdFBhdGgocGF0aCk7XG4gICAgbGV0IGZpbHRlcnMgPSB0aGlzLmZpbHRlcnM7XG5cbiAgICBsZXQgaWR4ID0gMDtcbiAgICBsZXQgZmlsdGVyTmFtZSA9IGBfZWZlMF9gO1xuXG4gICAgd2hpbGUgKGZpbHRlcnNbZmlsdGVyTmFtZV0pIHtcbiAgICAgIGZpbHRlck5hbWUgPSBgX2VmZSR7KytpZHh9X2A7XG4gICAgfVxuXG4gICAgaWYgKCFfLmlzRW1wdHkoZmlsdGVyTm9kZXMpKSB7XG4gICAgICBmaWx0ZXJzW2ZpbHRlck5hbWVdID0gZmlsdGVyO1xuICAgICAgXy5lYWNoKGZpbHRlck5vZGVzLCBub2RlID0+IG5vZGUuYXJncy5wdXNoKGZpbHRlck5hbWUpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0b1N0cmluZyh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJuIHtBcnJheS48T2JqZWN0Pn1cbiAgICovXG4gIF9ub2Rlc0F0UGF0aChwYXRoRXhwcmVzc2lvbikge1xuICAgIGxldCBwYXRoID0gUmVsYXRpb25FeHByZXNzaW9uLnBhcnNlKHBhdGhFeHByZXNzaW9uKTtcbiAgICBsZXQgbm9kZXMgPSBbXTtcblxuICAgIFJlbGF0aW9uRXhwcmVzc2lvbi5ub2Rlc0F0UGF0aCh0aGlzLCBwYXRoLCBub2Rlcyk7XG4gICAgcmV0dXJuIG5vZGVzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBzdGF0aWMgbm9kZXNBdFBhdGgodGFyZ2V0LCBwYXRoLCBleHByZXNzaW9ucykge1xuICAgIGlmIChwYXRoLm51bUNoaWxkcmVuID09IDApIHtcbiAgICAgIGV4cHJlc3Npb25zLnB1c2godGFyZ2V0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgXy5mb3JPd24ocGF0aC5jaGlsZHJlbiwgY2hpbGQgPT4ge1xuICAgICAgICBjb25zdCB0YXJnZXRDaGlsZCA9IHRhcmdldC5jaGlsZHJlbltjaGlsZC5uYW1lXTtcblxuICAgICAgICBpZiAodGFyZ2V0Q2hpbGQpIHtcbiAgICAgICAgICB0aGlzLm5vZGVzQXRQYXRoKHRhcmdldENoaWxkLCBjaGlsZCwgZXhwcmVzc2lvbnMpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbWF4UmVjdXJzaW9uRGVwdGgoa2V5KSB7XG4gIGNvbnN0IHJlYyA9IFJFQ1VSU0lWRV9SRUdFWC5leGVjKGtleSk7XG5cbiAgaWYgKHJlYykge1xuICAgIGNvbnN0IG1heERlcHRoID0gcmVjWzFdO1xuXG4gICAgaWYgKG1heERlcHRoKSB7XG4gICAgICByZXR1cm4gcGFyc2VJbnQobWF4RGVwdGgsIDEwKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIE51bWJlci5QT1NJVElWRV9JTkZJTklUWTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmlzaXQobm9kZSwgdmlzaXRvcikge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMobm9kZS5jaGlsZHJlbik7XG5cbiAgdmlzaXRvcihub2RlLCBrZXlzKTtcblxuICBmb3IgKGxldCBpID0gMCwgbCA9IGtleXMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICBjb25zdCBjaGlsZE5vZGUgPSBub2RlLmNoaWxkcmVuW2tleV07XG5cbiAgICBpZiAoY2hpbGROb2RlKSB7XG4gICAgICB2aXNpdChjaGlsZE5vZGUsIHZpc2l0b3IpO1xuICAgIH1cbiAgfVxufVxuXG5cbmZ1bmN0aW9uIHRvU3RyaW5nKG5vZGUpIHtcbiAgbGV0IGNoaWxkRXhwciA9IF8udmFsdWVzKG5vZGUuY2hpbGRyZW4pLm1hcCh0b1N0cmluZyk7XG5cbiAgaWYgKGNoaWxkRXhwci5sZW5ndGggPiAxKSB7XG4gICAgY2hpbGRFeHByID0gYFske2NoaWxkRXhwci5qb2luKCcsICcpfV1gO1xuICB9IGVsc2Uge1xuICAgIGNoaWxkRXhwciA9IGNoaWxkRXhwclswXTtcbiAgfVxuXG4gIGxldCBzdHIgPSBub2RlLm5hbWU7XG5cbiAgaWYgKG5vZGUuYXJncy5sZW5ndGgpIHtcbiAgICBzdHIgKz0gYCgke25vZGUuYXJncy5qb2luKCcsICcpfSlgO1xuICB9XG5cbiAgaWYgKGNoaWxkRXhwcikge1xuICAgIGlmIChzdHIpIHtcbiAgICAgIHJldHVybiBgJHtzdHJ9LiR7Y2hpbGRFeHByfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBjaGlsZEV4cHI7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW9kZWxHcmFwaFRvTm9kZShtb2RlbHMsIG5vZGUpIHtcbiAgaWYgKCFtb2RlbHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheShtb2RlbHMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDAsIGwgPSBtb2RlbHMubGVuZ3RoOyBpIDwgbDsgKytpKSB7XG4gICAgICBtb2RlbFRvTm9kZShtb2RlbHNbaV0sIG5vZGUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBtb2RlbFRvTm9kZShtb2RlbHMsIG5vZGUpO1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59XG5cbmZ1bmN0aW9uIG1vZGVsVG9Ob2RlKG1vZGVsLCBub2RlKSB7XG4gIGNvbnN0IG1vZGVsQ2xhc3MgPSBtb2RlbC5jb25zdHJ1Y3RvcjtcbiAgY29uc3QgcmVsYXRpb25zID0gbW9kZWxDbGFzcy5nZXRSZWxhdGlvbkFycmF5KCk7XG5cbiAgZm9yIChsZXQgciA9IDAsIGxyID0gcmVsYXRpb25zLmxlbmd0aDsgciA8IGxyOyArK3IpIHtcbiAgICBjb25zdCByZWxOYW1lID0gcmVsYXRpb25zW3JdLm5hbWU7XG5cbiAgICBpZiAobW9kZWwuaGFzT3duUHJvcGVydHkocmVsTmFtZSkpIHtcbiAgICAgIGxldCBjaGlsZE5vZGUgPSBub2RlLmNoaWxkcmVuW3JlbE5hbWVdO1xuXG4gICAgICBpZiAoIWNoaWxkTm9kZSkge1xuICAgICAgICBjaGlsZE5vZGUgPSBuZXdOb2RlKHJlbE5hbWUpO1xuXG4gICAgICAgIG5vZGUuY2hpbGRyZW5bcmVsTmFtZV0gPSBjaGlsZE5vZGU7XG4gICAgICAgIG5vZGUubnVtQ2hpbGRyZW4rKztcbiAgICAgIH1cblxuICAgICAgbW9kZWxHcmFwaFRvTm9kZShtb2RlbFtyZWxOYW1lXSwgY2hpbGROb2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbmV3Tm9kZShuYW1lKSB7XG4gIHJldHVybiB7XG4gICAgbmFtZTogbmFtZSB8fCAnJyxcbiAgICBhcmdzOiBbXSxcbiAgICBjaGlsZHJlbjogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICBudW1DaGlsZHJlbjogMFxuICB9O1xufSJdfQ==
{
"name": "objection",
"version": "0.7.8",
"version": "0.7.9",
"description": "An SQL-friendly ORM for Node.js",

@@ -5,0 +5,0 @@ "main": "lib/objection.js",

@@ -134,3 +134,7 @@ import _ from 'lodash';

function hasDefaults(obj) {
return Array.isArray(obj) ? arrayHasDefaults(obj) : objectHasDefaults(obj);
if (Array.isArray(obj)) {
return arrayHasDefaults(obj);
} else {
return objectHasDefaults(obj);
}
}

@@ -137,0 +141,0 @@

@@ -25,4 +25,4 @@ import _ from 'lodash';

import JoinEagerOperation from '../queryBuilder/operations/JoinEagerOperation';
import WhereInEagerOperation from '../queryBuilder/operations/WhereInEagerOperation';
import JoinEagerOperation from '../queryBuilder/operations/eager/JoinEagerOperation';
import WhereInEagerOperation from '../queryBuilder/operations/eager/WhereInEagerOperation';

@@ -29,0 +29,0 @@ const JoinEagerAlgorithm = () => {

import _ from 'lodash';
import QueryBuilderOperation from './QueryBuilderOperation';
import RelationJoinBuilder from './eager/RelationJoinBuilder';
import RelationExpression from '../RelationExpression';

@@ -9,4 +11,3 @@ export default class JoinRelationOperation extends QueryBuilderOperation {

this.joinOperation = opt.joinOperation;
this.relationName = null;
this.expression = null;
this.callOpt = null;

@@ -16,3 +17,3 @@ }

call(builder, args) {
this.relationName = args[0];
this.expression = RelationExpression.parse(args[0]);
this.callOpt = args[1] || {};

@@ -23,18 +24,41 @@ return true;

onBeforeBuild(builder) {
const relation = builder.modelClass().getRelation(this.relationName);
let alias = null;
const modelClass = builder.modelClass();
const opt = Object.assign({}, this.callOpt);
if (this.callOpt.alias === false) {
alias = relation.relatedModelClass.tableName;
} else if (this.callOpt.alias === true || !this.callOpt.alias) {
alias = relation.name;
} else if (_.isString(this.callOpt.alias)) {
alias = this.callOpt.alias;
opt.aliases = Object.assign({}, opt.aliases);
opt.joinOperation = this.opt.joinOperation;
// Special case for one single relation.
if (this.expression.numChildren === 1) {
let relationName;
// A bit crappy way to get the only child.
this.expression.forEachChild((child, childName) => {
relationName = childName;
});
const relation = modelClass.getRelation(relationName);
let alias = null;
if (opt.alias === false) {
alias = relation.relatedModelClass.tableName;
} else if (opt.alias === true || !opt.alias) {
alias = relation.name;
} else if (_.isString(opt.alias)) {
alias = opt.alias;
}
if (alias) {
opt.aliases[relationName] = alias;
}
}
relation.join(builder, {
joinOperation: this.joinOperation,
relatedTableAlias: alias
const joinBuilder = new RelationJoinBuilder({
modelClass,
expression: this.expression,
opt: opt
});
joinBuilder.buildJoinOnly(builder);
}
}

@@ -24,4 +24,4 @@ import _ from 'lodash';

import SelectOperation from './operations/SelectOperation';
import EagerOperation from './operations/EagerOperation';
import RangeOperation from './operations/range/RangeOperation';
import EagerOperation from './operations/eager/EagerOperation';
import RangeOperation from './operations/RangeOperation';

@@ -28,0 +28,0 @@ export default class QueryBuilder extends QueryBuilderBase {

@@ -209,7 +209,13 @@ import _ from 'lodash';

forEachChild(cb) {
_.forOwn(this.children, (child, childName) => {
if (!ALL_RECURSIVE_REGEX.test(childName) && !RECURSIVE_REGEX.test(childName)) {
cb(child, childName);
if (this.numChildren) {
const keys = Object.keys(this.children);
for (let i = 0, l = keys.length; i < l; ++i) {
const childName = keys[i];
if (!ALL_RECURSIVE_REGEX.test(childName) && !RECURSIVE_REGEX.test(childName)) {
cb(this.children[childName], childName);
}
}
});
}
}

@@ -216,0 +222,0 @@

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc