UNPKG

glance-selector

Version:
151 lines (117 loc) 6.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _extensions = require("../utils/extensions"); var _extensions2 = _interopRequireDefault(_extensions); var _locator = require("./locator"); var _locator2 = _interopRequireDefault(_locator); var _filter = require("./filter"); var _filter2 = _interopRequireDefault(_filter); var _log = require("../log"); var _log2 = _interopRequireDefault(_log); var _arrayUtils = require("../utils/array-utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var SearchLineage = function () { function SearchLineage() { _classCallCheck(this, SearchLineage); } _createClass(SearchLineage, [{ key: "search", value: function search(data) { var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : function (err, result) { return result; }; var _data = data, scopes = _data.scopes, scopeElement = _data.scopeElement, _data$config = _data.config, config = _data$config === undefined ? {} : _data$config; config.extensions = config.extensions || []; data = _extends({}, data, { extensions: config.extensions }); return SearchLineage.traverseScopes(_extends({}, data, { elements: [scopeElement], target: scopes[0], scopeElements: [] }), callback); } }], [{ key: "traverseScopes", value: function traverseScopes(data, resultHandler) { var elements = data.elements, scopes = data.scopes, target = data.target; var processLevel = function processLevel(result, scopeElement, reduceeCallback) { var tempData = _extends({}, data, { scopeElement: scopeElement }); _extensions2.default.beforeScopeEvent(tempData); function resultHandler(err, located) { if (err) { return reduceeCallback(err, []); } result.push({ scopeElement: scopeElement, elements: located }); return reduceeCallback(err, result); } return _locator2.default.locate(tempData, function (err, located) { if (tempData.intersectElements) { _log2.default.debug("Finding intersections"); return browserExecute(function (located, previous, handler) { return handler(null, located.filter(function (e) { return previous.indexOf(e) != -1; })); }, located, tempData.intersectElements, function (err, result) { _log2.default.debug("Intersection count:", result.length); return resultHandler(err, result); }); } return resultHandler(null, located); }); }; return (0, _arrayUtils.reduce)(elements, [], processLevel, function (err, locatedTargets) { if (err) { return resultHandler(err, []); } var targetInfo = locatedTargets.reduce(function (result, info) { result.elements = result.elements.concat(info.elements); result.scopeElements.push(info.scopeElement); return result; }, { elements: [], scopeElements: [] }); return (0, _arrayUtils.unique)(targetInfo.elements, function (err, uniqueTargets) { targetInfo.elements = uniqueTargets; return _filter2.default.filter(_extends({}, data, targetInfo), function (err, filteredElements) { if (err) { return resultHandler(err, []); } _extensions2.default.afterScopeEvent(_extends({}, data, { elements: filteredElements })); if (target.type == "target") { return resultHandler(err, filteredElements); } else { if (target.type == "intersect") { return SearchLineage.traverseScopes(_extends({}, data, { intersectElements: filteredElements, elements: filteredElements, target: scopes[target.scopeIndex + 1] }), resultHandler); } else { return SearchLineage.traverseScopes(_extends({}, data, { intersectElements: null, scopeElements: filteredElements, elements: filteredElements, target: scopes[target.scopeIndex + 1] }), resultHandler); } } }); }); }); } }]); return SearchLineage; }(); exports.default = SearchLineage;