UNPKG

glance-dom

Version:
160 lines (120 loc) 4.77 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; }; exports.default = function (_ref2) { var commands = _ref2.commands, extensions = _ref2.extensions, glanceDOM = _ref2.glanceDOM, reference = _ref2.reference, containerElements = _ref2.containerElements, advanced = _ref2.advanced, _ref2$survey = _ref2.survey, survey = _ref2$survey === undefined ? {} : _ref2$survey; survey.containers = survey.containers || containerElements; survey.subjects = survey.subjects || []; survey.locatedElements = survey.locatedElements || []; survey.targets = survey.targets || []; var result = (0, _reduce2.default)(commands, function (result, command) { if (result.elementsNotFound) return result; return dispatch({ command: command, extensions: extensions, reference: reference, glanceDOM: glanceDOM, result: result }); }, survey); _log2.default.debug('Elements found: ' + result.subjects.length); if (advanced) return _extends({}, result, { reference: reference, elements: result.subjects, logs: _log2.default.logs });else return result.subjects.length === 1 ? result.subjects[0] : result.subjects; }; var _containers = require('./containers'); var _containers2 = _interopRequireDefault(_containers); var _log = require('../utils/log'); var _log2 = _interopRequireDefault(_log); var _reduce = require('@arr/reduce'); var _reduce2 = _interopRequireDefault(_reduce); var _filter = require('@arr/filter'); var _filter2 = _interopRequireDefault(_filter); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } function dispatch(_ref) { var command = _ref.command, extensions = _ref.extensions, glanceDOM = _ref.glanceDOM, result = _ref.result, reference = _ref.reference; switch (command.command) { case 'beforeall': extensions.getBeforeAllHooks().forEach(function (h) { return h({ reference: reference }); }); break; case 'containers': if (result.scopes) { result.containers = (0, _containers2.default)(result.scopes, result.subjects); } if (result.subjects.length > 0) result.scopes = result.subjects; result.locatedElements = []; result.targets = []; result.subjects = []; break; case 'intersect': if (result.targets.length > 0) { var targetLookup = new Set(result.targets); result.targets = (0, _filter2.default)(result.locatedElements, function (e) { return targetLookup.has(e); }); _log2.default.debug('Intersected elements:', result.targets.length); } else { result.targets = result.locatedElements; } if (result.targets.length === 0) result.elementsNotFound = true; result.locatedElements = []; break; case 'locate': var locator = extensions.getLocatorForOption(command.option, command.label); var located = locator(_extends({}, command, { extensions: extensions, glanceDOM: glanceDOM, containerElements: result.containers })); if (located.length > 0) _log2.default.debug('Located:', located.length); result.locatedElements = result.locatedElements.concat(located); result.locatedElements = [].concat(_toConsumableArray(new Set(result.locatedElements))); break; case 'afterlocating': _log2.default.debug('Located ' + result.locatedElements.length + ' elements for ' + command.label); break; case 'filter': var filterOption = extensions.getFilterForOption(command.option); var remaining = filterOption(_extends({}, command, { extensions: extensions, elements: result.targets, scopeElements: result.scopes })); if (result.targets.length !== remaining.length) { _log2.default.debug('Filtered out ' + (result.targets.length - remaining.length)); _log2.default.debug('Remaining ' + remaining.length); } result.targets = remaining; break; case 'afterfiltering': _log2.default.debug('Elements remaining after filter: ' + result.targets.length); result.subjects = result.targets; break; case 'afterall': result.containers = (0, _containers2.default)(result.scopes, result.subjects); extensions.getAfterAllHooks().forEach(function (h) { return h({ reference: reference, elements: result.subjects }); }); break; } return result; } ;