@progress/sitefinity-webservices-sdk 0.3.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintignore +4 -0
- package/.eslintrc.js +19 -0
- package/ci/pipelines/ci.yml +219 -0
- package/config/helpers.js +0 -6
- package/config/webpack.common.js +1 -3
- package/config/webpack.dev.js +2 -9
- package/config/webpack.prod.js +5 -6
- package/dist/docs/.nojekyll +1 -0
- package/dist/docs/assets/highlight.css +57 -0
- package/dist/docs/assets/icons.css +1043 -0
- package/dist/docs/assets/icons.png +0 -0
- package/dist/docs/assets/icons@2x.png +0 -0
- package/dist/docs/assets/main.js +52 -0
- package/dist/docs/assets/search.js +1 -0
- package/dist/docs/assets/style.css +1413 -0
- package/dist/docs/assets/{images/widgets.png → widgets.png} +0 -0
- package/dist/docs/assets/{images/widgets@2x.png → widgets@2x.png} +0 -0
- package/dist/docs/classes/BlobBuilder.BlobBuilder-1.html +7 -0
- package/dist/docs/classes/Data.Data-1.html +65 -0
- package/dist/docs/classes/Expression.BinaryExpression.html +1 -0
- package/dist/docs/classes/Expression.ComplexExpression.html +1 -0
- package/dist/docs/classes/Expression.ExpressionBase.html +1 -0
- package/dist/docs/classes/OrderProperty.OrderProperty-1.html +1 -0
- package/dist/docs/classes/Query.Query-1.html +33 -0
- package/dist/docs/classes/QueryBase.QueryBase-1.html +7 -0
- package/dist/docs/classes/QueryBuilder.QueryBuilder-1.html +1 -0
- package/dist/docs/classes/Requests_BatchRequest.BatchRequest.html +17 -0
- package/dist/docs/classes/Requests_BatchRequest.Transaction.html +17 -0
- package/dist/docs/classes/Requests_ExecutableRequest.ExecutableRequest.html +1 -0
- package/dist/docs/classes/Requests_Request.CreateRelatedRequest.html +1 -0
- package/dist/docs/classes/Requests_Request.CreateRequest.html +1 -0
- package/dist/docs/classes/Requests_Request.DeleteRelatedByIdRequest.html +1 -0
- package/dist/docs/classes/Requests_Request.DeleteRelatedRequest.html +1 -0
- package/dist/docs/classes/Requests_Request.DeleteRequest.html +1 -0
- package/dist/docs/classes/Requests_Request.GetByIdRequest.html +1 -0
- package/dist/docs/classes/Requests_Request.GetRelatedByIdRequest.html +1 -0
- package/dist/docs/classes/Requests_Request.GetRelatedRequest.html +1 -0
- package/dist/docs/classes/Requests_Request.GetRequest.html +1 -0
- package/dist/docs/classes/Requests_Request.UpdateRequest.html +1 -0
- package/dist/docs/classes/Requests_Request.UploadRequest.html +1 -0
- package/dist/docs/classes/Requests_RequestBase.RequestBase.html +1 -0
- package/dist/docs/classes/Requests_RequestFactory.RequestFactory.html +1 -0
- package/dist/docs/classes/Sitefinity.Sitefinity-1.html +5 -0
- package/dist/docs/classes/WhereQuery.WhereQuery-1.html +31 -0
- package/dist/docs/classes/utils.utils-1.html +1 -0
- package/dist/docs/index.html +54 -242
- package/dist/docs/interfaces/Data.CreateRelatedRequestOptions.html +1 -0
- package/dist/docs/interfaces/Data.CreateRequestOptions.html +1 -0
- package/dist/docs/interfaces/Data.OperationsRequestOptions.html +1 -0
- package/dist/docs/interfaces/Data.PropertyRequestOptions.html +1 -0
- package/dist/docs/interfaces/Data.RequestOptionsBase.html +1 -0
- package/dist/docs/interfaces/Data.SingleRelatedItemRequestOptions.html +1 -0
- package/dist/docs/interfaces/Data.UpdateRequestOptions.html +1 -0
- package/dist/docs/interfaces/Data.UploadRequestOptions.html +1 -0
- package/dist/docs/interfaces/Requests_BatchRequest.BatchCreateRelatedRequestOptions.html +1 -0
- package/dist/docs/interfaces/Requests_BatchRequest.BatchCreateRequestOptions.html +1 -0
- package/dist/docs/interfaces/Requests_BatchRequest.BatchPropertyRequestOptions.html +1 -0
- package/dist/docs/interfaces/Requests_BatchRequest.BatchRequestOptionsBase.html +1 -0
- package/dist/docs/interfaces/Requests_BatchRequest.BatchRequestOptionsExtended.html +1 -0
- package/dist/docs/interfaces/Requests_BatchRequest.BatchSingleItemRequestOptions.html +1 -0
- package/dist/docs/interfaces/Requests_BatchRequest.BatchSingleRelatedItemRequestOptions.html +1 -0
- package/dist/docs/interfaces/Requests_BatchRequest.BatchUpdateRequestOptions.html +1 -0
- package/dist/docs/interfaces/Requests_ExecutableRequest.ResponseHandlers.html +5 -0
- package/dist/docs/interfaces/Requests_Request.PostRequestOptionsExtended.html +1 -0
- package/dist/docs/interfaces/Requests_Request.PutRequestOptionsExtended.html +1 -0
- package/dist/docs/interfaces/Requests_Request.RelatedByIdRequestOptionsExtended.html +1 -0
- package/dist/docs/interfaces/Requests_Request.RelatedRequestOptionsExtended.html +1 -0
- package/dist/docs/interfaces/Requests_Request.UploadRequestOptionsExtended.html +1 -0
- package/dist/docs/interfaces/Requests_RequestBase.RequestOptionsBaseExtended.html +1 -0
- package/dist/docs/interfaces/Sitefinity.SDKOptions.html +9 -0
- package/dist/docs/interfaces/Sitefinity.Token.html +1 -0
- package/dist/docs/interfaces/Sitefinity.TypeOptions.html +13 -0
- package/dist/docs/modules/BlobBuilder.html +1 -0
- package/dist/docs/modules/Data.html +1 -0
- package/dist/docs/modules/Expression.html +1 -0
- package/dist/docs/modules/OrderProperty.html +1 -0
- package/dist/docs/modules/Query.html +1 -0
- package/dist/docs/modules/QueryBase.html +1 -0
- package/dist/docs/modules/QueryBuilder.html +1 -0
- package/dist/docs/modules/Requests_BatchRequest.html +1 -0
- package/dist/docs/modules/Requests_ExecutableRequest.html +1 -0
- package/dist/docs/modules/Requests_Request.html +1 -0
- package/dist/docs/modules/Requests_RequestBase.html +1 -0
- package/dist/docs/modules/Requests_RequestFactory.html +1 -0
- package/dist/docs/modules/Sitefinity.html +1 -0
- package/dist/docs/modules/WhereQuery.html +1 -0
- package/dist/docs/modules/constants.html +1 -0
- package/dist/docs/modules/utils.html +1 -0
- package/dist/docs/modules.html +1 -0
- package/dist/samples.html +33 -81
- package/dist/sitefinity-webservices-sdk.d.ts +16 -0
- package/dist/sitefinity-webservices-sdk.js +1141 -1737
- package/dist/sitefinity-webservices-sdk.js.map +1 -1
- package/dist/sitefinity-webservices-sdk.min.js +2 -16
- package/dist/sitefinity-webservices-sdk.min.js.LICENSE.txt +14 -0
- package/dist/src/BlobBuilder.d.ts +14 -0
- package/dist/src/Data.d.ts +144 -0
- package/dist/src/Expression.d.ts +19 -0
- package/dist/src/OrderProperty.d.ts +8 -0
- package/dist/src/Query.d.ts +59 -0
- package/dist/src/QueryBase.d.ts +18 -0
- package/dist/src/QueryBuilder.d.ts +13 -0
- package/dist/src/Requests/BatchRequest.d.ts +146 -0
- package/dist/src/Requests/ExecutableRequest.d.ts +20 -0
- package/dist/src/Requests/Request.d.ts +88 -0
- package/dist/src/Requests/RequestBase.d.ts +28 -0
- package/dist/src/Requests/RequestFactory.d.ts +22 -0
- package/dist/src/Sitefinity.d.ts +66 -0
- package/dist/src/WhereQuery.d.ts +68 -0
- package/dist/src/constants.d.ts +55 -0
- package/dist/src/utils.d.ts +16 -0
- package/karma.conf.js +29 -0
- package/package-lock.json +16108 -6805
- package/package.json +28 -10
- package/sitefinity-webservices-sdk.ts +16 -0
- package/src/BlobBuilder.ts +7 -12
- package/src/Data.spec.ts +160 -0
- package/src/Data.ts +132 -207
- package/src/Expression.ts +0 -1
- package/src/OrderProperty.ts +4 -5
- package/src/Query.ts +52 -78
- package/src/QueryBase.ts +21 -47
- package/src/QueryBuilder.ts +64 -82
- package/src/Requests/BatchRequest.ts +312 -335
- package/src/Requests/ExecutableRequest.ts +46 -73
- package/src/Requests/Request.ts +134 -260
- package/src/Requests/RequestBase.ts +161 -0
- package/src/Requests/RequestFactory.ts +36 -54
- package/src/Requests/request.spec.ts +92 -0
- package/src/Sitefinity.spec.ts +418 -0
- package/src/Sitefinity.ts +77 -146
- package/src/WhereQuery.ts +52 -112
- package/src/constants.ts +58 -39
- package/src/utils.ts +17 -14
- package/template.html +33 -35
- package/tsconfig.json +8 -1
- package/type.txt +1 -1
- package/version.txt +1 -1
- package/config/html.conf.json +0 -5
- package/dist/docs/assets/css/main.css +0 -865
- package/dist/docs/assets/css/main.css.map +0 -7
- package/dist/docs/assets/images/icons.png +0 -0
- package/dist/docs/assets/images/icons@2x.png +0 -0
- package/dist/docs/assets/js/main.js +0 -5
- package/dist/docs/assets/js/search.js +0 -3
- package/dist/docs/classes/_authentication_.authentication.html +0 -527
- package/dist/docs/classes/_blobbuilder_.blobbuilder.html +0 -351
- package/dist/docs/classes/_data_.data.html +0 -974
- package/dist/docs/classes/_expression_.binaryexpression.html +0 -450
- package/dist/docs/classes/_expression_.complexexpression.html +0 -374
- package/dist/docs/classes/_expression_.expressionbase.html +0 -336
- package/dist/docs/classes/_orderproperty_.orderproperty.html +0 -381
- package/dist/docs/classes/_query_.query.html +0 -896
- package/dist/docs/classes/_querybase_.querybase.html +0 -518
- package/dist/docs/classes/_querybuilder_.querybuilder.html +0 -496
- package/dist/docs/classes/_requests_batchrequest_.batchrequest.html +0 -1511
- package/dist/docs/classes/_requests_batchrequest_.transaction.html +0 -804
- package/dist/docs/classes/_requests_executablerequest_.executablerequest.html +0 -549
- package/dist/docs/classes/_requests_request_.createrelatedrequest.html +0 -689
- package/dist/docs/classes/_requests_request_.createrequest.html +0 -680
- package/dist/docs/classes/_requests_request_.deleterelatedbyidrequest.html +0 -687
- package/dist/docs/classes/_requests_request_.deleterelatedrequest.html +0 -673
- package/dist/docs/classes/_requests_request_.deleterequest.html +0 -666
- package/dist/docs/classes/_requests_request_.getbyidrequest.html +0 -666
- package/dist/docs/classes/_requests_request_.getrelatedbyidrequest.html +0 -687
- package/dist/docs/classes/_requests_request_.getrelatedrequest.html +0 -673
- package/dist/docs/classes/_requests_request_.getrequest.html +0 -658
- package/dist/docs/classes/_requests_request_.requestbase.html +0 -687
- package/dist/docs/classes/_requests_request_.updaterequest.html +0 -686
- package/dist/docs/classes/_requests_request_.uploadrequest.html +0 -715
- package/dist/docs/classes/_requests_requestfactory_.requestfactory.html +0 -724
- package/dist/docs/classes/_sitefinity_.sitefinity.html +0 -521
- package/dist/docs/classes/_utils_.utils.html +0 -597
- package/dist/docs/classes/_wherequery_.wherequery.html +0 -992
- package/dist/docs/globals.html +0 -238
- package/dist/docs/modules/_authentication_.html +0 -225
- package/dist/docs/modules/_blobbuilder_.html +0 -225
- package/dist/docs/modules/_constants_.html +0 -528
- package/dist/docs/modules/_contenttypes_.html +0 -248
- package/dist/docs/modules/_data_.html +0 -225
- package/dist/docs/modules/_expression_.html +0 -233
- package/dist/docs/modules/_headers_.html +0 -328
- package/dist/docs/modules/_httpmethods_.html +0 -288
- package/dist/docs/modules/_main_.html +0 -209
- package/dist/docs/modules/_orderproperty_.html +0 -225
- package/dist/docs/modules/_query_.html +0 -225
- package/dist/docs/modules/_querybase_.html +0 -225
- package/dist/docs/modules/_querybuilder_.html +0 -247
- package/dist/docs/modules/_requests_batchrequest_.html +0 -265
- package/dist/docs/modules/_requests_executablerequest_.html +0 -296
- package/dist/docs/modules/_requests_request_.html +0 -333
- package/dist/docs/modules/_requests_requestfactory_.html +0 -247
- package/dist/docs/modules/_sitefinity_.html +0 -225
- package/dist/docs/modules/_utils_.html +0 -225
- package/dist/docs/modules/_wherequery_.html +0 -247
- package/dist/index.html +0 -474
- package/src/Authentication.ts +0 -96
- package/src/ContentTypes.ts +0 -5
- package/src/Headers.ts +0 -12
- package/src/HttpMethods.ts +0 -9
- package/src/main.ts +0 -2
package/src/Query.ts
CHANGED
|
@@ -4,28 +4,26 @@ import { OrderProperty } from './OrderProperty';
|
|
|
4
4
|
import { QueryBuilder } from './QueryBuilder';
|
|
5
5
|
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
8
|
-
* @class Query
|
|
9
|
-
* @augments QueryBase
|
|
7
|
+
* The query class is used for constructing queries.
|
|
10
8
|
* @example
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
9
|
+
* const query = new Sitefinity.Query();
|
|
10
|
+
* const query0 = query.where().and().endsWith("Title", "Record").done().or().startsWith('Title', 'asd').done().done();
|
|
11
|
+
* const query1 = query.where().or().endsWith("Record", "Title").ne('age', '15').eq('Content', 'test').done().done();
|
|
12
|
+
* const query2 = query.where().and().endsWith("Title", "Record").done().done();
|
|
13
|
+
* const query3 = query.where().endsWith("Record", "Title").or().ne('age', '15').eq('Content', 'test').done().done();
|
|
14
|
+
* const query4 = query.where().not().endsWith("Record", "Title").done().and().not().eq('Content', 'test').done().done().done();
|
|
15
|
+
* const query5 = query.where().not().and().endsWith("Record", "Title").eq('Content', 'test').done().done().done();
|
|
16
|
+
* const query6 = query.select("Id", "Title", "Content").expand('Tags').order("Title desc").where().ne('Title', 'zzz').eq('Title', 'newTitle').done()//.count();
|
|
17
|
+
* const query7 = query.order("Title desc").where().eq('Title', 'newTitleUPDATE1').done().select("Title", "Content");
|
|
18
|
+
* const query8 = query.where().eq('Title', 'newTitleN11').done();
|
|
21
19
|
*/
|
|
22
20
|
export class Query extends QueryBase {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
orderProperties: OrderProperty[] = null;
|
|
22
|
+
skipValue: number = null;
|
|
23
|
+
takeValue: number = null;
|
|
24
|
+
searchValue: string = null;
|
|
25
|
+
returnCount: boolean;
|
|
26
|
+
filter: WhereQuery<Query> = null;
|
|
29
27
|
|
|
30
28
|
constructor() {
|
|
31
29
|
super();
|
|
@@ -33,99 +31,75 @@ export class Query extends QueryBase {
|
|
|
33
31
|
|
|
34
32
|
/**
|
|
35
33
|
* Begins a where clause for filtering the items.
|
|
36
|
-
* @memberOf Query
|
|
37
|
-
* @returns {@link WhereQuery}
|
|
38
34
|
*/
|
|
39
|
-
where() {
|
|
40
|
-
|
|
41
|
-
newObj.
|
|
35
|
+
where(): WhereQuery<Query> {
|
|
36
|
+
const clone: Query = this.clone((newObj: Query) => {
|
|
37
|
+
newObj.filter = new WhereQuery(newObj);
|
|
42
38
|
});
|
|
43
39
|
|
|
44
|
-
return clone.
|
|
40
|
+
return clone.filter;
|
|
45
41
|
}
|
|
46
42
|
|
|
47
|
-
|
|
48
43
|
/**
|
|
49
44
|
* Specifies the order by clause.
|
|
50
|
-
* @memberOf Query
|
|
51
45
|
* @example
|
|
52
|
-
*
|
|
46
|
+
* order by single field
|
|
53
47
|
* order("Title desc")
|
|
54
48
|
* @example
|
|
55
|
-
*
|
|
49
|
+
* order by multiple fields
|
|
56
50
|
* order("Title desc", "Description asc")
|
|
57
|
-
* @returns {@link Query}
|
|
58
51
|
*/
|
|
59
|
-
order() {
|
|
60
|
-
|
|
61
|
-
this.
|
|
52
|
+
order(...properties: string[]): Query {
|
|
53
|
+
properties = properties ?? [];
|
|
54
|
+
this.validatePropertyPaths(properties);
|
|
62
55
|
|
|
63
|
-
return this.
|
|
64
|
-
|
|
65
|
-
for (
|
|
66
|
-
|
|
67
|
-
|
|
56
|
+
return this.clone((newObj: Query) => {
|
|
57
|
+
const orderItems: OrderProperty[] = [];
|
|
58
|
+
for (let i = 0; i < properties.length; i++) {
|
|
59
|
+
const member = properties[i];
|
|
60
|
+
const orderProp = new OrderProperty(member);
|
|
68
61
|
orderItems.push(orderProp);
|
|
69
62
|
}
|
|
70
|
-
newObj.
|
|
63
|
+
newObj.orderProperties = orderItems;
|
|
71
64
|
});
|
|
72
65
|
}
|
|
73
66
|
|
|
74
|
-
/**
|
|
75
|
-
*
|
|
76
|
-
* @method skip
|
|
77
|
-
* @see [query.take]{@link query.take}
|
|
78
|
-
* @param {number} value The number of items to skip.
|
|
79
|
-
* @returns {Query}
|
|
67
|
+
/**
|
|
68
|
+
* Skips a certain number of items from the beginning before returning the rest of the items. Used for paging.
|
|
80
69
|
*/
|
|
81
|
-
skip(value: number) {
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
newObj._skip = value;
|
|
70
|
+
skip(value: number): Query {
|
|
71
|
+
return this.clone((newObj: Query) => {
|
|
72
|
+
newObj.skipValue = value;
|
|
85
73
|
});
|
|
86
74
|
}
|
|
87
75
|
|
|
88
|
-
/**
|
|
89
|
-
*
|
|
90
|
-
* @param {number} value The number of items to take.
|
|
91
|
-
* @returns {Query}
|
|
76
|
+
/**
|
|
77
|
+
* Takes a specified number of items from the query result. Used for paging.
|
|
92
78
|
*/
|
|
93
|
-
take(value: number) {
|
|
94
|
-
return this.
|
|
95
|
-
newObj.
|
|
79
|
+
take(value: number): Query {
|
|
80
|
+
return this.clone((newObj: Query) => {
|
|
81
|
+
newObj.takeValue = value;
|
|
96
82
|
});
|
|
97
83
|
}
|
|
98
84
|
|
|
99
|
-
/**
|
|
100
|
-
*
|
|
101
|
-
* @param {string} value The search expression.
|
|
102
|
-
* @returns {Query}
|
|
85
|
+
/**
|
|
86
|
+
* Searches for the items matching the specified expression.
|
|
103
87
|
*/
|
|
104
|
-
search(value: string) {
|
|
105
|
-
return this.
|
|
106
|
-
newObj.
|
|
88
|
+
search(value: string): Query {
|
|
89
|
+
return this.clone((newObj: Query) => {
|
|
90
|
+
newObj.searchValue = value;
|
|
107
91
|
});
|
|
108
92
|
}
|
|
109
93
|
|
|
110
|
-
/**
|
|
111
|
-
*
|
|
112
|
-
* @param {inline} inline Whether to return only the count of the items with or without their JSON representation.
|
|
113
|
-
* @returns {Query}
|
|
94
|
+
/**
|
|
95
|
+
* Returns the total item count with the result. Used for paging.
|
|
114
96
|
*/
|
|
115
|
-
count(
|
|
116
|
-
return this.
|
|
117
|
-
newObj.
|
|
97
|
+
count(returnCount = true): Query {
|
|
98
|
+
return this.clone((newObj: Query) => {
|
|
99
|
+
newObj.returnCount = returnCount;
|
|
118
100
|
});
|
|
119
101
|
}
|
|
120
102
|
|
|
121
|
-
_getFilter() {
|
|
122
|
-
return this.expr;
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
_getOrderBy() {
|
|
126
|
-
return this._order;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
103
|
build() {
|
|
130
104
|
return new QueryBuilder(this).build();
|
|
131
105
|
}
|
package/src/QueryBase.ts
CHANGED
|
@@ -1,70 +1,45 @@
|
|
|
1
1
|
import { utils } from './utils';
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
|
-
*
|
|
5
|
-
* @class QueryBase
|
|
4
|
+
* The base class for dealing with queries.
|
|
6
5
|
*/
|
|
7
6
|
export class QueryBase {
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
selectProperties: string[];
|
|
8
|
+
expandProperties: string[];
|
|
9
|
+
|
|
10
10
|
constructor() {
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
11
|
+
this.selectProperties = null;
|
|
12
|
+
this.expandProperties = null;
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
/**
|
|
16
16
|
* Selects which fields will be returned when querying the service.
|
|
17
|
-
* @memberOf QueryBase
|
|
18
|
-
* @instance
|
|
19
|
-
* @param {string} arguments - an array of fields to include in the $select statement.
|
|
20
|
-
* @returns {QueryBase}
|
|
21
17
|
*/
|
|
22
|
-
|
|
23
|
-
|
|
18
|
+
select(...properties: string[]): QueryBase {
|
|
19
|
+
properties = properties ?? [];
|
|
24
20
|
|
|
25
|
-
this.
|
|
21
|
+
this.validatePropertyPaths(properties);
|
|
26
22
|
|
|
27
|
-
return this.
|
|
28
|
-
newObj.
|
|
23
|
+
return this.clone((newObj: QueryBase) => {
|
|
24
|
+
newObj.selectProperties = properties.filter((prop, index, props) => props.indexOf(prop) === index);
|
|
29
25
|
});
|
|
30
26
|
}
|
|
31
27
|
|
|
32
28
|
/**
|
|
33
29
|
* Selects which navigation properties will be returned when querying the service.
|
|
34
|
-
* @memberOf QueryBase
|
|
35
|
-
* @instance
|
|
36
|
-
* @param {string} arguments - an array of fields to include in the $expand statement.
|
|
37
|
-
* @returns {QueryBase}
|
|
38
30
|
*/
|
|
39
|
-
expand() {
|
|
40
|
-
|
|
41
|
-
this.
|
|
31
|
+
expand(...properties: string[]): QueryBase {
|
|
32
|
+
properties = properties ?? [];
|
|
33
|
+
this.validatePropertyPaths(properties);
|
|
42
34
|
|
|
43
|
-
return this.
|
|
44
|
-
newObj.
|
|
35
|
+
return this.clone((newObj: QueryBase) => {
|
|
36
|
+
newObj.expandProperties = properties.filter((prop, index, props) => props.indexOf(prop) === index);
|
|
45
37
|
});
|
|
46
38
|
}
|
|
47
39
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
values.push(arg[index]);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
return values;
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
_getSelect() {
|
|
58
|
-
return this._select;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
_getExpand() {
|
|
62
|
-
return this._expand;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
_validatePropertyPaths(propPaths: any, allowNested: boolean = false) {
|
|
66
|
-
for (var i = 0; i < propPaths.length; i++) {
|
|
67
|
-
var member = propPaths[i];
|
|
40
|
+
protected validatePropertyPaths(propPaths: string[], allowNested = false) {
|
|
41
|
+
for (let i = 0; i < propPaths.length; i++) {
|
|
42
|
+
const member = propPaths[i];
|
|
68
43
|
if (!utils.isString(member)) {
|
|
69
44
|
throw new Error('Invalid argument in clause');
|
|
70
45
|
}
|
|
@@ -75,9 +50,8 @@ export class QueryBase {
|
|
|
75
50
|
}
|
|
76
51
|
}
|
|
77
52
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
53
|
+
protected clone(setter: Function = null) {
|
|
54
|
+
const newObj = utils.clone(this, new QueryBase(), setter);
|
|
81
55
|
return newObj;
|
|
82
56
|
}
|
|
83
57
|
}
|
package/src/QueryBuilder.ts
CHANGED
|
@@ -2,109 +2,97 @@
|
|
|
2
2
|
import { ComplexExpression, BinaryExpression } from './Expression';
|
|
3
3
|
import { OrderProperty } from './OrderProperty';
|
|
4
4
|
import { utils } from './utils';
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
import { ODATA_PARAMS, EXPRESSION_TYPE } from "./constants";
|
|
6
|
+
import { Query } from "./Query";
|
|
7
7
|
|
|
8
8
|
export class QueryBuilder {
|
|
9
|
-
constructor(private query:
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
build(): any {
|
|
14
|
-
var queryParameters = {};
|
|
15
|
-
this._buildODataQueryParams(this.query, queryParameters);
|
|
16
|
-
return queryParameters;
|
|
9
|
+
constructor(private query: Query) {
|
|
17
10
|
}
|
|
18
11
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
var whereClause = query._getFilter();
|
|
12
|
+
build(): { [key: string]: string } {
|
|
13
|
+
const queryParameters = {};
|
|
14
|
+
const whereClause = this.query.filter;
|
|
23
15
|
if (whereClause instanceof WhereQuery) {
|
|
24
|
-
|
|
16
|
+
const expression = whereClause.getExpression();
|
|
25
17
|
if (expression instanceof ComplexExpression) {
|
|
26
|
-
|
|
18
|
+
const result = this.buildComplexExpression(expression, null);
|
|
27
19
|
if (result) {
|
|
28
|
-
queryParameters[
|
|
20
|
+
queryParameters[ODATA_PARAMS.$filter] = result;
|
|
29
21
|
}
|
|
30
22
|
}
|
|
31
23
|
}
|
|
32
24
|
|
|
33
|
-
|
|
25
|
+
const selectClause = this.query.selectProperties;
|
|
34
26
|
if (selectClause instanceof Array) {
|
|
35
|
-
queryParameters[
|
|
27
|
+
queryParameters[ODATA_PARAMS.$select] = selectClause.join(', ');
|
|
36
28
|
}
|
|
37
29
|
|
|
38
|
-
|
|
30
|
+
const expandClause = this.query.expandProperties;
|
|
39
31
|
if (expandClause instanceof Array)
|
|
40
|
-
queryParameters[
|
|
32
|
+
queryParameters[ODATA_PARAMS.$expand] = expandClause.join(', ');
|
|
41
33
|
|
|
42
|
-
|
|
34
|
+
const orderByClause = this.query.orderProperties;
|
|
43
35
|
if (orderByClause instanceof Array) {
|
|
44
|
-
|
|
45
|
-
for (
|
|
36
|
+
const order = [];
|
|
37
|
+
for (const i in orderByClause) {
|
|
46
38
|
if (orderByClause[i] instanceof OrderProperty)
|
|
47
39
|
order.push(orderByClause[i].getValue());
|
|
48
40
|
}
|
|
49
|
-
queryParameters[
|
|
41
|
+
queryParameters[ODATA_PARAMS.$orderby] = order.join(', ');
|
|
50
42
|
}
|
|
51
43
|
|
|
52
|
-
|
|
44
|
+
const take = this.query.takeValue;
|
|
53
45
|
if (utils.isNumber(take))
|
|
54
|
-
queryParameters[
|
|
46
|
+
queryParameters[ODATA_PARAMS.$top] = take;
|
|
55
47
|
|
|
56
|
-
|
|
48
|
+
const skip = this.query.skipValue;
|
|
57
49
|
if (utils.isNumber(skip))
|
|
58
|
-
queryParameters[
|
|
50
|
+
queryParameters[ODATA_PARAMS.$skip] = skip;
|
|
59
51
|
|
|
60
|
-
|
|
52
|
+
const search = this.query.searchValue;
|
|
61
53
|
if (search)
|
|
62
|
-
queryParameters[
|
|
54
|
+
queryParameters[ODATA_PARAMS.$search] = search;
|
|
63
55
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
// means that the count is required inline
|
|
67
|
-
if (count !== null) {
|
|
68
|
-
queryParameters[queryParams.$count] = count;
|
|
56
|
+
if (this.query.returnCount) {
|
|
57
|
+
queryParameters[ODATA_PARAMS.$count] = true;
|
|
69
58
|
}
|
|
70
59
|
|
|
71
60
|
return queryParameters;
|
|
72
61
|
}
|
|
73
62
|
|
|
74
|
-
private
|
|
63
|
+
private buildComplexExpression(expression: ComplexExpression, parent: string): string {
|
|
75
64
|
if (!(expression instanceof ComplexExpression))
|
|
76
65
|
throw new Error('Invalid complex expression');
|
|
77
66
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
var subExpressions = expression.getExpressions();
|
|
67
|
+
let counter = 0;
|
|
68
|
+
let result = '';
|
|
69
|
+
const subExpressions = expression.getExpressions();
|
|
82
70
|
if (!subExpressions.length) {
|
|
83
71
|
return result;
|
|
84
72
|
}
|
|
85
73
|
|
|
86
74
|
while (true) {
|
|
87
|
-
|
|
75
|
+
const currentExp = subExpressions[counter];
|
|
88
76
|
if (currentExp instanceof BinaryExpression) {
|
|
89
|
-
result += this.
|
|
77
|
+
result += this.buildBinaryExpression(currentExp);
|
|
90
78
|
}
|
|
91
79
|
else if (currentExp instanceof ComplexExpression) {
|
|
92
|
-
|
|
80
|
+
const complexResult = this.buildComplexExpression(currentExp, expression.type);
|
|
93
81
|
if (complexResult) {
|
|
94
82
|
result += '(' + complexResult + ')';
|
|
95
83
|
}
|
|
96
84
|
}
|
|
97
85
|
|
|
98
|
-
if (expression.getType() ===
|
|
86
|
+
if (expression.getType() === EXPRESSION_TYPE.not)
|
|
99
87
|
result = expression.getType() + ' ' + result;
|
|
100
88
|
// TODOSDK: Rethink this!
|
|
101
|
-
if (expression.getType() ===
|
|
102
|
-
|
|
103
|
-
for (
|
|
104
|
-
if (subExpressions[index].type ==
|
|
89
|
+
if (expression.getType() === EXPRESSION_TYPE.any) {
|
|
90
|
+
const exprVal = [];
|
|
91
|
+
for (let index = 0; index < subExpressions.length; index++) {
|
|
92
|
+
if (subExpressions[index].type == EXPRESSION_TYPE.contains || subExpressions[index].type == EXPRESSION_TYPE.startsWith || subExpressions[index].type == EXPRESSION_TYPE.endsWith)
|
|
105
93
|
exprVal.push(subExpressions[index].type.toLowerCase() + "(x, '" + (subExpressions[index] as BinaryExpression).constant + "')");
|
|
106
94
|
else
|
|
107
|
-
exprVal.push('x ' + subExpressions[index].type.toLowerCase() + ' ' + this.
|
|
95
|
+
exprVal.push('x ' + subExpressions[index].type.toLowerCase() + ' ' + this.checkType((subExpressions[index] as BinaryExpression).constant));
|
|
108
96
|
}
|
|
109
97
|
result = (currentExp as BinaryExpression).parameter + '/' + expression.getType() + '(x:' + exprVal.join(' ' + parent + ' ') + ')';
|
|
110
98
|
}
|
|
@@ -119,46 +107,40 @@ export class QueryBuilder {
|
|
|
119
107
|
return result;
|
|
120
108
|
}
|
|
121
109
|
|
|
122
|
-
private
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
var ExpressionType = constants.ExpressionType;
|
|
127
|
-
var result = null;
|
|
128
|
-
var type = expression.getType();
|
|
110
|
+
private buildBinaryExpression(expression: BinaryExpression): string {
|
|
111
|
+
let result: string = null;
|
|
112
|
+
const type = expression.getType();
|
|
129
113
|
switch (type) {
|
|
130
|
-
case
|
|
131
|
-
case
|
|
132
|
-
case
|
|
133
|
-
case
|
|
134
|
-
case
|
|
135
|
-
case
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
if (/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(constant))
|
|
139
|
-
template = '({0} {1} {2})';*/
|
|
140
|
-
|
|
141
|
-
result = `(${expression.getParameter()} ${type} ${this._checkType(constant)})`;
|
|
114
|
+
case EXPRESSION_TYPE.eq:
|
|
115
|
+
case EXPRESSION_TYPE.ne:
|
|
116
|
+
case EXPRESSION_TYPE.lt:
|
|
117
|
+
case EXPRESSION_TYPE.le:
|
|
118
|
+
case EXPRESSION_TYPE.gt:
|
|
119
|
+
case EXPRESSION_TYPE.ge: {
|
|
120
|
+
const constant = expression.getConstant();
|
|
121
|
+
result = `(${expression.getParameter()} ${type} ${this.checkType(constant)})`;
|
|
142
122
|
break;
|
|
143
|
-
|
|
144
|
-
case
|
|
145
|
-
case
|
|
146
|
-
case
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
123
|
+
}
|
|
124
|
+
case EXPRESSION_TYPE.contains:
|
|
125
|
+
case EXPRESSION_TYPE.startsWith:
|
|
126
|
+
case EXPRESSION_TYPE.endsWith: {
|
|
127
|
+
const expressionParameter = this.applyCaseSensitiveSettings(expression, expression.getParameter());
|
|
128
|
+
const expressionConstant = this.checkType(expression.getConstant());
|
|
129
|
+
const expressionValue = this.applyCaseSensitiveSettings(expression, expressionConstant);
|
|
150
130
|
|
|
151
131
|
result = `${type.toLowerCase()}(${expressionParameter}, ${expressionValue})`;
|
|
152
132
|
break;
|
|
153
|
-
|
|
154
|
-
|
|
133
|
+
}
|
|
134
|
+
default: {
|
|
135
|
+
const msg = `Unsupported operator ${type}`;
|
|
155
136
|
throw new Error(msg);
|
|
137
|
+
}
|
|
156
138
|
}
|
|
157
139
|
|
|
158
140
|
return result;
|
|
159
141
|
}
|
|
160
142
|
|
|
161
|
-
private
|
|
143
|
+
private applyCaseSensitiveSettings(expression: BinaryExpression, value: string): string {
|
|
162
144
|
if (expression.isCaseSensitive()) {
|
|
163
145
|
return value;
|
|
164
146
|
}
|
|
@@ -166,8 +148,8 @@ export class QueryBuilder {
|
|
|
166
148
|
return `tolower(${value})`;
|
|
167
149
|
}
|
|
168
150
|
|
|
169
|
-
private
|
|
170
|
-
if (this.
|
|
151
|
+
private checkType(constant: any): string {
|
|
152
|
+
if (this.isGuid(constant))
|
|
171
153
|
return constant;
|
|
172
154
|
|
|
173
155
|
if (constant == null)
|
|
@@ -183,7 +165,7 @@ export class QueryBuilder {
|
|
|
183
165
|
return "'" + constant + "'";
|
|
184
166
|
}
|
|
185
167
|
|
|
186
|
-
private
|
|
168
|
+
private isGuid(constant: string): boolean {
|
|
187
169
|
return /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/.test(constant);
|
|
188
170
|
}
|
|
189
171
|
}
|