@progress/sitefinity-webservices-sdk 0.2.72 → 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.
Files changed (201) hide show
  1. package/.eslintignore +4 -0
  2. package/.eslintrc.js +19 -0
  3. package/ci/pipelines/ci.yml +219 -0
  4. package/config/helpers.js +0 -6
  5. package/config/webpack.common.js +1 -3
  6. package/config/webpack.dev.js +2 -9
  7. package/config/webpack.prod.js +5 -6
  8. package/dist/docs/.nojekyll +1 -0
  9. package/dist/docs/assets/highlight.css +57 -0
  10. package/dist/docs/assets/icons.css +1043 -0
  11. package/dist/docs/assets/icons.png +0 -0
  12. package/dist/docs/assets/icons@2x.png +0 -0
  13. package/dist/docs/assets/main.js +52 -0
  14. package/dist/docs/assets/search.js +1 -0
  15. package/dist/docs/assets/style.css +1413 -0
  16. package/dist/docs/assets/{images/widgets.png → widgets.png} +0 -0
  17. package/dist/docs/assets/{images/widgets@2x.png → widgets@2x.png} +0 -0
  18. package/dist/docs/classes/BlobBuilder.BlobBuilder-1.html +7 -0
  19. package/dist/docs/classes/Data.Data-1.html +65 -0
  20. package/dist/docs/classes/Expression.BinaryExpression.html +1 -0
  21. package/dist/docs/classes/Expression.ComplexExpression.html +1 -0
  22. package/dist/docs/classes/Expression.ExpressionBase.html +1 -0
  23. package/dist/docs/classes/OrderProperty.OrderProperty-1.html +1 -0
  24. package/dist/docs/classes/Query.Query-1.html +33 -0
  25. package/dist/docs/classes/QueryBase.QueryBase-1.html +7 -0
  26. package/dist/docs/classes/QueryBuilder.QueryBuilder-1.html +1 -0
  27. package/dist/docs/classes/Requests_BatchRequest.BatchRequest.html +17 -0
  28. package/dist/docs/classes/Requests_BatchRequest.Transaction.html +17 -0
  29. package/dist/docs/classes/Requests_ExecutableRequest.ExecutableRequest.html +1 -0
  30. package/dist/docs/classes/Requests_Request.CreateRelatedRequest.html +1 -0
  31. package/dist/docs/classes/Requests_Request.CreateRequest.html +1 -0
  32. package/dist/docs/classes/Requests_Request.DeleteRelatedByIdRequest.html +1 -0
  33. package/dist/docs/classes/Requests_Request.DeleteRelatedRequest.html +1 -0
  34. package/dist/docs/classes/Requests_Request.DeleteRequest.html +1 -0
  35. package/dist/docs/classes/Requests_Request.GetByIdRequest.html +1 -0
  36. package/dist/docs/classes/Requests_Request.GetRelatedByIdRequest.html +1 -0
  37. package/dist/docs/classes/Requests_Request.GetRelatedRequest.html +1 -0
  38. package/dist/docs/classes/Requests_Request.GetRequest.html +1 -0
  39. package/dist/docs/classes/Requests_Request.UpdateRequest.html +1 -0
  40. package/dist/docs/classes/Requests_Request.UploadRequest.html +1 -0
  41. package/dist/docs/classes/Requests_RequestBase.RequestBase.html +1 -0
  42. package/dist/docs/classes/Requests_RequestFactory.RequestFactory.html +1 -0
  43. package/dist/docs/classes/Sitefinity.Sitefinity-1.html +5 -0
  44. package/dist/docs/classes/WhereQuery.WhereQuery-1.html +31 -0
  45. package/dist/docs/classes/utils.utils-1.html +1 -0
  46. package/dist/docs/index.html +54 -242
  47. package/dist/docs/interfaces/Data.CreateRelatedRequestOptions.html +1 -0
  48. package/dist/docs/interfaces/Data.CreateRequestOptions.html +1 -0
  49. package/dist/docs/interfaces/Data.OperationsRequestOptions.html +1 -0
  50. package/dist/docs/interfaces/Data.PropertyRequestOptions.html +1 -0
  51. package/dist/docs/interfaces/Data.RequestOptionsBase.html +1 -0
  52. package/dist/docs/interfaces/Data.SingleRelatedItemRequestOptions.html +1 -0
  53. package/dist/docs/interfaces/Data.UpdateRequestOptions.html +1 -0
  54. package/dist/docs/interfaces/Data.UploadRequestOptions.html +1 -0
  55. package/dist/docs/interfaces/Requests_BatchRequest.BatchCreateRelatedRequestOptions.html +1 -0
  56. package/dist/docs/interfaces/Requests_BatchRequest.BatchCreateRequestOptions.html +1 -0
  57. package/dist/docs/interfaces/Requests_BatchRequest.BatchPropertyRequestOptions.html +1 -0
  58. package/dist/docs/interfaces/Requests_BatchRequest.BatchRequestOptionsBase.html +1 -0
  59. package/dist/docs/interfaces/Requests_BatchRequest.BatchRequestOptionsExtended.html +1 -0
  60. package/dist/docs/interfaces/Requests_BatchRequest.BatchSingleItemRequestOptions.html +1 -0
  61. package/dist/docs/interfaces/Requests_BatchRequest.BatchSingleRelatedItemRequestOptions.html +1 -0
  62. package/dist/docs/interfaces/Requests_BatchRequest.BatchUpdateRequestOptions.html +1 -0
  63. package/dist/docs/interfaces/Requests_ExecutableRequest.ResponseHandlers.html +5 -0
  64. package/dist/docs/interfaces/Requests_Request.PostRequestOptionsExtended.html +1 -0
  65. package/dist/docs/interfaces/Requests_Request.PutRequestOptionsExtended.html +1 -0
  66. package/dist/docs/interfaces/Requests_Request.RelatedByIdRequestOptionsExtended.html +1 -0
  67. package/dist/docs/interfaces/Requests_Request.RelatedRequestOptionsExtended.html +1 -0
  68. package/dist/docs/interfaces/Requests_Request.UploadRequestOptionsExtended.html +1 -0
  69. package/dist/docs/interfaces/Requests_RequestBase.RequestOptionsBaseExtended.html +1 -0
  70. package/dist/docs/interfaces/Sitefinity.SDKOptions.html +9 -0
  71. package/dist/docs/interfaces/Sitefinity.Token.html +1 -0
  72. package/dist/docs/interfaces/Sitefinity.TypeOptions.html +13 -0
  73. package/dist/docs/modules/BlobBuilder.html +1 -0
  74. package/dist/docs/modules/Data.html +1 -0
  75. package/dist/docs/modules/Expression.html +1 -0
  76. package/dist/docs/modules/OrderProperty.html +1 -0
  77. package/dist/docs/modules/Query.html +1 -0
  78. package/dist/docs/modules/QueryBase.html +1 -0
  79. package/dist/docs/modules/QueryBuilder.html +1 -0
  80. package/dist/docs/modules/Requests_BatchRequest.html +1 -0
  81. package/dist/docs/modules/Requests_ExecutableRequest.html +1 -0
  82. package/dist/docs/modules/Requests_Request.html +1 -0
  83. package/dist/docs/modules/Requests_RequestBase.html +1 -0
  84. package/dist/docs/modules/Requests_RequestFactory.html +1 -0
  85. package/dist/docs/modules/Sitefinity.html +1 -0
  86. package/dist/docs/modules/WhereQuery.html +1 -0
  87. package/dist/docs/modules/constants.html +1 -0
  88. package/dist/docs/modules/utils.html +1 -0
  89. package/dist/docs/modules.html +1 -0
  90. package/dist/samples.html +33 -81
  91. package/dist/sitefinity-webservices-sdk.d.ts +16 -0
  92. package/dist/sitefinity-webservices-sdk.js +1159 -1734
  93. package/dist/sitefinity-webservices-sdk.js.map +1 -1
  94. package/dist/sitefinity-webservices-sdk.min.js +2 -16
  95. package/dist/sitefinity-webservices-sdk.min.js.LICENSE.txt +14 -0
  96. package/dist/src/BlobBuilder.d.ts +14 -0
  97. package/dist/src/Data.d.ts +144 -0
  98. package/dist/src/Expression.d.ts +19 -0
  99. package/dist/src/OrderProperty.d.ts +8 -0
  100. package/dist/src/Query.d.ts +59 -0
  101. package/dist/src/QueryBase.d.ts +18 -0
  102. package/dist/src/QueryBuilder.d.ts +13 -0
  103. package/dist/src/Requests/BatchRequest.d.ts +146 -0
  104. package/dist/src/Requests/ExecutableRequest.d.ts +20 -0
  105. package/dist/src/Requests/Request.d.ts +88 -0
  106. package/dist/src/Requests/RequestBase.d.ts +28 -0
  107. package/dist/src/Requests/RequestFactory.d.ts +22 -0
  108. package/dist/src/Sitefinity.d.ts +66 -0
  109. package/dist/src/WhereQuery.d.ts +68 -0
  110. package/dist/src/constants.d.ts +55 -0
  111. package/dist/src/utils.d.ts +16 -0
  112. package/karma.conf.js +29 -0
  113. package/package-lock.json +16108 -6805
  114. package/package.json +28 -10
  115. package/sitefinity-webservices-sdk.ts +16 -0
  116. package/src/BlobBuilder.ts +7 -12
  117. package/src/Data.spec.ts +160 -0
  118. package/src/Data.ts +132 -207
  119. package/src/Expression.ts +6 -3
  120. package/src/OrderProperty.ts +4 -5
  121. package/src/Query.ts +52 -78
  122. package/src/QueryBase.ts +21 -47
  123. package/src/QueryBuilder.ts +76 -82
  124. package/src/Requests/BatchRequest.ts +312 -335
  125. package/src/Requests/ExecutableRequest.ts +46 -73
  126. package/src/Requests/Request.ts +134 -260
  127. package/src/Requests/RequestBase.ts +161 -0
  128. package/src/Requests/RequestFactory.ts +36 -54
  129. package/src/Requests/request.spec.ts +92 -0
  130. package/src/Sitefinity.spec.ts +418 -0
  131. package/src/Sitefinity.ts +77 -146
  132. package/src/WhereQuery.ts +55 -112
  133. package/src/constants.ts +58 -39
  134. package/src/utils.ts +17 -14
  135. package/template.html +33 -35
  136. package/tsconfig.json +8 -1
  137. package/type.txt +1 -1
  138. package/version.txt +1 -1
  139. package/config/html.conf.json +0 -5
  140. package/dist/docs/assets/css/main.css +0 -865
  141. package/dist/docs/assets/css/main.css.map +0 -7
  142. package/dist/docs/assets/images/icons.png +0 -0
  143. package/dist/docs/assets/images/icons@2x.png +0 -0
  144. package/dist/docs/assets/js/main.js +0 -5
  145. package/dist/docs/assets/js/search.js +0 -3
  146. package/dist/docs/classes/_authentication_.authentication.html +0 -527
  147. package/dist/docs/classes/_blobbuilder_.blobbuilder.html +0 -351
  148. package/dist/docs/classes/_data_.data.html +0 -974
  149. package/dist/docs/classes/_expression_.binaryexpression.html +0 -412
  150. package/dist/docs/classes/_expression_.complexexpression.html +0 -374
  151. package/dist/docs/classes/_expression_.expressionbase.html +0 -336
  152. package/dist/docs/classes/_orderproperty_.orderproperty.html +0 -381
  153. package/dist/docs/classes/_query_.query.html +0 -896
  154. package/dist/docs/classes/_querybase_.querybase.html +0 -518
  155. package/dist/docs/classes/_querybuilder_.querybuilder.html +0 -466
  156. package/dist/docs/classes/_requests_batchrequest_.batchrequest.html +0 -1511
  157. package/dist/docs/classes/_requests_batchrequest_.transaction.html +0 -804
  158. package/dist/docs/classes/_requests_executablerequest_.executablerequest.html +0 -549
  159. package/dist/docs/classes/_requests_request_.createrelatedrequest.html +0 -689
  160. package/dist/docs/classes/_requests_request_.createrequest.html +0 -680
  161. package/dist/docs/classes/_requests_request_.deleterelatedbyidrequest.html +0 -687
  162. package/dist/docs/classes/_requests_request_.deleterelatedrequest.html +0 -673
  163. package/dist/docs/classes/_requests_request_.deleterequest.html +0 -666
  164. package/dist/docs/classes/_requests_request_.getbyidrequest.html +0 -666
  165. package/dist/docs/classes/_requests_request_.getrelatedbyidrequest.html +0 -687
  166. package/dist/docs/classes/_requests_request_.getrelatedrequest.html +0 -673
  167. package/dist/docs/classes/_requests_request_.getrequest.html +0 -658
  168. package/dist/docs/classes/_requests_request_.requestbase.html +0 -687
  169. package/dist/docs/classes/_requests_request_.updaterequest.html +0 -686
  170. package/dist/docs/classes/_requests_request_.uploadrequest.html +0 -715
  171. package/dist/docs/classes/_requests_requestfactory_.requestfactory.html +0 -724
  172. package/dist/docs/classes/_sitefinity_.sitefinity.html +0 -521
  173. package/dist/docs/classes/_utils_.utils.html +0 -597
  174. package/dist/docs/classes/_wherequery_.wherequery.html +0 -971
  175. package/dist/docs/globals.html +0 -238
  176. package/dist/docs/modules/_authentication_.html +0 -225
  177. package/dist/docs/modules/_blobbuilder_.html +0 -225
  178. package/dist/docs/modules/_constants_.html +0 -528
  179. package/dist/docs/modules/_contenttypes_.html +0 -248
  180. package/dist/docs/modules/_data_.html +0 -225
  181. package/dist/docs/modules/_expression_.html +0 -233
  182. package/dist/docs/modules/_headers_.html +0 -328
  183. package/dist/docs/modules/_httpmethods_.html +0 -288
  184. package/dist/docs/modules/_main_.html +0 -209
  185. package/dist/docs/modules/_orderproperty_.html +0 -225
  186. package/dist/docs/modules/_query_.html +0 -225
  187. package/dist/docs/modules/_querybase_.html +0 -225
  188. package/dist/docs/modules/_querybuilder_.html +0 -247
  189. package/dist/docs/modules/_requests_batchrequest_.html +0 -265
  190. package/dist/docs/modules/_requests_executablerequest_.html +0 -296
  191. package/dist/docs/modules/_requests_request_.html +0 -333
  192. package/dist/docs/modules/_requests_requestfactory_.html +0 -247
  193. package/dist/docs/modules/_sitefinity_.html +0 -225
  194. package/dist/docs/modules/_utils_.html +0 -225
  195. package/dist/docs/modules/_wherequery_.html +0 -247
  196. package/dist/index.html +0 -474
  197. package/src/Authentication.ts +0 -96
  198. package/src/ContentTypes.ts +0 -5
  199. package/src/Headers.ts +0 -12
  200. package/src/HttpMethods.ts +0 -9
  201. package/src/main.ts +0 -2
@@ -1,261 +1,226 @@
1
1
  import { RequestFactory } from "./RequestFactory";
2
- import { RequestBase } from './Request';
3
2
  import { BlobBuilder } from '../BlobBuilder';
4
3
  import { utils } from '../utils';
5
-
6
- var headerNames = require("../Headers").headerNames;
7
- var httpMethods = require("../HttpMethods").default;
4
+ import { HEADER_NAMES, HTTP_METHODS } from "../constants";
5
+ import { ExecutableRequest } from "./ExecutableRequest";
6
+ import { SDKOptions, Token, TypeOptions } from "../Sitefinity";
7
+ import { RequestBase, RequestOptionsBaseExtended } from "./RequestBase";
8
+ import { CreateRelatedRequestOptions, RequestOptionsBase, PropertyRequestOptions, SingleRelatedItemRequestOptions, CreateRequestOptions, UpdateRequestOptions } from "../Data";
9
+ import { PostRequestOptionsExtended, PutRequestOptionsExtended, RelatedByIdRequestOptionsExtended, RelatedRequestOptionsExtended, UploadRequestOptionsExtended } from "./Request";
10
+ import { Query } from "../Query";
8
11
 
9
12
  /**
10
- * @classdesc The transaction class is used to group operations that involve data manipulation together and execute them as a single atomic operation.
11
- * @class Transaction
12
- * @param {object} urlOptions - The url options that are passed to the {@link _factory} object.
13
- * @param {object} _factory - The factory object used for request generation.
13
+ * The transaction class is used to group operations that involve data manipulation together and execute them as a single atomic operation.
14
14
  */
15
- class Transaction {
16
- private urlOptions: any;
17
- private _factory: RequestFactory;
18
- private _requests: any[];
19
- public id: number;
20
- public _counter: number;
21
-
22
- constructor(urlOptions, _factory) {
15
+ export class Transaction {
16
+ id: number;
17
+ counter: number;
18
+ requests: TransactionRequest[];
19
+ private urlOptions: TypeOptions;
20
+ private factory: RequestFactory;
21
+
22
+ constructor(urlOptions: TypeOptions, factory: RequestFactory) {
23
23
  this.urlOptions = urlOptions;
24
- this._factory = _factory;
25
- this._requests = [];
26
- this._counter = 0;
24
+ this.factory = factory;
25
+ this.requests = [];
26
+ this.counter = 0;
27
27
  }
28
28
 
29
- upload(parameters: any) {
30
- var urlOptions = this.urlParametersClone(parameters.entitySet);
29
+ upload(parameters: any): number {
30
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
31
31
 
32
- var options = {
32
+ const options: UploadRequestOptionsExtended = {
33
33
  urlOptions: urlOptions,
34
34
  data: parameters.data,
35
35
  contentType: parameters.contentType,
36
36
  fileName: parameters.fileName,
37
37
  key: parameters.key,
38
- uploadProperties: JSON.stringify(parameters.uploadProperties)
38
+ uploadProperties: parameters.uploadProperties
39
39
  };
40
40
 
41
- var request = this._factory.upload(options);
41
+ const request = this.factory.upload(options);
42
42
 
43
- return this.addRequest(this, request);
43
+ return this.addRequest(request);
44
44
  }
45
45
 
46
46
  /**
47
47
  * Adds a POST request to create a single item.
48
- * @memberOf Transaction
49
- * @instance
50
- * @param {object} parameters - The parameters for the request.
51
- * @param {object} parameters.data - The payload of the request.
52
48
  */
53
- create(parameters: any) {
49
+ create(parameters: BatchCreateRequestOptions) {
54
50
  if (!(parameters || parameters.entitySet))
55
51
  throw "entitySet is required!";
56
52
 
57
- var urlOptions = this.urlParametersClone(parameters.entitySet);
53
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
58
54
 
59
- var options = {
55
+ const options: PostRequestOptionsExtended = {
60
56
  key: parameters.key,
61
57
  action: parameters.action,
62
58
  urlOptions: urlOptions,
63
- data: JSON.stringify(parameters.data)
59
+ data: parameters.data
64
60
  };
65
61
 
66
- var request = this._factory.create(options);
62
+ const request = this.factory.create(options);
67
63
 
68
- return this.addRequest(this, request);
64
+ return this.addRequest(request);
69
65
  }
70
66
 
71
67
  /**
72
68
  * Adds a POST request to execute an operation on single item.
73
- * @memberOf Transaction
74
- * @instance
75
- * @param {object} parameters - The parameters for the request.
76
- * @param {string} parameters.key - The identifier of the item to be updated.
77
- * @param {object} parameters.data - The payload of the request.
78
69
  */
79
- operation(parameters: any) {
70
+ // TODO: Remove
71
+ operation(parameters: BatchCreateRequestOptions) {
80
72
  if (!(parameters || parameters.entitySet || parameters.key || parameters.data))
81
73
  throw "parameters: entitySet, key and data are required!";
82
74
 
83
- var urlOptions = this.urlParametersClone(parameters.entitySet);
75
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
84
76
 
85
- var options = {
77
+ const options: PostRequestOptionsExtended = {
86
78
  urlOptions: urlOptions,
87
79
  key: parameters.key,
88
80
  action: 'operation',
89
- data: JSON.stringify(parameters.data)
81
+ data: parameters.data
90
82
  };
91
83
 
92
- var request = this._factory.create(options);
84
+ const request = this.factory.create(options);
93
85
 
94
- this._overrideUrlGeneration(request, parameters.key, 'operation', options.urlOptions);
95
- this.addRequest(this, request);
86
+ this.overrideUrlGeneration(request, parameters.key, 'operation', options.urlOptions, options.query);
87
+ this.addRequest(request);
96
88
  }
97
89
 
98
90
  /**
99
91
  * Adds a PATCH request to update a single item.
100
- * @memberOf Transaction
101
- * @instance
102
- * @param {object} parameters - The parameters for the request.
103
- * @param {bool} parameters.saveTemp - A flag indicating whether to save in temp.
104
- * @param {string} parameters.key - The identifier of the item to be updated.
105
- * @param {object} parameters.data - The payload of the request.
106
92
  */
107
- update(parameters: any) {
93
+ update(parameters: BatchUpdateRequestOptions) {
108
94
  if (!(parameters || parameters.entitySet || parameters.key || parameters.data))
109
95
  throw "parameters: entitySet, key and data are required!";
110
96
 
111
- var urlOptions = this.urlParametersClone(parameters.entitySet);
97
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
112
98
 
113
- var options = {
99
+ const options: PutRequestOptionsExtended = {
114
100
  urlOptions: urlOptions,
115
101
  saveTemp: parameters.saveTemp,
116
102
  key: parameters.key,
117
- data: JSON.stringify(parameters.data)
103
+ data: parameters.data
118
104
  };
119
105
 
120
- var request = this._factory.update(options);
106
+ const request = this.factory.update(options);
121
107
 
122
- this._overrideUrlGeneration(request, parameters.key, undefined, options.urlOptions);
123
- this.addRequest(this, request);
108
+ this.overrideUrlGeneration(request, parameters.key, undefined, options.urlOptions, options.query);
109
+ this.addRequest(request);
124
110
  }
125
111
 
126
112
  /**
127
113
  * Adds a DELETE request to delete a single item.
128
- * @memberOf Transaction
129
- * @instance
130
- * @param {object} parameters - The parameters for the request.
131
- * @param {string} parameters.key - The identifier of the item to be deleted.
132
114
  */
133
- destroy(parameters: any) {
115
+ destroy(parameters: BatchSingleItemRequestOptions) {
134
116
  if (!(parameters || parameters.entitySet || parameters.key))
135
117
  throw "parameters: entitySet and key are required!";
136
118
 
137
- var urlOptions = this.urlParametersClone(parameters.entitySet);
119
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
138
120
 
139
- var options = {
121
+ const options: RequestOptionsBaseExtended = {
140
122
  urlOptions: urlOptions,
141
123
  key: parameters.key
142
124
  };
143
125
 
144
- var request = this._factory.destroy(options);
126
+ const request = this.factory.destroy(options);
145
127
 
146
- this._overrideUrlGeneration(request, parameters.key, undefined, options.urlOptions);
128
+ this.overrideUrlGeneration(request, parameters.key, undefined, options.urlOptions, options.query);
147
129
 
148
- this.addRequest(this, request);
130
+ this.addRequest(request);
149
131
  }
150
132
 
151
133
  /**
152
- * Adds a DELETE request to retrieve the delete all of the associated members in the relation property.
153
- * @memberOf Transaction
154
- * @instance
155
- * @param {object} parameters - The parameters for the request.
156
- * @param {string} parameters.key - The identifier of the item.
157
- * @param {string} parameters.navigationProperty - The name of the navigation property.
134
+ * Adds a DELETE request to delete all of the associated members in the relation property.
158
135
  */
159
- destroyRelated(parameters: any) {
136
+ destroyRelated(parameters: BatchPropertyRequestOptions) {
160
137
  if (!(parameters || parameters.entitySet || parameters.key))
161
138
  throw "parameters: entitySet and key are required!";
162
139
 
163
- var urlOptions = this.urlParametersClone(parameters.entitySet);
140
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
164
141
 
165
- var options = {
142
+ const options: RelatedRequestOptionsExtended = {
166
143
  urlOptions: urlOptions,
167
144
  key: parameters.key,
168
- navigationProperty: parameters.navigationProperty
145
+ property: parameters.property
169
146
  };
170
147
 
171
- var request = this._factory.destroyRelated(options);
148
+ const request = this.factory.destroyRelated(options);
172
149
 
173
- var navigationPropertyURL = (request as any).navigationProperty + '/$ref';
174
- this._overrideUrlGeneration(request, parameters.key, navigationPropertyURL, options.urlOptions);
150
+ const propertyURL = (request as any).property + '/$ref';
151
+ this.overrideUrlGeneration(request, parameters.key, propertyURL, options.urlOptions, options.query);
175
152
 
176
- this.addRequest(this, request);
153
+ this.addRequest(request);
177
154
  }
178
155
 
179
156
  /**
180
157
  * Adds a DELETE request to retrieve the a single entry of the associated members in the relation property.
181
- * @memberOf Transaction
182
- * @instance
183
- * @param {object} parameters - The parameters for the request.
184
- * @param {string} parameters.key - The identifier of the item.
185
- * @param {string} parameters.navigationProperty - The name of the navigation property.
186
- * @param {string} parameters.relatedKey - The identifier of the related item.
187
158
  */
188
- destroyRelatedById(parameters: any) {
189
- if (!(parameters || parameters.entitySet || parameters.key || parameters.relatedKey || parameters.navigationProperty))
190
- throw "parameters: entitySet, key, relatedKey and navigationProperty are required!";
159
+ destroyRelatedById(parameters: BatchSingleRelatedItemRequestOptions) {
160
+ if (!(parameters || parameters.entitySet || parameters.key || parameters.relatedId || parameters.property))
161
+ throw "parameters: entitySet, key, relatedId and property are required!";
191
162
 
192
- var urlOptions = this.urlParametersClone(parameters.entitySet);
163
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
193
164
 
194
- var options = {
165
+ const options: RelatedByIdRequestOptionsExtended = {
195
166
  urlOptions: urlOptions,
196
167
  key: parameters.key,
197
- relatedKey: parameters.relatedKey,
198
- navigationProperty: parameters.navigationProperty
168
+ relatedId: parameters.relatedId,
169
+ property: parameters.property
199
170
  };
200
171
 
201
- var request = this._factory.destroyRelatedById(options);
172
+ const request = this.factory.destroyRelatedById(options);
202
173
 
203
- this.addRequest(this, request);
174
+ this.addRequest(request);
204
175
  }
205
176
 
206
177
  /**
207
178
  * Adds a POST request to add a related item to the property collection.
208
- * @memberOf Transaction
209
- * @instance
210
- * @see {@link Data.createRelated}
211
- * @param {object} parameters - The parameters for the request.
212
- * @param {string} parameters.key - The identifier of the item.
213
- * @param {string} parameters.navigationProperty - The name of the navigation property
214
179
  */
215
- createRelated(parameters: any) {
216
- if (!(parameters || parameters.entitySet || parameters.key || parameters.link || parameters.navigationProperty))
217
- throw "parameters: entitySet, key, link and navigationProperty are required!";
180
+ createRelated(parameters: BatchCreateRelatedRequestOptions) {
181
+ if (!(parameters || parameters.entitySet || parameters.key || parameters.link || parameters.property))
182
+ throw "parameters: entitySet, key, link and property are required!";
218
183
 
219
184
  // TODO: rethink about the urls
220
- var urlOptions = this.urlParametersClone(parameters.entitySet);
185
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
221
186
 
222
- for (var index = 0; index < this._requests.length; index += 1) {
223
- if (this._requests[index].id == parameters.link) {
224
- parameters.link = "$" + this._requests[index].id;
187
+ for (let index = 0; index < this.requests.length; index += 1) {
188
+ if (this.requests[index].id == parameters.link) {
189
+ parameters.link = "$" + this.requests[index].id;
225
190
  }
226
191
  }
227
192
 
228
- var data = {
193
+ const data = {
229
194
  '@odata.id': parameters.link
230
195
  }
231
196
 
232
- var options = {
197
+ const options: RelatedRequestOptionsExtended = {
233
198
  urlOptions: urlOptions,
234
199
  key: parameters.key,
235
- navigationProperty: parameters.navigationProperty,
236
- data: JSON.stringify(data)
200
+ property: parameters.property,
201
+ data: data
237
202
  };
238
203
 
239
- var request = this._factory.createRelated(options);
240
- var navigationPropertyURL = (request as any).navigationProperty + '/$ref';
241
- this._overrideUrlGeneration(request, parameters.key, navigationPropertyURL, options.urlOptions);
204
+ const request = this.factory.createRelated(options);
205
+ const propertyURL = (request as any).property + '/$ref';
206
+ this.overrideUrlGeneration(request, parameters.key, propertyURL, options.urlOptions, options.query);
242
207
 
243
- return this.addRequest(this, request);
208
+ return this.addRequest(request);
244
209
  }
245
210
 
246
- _overrideUrlGeneration(request: any, key: string, additionalPropertyURL: string, sfParams: any) {
211
+ private overrideUrlGeneration(request: RequestBase, key: number | string, additionalPropertyURL: string, urlOptions?: TypeOptions, query?: Query) {
247
212
  // TODO: match requests with Content-ID's!
248
- // Content-ID's are the same as id's in _requests.
249
- for (var index = 0; index < this._requests.length; index += 1) {
250
- if (this._requests[index].id == key) {
251
- request._buildUrl = function () {
252
- var uri = "$" + key;
213
+ // Content-ID's are the same as id's in requests.
214
+ for (let index = 0; index < this.requests.length; index += 1) {
215
+ if (this.requests[index].id == key) {
216
+ request.buildUrl = function () {
217
+ let uri = "$" + key;
253
218
  if (additionalPropertyURL !== undefined) {
254
219
  uri = uri + '/' + additionalPropertyURL;
255
220
  }
256
221
 
257
- if (sfParams) {
258
- var queryString = request._getQueryString(sfParams);
222
+ if (urlOptions) {
223
+ const queryString = request.getQueryString(urlOptions, query);
259
224
  if (queryString) {
260
225
  uri = uri + queryString;
261
226
  }
@@ -267,13 +232,13 @@ class Transaction {
267
232
  }
268
233
  }
269
234
 
270
- addRequest(that: any, request) {
271
- that._requests.push({ "id": that._counter, "request": request });
272
- return that._counter++;
235
+ private addRequest(request: RequestBase) {
236
+ this.requests.push({ id: this.counter, request: request });
237
+ return this.counter++;
273
238
  }
274
239
 
275
- urlParametersClone(entitySet: string) {
276
- var options = utils.clone(this.urlOptions);
240
+ private urlParametersClone(entitySet: string) {
241
+ const options = utils.clone(this.urlOptions);
277
242
  options.entitySet = entitySet;
278
243
 
279
244
  return options;
@@ -281,205 +246,173 @@ class Transaction {
281
246
  }
282
247
 
283
248
  /**
284
- * @classdesc The batch request class is used for grouping requests into a single batch request to execute on the server.
285
- * @class BatchRequest
249
+ * The batch request class is used for grouping requests into a single batch request to execute on the server.
286
250
  */
287
- class BatchRequest extends RequestBase {
288
- private _factory: RequestFactory;
289
- private _requests: any[];
290
- private _counter: number;
291
- private boundary: any;
251
+ export class BatchRequest extends ExecutableRequest {
252
+ counter: number;
253
+ requests: BatchInnerRequest[];
254
+ private factory: RequestFactory;
255
+ private boundary: string;
292
256
  private responseHeaderRegex: RegExp;
293
257
  private responseStatusRegex: RegExp;
258
+
259
+
294
260
  public static constants = {
295
261
  newLine: '\r\n'
296
262
  };
297
263
 
298
- constructor(options) {
299
- super(options);
300
- this._factory = options._factory;
301
- this._requests = [];
302
- this._counter = 0;
303
- this.boundary = this._createBoundary("sf_batch_");
264
+ constructor(requestOptions: BatchRequestOptionsExtended, token: Token, sdkOptions: SDKOptions) {
265
+ super(requestOptions, token, sdkOptions);
266
+ this.factory = requestOptions.factory;
267
+ this.requests = [];
268
+ this.counter = 0;
269
+ this.boundary = this.createBoundary("sf_batch_");
304
270
  this.responseHeaderRegex = /^([^()<>@,;:\\"\/[\]?={} \t]+)\s?:\s?(.*)/;
305
271
  this.responseStatusRegex = /^HTTP\/1\.\d (\d{3}) (.*)$/i;
306
272
  }
307
273
 
308
274
  /**
309
275
  * Adds a GET request to retrieve a collection of items.
310
- * @memberOf BatchRequest
311
- * @instance
312
- * @param {object} parameters - The parameters for the request.
313
- * @param {object} parameters.query - The {@link WhereQuery} with which to filter the items
314
276
  */
315
- get(parameters: any) {
277
+ get(parameters: BatchRequestOptionsBase) {
316
278
  if (!(parameters || parameters.entitySet))
317
279
  throw "entitySet is required!";
318
280
 
319
- var urlOptions = this.urlParametersClone(parameters.entitySet);
320
- if (parameters && parameters.query)
321
- urlOptions.ODataParams = parameters.query;
281
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
322
282
 
323
- var options = {
283
+ const options: RequestOptionsBaseExtended = {
324
284
  urlOptions: urlOptions,
325
285
  action: parameters.action,
326
- fallbackProperties: parameters.fallbackPropertyNames
286
+ query: parameters.query,
287
+ fallbackProperties: parameters.fallbackProperties
327
288
  };
328
289
 
329
- var request = this._factory.get(options);
290
+ const request = this.factory.get(options);
330
291
 
331
292
  this.addRequest(request);
332
293
  }
333
294
 
334
295
  /**
335
296
  * Adds a GET request for the retrieval of a single item.
336
- * @memberOf BatchRequest
337
- * @instance
338
- * @param {object} parameters - The parameters for the request.
339
- * @param {object} parameters.query - The {@link QueryBase} object containing the OData query options that should be sent to the server.
340
- * @param {string} parameters.key - The identifier of the item to be retrieved.
341
297
  */
342
- getSingle(parameters: any) {
298
+ getSingle(parameters: BatchSingleItemRequestOptions) {
343
299
  if (!(parameters || parameters.entitySet || parameters.key))
344
300
  throw "parameters: entitySet and key are required!";
345
301
 
346
- var urlOptions = this.urlParametersClone(parameters.entitySet);
302
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
347
303
 
348
- var options: any = {
304
+ const options: RequestOptionsBaseExtended = {
349
305
  urlOptions: urlOptions,
350
306
  action: parameters.action,
351
- key: parameters.key
307
+ key: parameters.key,
308
+ query: parameters.query
352
309
  };
353
310
 
354
- if (parameters.query)
355
- options.ODataParams = parameters.query;
356
-
357
- var request = this._factory.getSingle(options);
311
+ const request = this.factory.getSingle(options);
358
312
 
359
313
  this.addRequest(request);
360
314
  }
361
315
 
362
316
  /**
363
317
  * Adds a GET request to get the property of a single item.
364
- * @memberOf BatchRequest
365
- * @instance
366
- * @param {object} parameters - The parameters for the request.
367
- * @param {string} parameters.key - The identifier of the item.
368
- * @param {string} parameters.property - The name of the property to be retrieved.
369
318
  */
370
- getProperty(parameters: any) {
319
+ getProperty(parameters: BatchPropertyRequestOptions) {
371
320
  if (!(parameters || parameters.entitySet || parameters.key, parameters.property))
372
321
  throw "parameters: entitySet, key and property are required!";
373
322
 
374
- var urlOptions = this.urlParametersClone(parameters.entitySet);
323
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
375
324
 
376
- var options = {
325
+ const options: RelatedRequestOptionsExtended = {
377
326
  urlOptions: urlOptions,
378
327
  key: parameters.key,
379
- navigationProperty: parameters.property
328
+ property: parameters.property
380
329
  };
381
330
 
382
- var request = this._factory.getProperty(options);
331
+ const request = this.factory.getProperty(options);
383
332
 
384
333
  this.addRequest(request);
385
334
  }
386
335
 
387
336
  /**
388
337
  * Adds a GET request to get the related property value of a single item.
389
- * @memberOf BatchRequest
390
- * @instance
391
- * @param {object} parameters - The parameters for the request.
392
- * @param {string} parameters.key - The identifier of the item.
393
- * @param {string} parameters.navigationProperty - The name of the navigation property to be retrieved.
394
338
  */
395
- getRelated(parameters: any) {
396
- if (!(parameters || parameters.entitySet || parameters.key || parameters.navigationProperty))
397
- throw "parameters: entitySet, key and navigationProperty are required!";
339
+ getRelated(parameters: BatchPropertyRequestOptions) {
340
+ if (!(parameters || parameters.entitySet || parameters.key || parameters.property))
341
+ throw "parameters: entitySet, key and property are required!";
398
342
 
399
- var urlOptions = this.urlParametersClone(parameters.entitySet);
343
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
400
344
 
401
- var options = {
345
+ const options: RelatedRequestOptionsExtended = {
402
346
  urlOptions: urlOptions,
403
347
  key: parameters.key,
404
- navigationProperty: parameters.navigationProperty
348
+ property: parameters.property
405
349
  };
406
350
 
407
- var request = this._factory.getRelated(options);
351
+ const request = this.factory.getRelated(options);
408
352
 
409
353
  this.addRequest(request);
410
354
  }
411
355
 
412
356
  /**
413
357
  * Adds a GET request to retrieve the related property value of a single item by the id of the related item.
414
- * @memberOf BatchRequest
415
- * @instance
416
- * @param {object} parameters - The parameters for the request.
417
- * @param {string} parameters.key - The identifier of the item.
418
- * @param {string} parameters.navigationProperty - The name of the navigation property to be retrieved.
419
- * @param {string} parameters.relatedKey - The identifier of the related item.
420
358
  */
421
- getRelatedById(parameters: any) {
422
- if (!(parameters || parameters.entitySet || parameters.key || parameters.relatedKey || parameters.navigationProperty))
423
- throw "parameters: entitySet, key, relatedKey and navigationProperty are required!";
359
+ getRelatedById(parameters: BatchSingleRelatedItemRequestOptions) {
360
+ if (!(parameters || parameters.entitySet || parameters.key || parameters.relatedId || parameters.property))
361
+ throw "parameters: entitySet, key, relatedId and property are required!";
424
362
 
425
- var urlOptions = this.urlParametersClone(parameters.entitySet);
363
+ const urlOptions = this.urlParametersClone(parameters.entitySet);
426
364
 
427
- var options = {
365
+ const options: RelatedByIdRequestOptionsExtended = {
428
366
  urlOptions: urlOptions,
429
367
  key: parameters.key,
430
- relatedKey: parameters.relatedKey,
431
- navigationProperty: parameters.navigationProperty
368
+ relatedId: parameters.relatedId,
369
+ property: parameters.property
432
370
  };
433
371
 
434
- var request = this._factory.getRelatedById(options);
372
+ const request = this.factory.getRelatedById(options);
435
373
 
436
374
  this.addRequest(request);
437
375
  }
438
376
 
439
377
  /**
440
378
  * Begins a transaction.
441
- * @memberOf BatchRequest
442
- * @instance
443
- * @returns {@link Transaction}
444
379
  */
445
- beginTransaction() {
446
- var option = utils.clone(this.urlOptions);
447
- const newTransaction = new Transaction(option, this._factory);
448
- newTransaction.id = ++this._counter;
380
+ beginTransaction(): Transaction {
381
+ const option = utils.clone(this.urlOptions);
382
+ const newTransaction = new Transaction(option, this.factory);
383
+ newTransaction.id = ++this.counter;
449
384
  return newTransaction;
450
385
  }
451
386
 
452
387
  /**
453
388
  * Ends a transaction.
454
- * @memberOf BatchRequest
455
- * @instance
456
389
  */
457
- endTransaction(transaction: any) {
458
- this._requests.push({
390
+ endTransaction(transaction: Transaction) {
391
+ this.requests.push({
459
392
  id: transaction.id,
460
393
  request: transaction
461
394
  });
462
395
  }
463
396
 
464
- _getBody() {
465
- return this._buildRequestBody();
397
+ getBody(): object {
398
+ return this.buildRequestBody();
466
399
  }
467
400
 
468
- _getMethod() {
469
- return httpMethods.Post;
401
+ getMethod(): string {
402
+ return HTTP_METHODS.post;
470
403
  }
471
404
 
472
- _getHeaders() {
473
- var contentType = "multipart/mixed; boundary=" + this.boundary;
474
- var headers = { };
475
- headers[headerNames.contentType] = contentType;
405
+ getHeaders(): { [key: string]: string } {
406
+ const contentType = "multipart/mixed; boundary=" + this.boundary;
407
+ const headers = { };
408
+ headers[HEADER_NAMES.contentType] = contentType;
476
409
 
477
410
  return headers;
478
411
  }
479
412
 
480
- _buildUrl() {
481
- var url = this.urlOptions.baseUrl + "$batch";
482
- var queryString = this._getQueryString(this.urlOptions);
413
+ buildUrl(): string {
414
+ let url = this.urlOptions.baseUrl + "$batch";
415
+ const queryString = this.getQueryString(this.urlOptions, this.query);
483
416
 
484
417
  if (queryString) {
485
418
  url += queryString
@@ -488,53 +421,53 @@ class BatchRequest extends RequestBase {
488
421
  return url;
489
422
  }
490
423
 
491
- _parseResponse(http) {
492
- var context = {
424
+ protected parseResponse(http: XMLHttpRequest): any {
425
+ const context = {
493
426
  position: 0,
494
427
  boundaries: []
495
428
  };
496
429
 
497
- var pos = context.position;
498
- var partHeaders = this._readHeaders(http.getAllResponseHeaders(), context);
499
- var partContentType = this._contentType(partHeaders["content-type"]);
430
+ const pos = context.position;
431
+ const partHeaders = this.readHeaders(http.getAllResponseHeaders(), context);
432
+ const partContentType = this.contentType(partHeaders["content-type"]);
500
433
  if (partContentType && partContentType.mediaType == "multipart/mixed") {
501
434
  context.boundaries.push((partContentType.properties as any).boundary);
502
435
  }
503
436
 
504
437
  context.position = pos;
505
438
 
506
- var batchResponse = this._parseBatchResponse(http.responseText, context);
507
- var responseParsed = [];
508
- for (var i = 0; i < batchResponse.length; i++) {
439
+ const batchResponse = this.parseBatchResponse(http.responseText, context);
440
+ const responseParsed = [];
441
+ for (let i = 0; i < batchResponse.length; i++) {
509
442
  try {
510
- const currentRequest = this._requests[i];
511
- var finalResult = null;
512
- var key = null;
443
+ const currentRequest = this.requests[i];
444
+ let finalResult = null;
445
+ let key = null;
513
446
 
514
- var singleResponse = batchResponse[i];
515
- var changesets = singleResponse.__changeResponses;
447
+ const singleResponse = batchResponse[i];
448
+ const changesets = singleResponse.__changeResponses;
516
449
  if (changesets) {
517
450
  finalResult = [];
518
- const currentRequests = currentRequest ? currentRequest.request._requests : [];
451
+ const currentRequests = currentRequest ? (currentRequest.request as Transaction).requests : [];
519
452
 
520
- for (var j = 0; j < changesets.length; j++) {
521
- key = currentRequests[j] ? currentRequests[j].request.request.key : null;
522
- var changeset = changesets[j];
523
- var response = changeset.response;
524
- var responseResult = this._getResponseResult(response, key);
453
+ for (let j = 0; j < changesets.length; j++) {
454
+ key = currentRequests[j] ? currentRequests[j].request.key : null;
455
+ const changeset = changesets[j];
456
+ const response = changeset.response;
457
+ const responseResult = this.getResponseResult(response, key);
525
458
  finalResult.push(responseResult);
526
459
  }
527
460
  } else {
528
- key = currentRequest ? currentRequest.request.key : null;
529
- var response = singleResponse.response;
530
- finalResult = this._getResponseResult(response, key);
461
+ key = currentRequest ? (currentRequest.request as any).key : null;
462
+ const response = singleResponse.response;
463
+ finalResult = this.getResponseResult(response, key);
531
464
  }
532
465
 
533
- var statusCodeCheck = function (r) {
466
+ const statusCodeCheck = function (r) {
534
467
  return r.statusCode >= 400;
535
468
  };
536
469
 
537
- var responseCheck = function (r) {
470
+ const responseCheck = function (r) {
538
471
  let success = true;
539
472
  if (r.data && r.data.hasOwnProperty("Success")) {
540
473
  success = r.data.Success
@@ -543,7 +476,7 @@ class BatchRequest extends RequestBase {
543
476
  return success;
544
477
  };
545
478
 
546
- var isSuccessful = Array.isArray(finalResult) ?
479
+ const isSuccessful = Array.isArray(finalResult) ?
547
480
  finalResult.filter(statusCodeCheck).length === 0 && finalResult.filter(responseCheck).length === finalResult.length :
548
481
  !statusCodeCheck(finalResult) && responseCheck(finalResult);
549
482
 
@@ -555,47 +488,47 @@ class BatchRequest extends RequestBase {
555
488
  }
556
489
  }
557
490
 
558
- var isSuccessfulCheck = (r) => {
491
+ const isSuccessfulCheck = (r) => {
559
492
  return !r.isSuccessful;
560
493
  };
561
494
 
562
- var batchIsSuccessful = responseParsed.filter(isSuccessfulCheck).length === 0;
495
+ const batchIsSuccessful = responseParsed.filter(isSuccessfulCheck).length === 0;
563
496
  return { data: responseParsed, isSuccessful: batchIsSuccessful };
564
497
  }
565
498
 
566
- _parseBatchResponse(text, context) {
499
+ private parseBatchResponse(text, context) {
567
500
  // get boundary from response
568
- var delimiter = "--" + this._currentBoundary(context);
569
- this._readTo(text, delimiter, context);
570
- this._readLine(text, context);
501
+ const delimiter = "--" + this.currentBoundary(context);
502
+ this.readTo(text, delimiter, context);
503
+ this.readLine(text, context);
571
504
 
572
- var responses = [];
573
- var partEnd;
505
+ const responses = [];
506
+ let partEnd;
574
507
  while (partEnd !== "--" && context.position < text.length) {
575
- var partHeaders = this._readHeaders(text, context);
576
- var partContentType = this._contentType(partHeaders["content-type"]);
577
- var changeResponses;
508
+ const partHeaders = this.readHeaders(text, context);
509
+ const partContentType = this.contentType(partHeaders["content-type"]);
510
+ let changeResponses;
578
511
  if (partContentType && partContentType.mediaType === "multipart/mixed") {
579
512
  context.boundaries.push((partContentType.properties as any).boundary);
580
513
 
581
514
  try {
582
- changeResponses = this._parseBatchResponse(text, context);
515
+ changeResponses = this.parseBatchResponse(text, context);
583
516
  } catch (e) {
584
- e.response = this._readResponse(text, context, delimiter);
517
+ e.response = this.readResponse(text, context, delimiter);
585
518
  changeResponses = [e];
586
519
  }
587
520
  responses.push({ __changeResponses: changeResponses });
588
521
  context.boundaries.pop();
589
- this._readTo(text, "--" + this._currentBoundary(context), context);
522
+ this.readTo(text, "--" + this.currentBoundary(context), context);
590
523
  } else {
591
524
  if (!partContentType || partContentType.mediaType !== "application/http") {
592
525
  throw { message: "invalid MIME part type " };
593
526
  }
594
527
  // Skip empty line
595
- this._readLine(text, context);
528
+ this.readLine(text, context);
596
529
 
597
530
  // Read the response
598
- var response: any = this._readResponse(text, context, delimiter);
531
+ let response: any = this.readResponse(text, context, delimiter);
599
532
 
600
533
  try {
601
534
  if (response.statusCode >= 200 && response.statusCode <= 299) {
@@ -614,15 +547,15 @@ class BatchRequest extends RequestBase {
614
547
  partEnd = text.substr(context.position, 2);
615
548
 
616
549
  // Ignore the incoming line.
617
- this._readLine(text, context);
550
+ this.readLine(text, context);
618
551
  }
619
552
 
620
553
  return responses;
621
554
  }
622
555
 
623
- _getResponseResult(response, key) {
624
- var responseBody = response.body;
625
- var data = utils.parseStringToJson(responseBody);
556
+ private getResponseResult(response, key) {
557
+ const responseBody = response.body;
558
+ const data = utils.parseStringToJson(responseBody);
626
559
 
627
560
  return {
628
561
  key: key,
@@ -632,32 +565,32 @@ class BatchRequest extends RequestBase {
632
565
  };
633
566
  }
634
567
 
635
- _currentBoundary(context) {
636
- var boundaries = context.boundaries;
568
+ private currentBoundary(context) {
569
+ const boundaries = context.boundaries;
637
570
  return boundaries[boundaries.length - 1];
638
571
  }
639
572
 
640
- _contentType(str) {
573
+ private contentType(str) {
641
574
 
642
575
  if (!str) {
643
576
  return null;
644
577
  }
645
578
 
646
- var contentTypeParts = str.split(";");
647
- var properties = {};
579
+ const contentTypeParts = str.split(";");
580
+ const properties = {};
648
581
 
649
- var i, len;
582
+ let i, len;
650
583
  for (i = 1, len = contentTypeParts.length; i < len; i++) {
651
- var contentTypeParams = contentTypeParts[i].split("=");
584
+ const contentTypeParams = contentTypeParts[i].split("=");
652
585
  properties[contentTypeParams[0].replace(/^\s+|\s+$/g, '')] = contentTypeParams[1];
653
586
  }
654
587
 
655
588
  return { mediaType: contentTypeParts[0].replace(/^\s+|\s+$/g, ''), properties: properties };
656
589
  }
657
590
 
658
- _readTo(text, str, context) {
659
- var start = context.position || 0;
660
- var end = text.length;
591
+ private readTo(text, str, context) {
592
+ const start = context.position || 0;
593
+ let end = text.length;
661
594
  if (str) {
662
595
  end = text.indexOf(str, start);
663
596
  if (end === -1) {
@@ -671,19 +604,19 @@ class BatchRequest extends RequestBase {
671
604
  return text.substring(start, end);
672
605
  }
673
606
 
674
- _readLine(text, context) {
675
- return this._readTo(text, BatchRequest.constants.newLine, context);
607
+ private readLine(text, context) {
608
+ return this.readTo(text, BatchRequest.constants.newLine, context);
676
609
  }
677
610
 
678
- _readHeaders(text, context) {
679
- var headers = {};
680
- var parts;
681
- var line;
682
- var pos;
611
+ private readHeaders(text, context) {
612
+ const headers = {};
613
+ let parts;
614
+ let line;
615
+ let pos;
683
616
 
684
617
  do {
685
618
  pos = context.position;
686
- line = this._readLine(text, context);
619
+ line = this.readLine(text, context);
687
620
  parts = this.responseHeaderRegex.exec(line);
688
621
  if (parts !== null) {
689
622
  headers[parts[1].toLowerCase()] = parts[2];
@@ -696,20 +629,20 @@ class BatchRequest extends RequestBase {
696
629
  return headers;
697
630
  }
698
631
 
699
- _readResponse(text, context, delimiter) {
632
+ private readResponse(text, context, delimiter) {
700
633
  // Read the status line.
701
- var pos = context.position;
702
- var match = this.responseStatusRegex.exec(this._readLine(text, context));
634
+ const pos = context.position;
635
+ const match = this.responseStatusRegex.exec(this.readLine(text, context));
703
636
 
704
- var statusCode;
705
- var statusText;
706
- var headers;
637
+ let statusCode;
638
+ let statusText;
639
+ let headers;
707
640
 
708
641
  if (match) {
709
642
  statusCode = match[1];
710
643
  statusText = match[2];
711
- headers = this._readHeaders(text, context);
712
- this._readLine(text, context);
644
+ headers = this.readHeaders(text, context);
645
+ this.readLine(text, context);
713
646
  } else {
714
647
  context.position = pos;
715
648
  }
@@ -718,90 +651,90 @@ class BatchRequest extends RequestBase {
718
651
  statusCode: statusCode,
719
652
  statusText: statusText,
720
653
  headers: headers,
721
- body: this._readTo(text, BatchRequest.constants.newLine + delimiter, context)
654
+ body: this.readTo(text, BatchRequest.constants.newLine + delimiter, context)
722
655
  };
723
656
  }
724
657
 
725
- _buildRequestBody() {
726
- var builder = new BlobBuilder();
658
+ private buildRequestBody() {
659
+ const builder = new BlobBuilder();
727
660
  builder.append('');
728
661
 
729
- for (var index = 0; index < this._requests.length; index += 1) {
662
+ for (let index = 0; index < this.requests.length; index += 1) {
730
663
 
731
- var request = this._requests[index].request;
664
+ const request = this.requests[index].request;
732
665
  if (index != 0)
733
666
  builder.append(BatchRequest.constants.newLine + BatchRequest.constants.newLine);
734
667
 
735
668
  builder.append("--" + this.boundary);
736
669
 
737
670
  if (request instanceof Transaction) {
738
- builder.append(this._buildTransaction(request));
671
+ builder.append(this.buildTransaction(request));
739
672
  }
740
673
  else {
741
- builder.append(this._buildRequest(request));
674
+ builder.append(this.buildRequest(request));
742
675
  }
743
676
  }
744
677
 
745
- builder.append(this._createDelimeter(this.boundary, true));
678
+ builder.append(this.createDelimeter(this.boundary, true));
746
679
  return builder.build();
747
680
  }
748
681
 
749
- _buildRequest(request) {
750
- var builder = new BlobBuilder();
682
+ private buildRequest(request: RequestBase): Blob {
683
+ const builder = new BlobBuilder();
751
684
  builder.append(BatchRequest.constants.newLine + 'Content-Type: application/http' +
752
685
  BatchRequest.constants.newLine + 'Content-Transfer-Encoding: binary' +
753
686
  BatchRequest.constants.newLine +
754
687
  BatchRequest.constants.newLine +
755
- request._getMethod() +
756
- ' ' + request._buildUrl() + ' HTTP/1.1');
688
+ request.getMethod() +
689
+ ' ' + request.buildUrl() + ' HTTP/1.1');
757
690
 
758
691
  return builder.build();
759
692
  }
760
693
 
761
- _buildTransaction(transaction) {
762
- if (transaction._requests.length == 0)
694
+ private buildTransaction(transaction: Transaction) {
695
+ if (transaction.requests.length == 0)
763
696
  return;
764
697
 
765
- var builder = new BlobBuilder();
698
+ const builder = new BlobBuilder();
766
699
  builder.append(BatchRequest.constants.newLine);
767
700
 
768
- var changeset = this._createBoundary("sf_changeset_");
701
+ const changeset = this.createBoundary("sf_changeset_");
769
702
  builder.append('Content-Type: multipart/mixed; boundary=' + changeset);
770
703
 
771
- var changesetRequests = transaction._requests;
772
- for (var index = 0; index < changesetRequests.length; index += 1) {
773
- var currentRequest = changesetRequests[index].request;
704
+ const changesetRequests = transaction.requests;
705
+ for (let index = 0; index < changesetRequests.length; index += 1) {
706
+ const currentRequest = changesetRequests[index].request;
774
707
 
775
708
  // we shouldn't add new lines after blob content. Otherwise they are added to the blob and corrupt it
776
- const shouldAddNewLine = index === 0 || !utils.isBlob(changesetRequests[index - 1].request._getBody());
777
- builder.append(this._createDelimeter(changeset, false, shouldAddNewLine) +
709
+ const shouldAddNewLine = index === 0 || !utils.isBlob(changesetRequests[index - 1].request.getBody());
710
+ builder.append(this.createDelimeter(changeset, false, shouldAddNewLine) +
778
711
  BatchRequest.constants.newLine + 'Content-Type: application/http' +
779
712
  BatchRequest.constants.newLine + 'Content-Transfer-Encoding: binary' +
780
713
  BatchRequest.constants.newLine + 'Content-ID: ' + changesetRequests[index].id);
781
714
 
782
- var requestUrl = currentRequest._buildUrl();
783
- builder.append(BatchRequest.constants.newLine + BatchRequest.constants.newLine + currentRequest._getMethod() + ' ' + requestUrl + ' HTTP/1.1');
715
+ const requestUrl = currentRequest.buildUrl();
716
+ builder.append(BatchRequest.constants.newLine + BatchRequest.constants.newLine + currentRequest.getMethod() + ' ' + requestUrl + ' HTTP/1.1');
784
717
 
785
- var headers = currentRequest._getHeaders();
786
- var headerNames = Object.keys(headers);
787
- for (var i = 0; i < headerNames.length; i++) {
788
- var headerName = headerNames[i];
718
+ const headers = currentRequest.getHeaders();
719
+ const headerNames = Object.keys(headers);
720
+ for (let i = 0; i < headerNames.length; i++) {
721
+ const headerName = headerNames[i];
789
722
  builder.append(BatchRequest.constants.newLine + headerName + ": " + headers[headerName]);
790
723
  }
791
724
 
792
- var body = currentRequest._getBody();
725
+ const body = utils.serializeToJSON(currentRequest.getBody());
793
726
  if (body) {
794
727
  builder.append(BatchRequest.constants.newLine + BatchRequest.constants.newLine);
795
728
  builder.append(body);
796
729
  }
797
730
  }
798
731
 
799
- builder.append(this._createDelimeter(changeset, true));
732
+ builder.append(this.createDelimeter(changeset, true));
800
733
 
801
734
  return builder.build();
802
735
  }
803
736
 
804
- _createDelimeter(boundary, close, shouldAddNewLine: boolean = true) {
737
+ private createDelimeter(boundary, close, shouldAddNewLine = true) {
805
738
  let result = "";
806
739
  if (shouldAddNewLine) {
807
740
  result = BatchRequest.constants.newLine + BatchRequest.constants.newLine;
@@ -815,17 +748,61 @@ class BatchRequest extends RequestBase {
815
748
  return result;
816
749
  }
817
750
 
818
- _createBoundary(prefix) {
751
+ private createBoundary(prefix) {
819
752
  return prefix + utils.hex16() + '-' + utils.hex16() + '-' + utils.hex16();
820
753
  }
821
754
 
822
- addRequest(request) {
823
- return Transaction.prototype.addRequest(this, request);
755
+ private addRequest(request: RequestBase) {
756
+ this.requests.push({ id: this.counter, request: request });
757
+ return this.counter++;
824
758
  }
825
759
 
826
- urlParametersClone(entitySet) {
827
- return Transaction.prototype.urlParametersClone.call(this, entitySet);
760
+ private urlParametersClone(entitySet: string): TypeOptions {
761
+ const options = utils.clone(this.urlOptions);
762
+ options.entitySet = entitySet;
763
+
764
+ return options;
828
765
  }
766
+ }
767
+
768
+ interface TransactionRequest {
769
+ id: number,
770
+ request: RequestBase;
771
+ }
772
+
773
+ interface BatchInnerRequest {
774
+ id: number,
775
+ request: RequestBase | Transaction;
776
+ }
777
+
778
+ export interface BatchRequestOptionsExtended extends RequestOptionsBaseExtended {
779
+ factory: RequestFactory;
780
+ }
781
+
782
+ export interface BatchRequestOptionsBase extends RequestOptionsBase {
783
+ entitySet: string;
784
+ }
785
+
786
+ export interface BatchCreateRequestOptions extends CreateRequestOptions {
787
+ entitySet: string;
788
+ }
789
+
790
+ export interface BatchUpdateRequestOptions extends UpdateRequestOptions {
791
+ entitySet: string;
792
+ }
793
+
794
+ export interface BatchSingleItemRequestOptions extends RequestOptionsBase {
795
+ entitySet: string;
796
+ }
797
+
798
+ export interface BatchPropertyRequestOptions extends PropertyRequestOptions {
799
+ entitySet: string;
800
+ }
801
+
802
+ export interface BatchSingleRelatedItemRequestOptions extends SingleRelatedItemRequestOptions {
803
+ entitySet: string;
804
+ }
829
805
 
806
+ export interface BatchCreateRelatedRequestOptions extends CreateRelatedRequestOptions {
807
+ entitySet: string;
830
808
  }
831
- module.exports = BatchRequest;