This repository was archived by the owner on Jun 14, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 34
Expand file tree
/
Copy pathQueryParameter.js
More file actions
99 lines (82 loc) · 2.23 KB
/
Copy pathQueryParameter.js
File metadata and controls
99 lines (82 loc) · 2.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
'use strict';
const _ = require('lodash');
const utils = require('./utils');
const filters = require('./filters');
/**
* An object representation of an FindQueryBuilder's input query parameter.
*
* @param {string} value
* @param {string} key
* @param {FindQueryBuilder} builder
* @constructor
*/
class QueryParameter {
constructor(value, key, builder) {
/**
* The key of the query parameter.
*
* @type {string}
*/
this.key = key;
/**
* The value of the query parameter.
*
* @type {string}
*/
this.value = value;
/**
* One of the keys of FindQueryBuilder._specialParameterMap or null.
*
* @type {string}
*/
this.specialParameter = null;
/**
* All the property references in this query parameter.
*
* @type {Array.<PropertyRef>}
*/
this.propertyRefs = [];
/**
* The filter function if this query parameter is a filter.
*
* @type {function}
*/
this.filter = null;
this._parse(value, key, builder);
}
_parse(value, key, builder) {
if (builder._inverseSpecialParameterMap[key]) {
this._parseSpecialParameter(value, key, builder);
} else {
this._parseFilter(value, key, builder);
}
}
_parseSpecialParameter(value, key, builder) {
this.specialParameter = builder._inverseSpecialParameterMap[key];
if (this.specialParameter.indexOf('orderBy') !== -1) {
this._parseOrderBy(value, key, builder);
}
}
_parseOrderBy(value, key, builder) {
let parsedRefs = builder._parsePropertyRefs(value.split('|'));
_.each(parsedRefs, parsedRef => this.propertyRefs.push(parsedRef));
}
_parseFilter(value, key, builder) {
const parts = key.replace(/\s/g, '').split(':');
if (parts.length === 1) {
this.filter = filters.eq;
} else if (parts.length === 2) {
this.filter = builder._filters[parts[1]];
} else {
utils.throwError('parameter: invalid query parameter "' + key + '=' + value + '"');
}
if (!this.filter) {
utils.throwError('parameter: invalid filter in "' + key + '=' + value + '"');
}
this.propertyRefs = builder._parsePropertyRefs(parts[0].split('|'));
}
}
/**
* @private
*/
module.exports = QueryParameter;