UNPKG

redux-devshare

Version:

[![NPM version][npm-image]][npm-url] [![NPM downloads][npm-downloads-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-image]][daviddm-url] [![Code Climate][climate-image]][climate-url] [![Code Coverage][coverage-i

99 lines (77 loc) 3.37 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.getEventsFromInput = exports.pathStrToObj = undefined; var _remove2 = require('lodash/remove'); var _remove3 = _interopRequireDefault(_remove2); var _isString2 = require('lodash/isString'); var _isString3 = _interopRequireDefault(_isString2); var _isObject2 = require('lodash/isObject'); var _isObject3 = _interopRequireDefault(_isObject2); var _isArray2 = require('lodash/isArray'); var _isArray3 = _interopRequireDefault(_isArray2); var _flatMap2 = require('lodash/flatMap'); var _flatMap3 = _interopRequireDefault(_flatMap2); var _populate = require('./populate'); var _query = require('./query'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * @description Convert path string to object with queryParams, path, and populates * @param {String} path - Path that can contain query parameters and populates * @return {Object} watchEvents - Array of watch events */ var pathStrToObj = exports.pathStrToObj = function pathStrToObj(path) { var pathObj = { path: path, type: 'value', isQuery: false }; var queryId = (0, _query.getQueryIdFromPath)(path); // If Query id exists split params from path if (queryId) { var pathArray = path.split('#'); pathObj = Object.assign({}, pathObj, { queryId: queryId, isQuery: true, path: pathArray[0], queryParams: pathArray[1].split('&') }); if ((0, _populate.getPopulates)(pathArray[1].split('&'))) { pathObj.populates = (0, _populate.getPopulates)(pathArray[1].split('&')); pathObj.queryParams = (0, _remove3.default)(pathArray[1].split('&'), function (p) { return p.indexOf('populate') === -1; }); } } // if queryId does not exist, return original pathObj return pathObj; }; /** * @description Convert watch path definition array to watch events * @param {Array} paths - Array of path strings, objects, and arrays to watch * @return {Array} watchEvents - Array of watch events */ var getEventsFromInput = exports.getEventsFromInput = function getEventsFromInput(paths) { return (0, _flatMap3.default)(paths, function (path) { if ((0, _isString3.default)(path)) { return [pathStrToObj(path)]; } if ((0, _isArray3.default)(path)) { // TODO: Handle input other than array with string // TODO: Handle populates within array return [{ type: 'first_child', path: path[0] }, { type: 'child_added', path: path[0] }, { type: 'child_removed', path: path[0] }, { type: 'child_moved', path: path[0] }, { type: 'child_changed', path: path[0] }]; } if ((0, _isObject3.default)(path)) { if (!path.path) { throw new Error('Path is a required parameter within definition object'); } var strPath = path.path; if (path.queryParams) { // append query params to path for queryId added in pathStrToObj strPath = strPath + '#' + path.queryParams.join('&'); } // Add all parameters that are missing (ones that exist will remain) path = Object.assign({}, pathStrToObj(strPath), path); return [path]; } throw new Error('Invalid Path Definition: ' + path + '. Only strings, objects, and arrays accepted.'); }); }; exports.default = { getEventsFromInput: getEventsFromInput };