@progress/sitefinity-webservices-sdk 1.1.15 → 2.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 (231) hide show
  1. package/README.md +84 -51
  2. package/esm/chunks/chunk-2ID24RPE.mjs +179 -0
  3. package/esm/chunks/chunk-2ID24RPE.mjs.map +7 -0
  4. package/esm/chunks/chunk-AHDZ2CWQ.mjs +93 -0
  5. package/esm/chunks/chunk-AHDZ2CWQ.mjs.map +7 -0
  6. package/esm/chunks/chunk-BFLQBM7R.mjs +136 -0
  7. package/esm/chunks/chunk-BFLQBM7R.mjs.map +7 -0
  8. package/esm/chunks/chunk-CMGV26CS.mjs +66 -0
  9. package/esm/chunks/chunk-CMGV26CS.mjs.map +7 -0
  10. package/esm/chunks/chunk-DHWDJAGV.mjs +180 -0
  11. package/esm/chunks/chunk-DHWDJAGV.mjs.map +7 -0
  12. package/esm/chunks/chunk-EH4CERVO.mjs +82 -0
  13. package/esm/chunks/chunk-EH4CERVO.mjs.map +7 -0
  14. package/esm/chunks/chunk-F4CWOE7M.mjs +57 -0
  15. package/esm/chunks/chunk-F4CWOE7M.mjs.map +7 -0
  16. package/esm/chunks/chunk-FUFBYOIF.mjs +98 -0
  17. package/esm/chunks/chunk-FUFBYOIF.mjs.map +7 -0
  18. package/esm/chunks/chunk-J2B7UDVZ.mjs +132 -0
  19. package/esm/chunks/chunk-J2B7UDVZ.mjs.map +7 -0
  20. package/esm/chunks/chunk-L3IMDFA5.mjs +1 -0
  21. package/esm/chunks/chunk-L3IMDFA5.mjs.map +7 -0
  22. package/esm/chunks/chunk-NNYY2VBC.mjs +383 -0
  23. package/esm/chunks/chunk-NNYY2VBC.mjs.map +7 -0
  24. package/esm/chunks/chunk-PI55MBSL.mjs +256 -0
  25. package/esm/chunks/chunk-PI55MBSL.mjs.map +7 -0
  26. package/esm/chunks/chunk-PXPK2IV6.mjs +568 -0
  27. package/esm/chunks/chunk-PXPK2IV6.mjs.map +7 -0
  28. package/esm/chunks/chunk-QPSEKUOI.mjs +35 -0
  29. package/esm/chunks/chunk-QPSEKUOI.mjs.map +7 -0
  30. package/esm/chunks/chunk-RQAAYOY6.mjs +72 -0
  31. package/esm/chunks/chunk-RQAAYOY6.mjs.map +7 -0
  32. package/esm/chunks/chunk-TTVNTTW5.mjs +145 -0
  33. package/esm/chunks/chunk-TTVNTTW5.mjs.map +7 -0
  34. package/esm/chunks/chunk-VLDX2FH2.mjs +235 -0
  35. package/esm/chunks/chunk-VLDX2FH2.mjs.map +7 -0
  36. package/esm/chunks/chunk-VWT2RJET.mjs +102 -0
  37. package/esm/chunks/chunk-VWT2RJET.mjs.map +7 -0
  38. package/esm/chunks/chunk-W2OWM3L7.mjs +19 -0
  39. package/esm/chunks/chunk-W2OWM3L7.mjs.map +7 -0
  40. package/esm/chunks/chunk-WX5J7F5D.mjs +43 -0
  41. package/esm/chunks/chunk-WX5J7F5D.mjs.map +7 -0
  42. package/esm/chunks/chunk-YB2LMPUX.mjs +54 -0
  43. package/esm/chunks/chunk-YB2LMPUX.mjs.map +7 -0
  44. package/package.json +67 -36
  45. package/sitefinity-webservices-sdk.cjs +2761 -0
  46. package/sitefinity-webservices-sdk.cjs.map +7 -0
  47. package/sitefinity-webservices-sdk.d.mts +1 -0
  48. package/{dist/sitefinity-webservices-sdk.d.ts → sitefinity-webservices-sdk.d.ts} +6 -0
  49. package/sitefinity-webservices-sdk.global.d.ts +5 -0
  50. package/sitefinity-webservices-sdk.js +2764 -0
  51. package/sitefinity-webservices-sdk.js.map +7 -0
  52. package/sitefinity-webservices-sdk.min.js +3 -0
  53. package/sitefinity-webservices-sdk.mjs +124 -0
  54. package/sitefinity-webservices-sdk.mjs.map +7 -0
  55. package/src/BlobBuilder.d.ts +12 -0
  56. package/src/Data.d.ts +259 -0
  57. package/src/Expression.d.ts +37 -0
  58. package/src/OrderProperty.d.ts +24 -0
  59. package/src/Query.d.ts +104 -0
  60. package/src/QueryBase.d.ts +40 -0
  61. package/src/QueryBuilder.d.ts +29 -0
  62. package/src/Requests/BatchRequest.d.ts +174 -0
  63. package/src/Requests/ExecutableRequest.d.ts +43 -0
  64. package/src/Requests/Request.d.ts +225 -0
  65. package/src/Requests/RequestBase.d.ts +58 -0
  66. package/{dist/src → src}/Requests/RequestFactory.d.ts +24 -2
  67. package/src/Sitefinity.d.ts +141 -0
  68. package/src/Transport/FetchTransport.d.ts +17 -0
  69. package/src/Transport/HttpTransport.d.ts +69 -0
  70. package/src/Transport/XhrTransport.d.ts +8 -0
  71. package/src/WhereQuery.d.ts +88 -0
  72. package/src/chunk-upload/chunk-upload.sdk.d.ts +305 -0
  73. package/src/chunk-upload/chunked-file-upload.utilities.d.ts +58 -0
  74. package/{dist/src → src}/constants.d.ts +21 -0
  75. package/src/utils.d.ts +103 -0
  76. package/.editorconfig +0 -29
  77. package/.eslintignore +0 -4
  78. package/.eslintrc.js +0 -40
  79. package/config/helpers.ts +0 -8
  80. package/config/webpack.common.ts +0 -39
  81. package/config/webpack.dev.ts +0 -37
  82. package/config/webpack.prod.ts +0 -17
  83. package/dist/docs/.nojekyll +0 -1
  84. package/dist/docs/assets/highlight.css +0 -71
  85. package/dist/docs/assets/main.js +0 -58
  86. package/dist/docs/assets/search.js +0 -1
  87. package/dist/docs/assets/style.css +0 -1280
  88. package/dist/docs/classes/BlobBuilder.BlobBuilder.html +0 -137
  89. package/dist/docs/classes/Data.Data.html +0 -387
  90. package/dist/docs/classes/Expression.BinaryExpression.html +0 -184
  91. package/dist/docs/classes/Expression.ComplexExpression.html +0 -146
  92. package/dist/docs/classes/Expression.ExpressionBase.html +0 -125
  93. package/dist/docs/classes/OrderProperty.OrderProperty.html +0 -151
  94. package/dist/docs/classes/Query.Query.html +0 -353
  95. package/dist/docs/classes/QueryBase.QueryBase.html +0 -185
  96. package/dist/docs/classes/QueryBuilder.QueryBuilder.html +0 -206
  97. package/dist/docs/classes/Requests_BatchRequest.BatchRequest.html +0 -731
  98. package/dist/docs/classes/Requests_BatchRequest.Transaction.html +0 -332
  99. package/dist/docs/classes/Requests_ExecutableRequest.ExecutableRequest.html +0 -340
  100. package/dist/docs/classes/Requests_Request.CommitChunksRequest.html +0 -303
  101. package/dist/docs/classes/Requests_Request.CreateRelatedRequest.html +0 -310
  102. package/dist/docs/classes/Requests_Request.CreateRequest.html +0 -307
  103. package/dist/docs/classes/Requests_Request.DeleteRelatedByIdRequest.html +0 -309
  104. package/dist/docs/classes/Requests_Request.DeleteRelatedRequest.html +0 -302
  105. package/dist/docs/classes/Requests_Request.DeleteRequest.html +0 -298
  106. package/dist/docs/classes/Requests_Request.GetByIdRequest.html +0 -298
  107. package/dist/docs/classes/Requests_Request.GetRelatedByIdRequest.html +0 -309
  108. package/dist/docs/classes/Requests_Request.GetRelatedRequest.html +0 -302
  109. package/dist/docs/classes/Requests_Request.GetRequest.html +0 -295
  110. package/dist/docs/classes/Requests_Request.UpdateRequest.html +0 -309
  111. package/dist/docs/classes/Requests_Request.UploadChunkRequest.html +0 -359
  112. package/dist/docs/classes/Requests_Request.UploadRequest.html +0 -329
  113. package/dist/docs/classes/Requests_RequestBase.RequestBase.html +0 -275
  114. package/dist/docs/classes/Requests_RequestFactory.RequestFactory.html +0 -344
  115. package/dist/docs/classes/Sitefinity.Sitefinity.html +0 -188
  116. package/dist/docs/classes/WhereQuery.WhereQuery.html +0 -436
  117. package/dist/docs/classes/chunk_upload_chunk_upload_sdk.ChunkUploadSdk.html +0 -231
  118. package/dist/docs/classes/chunk_upload_chunked_file_upload_utilities.ChunkedFileUploadUtilities.html +0 -131
  119. package/dist/docs/classes/utils.utils.html +0 -303
  120. package/dist/docs/index.html +0 -129
  121. package/dist/docs/interfaces/Data.CreateRelatedRequestOptions.html +0 -155
  122. package/dist/docs/interfaces/Data.CreateRequestOptions.html +0 -153
  123. package/dist/docs/interfaces/Data.OperationsRequestOptions.html +0 -145
  124. package/dist/docs/interfaces/Data.PropertyRequestOptions.html +0 -149
  125. package/dist/docs/interfaces/Data.RequestOptionsBase.html +0 -136
  126. package/dist/docs/interfaces/Data.SingleRelatedItemRequestOptions.html +0 -155
  127. package/dist/docs/interfaces/Data.UpdateRequestOptions.html +0 -155
  128. package/dist/docs/interfaces/Data.UploadRequestOptions.html +0 -169
  129. package/dist/docs/interfaces/Requests_BatchRequest.BatchCreateRelatedRequestOptions.html +0 -161
  130. package/dist/docs/interfaces/Requests_BatchRequest.BatchCreateRequestOptions.html +0 -153
  131. package/dist/docs/interfaces/Requests_BatchRequest.BatchPropertyRequestOptions.html +0 -153
  132. package/dist/docs/interfaces/Requests_BatchRequest.BatchRequestOptionsBase.html +0 -145
  133. package/dist/docs/interfaces/Requests_BatchRequest.BatchRequestOptionsExtended.html +0 -153
  134. package/dist/docs/interfaces/Requests_BatchRequest.BatchSingleItemRequestOptions.html +0 -145
  135. package/dist/docs/interfaces/Requests_BatchRequest.BatchSingleRelatedItemRequestOptions.html +0 -161
  136. package/dist/docs/interfaces/Requests_BatchRequest.BatchUpdateRequestOptions.html +0 -161
  137. package/dist/docs/interfaces/Requests_ExecutableRequest.ResponseHandlers.html +0 -98
  138. package/dist/docs/interfaces/Requests_Request.CommitChunksRequestOptionsExtended.html +0 -215
  139. package/dist/docs/interfaces/Requests_Request.PostRequestOptionsExtended.html +0 -159
  140. package/dist/docs/interfaces/Requests_Request.PutRequestOptionsExtended.html +0 -161
  141. package/dist/docs/interfaces/Requests_Request.RelatedByIdRequestOptionsExtended.html +0 -169
  142. package/dist/docs/interfaces/Requests_Request.RelatedRequestOptionsExtended.html +0 -163
  143. package/dist/docs/interfaces/Requests_Request.UploadChunkRequestOptionsExtended.html +0 -217
  144. package/dist/docs/interfaces/Requests_Request.UploadRequestOptionsExtended.html +0 -180
  145. package/dist/docs/interfaces/Requests_RequestBase.RequestOptionsBaseExtended.html +0 -148
  146. package/dist/docs/interfaces/Sitefinity.SDKOptions.html +0 -128
  147. package/dist/docs/interfaces/Sitefinity.Token.html +0 -94
  148. package/dist/docs/interfaces/Sitefinity.TypeOptions.html +0 -160
  149. package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.ChunkUploadInfoDTO.html +0 -159
  150. package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.ChunkUploadResult.html +0 -111
  151. package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.CleanUpChunksRequestOptions.html +0 -171
  152. package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.CommitChunksRequestOptions.html +0 -204
  153. package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.GetChunkUploadInfoRequestOptions.html +0 -166
  154. package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.UploadChunkRequestOptions.html +0 -206
  155. package/dist/docs/interfaces/chunk_upload_chunked_file_upload_utilities.ChunkFileResult.html +0 -101
  156. package/dist/docs/interfaces/chunk_upload_chunked_file_upload_utilities.FileUploadChunk.html +0 -94
  157. package/dist/docs/modules/BlobBuilder.html +0 -73
  158. package/dist/docs/modules/Data.html +0 -92
  159. package/dist/docs/modules/Expression.html +0 -77
  160. package/dist/docs/modules/OrderProperty.html +0 -73
  161. package/dist/docs/modules/Query.html +0 -73
  162. package/dist/docs/modules/QueryBase.html +0 -73
  163. package/dist/docs/modules/QueryBuilder.html +0 -73
  164. package/dist/docs/modules/Requests_BatchRequest.html +0 -94
  165. package/dist/docs/modules/Requests_ExecutableRequest.html +0 -78
  166. package/dist/docs/modules/Requests_Request.html +0 -114
  167. package/dist/docs/modules/Requests_RequestBase.html +0 -78
  168. package/dist/docs/modules/Requests_RequestFactory.html +0 -73
  169. package/dist/docs/modules/Sitefinity.html +0 -82
  170. package/dist/docs/modules/WhereQuery.html +0 -73
  171. package/dist/docs/modules/chunk_upload_chunk_upload_sdk.html +0 -88
  172. package/dist/docs/modules/chunk_upload_chunked_file_upload_utilities.html +0 -80
  173. package/dist/docs/modules/constants.html +0 -83
  174. package/dist/docs/modules/utils.html +0 -73
  175. package/dist/docs/modules.html +0 -80
  176. package/dist/docs/variables/constants.CONTENT_TYPES.html +0 -76
  177. package/dist/docs/variables/constants.EXPRESSION_TYPE.html +0 -106
  178. package/dist/docs/variables/constants.HEADER_NAMES.html +0 -102
  179. package/dist/docs/variables/constants.HTTP_METHODS.html +0 -84
  180. package/dist/docs/variables/constants.ODATA_PARAMS.html +0 -90
  181. package/dist/docs/variables/constants.SF_PARAMS.html +0 -84
  182. package/dist/samples.html +0 -625
  183. package/dist/sitefinity-webservices-sdk.js +0 -3125
  184. package/dist/sitefinity-webservices-sdk.js.map +0 -1
  185. package/dist/sitefinity-webservices-sdk.min.js +0 -1
  186. package/dist/src/BlobBuilder.d.ts +0 -14
  187. package/dist/src/Data.d.ts +0 -154
  188. package/dist/src/Data.spec.d.ts +0 -1
  189. package/dist/src/Expression.d.ts +0 -19
  190. package/dist/src/OrderProperty.d.ts +0 -8
  191. package/dist/src/Query.d.ts +0 -59
  192. package/dist/src/QueryBase.d.ts +0 -18
  193. package/dist/src/QueryBuilder.d.ts +0 -13
  194. package/dist/src/Requests/BatchRequest.d.ts +0 -146
  195. package/dist/src/Requests/ExecutableRequest.d.ts +0 -22
  196. package/dist/src/Requests/Request.d.ts +0 -132
  197. package/dist/src/Requests/RequestBase.d.ts +0 -27
  198. package/dist/src/Requests/request.spec.d.ts +0 -1
  199. package/dist/src/Sitefinity.d.ts +0 -75
  200. package/dist/src/Sitefinity.spec.d.ts +0 -1
  201. package/dist/src/WhereQuery.d.ts +0 -72
  202. package/dist/src/chunk-upload/chunk-upload.sdk.d.ts +0 -295
  203. package/dist/src/chunk-upload/chunk-upload.sdk.spec.d.ts +0 -1
  204. package/dist/src/chunk-upload/chunked-file-upload.utilities.d.ts +0 -13
  205. package/dist/src/utils.d.ts +0 -16
  206. package/karma.conf.js +0 -29
  207. package/sitefinity-webservices-sdk.ts +0 -15
  208. package/src/BlobBuilder.ts +0 -20
  209. package/src/Data.spec.ts +0 -160
  210. package/src/Data.ts +0 -418
  211. package/src/Expression.ts +0 -36
  212. package/src/OrderProperty.ts +0 -39
  213. package/src/Query.ts +0 -106
  214. package/src/QueryBase.ts +0 -57
  215. package/src/QueryBuilder.ts +0 -180
  216. package/src/Requests/BatchRequest.ts +0 -807
  217. package/src/Requests/ExecutableRequest.ts +0 -117
  218. package/src/Requests/Request.ts +0 -327
  219. package/src/Requests/RequestBase.ts +0 -163
  220. package/src/Requests/RequestFactory.ts +0 -75
  221. package/src/Requests/request.spec.ts +0 -132
  222. package/src/Sitefinity.spec.ts +0 -483
  223. package/src/Sitefinity.ts +0 -125
  224. package/src/WhereQuery.ts +0 -145
  225. package/src/chunk-upload/chunk-upload.sdk.spec.ts +0 -342
  226. package/src/chunk-upload/chunk-upload.sdk.ts +0 -439
  227. package/src/chunk-upload/chunked-file-upload.utilities.ts +0 -64
  228. package/src/constants.ts +0 -66
  229. package/src/utils.ts +0 -125
  230. package/template.html +0 -625
  231. package/tsconfig.json +0 -38
@@ -0,0 +1,66 @@
1
+ import {
2
+ utils
3
+ } from "./chunk-2ID24RPE.mjs";
4
+
5
+ // src/QueryBase.ts
6
+ var QueryBase = class {
7
+ /** Creates an empty projection. */
8
+ constructor() {
9
+ this.selectProperties = null;
10
+ this.expandProperties = null;
11
+ }
12
+ /**
13
+ * Selects the scalar fields returned by the service.
14
+ *
15
+ * Duplicate names are removed while preserving their first occurrence.
16
+ * Property names must be simple paths without a dot.
17
+ *
18
+ * @param properties Field names to include.
19
+ * @returns A cloned query with `$select` configured.
20
+ * @throws Error If a property is not a string or is a nested path.
21
+ */
22
+ select(...properties) {
23
+ properties = properties ?? [];
24
+ this.validatePropertyPaths(properties);
25
+ return this.clone((newObj) => {
26
+ newObj.selectProperties = properties.filter((prop, index, props) => props.indexOf(prop) === index);
27
+ });
28
+ }
29
+ /**
30
+ * Selects the navigation properties expanded by the service.
31
+ *
32
+ * Duplicate names are removed while preserving their first occurrence.
33
+ * Property names must be simple paths without a dot.
34
+ *
35
+ * @param properties Navigation property names to expand.
36
+ * @returns A cloned query with `$expand` configured.
37
+ * @throws Error If a property is not a string or is a nested path.
38
+ */
39
+ expand(...properties) {
40
+ properties = properties ?? [];
41
+ this.validatePropertyPaths(properties);
42
+ return this.clone((newObj) => {
43
+ newObj.expandProperties = properties.filter((prop, index, props) => props.indexOf(prop) === index);
44
+ });
45
+ }
46
+ validatePropertyPaths(propPaths, allowNested = false) {
47
+ for (let i = 0; i < propPaths.length; i++) {
48
+ const member = propPaths[i];
49
+ if (!utils.isString(member)) {
50
+ throw new Error("Invalid argument in clause");
51
+ }
52
+ if (!allowNested && member.indexOf(".") > -1) {
53
+ throw new Error("Invalid argument in clause");
54
+ }
55
+ }
56
+ }
57
+ clone(setter = null) {
58
+ const newObj = utils.clone(this, Object.create(Object.getPrototypeOf(this)), setter);
59
+ return newObj;
60
+ }
61
+ };
62
+
63
+ export {
64
+ QueryBase
65
+ };
66
+ //# sourceMappingURL=chunk-CMGV26CS.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/QueryBase.ts"],
4
+ "sourcesContent": ["import { utils } from \"./utils\";\n\n/**\n * Base class for query projections.\n *\n * `Query` extends this class with filtering, ordering, searching, and paging.\n * Projection methods are immutable: each call returns a clone that preserves\n * the concrete query prototype, so fluent chains continue to expose derived\n * query methods.\n */\nexport class QueryBase {\n /** Selected scalar properties, or `null` when no projection was configured. */\n selectProperties: string[];\n /** Selected navigation properties, or `null` when no expansion was configured. */\n expandProperties: string[];\n\n /** Creates an empty projection. */\n constructor() {\n this.selectProperties = null;\n this.expandProperties = null;\n }\n\n /**\n * Selects the scalar fields returned by the service.\n *\n * Duplicate names are removed while preserving their first occurrence.\n * Property names must be simple paths without a dot.\n *\n * @param properties Field names to include.\n * @returns A cloned query with `$select` configured.\n * @throws Error If a property is not a string or is a nested path.\n */\n select(...properties: string[]): this {\n properties = properties ?? [];\n\n this.validatePropertyPaths(properties);\n\n return this.clone((newObj: this) => {\n newObj.selectProperties = properties.filter((prop, index, props) => props.indexOf(prop) === index);\n });\n }\n\n /**\n * Selects the navigation properties expanded by the service.\n *\n * Duplicate names are removed while preserving their first occurrence.\n * Property names must be simple paths without a dot.\n *\n * @param properties Navigation property names to expand.\n * @returns A cloned query with `$expand` configured.\n * @throws Error If a property is not a string or is a nested path.\n */\n expand(...properties: string[]): this {\n properties = properties ?? [];\n this.validatePropertyPaths(properties);\n\n return this.clone((newObj: this) => {\n newObj.expandProperties = properties.filter((prop, index, props) => props.indexOf(prop) === index);\n });\n }\n\n protected validatePropertyPaths(propPaths: string[], allowNested = false) {\n for (let i = 0; i < propPaths.length; i++) {\n const member = propPaths[i];\n if (!utils.isString(member)) {\n throw new Error(\"Invalid argument in clause\");\n }\n\n if (!allowNested && member.indexOf(\".\") > -1) {\n throw new Error(\"Invalid argument in clause\");\n }\n }\n }\n\n protected clone(setter: ((newObj: this) => void) = null): this {\n const newObj = utils.clone(this, Object.create(Object.getPrototypeOf(this)), setter) as this;\n return newObj;\n }\n}\n"],
5
+ "mappings": ";;;;;AAUO,IAAM,YAAN,MAAgB;AAAA;AAAA,EAOnB,cAAc;AACV,SAAK,mBAAmB;AACxB,SAAK,mBAAmB;AAAA,EAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,UAAU,YAA4B;AAClC,iBAAa,cAAc,CAAC;AAE5B,SAAK,sBAAsB,UAAU;AAErC,WAAO,KAAK,MAAM,CAAC,WAAiB;AAChC,aAAO,mBAAmB,WAAW,OAAO,CAAC,MAAM,OAAO,UAAU,MAAM,QAAQ,IAAI,MAAM,KAAK;AAAA,IACrG,CAAC;AAAA,EACL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,UAAU,YAA4B;AAClC,iBAAa,cAAc,CAAC;AAC5B,SAAK,sBAAsB,UAAU;AAErC,WAAO,KAAK,MAAM,CAAC,WAAiB;AAChC,aAAO,mBAAmB,WAAW,OAAO,CAAC,MAAM,OAAO,UAAU,MAAM,QAAQ,IAAI,MAAM,KAAK;AAAA,IACrG,CAAC;AAAA,EACL;AAAA,EAEU,sBAAsB,WAAqB,cAAc,OAAO;AACtE,aAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACvC,YAAM,SAAS,UAAU,CAAC;AAC1B,UAAI,CAAC,MAAM,SAAS,MAAM,GAAG;AACzB,cAAM,IAAI,MAAM,4BAA4B;AAAA,MAChD;AAEA,UAAI,CAAC,eAAe,OAAO,QAAQ,GAAG,IAAI,IAAI;AAC1C,cAAM,IAAI,MAAM,4BAA4B;AAAA,MAChD;AAAA,IACJ;AAAA,EACJ;AAAA,EAEU,MAAM,SAAmC,MAAY;AAC3D,UAAM,SAAS,MAAM,MAAM,MAAM,OAAO,OAAO,OAAO,eAAe,IAAI,CAAC,GAAG,MAAM;AACnF,WAAO;AAAA,EACX;AACJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,180 @@
1
+ import {
2
+ WhereQuery
3
+ } from "./chunk-BFLQBM7R.mjs";
4
+ import {
5
+ EXPRESSION_TYPE,
6
+ ODATA_PARAMS
7
+ } from "./chunk-RQAAYOY6.mjs";
8
+ import {
9
+ BinaryExpression,
10
+ ComplexExpression
11
+ } from "./chunk-F4CWOE7M.mjs";
12
+ import {
13
+ OrderProperty
14
+ } from "./chunk-YB2LMPUX.mjs";
15
+ import {
16
+ utils
17
+ } from "./chunk-2ID24RPE.mjs";
18
+
19
+ // src/QueryBuilder.ts
20
+ var QueryBuilder = class {
21
+ /** Creates a builder for the supplied query. */
22
+ constructor(query) {
23
+ this.query = query;
24
+ }
25
+ /**
26
+ * Serializes the query into OData parameter names and values.
27
+ *
28
+ * Supported output keys are `$filter`, `$select`, `$expand`, `$orderby`,
29
+ * `$skip`, `$top`, `$count`, and `$search`. Missing or empty clauses are
30
+ * omitted. String constants are escaped and quoted; GUID constants remain
31
+ * unquoted, and `in` requires an array value.
32
+ *
33
+ * @returns An object suitable for the data request's query parameters.
34
+ * @throws Error If the expression tree is invalid, an operator is unsupported,
35
+ * or an `in` condition does not contain an array.
36
+ */
37
+ build() {
38
+ const queryParameters = {};
39
+ const whereClause = this.query.filter;
40
+ if (whereClause instanceof WhereQuery) {
41
+ const expression = whereClause.getExpression();
42
+ if (expression instanceof ComplexExpression) {
43
+ const result = this.buildComplexExpression(expression, null);
44
+ if (result) {
45
+ queryParameters[ODATA_PARAMS.$filter] = result;
46
+ }
47
+ }
48
+ }
49
+ const selectClause = this.query.selectProperties;
50
+ if (selectClause instanceof Array) {
51
+ queryParameters[ODATA_PARAMS.$select] = selectClause.join(", ");
52
+ }
53
+ const expandClause = this.query.expandProperties;
54
+ if (expandClause instanceof Array)
55
+ queryParameters[ODATA_PARAMS.$expand] = expandClause.join(", ");
56
+ const orderByClause = this.query.orderProperties;
57
+ if (orderByClause instanceof Array) {
58
+ const order = [];
59
+ for (const i in orderByClause) {
60
+ if (orderByClause[i] instanceof OrderProperty)
61
+ order.push(orderByClause[i].getValue());
62
+ }
63
+ queryParameters[ODATA_PARAMS.$orderby] = order.join(", ");
64
+ }
65
+ const take = this.query.takeValue;
66
+ if (utils.isNumber(take))
67
+ queryParameters[ODATA_PARAMS.$top] = take;
68
+ const skip = this.query.skipValue;
69
+ if (utils.isNumber(skip))
70
+ queryParameters[ODATA_PARAMS.$skip] = skip;
71
+ const search = this.query.searchValue;
72
+ if (search)
73
+ queryParameters[ODATA_PARAMS.$search] = search;
74
+ if (this.query.inlineCount !== null) {
75
+ queryParameters[ODATA_PARAMS.$count] = this.query.inlineCount;
76
+ }
77
+ return queryParameters;
78
+ }
79
+ buildComplexExpression(expression, parent) {
80
+ if (!(expression instanceof ComplexExpression))
81
+ throw new Error("Invalid complex expression");
82
+ let counter = 0;
83
+ let result = "";
84
+ const subExpressions = expression.getExpressions();
85
+ if (!subExpressions.length) {
86
+ return result;
87
+ }
88
+ while (true) {
89
+ const currentExp = subExpressions[counter];
90
+ if (currentExp instanceof BinaryExpression) {
91
+ result += this.buildBinaryExpression(currentExp);
92
+ } else if (currentExp instanceof ComplexExpression) {
93
+ const complexResult = this.buildComplexExpression(currentExp, expression.type);
94
+ if (complexResult) {
95
+ result += "(" + complexResult + ")";
96
+ }
97
+ }
98
+ if (expression.getType() === EXPRESSION_TYPE.not)
99
+ result = expression.getType() + " " + result;
100
+ if (expression.getType() === EXPRESSION_TYPE.any) {
101
+ const exprVal = [];
102
+ for (let index = 0; index < subExpressions.length; index++) {
103
+ if (subExpressions[index].type == EXPRESSION_TYPE.contains || subExpressions[index].type == EXPRESSION_TYPE.startsWith || subExpressions[index].type == EXPRESSION_TYPE.endsWith)
104
+ exprVal.push(subExpressions[index].type.toLowerCase() + "(x, '" + subExpressions[index].constant + "')");
105
+ else
106
+ exprVal.push("x " + subExpressions[index].type.toLowerCase() + " " + this.checkType(subExpressions[index].constant));
107
+ }
108
+ result = currentExp.parameter + "/" + expression.getType() + "(x:" + exprVal.join(" " + parent + " ") + ")";
109
+ }
110
+ counter++;
111
+ if (counter == subExpressions.length)
112
+ break;
113
+ result += " " + expression.getType() + " ";
114
+ }
115
+ return result;
116
+ }
117
+ buildBinaryExpression(expression) {
118
+ let result = null;
119
+ const type = expression.getType();
120
+ switch (type) {
121
+ case EXPRESSION_TYPE.eq:
122
+ case EXPRESSION_TYPE.ne:
123
+ case EXPRESSION_TYPE.lt:
124
+ case EXPRESSION_TYPE.le:
125
+ case EXPRESSION_TYPE.gt:
126
+ case EXPRESSION_TYPE.ge: {
127
+ const constant = expression.getConstant();
128
+ result = `(${expression.getParameter()} ${type} ${this.checkType(constant)})`;
129
+ break;
130
+ }
131
+ case EXPRESSION_TYPE.contains:
132
+ case EXPRESSION_TYPE.startsWith:
133
+ case EXPRESSION_TYPE.endsWith: {
134
+ const expressionParameter = this.applyCaseSensitiveSettings(expression, expression.getParameter());
135
+ const expressionConstant = this.checkType(expression.getConstant(), true);
136
+ const expressionValue = this.applyCaseSensitiveSettings(expression, expressionConstant);
137
+ result = `${type.toLowerCase()}(${expressionParameter}, ${expressionValue})`;
138
+ break;
139
+ }
140
+ case EXPRESSION_TYPE.in: {
141
+ const valueArray = expression.getConstant();
142
+ if (!Array.isArray(valueArray)) {
143
+ throw new Error("Parameter is not an array!");
144
+ }
145
+ result = `${expression.getParameter()} in (${valueArray.join(", ")})`;
146
+ break;
147
+ }
148
+ default: {
149
+ const msg = `Unsupported operator ${type}`;
150
+ throw new Error(msg);
151
+ }
152
+ }
153
+ return result;
154
+ }
155
+ applyCaseSensitiveSettings(expression, value) {
156
+ if (expression.isCaseSensitive()) {
157
+ return value;
158
+ }
159
+ return `tolower(${value})`;
160
+ }
161
+ checkType(constant, treatAsString = false) {
162
+ if (this.isGuid(constant) && !treatAsString)
163
+ return constant;
164
+ if (constant == null)
165
+ return null;
166
+ constant = constant.replace(/[+/?%#&]/g, function($0) {
167
+ return encodeURIComponent($0);
168
+ });
169
+ constant = constant.replace(/'/g, "''");
170
+ return "'" + constant + "'";
171
+ }
172
+ isGuid(constant) {
173
+ 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);
174
+ }
175
+ };
176
+
177
+ export {
178
+ QueryBuilder
179
+ };
180
+ //# sourceMappingURL=chunk-DHWDJAGV.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/QueryBuilder.ts"],
4
+ "sourcesContent": ["\uFEFFimport { WhereQuery } from \"./WhereQuery\";\nimport { ComplexExpression, BinaryExpression } from \"./Expression\";\nimport { OrderProperty } from \"./OrderProperty\";\nimport { utils } from \"./utils\";\nimport { ODATA_PARAMS, EXPRESSION_TYPE } from \"./constants\";\nimport { Query } from \"./Query\";\n\n/**\n * Serializes a {@link Query} and its expression tree to OData query parameters.\n */\nexport class QueryBuilder {\n /** Creates a builder for the supplied query. */\n constructor(private query: Query) {\n }\n\n /**\n * Serializes the query into OData parameter names and values.\n *\n * Supported output keys are `$filter`, `$select`, `$expand`, `$orderby`,\n * `$skip`, `$top`, `$count`, and `$search`. Missing or empty clauses are\n * omitted. String constants are escaped and quoted; GUID constants remain\n * unquoted, and `in` requires an array value.\n *\n * @returns An object suitable for the data request's query parameters.\n * @throws Error If the expression tree is invalid, an operator is unsupported,\n * or an `in` condition does not contain an array.\n */\n build(): { [key: string]: string } {\n const queryParameters = {};\n const whereClause = this.query.filter;\n if (whereClause instanceof WhereQuery) {\n const expression = whereClause.getExpression();\n if (expression instanceof ComplexExpression) {\n const result = this.buildComplexExpression(expression, null);\n if (result) {\n queryParameters[ODATA_PARAMS.$filter] = result;\n }\n }\n }\n\n const selectClause = this.query.selectProperties;\n if (selectClause instanceof Array) {\n queryParameters[ODATA_PARAMS.$select] = selectClause.join(\", \");\n }\n\n const expandClause = this.query.expandProperties;\n if (expandClause instanceof Array)\n queryParameters[ODATA_PARAMS.$expand] = expandClause.join(\", \");\n\n const orderByClause = this.query.orderProperties;\n if (orderByClause instanceof Array) {\n const order = [];\n for (const i in orderByClause) {\n if (orderByClause[i] instanceof OrderProperty)\n order.push(orderByClause[i].getValue());\n }\n queryParameters[ODATA_PARAMS.$orderby] = order.join(\", \");\n }\n\n const take = this.query.takeValue;\n if (utils.isNumber(take))\n queryParameters[ODATA_PARAMS.$top] = take;\n\n const skip = this.query.skipValue;\n if (utils.isNumber(skip))\n queryParameters[ODATA_PARAMS.$skip] = skip;\n\n const search = this.query.searchValue;\n if (search)\n queryParameters[ODATA_PARAMS.$search] = search;\n\n if (this.query.inlineCount !== null) {\n queryParameters[ODATA_PARAMS.$count] = this.query.inlineCount;\n }\n\n return queryParameters;\n }\n\n private buildComplexExpression(expression: ComplexExpression, parent: string): string {\n if (!(expression instanceof ComplexExpression))\n throw new Error(\"Invalid complex expression\");\n\n let counter = 0;\n let result = \"\";\n const subExpressions = expression.getExpressions();\n if (!subExpressions.length) {\n return result;\n }\n\n while (true) {\n const currentExp = subExpressions[counter];\n if (currentExp instanceof BinaryExpression) {\n result += this.buildBinaryExpression(currentExp);\n }\n else if (currentExp instanceof ComplexExpression) {\n const complexResult = this.buildComplexExpression(currentExp, expression.type);\n if (complexResult) {\n result += \"(\" + complexResult + \")\";\n }\n }\n\n if (expression.getType() === EXPRESSION_TYPE.not)\n result = expression.getType() + \" \" + result;\n // TODOSDK: Rethink this!\n if (expression.getType() === EXPRESSION_TYPE.any) {\n const exprVal = [];\n for (let index = 0; index < subExpressions.length; index++) {\n if (subExpressions[index].type == EXPRESSION_TYPE.contains || subExpressions[index].type == EXPRESSION_TYPE.startsWith || subExpressions[index].type == EXPRESSION_TYPE.endsWith)\n exprVal.push(subExpressions[index].type.toLowerCase() + \"(x, '\" + (subExpressions[index] as BinaryExpression).constant + \"')\");\n else\n exprVal.push(\"x \" + subExpressions[index].type.toLowerCase() + \" \" + this.checkType((subExpressions[index] as BinaryExpression).constant));\n }\n result = (currentExp as BinaryExpression).parameter + \"/\" + expression.getType() + \"(x:\" + exprVal.join(\" \" + parent + \" \") + \")\";\n }\n\n counter++;\n if (counter == subExpressions.length)\n break;\n\n result += \" \" + expression.getType() + \" \";\n }\n\n return result;\n }\n\n private buildBinaryExpression(expression: BinaryExpression): string {\n let result: string = null;\n const type = expression.getType();\n switch (type) {\n case EXPRESSION_TYPE.eq:\n case EXPRESSION_TYPE.ne:\n case EXPRESSION_TYPE.lt:\n case EXPRESSION_TYPE.le:\n case EXPRESSION_TYPE.gt:\n case EXPRESSION_TYPE.ge: {\n const constant = expression.getConstant();\n result = `(${expression.getParameter()} ${type} ${this.checkType(constant)})`;\n break;\n }\n case EXPRESSION_TYPE.contains:\n case EXPRESSION_TYPE.startsWith:\n case EXPRESSION_TYPE.endsWith: {\n const expressionParameter = this.applyCaseSensitiveSettings(expression, expression.getParameter());\n const expressionConstant = this.checkType(expression.getConstant(), true);\n const expressionValue = this.applyCaseSensitiveSettings(expression, expressionConstant);\n\n result = `${type.toLowerCase()}(${expressionParameter}, ${expressionValue})`;\n break;\n }\n case EXPRESSION_TYPE.in: {\n const valueArray = expression.getConstant();\n if (!Array.isArray(valueArray)) {\n throw new Error(\"Parameter is not an array!\");\n }\n\n result = `${expression.getParameter()} in (${valueArray.join(\", \")})`;\n break;\n }\n default: {\n const msg = `Unsupported operator ${type}`;\n throw new Error(msg);\n }\n }\n\n return result;\n }\n\n private applyCaseSensitiveSettings(expression: BinaryExpression, value: string): string {\n if (expression.isCaseSensitive()) {\n return value;\n }\n\n return `tolower(${value})`;\n }\n\n private checkType(constant: any, treatAsString = false): string {\n if (this.isGuid(constant) && !treatAsString)\n return constant;\n\n if (constant == null)\n return null;\n\n constant = constant.replace(/[+/?%#&]/g, function ($0) {\n return encodeURIComponent($0);\n });\n\n // escapes the apostrophes\n constant = constant.replace(/'/g, \"''\");\n\n return \"'\" + constant + \"'\";\n }\n\n private isGuid(constant: string): boolean {\n 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);\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,82 @@
1
+ // src/chunk-upload/chunked-file-upload.utilities.ts
2
+ var ChunkedFileUploadUtilities = class {
3
+ /**
4
+ * Splits a `Blob` or base64-encoded binary string into sequential chunks.
5
+ *
6
+ * Blob input is sliced directly. A base64 string is decoded with `atob`
7
+ * into a Blob using `contentTypeMime` before it is sliced. Chunk ordinals
8
+ * start at zero; the final chunk can be smaller than `chunkSize`.
9
+ *
10
+ * @param file Blob data or a base64-encoded binary string.
11
+ * @param chunkSize Maximum size of each chunk in bytes.
12
+ * @param contentTypeMime MIME type assigned to each chunk and decoded Blob.
13
+ * @returns The chunks, their total count, and the original file size in bytes.
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * const result = new ChunkedFileUploadUtilities().chunkFile(
18
+ * base64File,
19
+ * 5 * 1024 * 1024,
20
+ * "image/jpeg"
21
+ * );
22
+ *
23
+ * result.chunks.forEach(({ ordinal, content }) => {
24
+ * console.log(`Chunk ${ordinal}: ${content.size} bytes`);
25
+ * });
26
+ * ```
27
+ */
28
+ chunkFile(file, chunkSize, contentTypeMime) {
29
+ let fileInternal;
30
+ if (typeof file === "string")
31
+ fileInternal = this.base64ToBlob(file, chunkSize, contentTypeMime);
32
+ else {
33
+ fileInternal = file;
34
+ }
35
+ const fileSize = fileInternal.size;
36
+ const result = [];
37
+ let chunkOrdinal = 0;
38
+ let offset = 0;
39
+ let currentOffset = chunkSize;
40
+ while (offset <= fileSize) {
41
+ const chunk = fileInternal.slice(offset, currentOffset, contentTypeMime);
42
+ offset = currentOffset;
43
+ currentOffset = currentOffset + chunkSize;
44
+ result.push({
45
+ ordinal: chunkOrdinal,
46
+ content: chunk
47
+ });
48
+ chunkOrdinal++;
49
+ }
50
+ return {
51
+ chunks: result,
52
+ totalChunksCount: result.length,
53
+ fileTotalSize: fileSize
54
+ };
55
+ }
56
+ /**
57
+ * Converts base64 binary content to a Blob before chunking.
58
+ *
59
+ * The input must contain the base64 payload expected by `atob`; a data URL
60
+ * prefix is not removed automatically.
61
+ */
62
+ base64ToBlob(base64String, chunkSize, contentType = "") {
63
+ const byteCharacters = atob(base64String);
64
+ const byteArrays = [];
65
+ for (let offset = 0; offset < byteCharacters.length; offset += chunkSize) {
66
+ const slice = byteCharacters.slice(offset, offset + chunkSize);
67
+ const byteNumbers = new Array(slice.length);
68
+ for (let i = 0; i < slice.length; i++) {
69
+ byteNumbers[i] = slice.charCodeAt(i);
70
+ }
71
+ const byteArray = new Uint8Array(byteNumbers);
72
+ byteArrays.push(byteArray);
73
+ }
74
+ const blob = new Blob(byteArrays, { type: contentType });
75
+ return blob;
76
+ }
77
+ };
78
+
79
+ export {
80
+ ChunkedFileUploadUtilities
81
+ };
82
+ //# sourceMappingURL=chunk-EH4CERVO.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/chunk-upload/chunked-file-upload.utilities.ts"],
4
+ "sourcesContent": ["/**\n * Helpers for splitting file content into chunks and normalizing upload input.\n */\nexport class ChunkedFileUploadUtilities {\n /**\n * Splits a `Blob` or base64-encoded binary string into sequential chunks.\n *\n * Blob input is sliced directly. A base64 string is decoded with `atob`\n * into a Blob using `contentTypeMime` before it is sliced. Chunk ordinals\n * start at zero; the final chunk can be smaller than `chunkSize`.\n *\n * @param file Blob data or a base64-encoded binary string.\n * @param chunkSize Maximum size of each chunk in bytes.\n * @param contentTypeMime MIME type assigned to each chunk and decoded Blob.\n * @returns The chunks, their total count, and the original file size in bytes.\n *\n * @example\n * ```ts\n * const result = new ChunkedFileUploadUtilities().chunkFile(\n * base64File,\n * 5 * 1024 * 1024,\n * \"image/jpeg\"\n * );\n *\n * result.chunks.forEach(({ ordinal, content }) => {\n * console.log(`Chunk ${ordinal}: ${content.size} bytes`);\n * });\n * ```\n */\n chunkFile(file: Blob | string, chunkSize: number, contentTypeMime: string): ChunkFileResult {\n let fileInternal: Blob;\n\n if (typeof file === \"string\")\n fileInternal = this.base64ToBlob(file, chunkSize, contentTypeMime);\n else {\n fileInternal = file as Blob;\n }\n\n const fileSize = fileInternal.size;\n const result: Array<FileUploadChunk> = [];\n let chunkOrdinal = 0;\n let offset = 0;\n let currentOffset = chunkSize;\n\n while (offset <= fileSize) {\n const chunk = fileInternal.slice(offset, currentOffset, contentTypeMime);\n offset = currentOffset;\n currentOffset = currentOffset + chunkSize;\n\n result.push({\n ordinal: chunkOrdinal,\n content: chunk\n });\n\n chunkOrdinal++;\n }\n\n return {\n chunks: result,\n totalChunksCount: result.length,\n fileTotalSize: fileSize\n };\n }\n\n /**\n * Converts base64 binary content to a Blob before chunking.\n *\n * The input must contain the base64 payload expected by `atob`; a data URL\n * prefix is not removed automatically.\n */\n private base64ToBlob(base64String, chunkSize, contentType = \"\"): Blob {\n const byteCharacters = atob(base64String);\n const byteArrays = [];\n for (let offset = 0; offset < byteCharacters.length; offset += chunkSize) {\n const slice = byteCharacters.slice(offset, offset + chunkSize);\n const byteNumbers = new Array(slice.length);\n for (let i = 0; i < slice.length; i++) {\n byteNumbers[i] = slice.charCodeAt(i);\n }\n const byteArray = new Uint8Array(byteNumbers);\n byteArrays.push(byteArray);\n }\n\n const blob = new Blob(byteArrays, { type: contentType });\n return blob;\n }\n}\n\n/**\n * One chunk produced by {@link ChunkedFileUploadUtilities.chunkFile}.\n */\nexport interface FileUploadChunk {\n /** Zero-based position of this chunk in the complete file. */\n ordinal: number,\n /** Binary content for this chunk. */\n content: Blob\n}\n\n/**\n * Result returned after a file is divided into upload chunks.\n */\nexport interface ChunkFileResult {\n /** Chunks in ascending ordinal order. */\n chunks: Array<FileUploadChunk>,\n /** Number of chunks in `chunks`. */\n totalChunksCount: number,\n /** Size of the source file in bytes. */\n fileTotalSize: number\n}\n"],
5
+ "mappings": ";AAGO,IAAM,6BAAN,MAAiC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA0BpC,UAAU,MAAqB,WAAmB,iBAA0C;AACxF,QAAI;AAEJ,QAAI,OAAO,SAAS;AAChB,qBAAe,KAAK,aAAa,MAAM,WAAW,eAAe;AAAA,SAChE;AACD,qBAAe;AAAA,IACnB;AAEA,UAAM,WAAW,aAAa;AAC9B,UAAM,SAAiC,CAAC;AACxC,QAAI,eAAe;AACnB,QAAI,SAAS;AACb,QAAI,gBAAgB;AAEpB,WAAO,UAAU,UAAU;AACvB,YAAM,QAAQ,aAAa,MAAM,QAAQ,eAAe,eAAe;AACvE,eAAS;AACT,sBAAgB,gBAAgB;AAEhC,aAAO,KAAK;AAAA,QACR,SAAS;AAAA,QACT,SAAS;AAAA,MACb,CAAC;AAED;AAAA,IACJ;AAEA,WAAO;AAAA,MACH,QAAQ;AAAA,MACR,kBAAkB,OAAO;AAAA,MACzB,eAAe;AAAA,IACnB;AAAA,EACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQQ,aAAa,cAAc,WAAW,cAAc,IAAU;AAClE,UAAM,iBAAiB,KAAK,YAAY;AACxC,UAAM,aAAa,CAAC;AACpB,aAAS,SAAS,GAAG,SAAS,eAAe,QAAQ,UAAU,WAAW;AACtE,YAAM,QAAQ,eAAe,MAAM,QAAQ,SAAS,SAAS;AAC7D,YAAM,cAAc,IAAI,MAAM,MAAM,MAAM;AAC1C,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACnC,oBAAY,CAAC,IAAI,MAAM,WAAW,CAAC;AAAA,MACvC;AACA,YAAM,YAAY,IAAI,WAAW,WAAW;AAC5C,iBAAW,KAAK,SAAS;AAAA,IAC7B;AAEA,UAAM,OAAO,IAAI,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AACvD,WAAO;AAAA,EACX;AACJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,57 @@
1
+ // src/Expression.ts
2
+ var ExpressionBase = class {
3
+ /** Creates an expression node with the specified operator or logical type. */
4
+ constructor(type) {
5
+ this.type = type;
6
+ }
7
+ /** Returns this expression's operator or logical type. */
8
+ getType() {
9
+ return this.type;
10
+ }
11
+ };
12
+ var BinaryExpression = class extends ExpressionBase {
13
+ /**
14
+ * Creates a comparison expression.
15
+ *
16
+ * @param type Supported comparison operator, such as `eq`, `ne`, or `contains`.
17
+ * @param parameter Property being tested.
18
+ * @param constant Value compared with the property.
19
+ * @param caseSensitive Whether string functions should preserve case.
20
+ */
21
+ constructor(type, parameter, constant, caseSensitive = true) {
22
+ super(type);
23
+ this.parameter = parameter;
24
+ this.constant = constant;
25
+ this.caseSensitive = caseSensitive;
26
+ }
27
+ /** Returns the property being compared. */
28
+ getParameter() {
29
+ return this.parameter;
30
+ }
31
+ /** Returns the comparison value. */
32
+ getConstant() {
33
+ return this.constant;
34
+ }
35
+ /** Returns whether string matching preserves case. */
36
+ isCaseSensitive() {
37
+ return this.caseSensitive;
38
+ }
39
+ };
40
+ var ComplexExpression = class extends ExpressionBase {
41
+ /** Creates a logical expression containing the supplied child nodes. */
42
+ constructor(type, expressions) {
43
+ super(type);
44
+ this.expressions = expressions;
45
+ }
46
+ /** Returns the child expressions in their current order. */
47
+ getExpressions() {
48
+ return this.expressions;
49
+ }
50
+ };
51
+
52
+ export {
53
+ ExpressionBase,
54
+ BinaryExpression,
55
+ ComplexExpression
56
+ };
57
+ //# sourceMappingURL=chunk-F4CWOE7M.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Expression.ts"],
4
+ "sourcesContent": ["/** Base node for a query filter expression. */\nexport class ExpressionBase {\n /** Creates an expression node with the specified operator or logical type. */\n constructor(public type: string) {\n }\n\n /** Returns this expression's operator or logical type. */\n getType(): string {\n return this.type;\n }\n}\n\n/** A filter expression comparing one property with one constant value. */\nexport class BinaryExpression extends ExpressionBase {\n /**\n * Creates a comparison expression.\n *\n * @param type Supported comparison operator, such as `eq`, `ne`, or `contains`.\n * @param parameter Property being tested.\n * @param constant Value compared with the property.\n * @param caseSensitive Whether string functions should preserve case.\n */\n constructor(type: string, public parameter: string, public constant: any, public caseSensitive: boolean = true) {\n super(type);\n }\n\n /** Returns the property being compared. */\n getParameter(): string {\n return this.parameter;\n }\n\n /** Returns the comparison value. */\n getConstant(): any {\n return this.constant;\n }\n\n /** Returns whether string matching preserves case. */\n isCaseSensitive(): boolean {\n return this.caseSensitive;\n }\n}\n\n/** A filter expression containing one or more child expression nodes. */\nexport class ComplexExpression extends ExpressionBase {\n /** Creates a logical expression containing the supplied child nodes. */\n constructor(type: string, private expressions: ExpressionBase[]) {\n super(type);\n }\n\n /** Returns the child expressions in their current order. */\n getExpressions(): ExpressionBase[] {\n return this.expressions;\n }\n}\n"],
5
+ "mappings": ";AACO,IAAM,iBAAN,MAAqB;AAAA;AAAA,EAExB,YAAmB,MAAc;AAAd;AAAA,EACnB;AAAA;AAAA,EAGA,UAAkB;AACd,WAAO,KAAK;AAAA,EAChB;AACJ;AAGO,IAAM,mBAAN,cAA+B,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASjD,YAAY,MAAqB,WAA0B,UAAsB,gBAAyB,MAAM;AAC5G,UAAM,IAAI;AADmB;AAA0B;AAAsB;AAAA,EAEjF;AAAA;AAAA,EAGA,eAAuB;AACnB,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAGA,cAAmB;AACf,WAAO,KAAK;AAAA,EAChB;AAAA;AAAA,EAGA,kBAA2B;AACvB,WAAO,KAAK;AAAA,EAChB;AACJ;AAGO,IAAM,oBAAN,cAAgC,eAAe;AAAA;AAAA,EAElD,YAAY,MAAsB,aAA+B;AAC7D,UAAM,IAAI;AADoB;AAAA,EAElC;AAAA;AAAA,EAGA,iBAAmC;AAC/B,WAAO,KAAK;AAAA,EAChB;AACJ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,98 @@
1
+ import {
2
+ XhrTransport
3
+ } from "./chunk-WX5J7F5D.mjs";
4
+ import {
5
+ RequestBase
6
+ } from "./chunk-TTVNTTW5.mjs";
7
+ import {
8
+ HEADER_NAMES
9
+ } from "./chunk-RQAAYOY6.mjs";
10
+ import {
11
+ utils
12
+ } from "./chunk-2ID24RPE.mjs";
13
+
14
+ // src/Requests/ExecutableRequest.ts
15
+ var defaultTransport = new XhrTransport();
16
+ var ExecutableRequest = class extends RequestBase {
17
+ /**
18
+ * Creates an executable request with authentication and SDK-wide execution options.
19
+ *
20
+ * @param requestOptions Request URL, query, data, and callback options.
21
+ * @param token Optional bearer token or legacy authorization header value.
22
+ * @param sdkOptions SDK-wide handlers and request behavior options.
23
+ */
24
+ constructor(requestOptions, token, sdkOptions) {
25
+ super(requestOptions);
26
+ this.token = token;
27
+ this.successCb = this.successCb || sdkOptions.handlers?.successCb;
28
+ this.failureCb = this.failureCb || sdkOptions.handlers?.failureCb;
29
+ this.enableUnlimitedChoices = sdkOptions.enableUnlimitedChoices;
30
+ this.integrationMode = sdkOptions.integrationMode;
31
+ this.transport = sdkOptions.transport ?? defaultTransport;
32
+ }
33
+ /**
34
+ * Sends the request asynchronously.
35
+ *
36
+ * Successful responses are passed to `successCb`; HTTP errors are normalized and passed to
37
+ * `failureCb`. The method returns immediately and does not return a promise or response value.
38
+ */
39
+ execute() {
40
+ this.transport.send(
41
+ {
42
+ method: this.getMethod(),
43
+ url: this.buildUrl(),
44
+ headers: this.buildHeaders(),
45
+ body: utils.serializeToJSON(this.getBody()),
46
+ onUploadProgress: utils.isFunction(this.progressCb) ? (event) => this.progressCb(this.getProgressPayload(event)) : void 0
47
+ },
48
+ (response) => this.handleResponse(response)
49
+ );
50
+ }
51
+ /** Maps the transport's upload progress event to the value passed to `progressCb`. */
52
+ getProgressPayload(event) {
53
+ return event;
54
+ }
55
+ handleResponse(response) {
56
+ if (response.status > 0) {
57
+ let data = this.parseResponse(response);
58
+ if (response.status >= 200 && response.status <= 206) {
59
+ if (this.successCb && utils.isFunction(this.successCb)) {
60
+ this.successCb(data);
61
+ }
62
+ } else if (response.status >= 400) {
63
+ if (utils.isString(data)) {
64
+ data = {
65
+ message: data
66
+ };
67
+ }
68
+ data.status = response.status;
69
+ if (this.failureCb && utils.isFunction(this.failureCb)) {
70
+ this.failureCb(data);
71
+ }
72
+ }
73
+ }
74
+ }
75
+ buildHeaders() {
76
+ const headers = { ...this.getHeaders() };
77
+ if (this.token) {
78
+ if (typeof this.token === "string") {
79
+ headers[HEADER_NAMES.authorization] = this.token;
80
+ } else {
81
+ headers[HEADER_NAMES.authorization] = this.token.type + " " + this.token.value;
82
+ }
83
+ }
84
+ if (this.enableUnlimitedChoices) {
85
+ headers[HEADER_NAMES.choicesBinaryRepresentation] = "true";
86
+ }
87
+ if (this.integrationMode) {
88
+ headers[HEADER_NAMES.integrationMode] = "true";
89
+ }
90
+ headers[HEADER_NAMES.serviceRequest] = "true";
91
+ return headers;
92
+ }
93
+ };
94
+
95
+ export {
96
+ ExecutableRequest
97
+ };
98
+ //# sourceMappingURL=chunk-FUFBYOIF.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Requests/ExecutableRequest.ts"],
4
+ "sourcesContent": ["import { RequestBase, RequestOptionsBaseExtended } from \"./RequestBase\";\nimport { utils } from \"../utils\";\nimport { HEADER_NAMES } from \"../constants\";\nimport { AuthorizationToken, SDKOptions } from \"../Sitefinity\";\nimport { HttpTransport, HttpTransportProgressEvent, HttpTransportResponse } from \"../Transport/HttpTransport\";\nimport { XhrTransport } from \"../Transport/XhrTransport\";\n\nconst defaultTransport = new XhrTransport();\n\n/**\n * Request base class that executes an asynchronous HTTP request through the configured transport.\n *\n * This is an advanced API. Execution uses callbacks rather than promises and invokes the configured\n * success, failure, and progress handlers when appropriate.\n */\nexport class ExecutableRequest extends RequestBase {\n private token: AuthorizationToken;\n private enableUnlimitedChoices: boolean;\n private integrationMode: boolean;\n private transport: HttpTransport;\n\n /**\n * Creates an executable request with authentication and SDK-wide execution options.\n *\n * @param requestOptions Request URL, query, data, and callback options.\n * @param token Optional bearer token or legacy authorization header value.\n * @param sdkOptions SDK-wide handlers and request behavior options.\n */\n constructor(requestOptions: RequestOptionsBaseExtended, token: AuthorizationToken, sdkOptions: SDKOptions) {\n super(requestOptions);\n this.token = token;\n this.successCb = this.successCb || sdkOptions.handlers?.successCb;\n this.failureCb = this.failureCb || sdkOptions.handlers?.failureCb;\n this.enableUnlimitedChoices = sdkOptions.enableUnlimitedChoices;\n this.integrationMode = sdkOptions.integrationMode;\n this.transport = sdkOptions.transport ?? defaultTransport;\n }\n\n /**\n * Sends the request asynchronously.\n *\n * Successful responses are passed to `successCb`; HTTP errors are normalized and passed to\n * `failureCb`. The method returns immediately and does not return a promise or response value.\n */\n execute() {\n this.transport.send(\n {\n method: this.getMethod(),\n url: this.buildUrl(),\n headers: this.buildHeaders(),\n body: utils.serializeToJSON(this.getBody()),\n onUploadProgress: utils.isFunction(this.progressCb)\n ? (event) => this.progressCb(this.getProgressPayload(event))\n : undefined\n },\n (response) => this.handleResponse(response)\n );\n }\n\n /** Maps the transport's upload progress event to the value passed to `progressCb`. */\n protected getProgressPayload(event: HttpTransportProgressEvent): object {\n return event;\n }\n\n private handleResponse(response: HttpTransportResponse) {\n if (response.status > 0) {\n let data = this.parseResponse(response);\n\n if (response.status >= 200 && response.status <= 206) {\n if (this.successCb && utils.isFunction(this.successCb)) {\n this.successCb(data);\n }\n }\n else if (response.status >= 400) {\n // When the data is string, we save the string as message\n // and convert the data to normal object with message property\n if (utils.isString(data)) {\n data = {\n message: data\n };\n }\n\n data.status = response.status;\n\n // in case of errors we would like there to be one handler for all of the errors\n if (this.failureCb && utils.isFunction(this.failureCb)) {\n this.failureCb(data);\n }\n }\n }\n }\n\n private buildHeaders(): { [key: string]: string } {\n // Copied because getHeaders() can return the caller's shared additionalHeaders object.\n const headers = { ...this.getHeaders() };\n\n if (this.token) {\n if (typeof this.token === \"string\") {\n // for backward compatibility\n headers[HEADER_NAMES.authorization] = this.token;\n } else {\n headers[HEADER_NAMES.authorization] = this.token.type + \" \" + this.token.value;\n }\n }\n\n if (this.enableUnlimitedChoices) {\n headers[HEADER_NAMES.choicesBinaryRepresentation] = \"true\";\n }\n\n if (this.integrationMode) {\n headers[HEADER_NAMES.integrationMode] = \"true\";\n }\n\n // for backward compatibility\n headers[HEADER_NAMES.serviceRequest] = \"true\";\n\n return headers;\n }\n}\n\n/**\n * Default success and failure callbacks for SDK requests.\n */\nexport interface ResponseHandlers {\n /** Callback invoked with the parsed successful response. */\n successCb?: Function;\n /** Callback invoked with the parsed error response and HTTP status. */\n failureCb?: Function;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;AAOA,IAAM,mBAAmB,IAAI,aAAa;AAQnC,IAAM,oBAAN,cAAgC,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAa/C,YAAY,gBAA4C,OAA2B,YAAwB;AACvG,UAAM,cAAc;AACpB,SAAK,QAAQ;AACb,SAAK,YAAY,KAAK,aAAa,WAAW,UAAU;AACxD,SAAK,YAAY,KAAK,aAAa,WAAW,UAAU;AACxD,SAAK,yBAAyB,WAAW;AACzC,SAAK,kBAAkB,WAAW;AAClC,SAAK,YAAY,WAAW,aAAa;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU;AACN,SAAK,UAAU;AAAA,MACX;AAAA,QACI,QAAQ,KAAK,UAAU;AAAA,QACvB,KAAK,KAAK,SAAS;AAAA,QACnB,SAAS,KAAK,aAAa;AAAA,QAC3B,MAAM,MAAM,gBAAgB,KAAK,QAAQ,CAAC;AAAA,QAC1C,kBAAkB,MAAM,WAAW,KAAK,UAAU,IAC5C,CAAC,UAAU,KAAK,WAAW,KAAK,mBAAmB,KAAK,CAAC,IACzD;AAAA,MACV;AAAA,MACA,CAAC,aAAa,KAAK,eAAe,QAAQ;AAAA,IAC9C;AAAA,EACJ;AAAA;AAAA,EAGU,mBAAmB,OAA2C;AACpE,WAAO;AAAA,EACX;AAAA,EAEQ,eAAe,UAAiC;AACpD,QAAI,SAAS,SAAS,GAAG;AACrB,UAAI,OAAO,KAAK,cAAc,QAAQ;AAEtC,UAAI,SAAS,UAAU,OAAO,SAAS,UAAU,KAAK;AAClD,YAAI,KAAK,aAAa,MAAM,WAAW,KAAK,SAAS,GAAG;AACpD,eAAK,UAAU,IAAI;AAAA,QACvB;AAAA,MACJ,WACS,SAAS,UAAU,KAAK;AAG7B,YAAI,MAAM,SAAS,IAAI,GAAG;AACtB,iBAAO;AAAA,YACH,SAAS;AAAA,UACb;AAAA,QACJ;AAEA,aAAK,SAAS,SAAS;AAGvB,YAAI,KAAK,aAAa,MAAM,WAAW,KAAK,SAAS,GAAG;AACpD,eAAK,UAAU,IAAI;AAAA,QACvB;AAAA,MACJ;AAAA,IACJ;AAAA,EACJ;AAAA,EAEQ,eAA0C;AAE9C,UAAM,UAAU,EAAE,GAAG,KAAK,WAAW,EAAE;AAEvC,QAAI,KAAK,OAAO;AACZ,UAAI,OAAO,KAAK,UAAU,UAAU;AAEhC,gBAAQ,aAAa,aAAa,IAAI,KAAK;AAAA,MAC/C,OAAO;AACH,gBAAQ,aAAa,aAAa,IAAI,KAAK,MAAM,OAAO,MAAM,KAAK,MAAM;AAAA,MAC7E;AAAA,IACJ;AAEA,QAAI,KAAK,wBAAwB;AAC7B,cAAQ,aAAa,2BAA2B,IAAI;AAAA,IACxD;AAEA,QAAI,KAAK,iBAAiB;AACtB,cAAQ,aAAa,eAAe,IAAI;AAAA,IAC5C;AAGA,YAAQ,aAAa,cAAc,IAAI;AAEvC,WAAO;AAAA,EACX;AACJ;",
6
+ "names": []
7
+ }