@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.
- package/README.md +84 -51
- package/esm/chunks/chunk-2ID24RPE.mjs +179 -0
- package/esm/chunks/chunk-2ID24RPE.mjs.map +7 -0
- package/esm/chunks/chunk-AHDZ2CWQ.mjs +93 -0
- package/esm/chunks/chunk-AHDZ2CWQ.mjs.map +7 -0
- package/esm/chunks/chunk-BFLQBM7R.mjs +136 -0
- package/esm/chunks/chunk-BFLQBM7R.mjs.map +7 -0
- package/esm/chunks/chunk-CMGV26CS.mjs +66 -0
- package/esm/chunks/chunk-CMGV26CS.mjs.map +7 -0
- package/esm/chunks/chunk-DHWDJAGV.mjs +180 -0
- package/esm/chunks/chunk-DHWDJAGV.mjs.map +7 -0
- package/esm/chunks/chunk-EH4CERVO.mjs +82 -0
- package/esm/chunks/chunk-EH4CERVO.mjs.map +7 -0
- package/esm/chunks/chunk-F4CWOE7M.mjs +57 -0
- package/esm/chunks/chunk-F4CWOE7M.mjs.map +7 -0
- package/esm/chunks/chunk-FUFBYOIF.mjs +98 -0
- package/esm/chunks/chunk-FUFBYOIF.mjs.map +7 -0
- package/esm/chunks/chunk-J2B7UDVZ.mjs +132 -0
- package/esm/chunks/chunk-J2B7UDVZ.mjs.map +7 -0
- package/esm/chunks/chunk-L3IMDFA5.mjs +1 -0
- package/esm/chunks/chunk-L3IMDFA5.mjs.map +7 -0
- package/esm/chunks/chunk-NNYY2VBC.mjs +383 -0
- package/esm/chunks/chunk-NNYY2VBC.mjs.map +7 -0
- package/esm/chunks/chunk-PI55MBSL.mjs +256 -0
- package/esm/chunks/chunk-PI55MBSL.mjs.map +7 -0
- package/esm/chunks/chunk-PXPK2IV6.mjs +568 -0
- package/esm/chunks/chunk-PXPK2IV6.mjs.map +7 -0
- package/esm/chunks/chunk-QPSEKUOI.mjs +35 -0
- package/esm/chunks/chunk-QPSEKUOI.mjs.map +7 -0
- package/esm/chunks/chunk-RQAAYOY6.mjs +72 -0
- package/esm/chunks/chunk-RQAAYOY6.mjs.map +7 -0
- package/esm/chunks/chunk-TTVNTTW5.mjs +145 -0
- package/esm/chunks/chunk-TTVNTTW5.mjs.map +7 -0
- package/esm/chunks/chunk-VLDX2FH2.mjs +235 -0
- package/esm/chunks/chunk-VLDX2FH2.mjs.map +7 -0
- package/esm/chunks/chunk-VWT2RJET.mjs +102 -0
- package/esm/chunks/chunk-VWT2RJET.mjs.map +7 -0
- package/esm/chunks/chunk-W2OWM3L7.mjs +19 -0
- package/esm/chunks/chunk-W2OWM3L7.mjs.map +7 -0
- package/esm/chunks/chunk-WX5J7F5D.mjs +43 -0
- package/esm/chunks/chunk-WX5J7F5D.mjs.map +7 -0
- package/esm/chunks/chunk-YB2LMPUX.mjs +54 -0
- package/esm/chunks/chunk-YB2LMPUX.mjs.map +7 -0
- package/package.json +67 -36
- package/sitefinity-webservices-sdk.cjs +2761 -0
- package/sitefinity-webservices-sdk.cjs.map +7 -0
- package/sitefinity-webservices-sdk.d.mts +1 -0
- package/{dist/sitefinity-webservices-sdk.d.ts → sitefinity-webservices-sdk.d.ts} +6 -0
- package/sitefinity-webservices-sdk.global.d.ts +5 -0
- package/sitefinity-webservices-sdk.js +2764 -0
- package/sitefinity-webservices-sdk.js.map +7 -0
- package/sitefinity-webservices-sdk.min.js +3 -0
- package/sitefinity-webservices-sdk.mjs +124 -0
- package/sitefinity-webservices-sdk.mjs.map +7 -0
- package/src/BlobBuilder.d.ts +12 -0
- package/src/Data.d.ts +259 -0
- package/src/Expression.d.ts +37 -0
- package/src/OrderProperty.d.ts +24 -0
- package/src/Query.d.ts +104 -0
- package/src/QueryBase.d.ts +40 -0
- package/src/QueryBuilder.d.ts +29 -0
- package/src/Requests/BatchRequest.d.ts +174 -0
- package/src/Requests/ExecutableRequest.d.ts +43 -0
- package/src/Requests/Request.d.ts +225 -0
- package/src/Requests/RequestBase.d.ts +58 -0
- package/{dist/src → src}/Requests/RequestFactory.d.ts +24 -2
- package/src/Sitefinity.d.ts +141 -0
- package/src/Transport/FetchTransport.d.ts +17 -0
- package/src/Transport/HttpTransport.d.ts +69 -0
- package/src/Transport/XhrTransport.d.ts +8 -0
- package/src/WhereQuery.d.ts +88 -0
- package/src/chunk-upload/chunk-upload.sdk.d.ts +305 -0
- package/src/chunk-upload/chunked-file-upload.utilities.d.ts +58 -0
- package/{dist/src → src}/constants.d.ts +21 -0
- package/src/utils.d.ts +103 -0
- package/.editorconfig +0 -29
- package/.eslintignore +0 -4
- package/.eslintrc.js +0 -40
- package/.github/copilot-instructions.md +0 -72
- package/.github/instructions/sitefinity-webservices-sdk.instructions.md +0 -53
- package/config/helpers.ts +0 -8
- package/config/webpack.common.ts +0 -39
- package/config/webpack.dev.ts +0 -37
- package/config/webpack.prod.ts +0 -17
- package/dist/docs/.nojekyll +0 -1
- package/dist/docs/assets/highlight.css +0 -71
- package/dist/docs/assets/main.js +0 -58
- package/dist/docs/assets/search.js +0 -1
- package/dist/docs/assets/style.css +0 -1280
- package/dist/docs/classes/BlobBuilder.BlobBuilder.html +0 -137
- package/dist/docs/classes/Data.Data.html +0 -387
- package/dist/docs/classes/Expression.BinaryExpression.html +0 -184
- package/dist/docs/classes/Expression.ComplexExpression.html +0 -146
- package/dist/docs/classes/Expression.ExpressionBase.html +0 -125
- package/dist/docs/classes/OrderProperty.OrderProperty.html +0 -151
- package/dist/docs/classes/Query.Query.html +0 -353
- package/dist/docs/classes/QueryBase.QueryBase.html +0 -185
- package/dist/docs/classes/QueryBuilder.QueryBuilder.html +0 -206
- package/dist/docs/classes/Requests_BatchRequest.BatchRequest.html +0 -731
- package/dist/docs/classes/Requests_BatchRequest.Transaction.html +0 -332
- package/dist/docs/classes/Requests_ExecutableRequest.ExecutableRequest.html +0 -340
- package/dist/docs/classes/Requests_Request.CommitChunksRequest.html +0 -303
- package/dist/docs/classes/Requests_Request.CreateRelatedRequest.html +0 -310
- package/dist/docs/classes/Requests_Request.CreateRequest.html +0 -307
- package/dist/docs/classes/Requests_Request.DeleteRelatedByIdRequest.html +0 -309
- package/dist/docs/classes/Requests_Request.DeleteRelatedRequest.html +0 -302
- package/dist/docs/classes/Requests_Request.DeleteRequest.html +0 -298
- package/dist/docs/classes/Requests_Request.GetByIdRequest.html +0 -298
- package/dist/docs/classes/Requests_Request.GetRelatedByIdRequest.html +0 -309
- package/dist/docs/classes/Requests_Request.GetRelatedRequest.html +0 -302
- package/dist/docs/classes/Requests_Request.GetRequest.html +0 -295
- package/dist/docs/classes/Requests_Request.UpdateRequest.html +0 -309
- package/dist/docs/classes/Requests_Request.UploadChunkRequest.html +0 -359
- package/dist/docs/classes/Requests_Request.UploadRequest.html +0 -329
- package/dist/docs/classes/Requests_RequestBase.RequestBase.html +0 -275
- package/dist/docs/classes/Requests_RequestFactory.RequestFactory.html +0 -344
- package/dist/docs/classes/Sitefinity.Sitefinity.html +0 -188
- package/dist/docs/classes/WhereQuery.WhereQuery.html +0 -436
- package/dist/docs/classes/chunk_upload_chunk_upload_sdk.ChunkUploadSdk.html +0 -231
- package/dist/docs/classes/chunk_upload_chunked_file_upload_utilities.ChunkedFileUploadUtilities.html +0 -131
- package/dist/docs/classes/utils.utils.html +0 -303
- package/dist/docs/index.html +0 -129
- package/dist/docs/interfaces/Data.CreateRelatedRequestOptions.html +0 -155
- package/dist/docs/interfaces/Data.CreateRequestOptions.html +0 -153
- package/dist/docs/interfaces/Data.OperationsRequestOptions.html +0 -145
- package/dist/docs/interfaces/Data.PropertyRequestOptions.html +0 -149
- package/dist/docs/interfaces/Data.RequestOptionsBase.html +0 -136
- package/dist/docs/interfaces/Data.SingleRelatedItemRequestOptions.html +0 -155
- package/dist/docs/interfaces/Data.UpdateRequestOptions.html +0 -155
- package/dist/docs/interfaces/Data.UploadRequestOptions.html +0 -169
- package/dist/docs/interfaces/Requests_BatchRequest.BatchCreateRelatedRequestOptions.html +0 -161
- package/dist/docs/interfaces/Requests_BatchRequest.BatchCreateRequestOptions.html +0 -153
- package/dist/docs/interfaces/Requests_BatchRequest.BatchPropertyRequestOptions.html +0 -153
- package/dist/docs/interfaces/Requests_BatchRequest.BatchRequestOptionsBase.html +0 -145
- package/dist/docs/interfaces/Requests_BatchRequest.BatchRequestOptionsExtended.html +0 -153
- package/dist/docs/interfaces/Requests_BatchRequest.BatchSingleItemRequestOptions.html +0 -145
- package/dist/docs/interfaces/Requests_BatchRequest.BatchSingleRelatedItemRequestOptions.html +0 -161
- package/dist/docs/interfaces/Requests_BatchRequest.BatchUpdateRequestOptions.html +0 -161
- package/dist/docs/interfaces/Requests_ExecutableRequest.ResponseHandlers.html +0 -98
- package/dist/docs/interfaces/Requests_Request.CommitChunksRequestOptionsExtended.html +0 -215
- package/dist/docs/interfaces/Requests_Request.PostRequestOptionsExtended.html +0 -159
- package/dist/docs/interfaces/Requests_Request.PutRequestOptionsExtended.html +0 -161
- package/dist/docs/interfaces/Requests_Request.RelatedByIdRequestOptionsExtended.html +0 -169
- package/dist/docs/interfaces/Requests_Request.RelatedRequestOptionsExtended.html +0 -163
- package/dist/docs/interfaces/Requests_Request.UploadChunkRequestOptionsExtended.html +0 -217
- package/dist/docs/interfaces/Requests_Request.UploadRequestOptionsExtended.html +0 -180
- package/dist/docs/interfaces/Requests_RequestBase.RequestOptionsBaseExtended.html +0 -148
- package/dist/docs/interfaces/Sitefinity.SDKOptions.html +0 -128
- package/dist/docs/interfaces/Sitefinity.Token.html +0 -94
- package/dist/docs/interfaces/Sitefinity.TypeOptions.html +0 -160
- package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.ChunkUploadInfoDTO.html +0 -159
- package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.ChunkUploadResult.html +0 -111
- package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.CleanUpChunksRequestOptions.html +0 -171
- package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.CommitChunksRequestOptions.html +0 -204
- package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.GetChunkUploadInfoRequestOptions.html +0 -166
- package/dist/docs/interfaces/chunk_upload_chunk_upload_sdk.UploadChunkRequestOptions.html +0 -206
- package/dist/docs/interfaces/chunk_upload_chunked_file_upload_utilities.ChunkFileResult.html +0 -101
- package/dist/docs/interfaces/chunk_upload_chunked_file_upload_utilities.FileUploadChunk.html +0 -94
- package/dist/docs/modules/BlobBuilder.html +0 -73
- package/dist/docs/modules/Data.html +0 -92
- package/dist/docs/modules/Expression.html +0 -77
- package/dist/docs/modules/OrderProperty.html +0 -73
- package/dist/docs/modules/Query.html +0 -73
- package/dist/docs/modules/QueryBase.html +0 -73
- package/dist/docs/modules/QueryBuilder.html +0 -73
- package/dist/docs/modules/Requests_BatchRequest.html +0 -94
- package/dist/docs/modules/Requests_ExecutableRequest.html +0 -78
- package/dist/docs/modules/Requests_Request.html +0 -114
- package/dist/docs/modules/Requests_RequestBase.html +0 -78
- package/dist/docs/modules/Requests_RequestFactory.html +0 -73
- package/dist/docs/modules/Sitefinity.html +0 -82
- package/dist/docs/modules/WhereQuery.html +0 -73
- package/dist/docs/modules/chunk_upload_chunk_upload_sdk.html +0 -88
- package/dist/docs/modules/chunk_upload_chunked_file_upload_utilities.html +0 -80
- package/dist/docs/modules/constants.html +0 -83
- package/dist/docs/modules/utils.html +0 -73
- package/dist/docs/modules.html +0 -80
- package/dist/docs/variables/constants.CONTENT_TYPES.html +0 -76
- package/dist/docs/variables/constants.EXPRESSION_TYPE.html +0 -106
- package/dist/docs/variables/constants.HEADER_NAMES.html +0 -102
- package/dist/docs/variables/constants.HTTP_METHODS.html +0 -84
- package/dist/docs/variables/constants.ODATA_PARAMS.html +0 -90
- package/dist/docs/variables/constants.SF_PARAMS.html +0 -84
- package/dist/samples.html +0 -625
- package/dist/sitefinity-webservices-sdk.js +0 -3243
- package/dist/sitefinity-webservices-sdk.js.map +0 -1
- package/dist/sitefinity-webservices-sdk.min.js +0 -1
- package/dist/src/BlobBuilder.d.ts +0 -14
- package/dist/src/Data.d.ts +0 -154
- package/dist/src/Data.spec.d.ts +0 -1
- package/dist/src/Expression.d.ts +0 -19
- package/dist/src/OrderProperty.d.ts +0 -8
- package/dist/src/Query.d.ts +0 -59
- package/dist/src/QueryBase.d.ts +0 -18
- package/dist/src/QueryBuilder.d.ts +0 -13
- package/dist/src/Requests/BatchRequest.d.ts +0 -146
- package/dist/src/Requests/ExecutableRequest.d.ts +0 -22
- package/dist/src/Requests/Request.d.ts +0 -132
- package/dist/src/Requests/RequestBase.d.ts +0 -27
- package/dist/src/Requests/request.spec.d.ts +0 -1
- package/dist/src/Sitefinity.d.ts +0 -75
- package/dist/src/Sitefinity.spec.d.ts +0 -1
- package/dist/src/WhereQuery.d.ts +0 -72
- package/dist/src/chunk-upload/chunk-upload.sdk.d.ts +0 -295
- package/dist/src/chunk-upload/chunk-upload.sdk.spec.d.ts +0 -1
- package/dist/src/chunk-upload/chunked-file-upload.utilities.d.ts +0 -13
- package/dist/src/utils.d.ts +0 -16
- package/karma.conf.js +0 -29
- package/sitefinity-webservices-sdk.ts +0 -15
- package/src/BlobBuilder.ts +0 -20
- package/src/Data.spec.ts +0 -160
- package/src/Data.ts +0 -418
- package/src/Expression.ts +0 -36
- package/src/OrderProperty.ts +0 -39
- package/src/Query.ts +0 -106
- package/src/QueryBase.ts +0 -57
- package/src/QueryBuilder.ts +0 -180
- package/src/Requests/BatchRequest.ts +0 -807
- package/src/Requests/ExecutableRequest.ts +0 -117
- package/src/Requests/Request.ts +0 -327
- package/src/Requests/RequestBase.ts +0 -163
- package/src/Requests/RequestFactory.ts +0 -75
- package/src/Requests/request.spec.ts +0 -154
- package/src/Sitefinity.spec.ts +0 -483
- package/src/Sitefinity.ts +0 -125
- package/src/WhereQuery.ts +0 -145
- package/src/chunk-upload/chunk-upload.sdk.spec.ts +0 -347
- package/src/chunk-upload/chunk-upload.sdk.ts +0 -439
- package/src/chunk-upload/chunked-file-upload.utilities.ts +0 -64
- package/src/constants.ts +0 -66
- package/src/utils.ts +0 -125
- package/template.html +0 -625
- 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
|
+
}
|