UNPKG

4.75 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.renderNotQueryDefinition = exports.renderQueryDefinition = exports.renderFeature = exports.ensureMediaType = exports.joinAnd = undefined;
7
8var _ramda = require('ramda');
9
10var _predicates = require('../../utils/predicates');
11
12var _const = require('../../const');
13
14var _errors = require('../../errors');
15
16var _logic = require('../../utils/logic');
17
18function _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
20var nameValue = (0, _ramda.compose)((0, _ramda.join)(': '), (0, _ramda.reject)(_ramda.isNil));
21var isArrayOrString = (0, _ramda.either)(_predicates.isArray, _predicates.isString);
22var isNegationObject = (0, _ramda.both)(_predicates.isObject, (0, _ramda.has)('not'));
23
24var joinAnd = exports.joinAnd = (0, _ramda.join)(' and ');
25var joinComma = (0, _ramda.join)(', ');
26var prefixWithNot = (0, _ramda.concat)('not ');
27var containsArrays = (0, _ramda.any)(_predicates.isArray);
28var expandNegationObject = function expandNegationObject(negationObject) {
29 return negationObject.not;
30};
31var containsMediaType = (0, _ramda.contains)(_ramda.__, (0, _ramda.values)(_const.MEDIA_TYPES));
32var arrayContainsMediaType = (0, _ramda.any)(containsMediaType);
33
34var 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 // Only add prefix if no media type is declared
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
54var 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
58var 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
64var elemementHasNoNestedArrays = function elemementHasNoNestedArrays(element) {
65 (0, _ramda.when)(_predicates.isArray, (0, _ramda.when)(containsArrays, (0, _errors.composeError)(_errors.queryNoNestedArraysErrorMessage)))(element);
66};
67
68var 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
80var renderFeature = exports.renderFeature = function renderFeature(name, value) {
81 return (0, _ramda.join)('', ['(', nameValue([name, value]), ')']);
82};
83
84var 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
95var 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