1 | 'use strict';
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.renderNotQueryDefinition = exports.renderQueryDefinition = exports.renderFeature = exports.ensureMediaType = exports.joinAnd = undefined;
|
7 |
|
8 | var _ramda = require('ramda');
|
9 |
|
10 | var _predicates = require('../../utils/predicates');
|
11 |
|
12 | var _const = require('../../const');
|
13 |
|
14 | var _errors = require('../../errors');
|
15 |
|
16 | var _logic = require('../../utils/logic');
|
17 |
|
18 | 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); } }
|
19 |
|
20 | var nameValue = (0, _ramda.compose)((0, _ramda.join)(': '), (0, _ramda.reject)(_ramda.isNil));
|
21 | var isArrayOrString = (0, _ramda.either)(_predicates.isArray, _predicates.isString);
|
22 | var isNegationObject = (0, _ramda.both)(_predicates.isObject, (0, _ramda.has)('not'));
|
23 |
|
24 | var joinAnd = exports.joinAnd = (0, _ramda.join)(' and ');
|
25 | var joinComma = (0, _ramda.join)(', ');
|
26 | var prefixWithNot = (0, _ramda.concat)('not ');
|
27 | var containsArrays = (0, _ramda.any)(_predicates.isArray);
|
28 | var expandNegationObject = function expandNegationObject(negationObject) {
|
29 | return negationObject.not;
|
30 | };
|
31 | var containsMediaType = (0, _ramda.contains)(_ramda.__, (0, _ramda.values)(_const.MEDIA_TYPES));
|
32 | var arrayContainsMediaType = (0, _ramda.any)(containsMediaType);
|
33 |
|
34 | var ensureMediaType = exports.ensureMediaType = function ensureMediaType(defaultMediaType) {
|
35 | for (var _len = arguments.length, elements = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
|
36 | elements[_key - 1] = arguments[_key];
|
37 | }
|
38 |
|
39 | return (0, _ramda.map)(function (element) {
|
40 | if ((0, _predicates.isArray)(element)) {
|
41 |
|
42 | if (arrayContainsMediaType(element)) {
|
43 | return element;
|
44 | }
|
45 | return [defaultMediaType].concat(_toConsumableArray(element));
|
46 | }
|
47 | if (containsMediaType(element)) {
|
48 | return element;
|
49 | }
|
50 | return joinAnd([defaultMediaType, element]);
|
51 | })(elements);
|
52 | };
|
53 |
|
54 | var queryElementIsValidType = function queryElementIsValidType(element) {
|
55 | (0, _ramda.when)((0, _ramda.either)(_predicates.isNull, (0, _logic.neither)(isArrayOrString, isNegationObject)), (0, _errors.composeError)(_errors.queryElementIsValidTypeErrorMessage))(element);
|
56 | };
|
57 |
|
58 | var queryElementChildrenValidType = function queryElementChildrenValidType(element) {
|
59 | (0, _ramda.when)(_predicates.isArray, (0, _ramda.unless)((0, _ramda.all)(function (child) {
|
60 | return (0, _ramda.either)(isArrayOrString, isNegationObject)(child);
|
61 | }), (0, _errors.composeError)(_errors.queryChildElementIsValidTypeErrorMessage)))(element);
|
62 | };
|
63 |
|
64 | var elemementHasNoNestedArrays = function elemementHasNoNestedArrays(element) {
|
65 | (0, _ramda.when)(_predicates.isArray, (0, _ramda.when)(containsArrays, (0, _errors.composeError)(_errors.queryNoNestedArraysErrorMessage)))(element);
|
66 | };
|
67 |
|
68 | var validateDefinition = function validateDefinition() {
|
69 | for (var _len2 = arguments.length, elements = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
|
70 | elements[_key2] = arguments[_key2];
|
71 | }
|
72 |
|
73 | (0, _ramda.forEach)(function (element) {
|
74 | queryElementIsValidType(element);
|
75 | queryElementChildrenValidType(element);
|
76 | elemementHasNoNestedArrays(element);
|
77 | })(elements);
|
78 | };
|
79 |
|
80 | var renderFeature = exports.renderFeature = function renderFeature(name, value) {
|
81 | return (0, _ramda.join)('', ['(', nameValue([name, value]), ')']);
|
82 | };
|
83 |
|
84 | var renderQueryDefinition = exports.renderQueryDefinition = function renderQueryDefinition() {
|
85 | for (var _len3 = arguments.length, elements = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {
|
86 | elements[_key3] = arguments[_key3];
|
87 | }
|
88 |
|
89 | validateDefinition.apply(undefined, _toConsumableArray(elements));
|
90 | elements = (0, _ramda.map)((0, _ramda.when)(isNegationObject, expandNegationObject))(elements);
|
91 | elements = (0, _ramda.map)((0, _ramda.when)(_predicates.isArray, joinAnd))(elements);
|
92 | return (0, _ramda.join)(' ', [_const.MEDIA_PREFIX, elements]);
|
93 | };
|
94 |
|
95 | var renderNotQueryDefinition = exports.renderNotQueryDefinition = function renderNotQueryDefinition(defaultMediaType) {
|
96 | for (var _len4 = arguments.length, elements = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
|
97 | elements[_key4 - 1] = arguments[_key4];
|
98 | }
|
99 |
|
100 | (0, _ramda.when)(_ramda.isEmpty, (0, _errors.composeError)(_errors.notNoElementsErrorMessage))(elements);
|
101 | validateDefinition.apply(undefined, _toConsumableArray(elements));
|
102 |
|
103 | elements = ensureMediaType.apply(undefined, [defaultMediaType].concat(_toConsumableArray(elements)));
|
104 |
|
105 | return (0, _ramda.compose)(joinComma, (0, _ramda.map)((0, _ramda.compose)(prefixWithNot, (0, _ramda.when)(_predicates.isArray, joinAnd))))(elements);
|
106 | }; |
\ | No newline at end of file |