@progress/sitefinity-webservices-sdk 1.1.16 → 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 (233) 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/.github/copilot-instructions.md +0 -72
  80. package/.github/instructions/sitefinity-webservices-sdk.instructions.md +0 -53
  81. package/config/helpers.ts +0 -8
  82. package/config/webpack.common.ts +0 -39
  83. package/config/webpack.dev.ts +0 -37
  84. package/config/webpack.prod.ts +0 -17
  85. package/dist/docs/.nojekyll +0 -1
  86. package/dist/docs/assets/highlight.css +0 -71
  87. package/dist/docs/assets/main.js +0 -58
  88. package/dist/docs/assets/search.js +0 -1
  89. package/dist/docs/assets/style.css +0 -1280
  90. package/dist/docs/classes/BlobBuilder.BlobBuilder.html +0 -137
  91. package/dist/docs/classes/Data.Data.html +0 -387
  92. package/dist/docs/classes/Expression.BinaryExpression.html +0 -184
  93. package/dist/docs/classes/Expression.ComplexExpression.html +0 -146
  94. package/dist/docs/classes/Expression.ExpressionBase.html +0 -125
  95. package/dist/docs/classes/OrderProperty.OrderProperty.html +0 -151
  96. package/dist/docs/classes/Query.Query.html +0 -353
  97. package/dist/docs/classes/QueryBase.QueryBase.html +0 -185
  98. package/dist/docs/classes/QueryBuilder.QueryBuilder.html +0 -206
  99. package/dist/docs/classes/Requests_BatchRequest.BatchRequest.html +0 -731
  100. package/dist/docs/classes/Requests_BatchRequest.Transaction.html +0 -332
  101. package/dist/docs/classes/Requests_ExecutableRequest.ExecutableRequest.html +0 -340
  102. package/dist/docs/classes/Requests_Request.CommitChunksRequest.html +0 -303
  103. package/dist/docs/classes/Requests_Request.CreateRelatedRequest.html +0 -310
  104. package/dist/docs/classes/Requests_Request.CreateRequest.html +0 -307
  105. package/dist/docs/classes/Requests_Request.DeleteRelatedByIdRequest.html +0 -309
  106. package/dist/docs/classes/Requests_Request.DeleteRelatedRequest.html +0 -302
  107. package/dist/docs/classes/Requests_Request.DeleteRequest.html +0 -298
  108. package/dist/docs/classes/Requests_Request.GetByIdRequest.html +0 -298
  109. package/dist/docs/classes/Requests_Request.GetRelatedByIdRequest.html +0 -309
  110. package/dist/docs/classes/Requests_Request.GetRelatedRequest.html +0 -302
  111. package/dist/docs/classes/Requests_Request.GetRequest.html +0 -295
  112. package/dist/docs/classes/Requests_Request.UpdateRequest.html +0 -309
  113. package/dist/docs/classes/Requests_Request.UploadChunkRequest.html +0 -359
  114. package/dist/docs/classes/Requests_Request.UploadRequest.html +0 -329
  115. package/dist/docs/classes/Requests_RequestBase.RequestBase.html +0 -275
  116. package/dist/docs/classes/Requests_RequestFactory.RequestFactory.html +0 -344
  117. package/dist/docs/classes/Sitefinity.Sitefinity.html +0 -188
  118. package/dist/docs/classes/WhereQuery.WhereQuery.html +0 -436
  119. package/dist/docs/classes/chunk_upload_chunk_upload_sdk.ChunkUploadSdk.html +0 -231
  120. package/dist/docs/classes/chunk_upload_chunked_file_upload_utilities.ChunkedFileUploadUtilities.html +0 -131
  121. package/dist/docs/classes/utils.utils.html +0 -303
  122. package/dist/docs/index.html +0 -129
  123. package/dist/docs/interfaces/Data.CreateRelatedRequestOptions.html +0 -155
  124. package/dist/docs/interfaces/Data.CreateRequestOptions.html +0 -153
  125. package/dist/docs/interfaces/Data.OperationsRequestOptions.html +0 -145
  126. package/dist/docs/interfaces/Data.PropertyRequestOptions.html +0 -149
  127. package/dist/docs/interfaces/Data.RequestOptionsBase.html +0 -136
  128. package/dist/docs/interfaces/Data.SingleRelatedItemRequestOptions.html +0 -155
  129. package/dist/docs/interfaces/Data.UpdateRequestOptions.html +0 -155
  130. package/dist/docs/interfaces/Data.UploadRequestOptions.html +0 -169
  131. package/dist/docs/interfaces/Requests_BatchRequest.BatchCreateRelatedRequestOptions.html +0 -161
  132. package/dist/docs/interfaces/Requests_BatchRequest.BatchCreateRequestOptions.html +0 -153
  133. package/dist/docs/interfaces/Requests_BatchRequest.BatchPropertyRequestOptions.html +0 -153
  134. package/dist/docs/interfaces/Requests_BatchRequest.BatchRequestOptionsBase.html +0 -145
  135. package/dist/docs/interfaces/Requests_BatchRequest.BatchRequestOptionsExtended.html +0 -153
  136. package/dist/docs/interfaces/Requests_BatchRequest.BatchSingleItemRequestOptions.html +0 -145
  137. package/dist/docs/interfaces/Requests_BatchRequest.BatchSingleRelatedItemRequestOptions.html +0 -161
  138. package/dist/docs/interfaces/Requests_BatchRequest.BatchUpdateRequestOptions.html +0 -161
  139. package/dist/docs/interfaces/Requests_ExecutableRequest.ResponseHandlers.html +0 -98
  140. package/dist/docs/interfaces/Requests_Request.CommitChunksRequestOptionsExtended.html +0 -215
  141. package/dist/docs/interfaces/Requests_Request.PostRequestOptionsExtended.html +0 -159
  142. package/dist/docs/interfaces/Requests_Request.PutRequestOptionsExtended.html +0 -161
  143. package/dist/docs/interfaces/Requests_Request.RelatedByIdRequestOptionsExtended.html +0 -169
  144. package/dist/docs/interfaces/Requests_Request.RelatedRequestOptionsExtended.html +0 -163
  145. package/dist/docs/interfaces/Requests_Request.UploadChunkRequestOptionsExtended.html +0 -217
  146. package/dist/docs/interfaces/Requests_Request.UploadRequestOptionsExtended.html +0 -180
  147. package/dist/docs/interfaces/Requests_RequestBase.RequestOptionsBaseExtended.html +0 -148
  148. package/dist/docs/interfaces/Sitefinity.SDKOptions.html +0 -128
  149. package/dist/docs/interfaces/Sitefinity.Token.html +0 -94
  150. package/dist/docs/interfaces/Sitefinity.TypeOptions.html +0 -160
  151. package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.ChunkUploadInfoDTO.html +0 -159
  152. package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.ChunkUploadResult.html +0 -111
  153. package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.CleanUpChunksRequestOptions.html +0 -171
  154. package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.CommitChunksRequestOptions.html +0 -204
  155. package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.GetChunkUploadInfoRequestOptions.html +0 -166
  156. package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.UploadChunkRequestOptions.html +0 -206
  157. package/dist/docs/interfaces/chunk_upload_chunked_file_upload_utilities.ChunkFileResult.html +0 -101
  158. package/dist/docs/interfaces/chunk_upload_chunked_file_upload_utilities.FileUploadChunk.html +0 -94
  159. package/dist/docs/modules/BlobBuilder.html +0 -73
  160. package/dist/docs/modules/Data.html +0 -92
  161. package/dist/docs/modules/Expression.html +0 -77
  162. package/dist/docs/modules/OrderProperty.html +0 -73
  163. package/dist/docs/modules/Query.html +0 -73
  164. package/dist/docs/modules/QueryBase.html +0 -73
  165. package/dist/docs/modules/QueryBuilder.html +0 -73
  166. package/dist/docs/modules/Requests_BatchRequest.html +0 -94
  167. package/dist/docs/modules/Requests_ExecutableRequest.html +0 -78
  168. package/dist/docs/modules/Requests_Request.html +0 -114
  169. package/dist/docs/modules/Requests_RequestBase.html +0 -78
  170. package/dist/docs/modules/Requests_RequestFactory.html +0 -73
  171. package/dist/docs/modules/Sitefinity.html +0 -82
  172. package/dist/docs/modules/WhereQuery.html +0 -73
  173. package/dist/docs/modules/chunk_upload_chunk_upload_sdk.html +0 -88
  174. package/dist/docs/modules/chunk_upload_chunked_file_upload_utilities.html +0 -80
  175. package/dist/docs/modules/constants.html +0 -83
  176. package/dist/docs/modules/utils.html +0 -73
  177. package/dist/docs/modules.html +0 -80
  178. package/dist/docs/variables/constants.CONTENT_TYPES.html +0 -76
  179. package/dist/docs/variables/constants.EXPRESSION_TYPE.html +0 -106
  180. package/dist/docs/variables/constants.HEADER_NAMES.html +0 -102
  181. package/dist/docs/variables/constants.HTTP_METHODS.html +0 -84
  182. package/dist/docs/variables/constants.ODATA_PARAMS.html +0 -90
  183. package/dist/docs/variables/constants.SF_PARAMS.html +0 -84
  184. package/dist/samples.html +0 -625
  185. package/dist/sitefinity-webservices-sdk.js +0 -3243
  186. package/dist/sitefinity-webservices-sdk.js.map +0 -1
  187. package/dist/sitefinity-webservices-sdk.min.js +0 -1
  188. package/dist/src/BlobBuilder.d.ts +0 -14
  189. package/dist/src/Data.d.ts +0 -154
  190. package/dist/src/Data.spec.d.ts +0 -1
  191. package/dist/src/Expression.d.ts +0 -19
  192. package/dist/src/OrderProperty.d.ts +0 -8
  193. package/dist/src/Query.d.ts +0 -59
  194. package/dist/src/QueryBase.d.ts +0 -18
  195. package/dist/src/QueryBuilder.d.ts +0 -13
  196. package/dist/src/Requests/BatchRequest.d.ts +0 -146
  197. package/dist/src/Requests/ExecutableRequest.d.ts +0 -22
  198. package/dist/src/Requests/Request.d.ts +0 -132
  199. package/dist/src/Requests/RequestBase.d.ts +0 -27
  200. package/dist/src/Requests/request.spec.d.ts +0 -1
  201. package/dist/src/Sitefinity.d.ts +0 -75
  202. package/dist/src/Sitefinity.spec.d.ts +0 -1
  203. package/dist/src/WhereQuery.d.ts +0 -72
  204. package/dist/src/chunk-upload/chunk-upload.sdk.d.ts +0 -295
  205. package/dist/src/chunk-upload/chunk-upload.sdk.spec.d.ts +0 -1
  206. package/dist/src/chunk-upload/chunked-file-upload.utilities.d.ts +0 -13
  207. package/dist/src/utils.d.ts +0 -16
  208. package/karma.conf.js +0 -29
  209. package/sitefinity-webservices-sdk.ts +0 -15
  210. package/src/BlobBuilder.ts +0 -20
  211. package/src/Data.spec.ts +0 -160
  212. package/src/Data.ts +0 -418
  213. package/src/Expression.ts +0 -36
  214. package/src/OrderProperty.ts +0 -39
  215. package/src/Query.ts +0 -106
  216. package/src/QueryBase.ts +0 -57
  217. package/src/QueryBuilder.ts +0 -180
  218. package/src/Requests/BatchRequest.ts +0 -807
  219. package/src/Requests/ExecutableRequest.ts +0 -117
  220. package/src/Requests/Request.ts +0 -327
  221. package/src/Requests/RequestBase.ts +0 -163
  222. package/src/Requests/RequestFactory.ts +0 -75
  223. package/src/Requests/request.spec.ts +0 -154
  224. package/src/Sitefinity.spec.ts +0 -483
  225. package/src/Sitefinity.ts +0 -125
  226. package/src/WhereQuery.ts +0 -145
  227. package/src/chunk-upload/chunk-upload.sdk.spec.ts +0 -347
  228. package/src/chunk-upload/chunk-upload.sdk.ts +0 -439
  229. package/src/chunk-upload/chunked-file-upload.utilities.ts +0 -64
  230. package/src/constants.ts +0 -66
  231. package/src/utils.ts +0 -125
  232. package/template.html +0 -625
  233. 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": ";;;;;;;;;;;;;;;;;;;AAUO,IAAM,eAAN,MAAmB;AAAA;AAAA,EAEtB,YAAoB,OAAc;AAAd;AAAA,EACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcA,QAAmC;AAC/B,UAAM,kBAAkB,CAAC;AACzB,UAAM,cAAc,KAAK,MAAM;AAC/B,QAAI,uBAAuB,YAAY;AACnC,YAAM,aAAa,YAAY,cAAc;AAC7C,UAAI,sBAAsB,mBAAmB;AACzC,cAAM,SAAS,KAAK,uBAAuB,YAAY,IAAI;AAC3D,YAAI,QAAQ;AACR,0BAAgB,aAAa,OAAO,IAAI;AAAA,QAC5C;AAAA,MACJ;AAAA,IACJ;AAEA,UAAM,eAAe,KAAK,MAAM;AAChC,QAAI,wBAAwB,OAAO;AAC/B,sBAAgB,aAAa,OAAO,IAAI,aAAa,KAAK,IAAI;AAAA,IAClE;AAEA,UAAM,eAAe,KAAK,MAAM;AAChC,QAAI,wBAAwB;AACxB,sBAAgB,aAAa,OAAO,IAAI,aAAa,KAAK,IAAI;AAElE,UAAM,gBAAgB,KAAK,MAAM;AACjC,QAAI,yBAAyB,OAAO;AAChC,YAAM,QAAQ,CAAC;AACf,iBAAW,KAAK,eAAe;AAC3B,YAAI,cAAc,CAAC,aAAa;AAC5B,gBAAM,KAAK,cAAc,CAAC,EAAE,SAAS,CAAC;AAAA,MAC9C;AACA,sBAAgB,aAAa,QAAQ,IAAI,MAAM,KAAK,IAAI;AAAA,IAC5D;AAEA,UAAM,OAAO,KAAK,MAAM;AACxB,QAAI,MAAM,SAAS,IAAI;AACnB,sBAAgB,aAAa,IAAI,IAAI;AAEzC,UAAM,OAAO,KAAK,MAAM;AACxB,QAAI,MAAM,SAAS,IAAI;AACnB,sBAAgB,aAAa,KAAK,IAAI;AAE1C,UAAM,SAAS,KAAK,MAAM;AAC1B,QAAI;AACA,sBAAgB,aAAa,OAAO,IAAI;AAE5C,QAAI,KAAK,MAAM,gBAAgB,MAAM;AACjC,sBAAgB,aAAa,MAAM,IAAI,KAAK,MAAM;AAAA,IACtD;AAEA,WAAO;AAAA,EACX;AAAA,EAEQ,uBAAuB,YAA+B,QAAwB;AAClF,QAAI,EAAE,sBAAsB;AACxB,YAAM,IAAI,MAAM,4BAA4B;AAEhD,QAAI,UAAU;AACd,QAAI,SAAS;AACb,UAAM,iBAAiB,WAAW,eAAe;AACjD,QAAI,CAAC,eAAe,QAAQ;AACxB,aAAO;AAAA,IACX;AAEA,WAAO,MAAM;AACT,YAAM,aAAa,eAAe,OAAO;AACzC,UAAI,sBAAsB,kBAAkB;AACxC,kBAAU,KAAK,sBAAsB,UAAU;AAAA,MACnD,WACS,sBAAsB,mBAAmB;AAC9C,cAAM,gBAAgB,KAAK,uBAAuB,YAAY,WAAW,IAAI;AAC7E,YAAI,eAAe;AACf,oBAAU,MAAM,gBAAgB;AAAA,QACpC;AAAA,MACJ;AAEA,UAAI,WAAW,QAAQ,MAAM,gBAAgB;AACzC,iBAAS,WAAW,QAAQ,IAAI,MAAM;AAE1C,UAAI,WAAW,QAAQ,MAAM,gBAAgB,KAAK;AAC9C,cAAM,UAAU,CAAC;AACjB,iBAAS,QAAQ,GAAG,QAAQ,eAAe,QAAQ,SAAS;AACxD,cAAI,eAAe,KAAK,EAAE,QAAQ,gBAAgB,YAAY,eAAe,KAAK,EAAE,QAAQ,gBAAgB,cAAc,eAAe,KAAK,EAAE,QAAQ,gBAAgB;AACpK,oBAAQ,KAAK,eAAe,KAAK,EAAE,KAAK,YAAY,IAAI,UAAW,eAAe,KAAK,EAAuB,WAAW,IAAI;AAAA;AAE7H,oBAAQ,KAAK,OAAO,eAAe,KAAK,EAAE,KAAK,YAAY,IAAI,MAAM,KAAK,UAAW,eAAe,KAAK,EAAuB,QAAQ,CAAC;AAAA,QACjJ;AACA,iBAAU,WAAgC,YAAY,MAAM,WAAW,QAAQ,IAAI,QAAQ,QAAQ,KAAK,MAAM,SAAS,GAAG,IAAI;AAAA,MAClI;AAEA;AACA,UAAI,WAAW,eAAe;AAC1B;AAEJ,gBAAU,MAAM,WAAW,QAAQ,IAAI;AAAA,IAC3C;AAEA,WAAO;AAAA,EACX;AAAA,EAEQ,sBAAsB,YAAsC;AAChE,QAAI,SAAiB;AACrB,UAAM,OAAO,WAAW,QAAQ;AAChC,YAAQ,MAAM;AAAA,MACd,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB,IAAI;AACrB,cAAM,WAAW,WAAW,YAAY;AACxC,iBAAS,IAAI,WAAW,aAAa,CAAC,IAAI,IAAI,IAAI,KAAK,UAAU,QAAQ,CAAC;AAC1E;AAAA,MACJ;AAAA,MACA,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB;AAAA,MACrB,KAAK,gBAAgB,UAAU;AAC3B,cAAM,sBAAsB,KAAK,2BAA2B,YAAY,WAAW,aAAa,CAAC;AACjG,cAAM,qBAAsB,KAAK,UAAU,WAAW,YAAY,GAAG,IAAI;AACzE,cAAM,kBAAkB,KAAK,2BAA2B,YAAY,kBAAkB;AAEtF,iBAAS,GAAG,KAAK,YAAY,CAAC,IAAI,mBAAmB,KAAK,eAAe;AACzE;AAAA,MACJ;AAAA,MACA,KAAK,gBAAgB,IAAI;AACrB,cAAM,aAAa,WAAW,YAAY;AAC1C,YAAI,CAAC,MAAM,QAAQ,UAAU,GAAG;AAC5B,gBAAM,IAAI,MAAM,4BAA4B;AAAA,QAChD;AAEA,iBAAS,GAAG,WAAW,aAAa,CAAC,QAAQ,WAAW,KAAK,IAAI,CAAC;AAClE;AAAA,MACJ;AAAA,MACA,SAAS;AACL,cAAM,MAAM,wBAAwB,IAAI;AACxC,cAAM,IAAI,MAAM,GAAG;AAAA,MACvB;AAAA,IACA;AAEA,WAAO;AAAA,EACX;AAAA,EAEQ,2BAA2B,YAA8B,OAAuB;AACpF,QAAI,WAAW,gBAAgB,GAAG;AAC9B,aAAO;AAAA,IACX;AAEA,WAAO,WAAW,KAAK;AAAA,EAC3B;AAAA,EAEQ,UAAU,UAAe,gBAAgB,OAAe;AAC5D,QAAI,KAAK,OAAO,QAAQ,KAAK,CAAC;AAC1B,aAAO;AAEX,QAAI,YAAY;AACZ,aAAO;AAEX,eAAW,SAAS,QAAQ,aAAa,SAAU,IAAI;AACnD,aAAO,mBAAmB,EAAE;AAAA,IAChC,CAAC;AAGD,eAAW,SAAS,QAAQ,MAAM,IAAI;AAEtC,WAAO,MAAM,WAAW;AAAA,EAC5B;AAAA,EAEQ,OAAO,UAA2B;AACtC,WAAO,gFAAgF,KAAK,QAAQ;AAAA,EACxG;AACJ;",
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
+ }