@azure/search-documents 11.3.1 → 11.3.3

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 (97) hide show
  1. package/README.md +19 -41
  2. package/dist/index.js +786 -1021
  3. package/dist/index.js.map +1 -1
  4. package/dist-esm/src/constants.js +1 -1
  5. package/dist-esm/src/constants.js.map +1 -1
  6. package/dist-esm/src/generated/data/index.js +1 -0
  7. package/dist-esm/src/generated/data/index.js.map +1 -1
  8. package/dist-esm/src/generated/data/models/index.js.map +1 -1
  9. package/dist-esm/src/generated/data/models/mappers.js.map +1 -1
  10. package/dist-esm/src/generated/data/models/parameters.js +11 -21
  11. package/dist-esm/src/generated/data/models/parameters.js.map +1 -1
  12. package/dist-esm/src/generated/data/operations/documents.js +21 -73
  13. package/dist-esm/src/generated/data/operations/documents.js.map +1 -1
  14. package/dist-esm/src/generated/data/operationsInterfaces/documents.js +9 -0
  15. package/dist-esm/src/generated/data/operationsInterfaces/documents.js.map +1 -0
  16. package/dist-esm/src/generated/data/operationsInterfaces/index.js +9 -0
  17. package/dist-esm/src/generated/data/operationsInterfaces/index.js.map +1 -0
  18. package/dist-esm/src/generated/data/searchClient.js +2 -2
  19. package/dist-esm/src/generated/data/searchClient.js.map +1 -1
  20. package/dist-esm/src/generated/data/searchClientContext.js +7 -11
  21. package/dist-esm/src/generated/data/searchClientContext.js.map +1 -1
  22. package/dist-esm/src/generated/service/index.js +1 -0
  23. package/dist-esm/src/generated/service/index.js.map +1 -1
  24. package/dist-esm/src/generated/service/models/index.js.map +1 -1
  25. package/dist-esm/src/generated/service/models/mappers.js.map +1 -1
  26. package/dist-esm/src/generated/service/models/parameters.js +0 -9
  27. package/dist-esm/src/generated/service/models/parameters.js.map +1 -1
  28. package/dist-esm/src/generated/service/operations/dataSources.js +11 -37
  29. package/dist-esm/src/generated/service/operations/dataSources.js.map +1 -1
  30. package/dist-esm/src/generated/service/operations/indexers.js +17 -55
  31. package/dist-esm/src/generated/service/operations/indexers.js.map +1 -1
  32. package/dist-esm/src/generated/service/operations/indexes.js +15 -54
  33. package/dist-esm/src/generated/service/operations/indexes.js.map +1 -1
  34. package/dist-esm/src/generated/service/operations/skillsets.js +11 -37
  35. package/dist-esm/src/generated/service/operations/skillsets.js.map +1 -1
  36. package/dist-esm/src/generated/service/operations/synonymMaps.js +11 -37
  37. package/dist-esm/src/generated/service/operations/synonymMaps.js.map +1 -1
  38. package/dist-esm/src/generated/service/operationsInterfaces/dataSources.js +9 -0
  39. package/dist-esm/src/generated/service/operationsInterfaces/dataSources.js.map +1 -0
  40. package/dist-esm/src/generated/service/operationsInterfaces/index.js +13 -0
  41. package/dist-esm/src/generated/service/operationsInterfaces/index.js.map +1 -0
  42. package/dist-esm/src/generated/service/operationsInterfaces/indexers.js +9 -0
  43. package/dist-esm/src/generated/service/operationsInterfaces/indexers.js.map +1 -0
  44. package/dist-esm/src/generated/service/operationsInterfaces/indexes.js +9 -0
  45. package/dist-esm/src/generated/service/operationsInterfaces/indexes.js.map +1 -0
  46. package/dist-esm/src/generated/service/operationsInterfaces/skillsets.js +9 -0
  47. package/dist-esm/src/generated/service/operationsInterfaces/skillsets.js.map +1 -0
  48. package/dist-esm/src/generated/service/operationsInterfaces/synonymMaps.js +9 -0
  49. package/dist-esm/src/generated/service/operationsInterfaces/synonymMaps.js.map +1 -0
  50. package/dist-esm/src/generated/service/searchServiceClient.js +10 -13
  51. package/dist-esm/src/generated/service/searchServiceClient.js.map +1 -1
  52. package/dist-esm/src/generated/service/searchServiceClientContext.js +7 -11
  53. package/dist-esm/src/generated/service/searchServiceClientContext.js.map +1 -1
  54. package/dist-esm/src/geographyPoint.js +1 -1
  55. package/dist-esm/src/geographyPoint.js.map +1 -1
  56. package/dist-esm/src/index.js +2 -2
  57. package/dist-esm/src/index.js.map +1 -1
  58. package/dist-esm/src/indexDocumentsBatch.js +1 -1
  59. package/dist-esm/src/indexDocumentsBatch.js.map +1 -1
  60. package/dist-esm/src/indexModels.js.map +1 -1
  61. package/dist-esm/src/odataMetadataPolicy.js +7 -15
  62. package/dist-esm/src/odataMetadataPolicy.js.map +1 -1
  63. package/dist-esm/src/searchApiKeyCredentialPolicy.js +8 -21
  64. package/dist-esm/src/searchApiKeyCredentialPolicy.js.map +1 -1
  65. package/dist-esm/src/searchAudience.js.map +1 -1
  66. package/dist-esm/src/searchClient.js +108 -126
  67. package/dist-esm/src/searchClient.js.map +1 -1
  68. package/dist-esm/src/searchIndexClient.js +112 -101
  69. package/dist-esm/src/searchIndexClient.js.map +1 -1
  70. package/dist-esm/src/searchIndexerClient.js +94 -106
  71. package/dist-esm/src/searchIndexerClient.js.map +1 -1
  72. package/dist-esm/src/searchIndexingBufferedSender.js +16 -17
  73. package/dist-esm/src/searchIndexingBufferedSender.js.map +1 -1
  74. package/dist-esm/src/serialization.js +6 -6
  75. package/dist-esm/src/serialization.js.map +1 -1
  76. package/dist-esm/src/serviceModels.js.map +1 -1
  77. package/dist-esm/src/serviceUtils.js +43 -61
  78. package/dist-esm/src/serviceUtils.js.map +1 -1
  79. package/dist-esm/src/synonymMapHelper.js +6 -2
  80. package/dist-esm/src/synonymMapHelper.js.map +1 -1
  81. package/dist-esm/src/tracing.js +6 -5
  82. package/dist-esm/src/tracing.js.map +1 -1
  83. package/package.json +53 -53
  84. package/types/search-documents.d.ts +137 -117
  85. package/CHANGELOG.md +0 -233
  86. package/dist-esm/src/generated/data/models/documentsMappers.js +0 -9
  87. package/dist-esm/src/generated/data/models/documentsMappers.js.map +0 -1
  88. package/dist-esm/src/generated/service/models/dataSourcesMappers.js +0 -9
  89. package/dist-esm/src/generated/service/models/dataSourcesMappers.js.map +0 -1
  90. package/dist-esm/src/generated/service/models/indexersMappers.js +0 -9
  91. package/dist-esm/src/generated/service/models/indexersMappers.js.map +0 -1
  92. package/dist-esm/src/generated/service/models/indexesMappers.js +0 -9
  93. package/dist-esm/src/generated/service/models/indexesMappers.js.map +0 -1
  94. package/dist-esm/src/generated/service/models/skillsetsMappers.js +0 -9
  95. package/dist-esm/src/generated/service/models/skillsetsMappers.js.map +0 -1
  96. package/dist-esm/src/generated/service/models/synonymMapsMappers.js +0 -9
  97. package/dist-esm/src/generated/service/models/synonymMapsMappers.js.map +0 -1
@@ -1,21 +1,19 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
3
  import { __asyncDelegator, __asyncGenerator, __asyncValues, __await, __rest } from "tslib";
4
- /// <reference lib="esnext.asynciterable" />
5
- import { createPipelineFromOptions, operationOptionsToRequestOptionsBase, bearerTokenAuthenticationPolicy } from "@azure/core-http";
4
+ import { bearerTokenAuthenticationPolicy, } from "@azure/core-rest-pipeline";
6
5
  import { SearchClient as GeneratedClient } from "./generated/data/searchClient";
7
6
  import { isTokenCredential } from "@azure/core-auth";
8
7
  import { createSearchApiKeyCredentialPolicy } from "./searchApiKeyCredentialPolicy";
9
- import { SDK_VERSION } from "./constants";
10
8
  import { logger } from "./logger";
11
9
  import { createSpan } from "./tracing";
12
- import { SpanStatusCode } from "@azure/core-tracing";
13
10
  import { deserialize, serialize } from "./serialization";
14
- import { odataMetadataPolicy } from "./odataMetadataPolicy";
11
+ import { createOdataMetadataPolicy } from "./odataMetadataPolicy";
15
12
  import { IndexDocumentsBatch } from "./indexDocumentsBatch";
16
- import { encode, decode } from "./base64";
13
+ import { decode, encode } from "./base64";
17
14
  import * as utils from "./serviceUtils";
18
15
  import { KnownSearchAudience } from "./searchAudience";
16
+ import { SDK_VERSION } from "./constants";
19
17
  /**
20
18
  * Class used to perform operations against a search index,
21
19
  * including querying documents in the index as well as
@@ -32,64 +30,56 @@ export class SearchClient {
32
30
  * const client = new SearchClient(
33
31
  * "<endpoint>",
34
32
  * "<indexName>",
35
- * new AzureKeyCredential("<Admin Key>");
33
+ * new AzureKeyCredential("<Admin Key>")
36
34
  * );
37
35
  * ```
38
36
  * @param endpoint - The endpoint of the search service
39
37
  * @param indexName - The name of the index
40
38
  * @param credential - Used to authenticate requests to the service.
41
39
  * @param options - Used to configure the Search client.
40
+ *
41
+ * @typeParam TModel - An optional type that represents the documents stored in
42
+ * the search index. For the best typing experience, all non-key fields should
43
+ * be marked optional and nullable, and the key property should have the
44
+ * non-nullable type `string`.
42
45
  */
43
46
  constructor(endpoint, indexName, credential, options = {}) {
44
- /// Maintenance note: when updating supported API versions,
45
- /// the ContinuationToken logic will need to be updated below.
47
+ var _a, _b;
46
48
  /**
47
49
  * The API version to use when communicating with the service.
48
50
  */
49
- this.apiVersion = "2020-06-30-Preview";
51
+ this.apiVersion = utils.defaultServiceVersion;
50
52
  this.endpoint = endpoint;
51
53
  this.indexName = indexName;
52
54
  const libInfo = `azsdk-js-search-documents/${SDK_VERSION}`;
53
- if (!options.userAgentOptions) {
54
- options.userAgentOptions = {};
55
- }
56
- if (options.userAgentOptions.userAgentPrefix) {
57
- options.userAgentOptions.userAgentPrefix = `${options.userAgentOptions.userAgentPrefix} ${libInfo}`;
55
+ const userAgentOptions = Object.assign(Object.assign({}, options.userAgentOptions), { userAgentPrefix: ((_a = options.userAgentOptions) === null || _a === void 0 ? void 0 : _a.userAgentPrefix)
56
+ ? `${options.userAgentOptions.userAgentPrefix} ${libInfo}`
57
+ : libInfo });
58
+ const loggingOptions = {
59
+ logger: logger.info,
60
+ additionalAllowedHeaderNames: [
61
+ "elapsed-time",
62
+ "Location",
63
+ "OData-MaxVersion",
64
+ "OData-Version",
65
+ "Prefer",
66
+ "throttle-reason",
67
+ ],
68
+ };
69
+ const internalClientPipelineOptions = Object.assign(Object.assign({}, options), { userAgentOptions,
70
+ loggingOptions });
71
+ this.apiVersion = (_b = options.apiVersion) !== null && _b !== void 0 ? _b : utils.defaultServiceVersion;
72
+ this.client = new GeneratedClient(this.endpoint, this.indexName, this.apiVersion, internalClientPipelineOptions);
73
+ if (isTokenCredential(credential)) {
74
+ const scope = options.audience
75
+ ? `${options.audience}/.default`
76
+ : `${KnownSearchAudience.AzurePublicCloud}/.default`;
77
+ this.client.pipeline.addPolicy(bearerTokenAuthenticationPolicy({ credential, scopes: scope }));
58
78
  }
59
79
  else {
60
- options.userAgentOptions.userAgentPrefix = libInfo;
61
- }
62
- const internalPipelineOptions = Object.assign(Object.assign({}, options), {
63
- loggingOptions: {
64
- logger: logger.info,
65
- allowedHeaderNames: [
66
- "elapsed-time",
67
- "Location",
68
- "OData-MaxVersion",
69
- "OData-Version",
70
- "Prefer",
71
- "throttle-reason"
72
- ]
73
- }
74
- });
75
- const scope = options.audience
76
- ? `${options.audience}/.default`
77
- : `${KnownSearchAudience.AzurePublicCloud}/.default`;
78
- const requestPolicyFactory = isTokenCredential(credential)
79
- ? bearerTokenAuthenticationPolicy(credential, scope)
80
- : createSearchApiKeyCredentialPolicy(credential);
81
- const pipeline = createPipelineFromOptions(internalPipelineOptions, requestPolicyFactory);
82
- if (Array.isArray(pipeline.requestPolicyFactories)) {
83
- pipeline.requestPolicyFactories.unshift(odataMetadataPolicy("none"));
84
- }
85
- let apiVersion = this.apiVersion;
86
- if (options.apiVersion) {
87
- if (!["2020-06-30-Preview", "2020-06-30"].includes(options.apiVersion)) {
88
- throw new Error(`Invalid Api Version: ${options.apiVersion}`);
89
- }
90
- apiVersion = options.apiVersion;
80
+ this.client.pipeline.addPolicy(createSearchApiKeyCredentialPolicy(credential));
91
81
  }
92
- this.client = new GeneratedClient(this.endpoint, this.indexName, apiVersion, pipeline);
82
+ this.client.pipeline.addPolicy(createOdataMetadataPolicy("none"));
93
83
  }
94
84
  /**
95
85
  * Retrieves the number of documents in the index.
@@ -98,13 +88,19 @@ export class SearchClient {
98
88
  async getDocumentsCount(options = {}) {
99
89
  const { span, updatedOptions } = createSpan("SearchClient-getDocumentsCount", options);
100
90
  try {
101
- const result = await this.client.documents.count(operationOptionsToRequestOptionsBase(updatedOptions));
102
- return Number(result._response.bodyAsText);
91
+ let documentsCount = 0;
92
+ await this.client.documents.count(Object.assign(Object.assign({}, updatedOptions), { onResponse: (rawResponse, flatResponse) => {
93
+ documentsCount = Number(rawResponse.bodyAsText);
94
+ if (updatedOptions.onResponse) {
95
+ updatedOptions.onResponse(rawResponse, flatResponse);
96
+ }
97
+ } }));
98
+ return documentsCount;
103
99
  }
104
100
  catch (e) {
105
101
  span.setStatus({
106
- code: SpanStatusCode.ERROR,
107
- message: e.message
102
+ status: "error",
103
+ error: e.message,
108
104
  });
109
105
  throw e;
110
106
  }
@@ -120,8 +116,7 @@ export class SearchClient {
120
116
  * @param options - Options to the autocomplete operation.
121
117
  */
122
118
  async autocomplete(searchText, suggesterName, options = {}) {
123
- const { operationOptions, restOptions } = this.extractOperationOptions(Object.assign({}, options));
124
- const { searchFields } = restOptions, nonFieldOptions = __rest(restOptions, ["searchFields"]);
119
+ const { searchFields } = options, nonFieldOptions = __rest(options, ["searchFields"]);
125
120
  const fullOptions = Object.assign({ searchText: searchText, suggesterName: suggesterName, searchFields: this.convertSearchFields(searchFields) }, nonFieldOptions);
126
121
  if (!fullOptions.searchText) {
127
122
  throw new RangeError("searchText must be provided.");
@@ -129,15 +124,15 @@ export class SearchClient {
129
124
  if (!fullOptions.suggesterName) {
130
125
  throw new RangeError("suggesterName must be provided.");
131
126
  }
132
- const { span, updatedOptions } = createSpan("SearchClient-autocomplete", operationOptions);
127
+ const { span, updatedOptions } = createSpan("SearchClient-autocomplete", options);
133
128
  try {
134
- const result = await this.client.documents.autocompletePost(fullOptions, operationOptionsToRequestOptionsBase(updatedOptions));
129
+ const result = await this.client.documents.autocompletePost(fullOptions, updatedOptions);
135
130
  return result;
136
131
  }
137
132
  catch (e) {
138
133
  span.setStatus({
139
- code: SpanStatusCode.ERROR,
140
- message: e.message
134
+ status: "error",
135
+ error: e.message,
141
136
  });
142
137
  throw e;
143
138
  }
@@ -146,27 +141,20 @@ export class SearchClient {
146
141
  }
147
142
  }
148
143
  async searchDocuments(searchText, options = {}, nextPageParameters = {}) {
149
- const { operationOptions, restOptions } = this.extractOperationOptions(Object.assign({}, options));
150
- const { select, searchFields, orderBy } = restOptions, nonFieldOptions = __rest(restOptions, ["select", "searchFields", "orderBy"]);
151
- const fullOptions = Object.assign(Object.assign({ searchFields: this.convertSearchFields(searchFields), select: this.convertSelect(select), orderBy: this.convertOrderBy(orderBy) }, nonFieldOptions), nextPageParameters);
152
- const { span, updatedOptions } = createSpan("SearchClient-searchDocuments", operationOptions);
144
+ const { searchFields, select, orderBy, includeTotalCount } = options, restOptions = __rest(options, ["searchFields", "select", "orderBy", "includeTotalCount"]);
145
+ const fullOptions = Object.assign(Object.assign(Object.assign({}, restOptions), nextPageParameters), { searchFields: this.convertSearchFields(searchFields), select: this.convertSelect(select) || "*", orderBy: this.convertOrderBy(orderBy), includeTotalResultCount: includeTotalCount });
146
+ const { span, updatedOptions } = createSpan("SearchClient-searchDocuments", options);
153
147
  try {
154
- const result = await this.client.documents.searchPost(Object.assign(Object.assign({}, fullOptions), { includeTotalResultCount: fullOptions.includeTotalCount, searchText: searchText }), operationOptionsToRequestOptionsBase(updatedOptions));
155
- const { results, count, coverage, facets, nextLink } = result;
148
+ const result = await this.client.documents.searchPost(Object.assign(Object.assign({}, fullOptions), { searchText: searchText }), updatedOptions);
149
+ const { results, nextLink, nextPageParameters: resultNextPageParameters } = result, restResult = __rest(result, ["results", "nextLink", "nextPageParameters"]);
156
150
  const modifiedResults = utils.generatedSearchResultToPublicSearchResult(results);
157
- const converted = {
158
- results: modifiedResults,
159
- count,
160
- coverage,
161
- facets,
162
- continuationToken: this.encodeContinuationToken(nextLink, result.nextPageParameters)
163
- };
151
+ const converted = Object.assign(Object.assign({}, restResult), { results: modifiedResults, continuationToken: this.encodeContinuationToken(nextLink, resultNextPageParameters) });
164
152
  return deserialize(converted);
165
153
  }
166
154
  catch (e) {
167
155
  span.setStatus({
168
- code: SpanStatusCode.ERROR,
169
- message: e.message
156
+ status: "error",
157
+ error: e.message,
170
158
  });
171
159
  throw e;
172
160
  }
@@ -190,21 +178,28 @@ export class SearchClient {
190
178
  }
191
179
  listSearchResultsAll(firstPage, searchText, options = {}) {
192
180
  return __asyncGenerator(this, arguments, function* listSearchResultsAll_1() {
193
- var e_1, _a;
181
+ var _a, e_1, _b, _c;
194
182
  yield __await(yield* __asyncDelegator(__asyncValues(firstPage.results)));
195
183
  if (firstPage.continuationToken) {
196
184
  try {
197
- for (var _b = __asyncValues(this.listSearchResultsPage(searchText, options, {
198
- continuationToken: firstPage.continuationToken
199
- })), _c; _c = yield __await(_b.next()), !_c.done;) {
200
- const page = _c.value;
201
- yield __await(yield* __asyncDelegator(__asyncValues(page.results)));
185
+ for (var _d = true, _e = __asyncValues(this.listSearchResultsPage(searchText, options, {
186
+ continuationToken: firstPage.continuationToken,
187
+ })), _f; _f = yield __await(_e.next()), _a = _f.done, !_a;) {
188
+ _c = _f.value;
189
+ _d = false;
190
+ try {
191
+ const page = _c;
192
+ yield __await(yield* __asyncDelegator(__asyncValues(page.results)));
193
+ }
194
+ finally {
195
+ _d = true;
196
+ }
202
197
  }
203
198
  }
204
199
  catch (e_1_1) { e_1 = { error: e_1_1 }; }
205
200
  finally {
206
201
  try {
207
- if (_c && !_c.done && (_a = _b.return)) yield __await(_a.call(_b));
202
+ if (!_d && !_a && (_b = _e.return)) yield __await(_b.call(_e));
208
203
  }
209
204
  finally { if (e_1) throw e_1.error; }
210
205
  }
@@ -222,7 +217,7 @@ export class SearchClient {
222
217
  },
223
218
  byPage: (settings = {}) => {
224
219
  return this.listSearchResultsPage(searchText, options, settings);
225
- }
220
+ },
226
221
  };
227
222
  }
228
223
  /**
@@ -235,18 +230,12 @@ export class SearchClient {
235
230
  const { span, updatedOptions } = createSpan("SearchClient-search", options);
236
231
  try {
237
232
  const pageResult = await this.searchDocuments(searchText, updatedOptions);
238
- const { count, coverage, facets } = pageResult;
239
- return {
240
- count,
241
- coverage,
242
- facets,
243
- results: this.listSearchResults(pageResult, searchText, updatedOptions)
244
- };
233
+ return Object.assign(Object.assign({}, pageResult), { results: this.listSearchResults(pageResult, searchText, updatedOptions) });
245
234
  }
246
235
  catch (e) {
247
236
  span.setStatus({
248
- code: SpanStatusCode.ERROR,
249
- message: e.message
237
+ status: "error",
238
+ error: e.message,
250
239
  });
251
240
  throw e;
252
241
  }
@@ -262,25 +251,24 @@ export class SearchClient {
262
251
  * @param options - Options for the suggest operation
263
252
  */
264
253
  async suggest(searchText, suggesterName, options = {}) {
265
- const { operationOptions, restOptions } = this.extractOperationOptions(Object.assign({}, options));
266
- const { select, searchFields, orderBy } = restOptions, nonFieldOptions = __rest(restOptions, ["select", "searchFields", "orderBy"]);
267
- const fullOptions = Object.assign({ searchText: searchText, suggesterName: suggesterName, searchFields: this.convertSearchFields(searchFields), select: this.convertSelect(select), orderBy: this.convertOrderBy(orderBy) }, nonFieldOptions);
254
+ const { select, searchFields, orderBy } = options, nonFieldOptions = __rest(options, ["select", "searchFields", "orderBy"]);
255
+ const fullOptions = Object.assign({ searchText: searchText, suggesterName: suggesterName, select: this.convertSelect(select), searchFields: this.convertSearchFields(searchFields), orderBy: this.convertOrderBy(orderBy) }, nonFieldOptions);
268
256
  if (!fullOptions.searchText) {
269
257
  throw new RangeError("searchText must be provided.");
270
258
  }
271
259
  if (!fullOptions.suggesterName) {
272
260
  throw new RangeError("suggesterName must be provided.");
273
261
  }
274
- const { span, updatedOptions } = createSpan("SearchClient-suggest", operationOptions);
262
+ const { span, updatedOptions } = createSpan("SearchClient-suggest", options);
275
263
  try {
276
- const result = await this.client.documents.suggestPost(fullOptions, operationOptionsToRequestOptionsBase(updatedOptions));
264
+ const result = await this.client.documents.suggestPost(fullOptions, updatedOptions);
277
265
  const modifiedResult = utils.generatedSuggestDocumentsResultToPublicSuggestDocumentsResult(result);
278
266
  return deserialize(modifiedResult);
279
267
  }
280
268
  catch (e) {
281
269
  span.setStatus({
282
- code: SpanStatusCode.ERROR,
283
- message: e.message
270
+ status: "error",
271
+ error: e.message,
284
272
  });
285
273
  throw e;
286
274
  }
@@ -296,13 +284,13 @@ export class SearchClient {
296
284
  async getDocument(key, options = {}) {
297
285
  const { span, updatedOptions } = createSpan("SearchClient-getDocument", options);
298
286
  try {
299
- const result = await this.client.documents.get(key, operationOptionsToRequestOptionsBase(updatedOptions));
300
- return deserialize(result.body);
287
+ const result = await this.client.documents.get(key, updatedOptions);
288
+ return deserialize(result);
301
289
  }
302
290
  catch (e) {
303
291
  span.setStatus({
304
- code: SpanStatusCode.ERROR,
305
- message: e.message
292
+ status: "error",
293
+ error: e.message,
306
294
  });
307
295
  throw e;
308
296
  }
@@ -325,16 +313,22 @@ export class SearchClient {
325
313
  batch, options = {}) {
326
314
  const { span, updatedOptions } = createSpan("SearchClient-indexDocuments", options);
327
315
  try {
328
- const result = await this.client.documents.index({ actions: serialize(batch.actions) }, operationOptionsToRequestOptionsBase(updatedOptions));
329
- if (options.throwOnAnyFailure && result._response.status === 207) {
316
+ let status = 0;
317
+ const result = await this.client.documents.index({ actions: serialize(batch.actions) }, Object.assign(Object.assign({}, updatedOptions), { onResponse: (rawResponse, flatResponse) => {
318
+ status = rawResponse.status;
319
+ if (updatedOptions.onResponse) {
320
+ updatedOptions.onResponse(rawResponse, flatResponse);
321
+ }
322
+ } }));
323
+ if (options.throwOnAnyFailure && status === 207) {
330
324
  throw result;
331
325
  }
332
326
  return result;
333
327
  }
334
328
  catch (e) {
335
329
  span.setStatus({
336
- code: SpanStatusCode.ERROR,
337
- message: e.message
330
+ status: "error",
331
+ error: e.message,
338
332
  });
339
333
  throw e;
340
334
  }
@@ -356,8 +350,8 @@ export class SearchClient {
356
350
  }
357
351
  catch (e) {
358
352
  span.setStatus({
359
- code: SpanStatusCode.ERROR,
360
- message: e.message
353
+ status: "error",
354
+ error: e.message,
361
355
  });
362
356
  throw e;
363
357
  }
@@ -380,8 +374,8 @@ export class SearchClient {
380
374
  }
381
375
  catch (e) {
382
376
  span.setStatus({
383
- code: SpanStatusCode.ERROR,
384
- message: e.message
377
+ status: "error",
378
+ error: e.message,
385
379
  });
386
380
  throw e;
387
381
  }
@@ -404,8 +398,8 @@ export class SearchClient {
404
398
  }
405
399
  catch (e) {
406
400
  span.setStatus({
407
- code: SpanStatusCode.ERROR,
408
- message: e.message
401
+ status: "error",
402
+ error: e.message,
409
403
  });
410
404
  throw e;
411
405
  }
@@ -427,8 +421,8 @@ export class SearchClient {
427
421
  }
428
422
  catch (e) {
429
423
  span.setStatus({
430
- code: SpanStatusCode.ERROR,
431
- message: e.message
424
+ status: "error",
425
+ error: e.message,
432
426
  });
433
427
  throw e;
434
428
  }
@@ -443,7 +437,7 @@ export class SearchClient {
443
437
  const payload = JSON.stringify({
444
438
  apiVersion: this.apiVersion,
445
439
  nextLink,
446
- nextPageParameters
440
+ nextPageParameters,
447
441
  });
448
442
  return encode(payload);
449
443
  }
@@ -459,25 +453,13 @@ export class SearchClient {
459
453
  }
460
454
  return {
461
455
  nextLink: result.nextLink,
462
- nextPageParameters: result.nextPageParameters
456
+ nextPageParameters: result.nextPageParameters,
463
457
  };
464
458
  }
465
459
  catch (e) {
466
460
  throw new Error(`Corrupted or invalid continuation token: ${decodedToken}`);
467
461
  }
468
462
  }
469
- // eslint-disable-next-line @typescript-eslint/no-shadow
470
- extractOperationOptions(obj) {
471
- const { abortSignal, requestOptions, tracingOptions } = obj, restOptions = __rest(obj, ["abortSignal", "requestOptions", "tracingOptions"]);
472
- return {
473
- operationOptions: {
474
- abortSignal,
475
- requestOptions,
476
- tracingOptions
477
- },
478
- restOptions
479
- };
480
- }
481
463
  convertSelect(select) {
482
464
  if (select) {
483
465
  return select.join(",");
@@ -1 +1 @@
1
- {"version":3,"file":"searchClient.js","sourceRoot":"","sources":["../../src/searchClient.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;;AAElC,4CAA4C;AAE5C,OAAO,EAGL,yBAAyB,EAEzB,oCAAoC,EAEpC,+BAA+B,EAChC,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,YAAY,IAAI,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAkC,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrF,OAAO,EAAE,kCAAkC,EAAE,MAAM,gCAAgC,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAOlC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAoBzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAC1C,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAkBvD;;;;GAIG;AACH,MAAM,OAAO,YAAY;IA0BvB;;;;;;;;;;;;;;;;;OAiBG;IACH,YACE,QAAgB,EAChB,SAAiB,EACjB,UAA2C,EAC3C,UAA+B,EAAE;QA/CnC,2DAA2D;QAC3D,8DAA8D;QAE9D;;WAEG;QACa,eAAU,GAAW,oBAAoB,CAAC;QA2CxD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAE3B,MAAM,OAAO,GAAG,6BAA6B,WAAW,EAAE,CAAC;QAC3D,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;YAC7B,OAAO,CAAC,gBAAgB,GAAG,EAAE,CAAC;SAC/B;QACD,IAAI,OAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE;YAC5C,OAAO,CAAC,gBAAgB,CAAC,eAAe,GAAG,GAAG,OAAO,CAAC,gBAAgB,CAAC,eAAe,IAAI,OAAO,EAAE,CAAC;SACrG;aAAM;YACL,OAAO,CAAC,gBAAgB,CAAC,eAAe,GAAG,OAAO,CAAC;SACpD;QAED,MAAM,uBAAuB,mCACxB,OAAO,GACP;YACD,cAAc,EAAE;gBACd,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,kBAAkB,EAAE;oBAClB,cAAc;oBACd,UAAU;oBACV,kBAAkB;oBAClB,eAAe;oBACf,QAAQ;oBACR,iBAAiB;iBAClB;aACF;SACF,CACF,CAAC;QAEF,MAAM,KAAK,GAAW,OAAO,CAAC,QAAQ;YACpC,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,WAAW;YAChC,CAAC,CAAC,GAAG,mBAAmB,CAAC,gBAAgB,WAAW,CAAC;QAEvD,MAAM,oBAAoB,GAAyB,iBAAiB,CAAC,UAAU,CAAC;YAC9E,CAAC,CAAC,+BAA+B,CAAC,UAAU,EAAE,KAAK,CAAC;YACpD,CAAC,CAAC,kCAAkC,CAAC,UAAU,CAAC,CAAC;QAEnD,MAAM,QAAQ,GAAG,yBAAyB,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAAC;QAE1F,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAC,EAAE;YAClD,QAAQ,CAAC,sBAAsB,CAAC,OAAO,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;SACtE;QAED,IAAI,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;QAEjC,IAAI,OAAO,CAAC,UAAU,EAAE;YACtB,IAAI,CAAC,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;gBACtE,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;aAC/D;YACD,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;SACjC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IACzF,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,iBAAiB,CAAC,UAAiC,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,gCAAgC,EAAE,OAAO,CAAC,CAAC;QACvF,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAC9C,oCAAoC,CAAC,cAAc,CAAC,CACrD,CAAC;YACF,OAAO,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;SAC5C;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,YAAY,CACvB,UAAkB,EAClB,aAAqB,EACrB,UAAuC,EAAE;QAEzC,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,uBAAuB,mBAAM,OAAO,EAAG,CAAC;QACvF,MAAM,EAAE,YAAY,KAAyB,WAAW,EAA/B,eAAe,UAAK,WAAW,EAAlD,gBAAoC,CAAc,CAAC;QACzD,MAAM,WAAW,mBACf,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAS,YAAY,CAAC,IACzD,eAAe,CACnB,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;YAC3B,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;SACtD;QAED,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;YAC9B,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;SACzD;QAED,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,2BAA2B,EAAE,gBAAgB,CAAC,CAAC;QAE3F,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,gBAAgB,CACzD,WAAW,EACX,oCAAoC,CAAC,cAAc,CAAC,CACrD,CAAC;YACF,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAEO,KAAK,CAAC,eAAe,CAC3B,UAAmB,EACnB,UAAiC,EAAE,EACnC,qBAAoC,EAAE;QAEtC,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,uBAAuB,mBAAM,OAAO,EAAG,CAAC;QACvF,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,KAAyB,WAAW,EAA/B,eAAe,UAAK,WAAW,EAAnE,qCAAqD,CAAc,CAAC;QAC1E,MAAM,WAAW,iCACf,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAS,YAAY,CAAC,EAC5D,MAAM,EAAE,IAAI,CAAC,aAAa,CAAS,MAAM,CAAC,EAC1C,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAClC,eAAe,GACf,kBAAkB,CACtB,CAAC;QAEF,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,8BAA8B,EAAE,gBAAgB,CAAC,CAAC;QAE9F,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,UAAU,iCAE9C,WAAW,KACd,uBAAuB,EAAE,WAAW,CAAC,iBAAiB,EACtD,UAAU,EAAE,UAAU,KAExB,oCAAoC,CAAC,cAAc,CAAC,CACrD,CAAC;YAEF,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;YAE9D,MAAM,eAAe,GAAG,KAAK,CAAC,yCAAyC,CAAI,OAAO,CAAC,CAAC;YAEpF,MAAM,SAAS,GAAiC;gBAC9C,OAAO,EAAE,eAAe;gBACxB,KAAK;gBACL,QAAQ;gBACR,MAAM;gBACN,iBAAiB,EAAE,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,kBAAkB,CAAC;aACrF,CAAC;YAEF,OAAO,WAAW,CAA6C,SAAS,CAAC,CAAC;SAC3E;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAEc,qBAAqB,CAClC,UAAmB,EACnB,UAAiC,EAAE,EACnC,WAA0C,EAAE;;YAE5C,IAAI,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC;YACnF,IAAI,MAAM,GAAG,cAAM,IAAI,CAAC,eAAe,CACrC,UAAU,EACV,OAAO,EACP,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,kBAAkB,CACxC,CAAA,CAAC;YAEF,oBAAM,MAAM,CAAA,CAAC;YAEb,wEAAwE;YACxE,4BAA4B;YAC5B,OAAO,MAAM,CAAC,iBAAiB,EAAE;gBAC/B,mBAAmB,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;gBAC7E,MAAM,GAAG,cAAM,IAAI,CAAC,eAAe,CACjC,UAAU,EACV,OAAO,EACP,mBAAmB,aAAnB,mBAAmB,uBAAnB,mBAAmB,CAAE,kBAAkB,CACxC,CAAA,CAAC;gBACF,oBAAM,MAAM,CAAA,CAAC;aACd;QACH,CAAC;KAAA;IAEc,oBAAoB,CACjC,SAAqD,EACrD,UAAmB,EACnB,UAAiC,EAAE;;;YAEnC,cAAA,KAAK,CAAC,CAAC,iBAAA,cAAA,SAAS,CAAC,OAAO,CAAA,CAAA,CAAA,CAAC;YACzB,IAAI,SAAS,CAAC,iBAAiB,EAAE;;oBAC/B,KAAyB,IAAA,KAAA,cAAA,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,OAAO,EAAE;wBACvE,iBAAiB,EAAE,SAAS,CAAC,iBAAiB;qBAC/C,CAAC,CAAA,IAAA;wBAFS,MAAM,IAAI,WAAA,CAAA;wBAGnB,cAAA,KAAK,CAAC,CAAC,iBAAA,cAAA,IAAI,CAAC,OAAO,CAAA,CAAA,CAAA,CAAC;qBACrB;;;;;;;;;aACF;QACH,CAAC;KAAA;IAEO,iBAAiB,CACvB,SAAqD,EACrD,UAAmB,EACnB,UAAiC,EAAE;QAEnC,MAAM,IAAI,GAAG,IAAI,CAAC,oBAAoB,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QAEvE,OAAO;YACL,IAAI;gBACF,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;YACrB,CAAC;YACD,CAAC,MAAM,CAAC,aAAa,CAAC;gBACpB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,MAAM,EAAE,CAAC,WAA0C,EAAE,EAAE,EAAE;gBACvD,OAAO,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACnE,CAAC;SACF,CAAC;IACJ,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,MAAM,CACjB,UAAmB,EACnB,UAAiC,EAAE;QAEnC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;QAE5E,IAAI;YACF,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,eAAe,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;YAE1E,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC;YAE/C,OAAO;gBACL,KAAK;gBACL,QAAQ;gBACR,MAAM;gBACN,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,UAAU,EAAE,cAAc,CAAC;aACxE,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;;OAMG;IACI,KAAK,CAAC,OAAO,CAClB,UAAkB,EAClB,aAAqB,EACrB,UAAkC,EAAE;QAEpC,MAAM,EAAE,gBAAgB,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC,uBAAuB,mBAAM,OAAO,EAAG,CAAC;QACvF,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,OAAO,KAAyB,WAAW,EAA/B,eAAe,UAAK,WAAW,EAAnE,qCAAqD,CAAc,CAAC;QAC1E,MAAM,WAAW,mBACf,UAAU,EAAE,UAAU,EACtB,aAAa,EAAE,aAAa,EAC5B,YAAY,EAAE,IAAI,CAAC,mBAAmB,CAAS,YAAY,CAAC,EAC5D,MAAM,EAAE,IAAI,CAAC,aAAa,CAAS,MAAM,CAAC,EAC1C,OAAO,EAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAClC,eAAe,CACnB,CAAC;QAEF,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;YAC3B,MAAM,IAAI,UAAU,CAAC,8BAA8B,CAAC,CAAC;SACtD;QAED,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE;YAC9B,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAC;SACzD;QAED,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,sBAAsB,EAAE,gBAAgB,CAAC,CAAC;QAEtF,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CACpD,WAAW,EACX,oCAAoC,CAAC,cAAc,CAAC,CACrD,CAAC;YAEF,MAAM,cAAc,GAAG,KAAK,CAAC,6DAA6D,CACxF,MAAM,CACP,CAAC;YAEF,OAAO,WAAW,CAA0C,cAAc,CAAC,CAAC;SAC7E;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,WAAW,CACtB,GAAW,EACX,UAAsC,EAAE;QAExC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,0BAA0B,EAAE,OAAO,CAAC,CAAC;QACjF,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAC5C,GAAG,EACH,oCAAoC,CAAC,cAAc,CAAC,CACrD,CAAC;YACF,OAAO,WAAW,CAAI,MAAM,CAAC,IAAI,CAAC,CAAC;SACpC;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;;;;;OASG;IACI,KAAK,CAAC,cAAc;IACzB,wEAAwE;IACxE,KAA6B,EAC7B,UAAiC,EAAE;QAEnC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;QACpF,IAAI;YACF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAC9C,EAAE,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EACrC,oCAAoC,CAAC,cAAc,CAAC,CACrD,CAAC;YACF,IAAI,OAAO,CAAC,iBAAiB,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,GAAG,EAAE;gBAChE,MAAM,MAAM,CAAC;aACd;YACD,OAAO,MAAM,CAAC;SACf;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,eAAe,CAC1B,SAAc,EACd,UAAkC,EAAE;QAEpC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;QAErF,MAAM,KAAK,GAAG,IAAI,mBAAmB,EAAK,CAAC;QAC3C,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAExB,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;SACzD;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,cAAc,CACzB,SAAc,EACd,UAAiC,EAAE;QAEnC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;QAEpF,MAAM,KAAK,GAAG,IAAI,mBAAmB,EAAK,CAAC;QAC3C,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAEvB,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;SACzD;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,sBAAsB,CACjC,SAAc,EACd,UAAyC,EAAE;QAE3C,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,6BAA6B,EAAE,OAAO,CAAC,CAAC;QAEpF,MAAM,KAAK,GAAG,IAAI,mBAAmB,EAAK,CAAC;QAC3C,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAE/B,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;SACzD;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAwBM,KAAK,CAAC,eAAe,CAC1B,kBAAiC,EACjC,kBAAsD,EACtD,UAAkC,EAAE;QAEpC,MAAM,EAAE,IAAI,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,8BAA8B,EAAE,OAAO,CAAC,CAAC;QAErF,MAAM,KAAK,GAAG,IAAI,mBAAmB,EAAK,CAAC;QAC3C,IAAI,OAAO,kBAAkB,KAAK,QAAQ,EAAE;YAC1C,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,kBAA8B,CAAC,CAAC;SAClE;aAAM;YACL,KAAK,CAAC,MAAM,CAAC,kBAAyB,CAAC,CAAC;SACzC;QAED,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;SACzD;QAAC,OAAO,CAAC,EAAE;YACV,IAAI,CAAC,SAAS,CAAC;gBACb,IAAI,EAAE,cAAc,CAAC,KAAK;gBAC1B,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACH,MAAM,CAAC,CAAC;SACT;gBAAS;YACR,IAAI,CAAC,GAAG,EAAE,CAAC;SACZ;IACH,CAAC;IAEO,uBAAuB,CAC7B,QAA4B,EAC5B,kBAA6C;QAE7C,IAAI,CAAC,QAAQ,IAAI,CAAC,kBAAkB,EAAE;YACpC,OAAO,SAAS,CAAC;SAClB;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,QAAQ;YACR,kBAAkB;SACnB,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAEO,uBAAuB,CAC7B,KAAc;QAEd,IAAI,CAAC,KAAK,EAAE;YACV,OAAO,SAAS,CAAC;SAClB;QAED,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAEnC,IAAI;YACF,MAAM,MAAM,GAIR,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAE7B,IAAI,MAAM,CAAC,UAAU,KAAK,IAAI,CAAC,UAAU,EAAE;gBACzC,MAAM,IAAI,UAAU,CAAC,mDAAmD,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;aAC7F;YAED,OAAO;gBACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;aAC9C,CAAC;SACH;QAAC,OAAO,CAAC,EAAE;YACV,MAAM,IAAI,KAAK,CAAC,4CAA4C,YAAY,EAAE,CAAC,CAAC;SAC7E;IACH,CAAC;IAED,wDAAwD;IAChD,uBAAuB,CAC7B,GAAM;QAKN,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,KAAqB,GAAG,EAAnB,WAAW,UAAK,GAAG,EAArE,mDAA+D,CAAM,CAAC;QAE5E,OAAO;YACL,gBAAgB,EAAE;gBAChB,WAAW;gBACX,cAAc;gBACd,cAAc;aACf;YACD,WAAW;SACZ,CAAC;IACJ,CAAC;IAEO,aAAa,CAAS,MAAiB;QAC7C,IAAI,MAAM,EAAE;YACV,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SACzB;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAEO,mBAAmB,CAAS,YAAuB;QACzD,IAAI,YAAY,EAAE;YAChB,OAAO,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC/B;QACD,OAAO,YAAY,CAAC;IACtB,CAAC;IAEO,cAAc,CAAC,OAAkB;QACvC,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;SAC1B;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;CACF","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/// <reference lib=\"esnext.asynciterable\" />\n\nimport {\n PipelineOptions,\n InternalPipelineOptions,\n createPipelineFromOptions,\n OperationOptions,\n operationOptionsToRequestOptionsBase,\n RequestPolicyFactory,\n bearerTokenAuthenticationPolicy\n} from \"@azure/core-http\";\nimport { SearchClient as GeneratedClient } from \"./generated/data/searchClient\";\nimport { KeyCredential, TokenCredential, isTokenCredential } from \"@azure/core-auth\";\nimport { createSearchApiKeyCredentialPolicy } from \"./searchApiKeyCredentialPolicy\";\nimport { SDK_VERSION } from \"./constants\";\nimport { logger } from \"./logger\";\nimport {\n AutocompleteResult,\n AutocompleteRequest,\n SuggestRequest,\n IndexDocumentsResult\n} from \"./generated/data/models\";\nimport { createSpan } from \"./tracing\";\nimport { SpanStatusCode } from \"@azure/core-tracing\";\nimport { deserialize, serialize } from \"./serialization\";\nimport {\n CountDocumentsOptions,\n AutocompleteOptions,\n SearchOptions,\n SearchDocumentsResult,\n SearchIterator,\n ListSearchResultsPageSettings,\n SearchResult,\n SuggestOptions,\n SuggestDocumentsResult,\n GetDocumentOptions,\n IndexDocumentsOptions,\n UploadDocumentsOptions,\n MergeDocumentsOptions,\n DeleteDocumentsOptions,\n SearchDocumentsPageResult,\n MergeOrUploadDocumentsOptions,\n SearchRequest\n} from \"./indexModels\";\nimport { odataMetadataPolicy } from \"./odataMetadataPolicy\";\nimport { IndexDocumentsBatch } from \"./indexDocumentsBatch\";\nimport { encode, decode } from \"./base64\";\nimport * as utils from \"./serviceUtils\";\nimport { IndexDocumentsClient } from \"./searchIndexingBufferedSender\";\nimport { KnownSearchAudience } from \"./searchAudience\";\n/**\n * Client options used to configure Cognitive Search API requests.\n */\nexport interface SearchClientOptions extends PipelineOptions {\n /**\n * The API version to use when communicating with the service.\n */\n apiVersion?: string;\n\n /**\n * The Audience to use for authentication with Azure Active Directory (AAD). The\n * audience is not considered when using a shared key.\n * {@link KnownSearchAudience} can be used interchangeably with audience\n */\n audience?: string;\n}\n\n/**\n * Class used to perform operations against a search index,\n * including querying documents in the index as well as\n * adding, updating, and removing them.\n */\nexport class SearchClient<T> implements IndexDocumentsClient<T> {\n /// Maintenance note: when updating supported API versions,\n /// the ContinuationToken logic will need to be updated below.\n\n /**\n * The API version to use when communicating with the service.\n */\n public readonly apiVersion: string = \"2020-06-30-Preview\";\n\n /**\n * The endpoint of the search service\n */\n public readonly endpoint: string;\n\n /**\n * The name of the index\n */\n public readonly indexName: string;\n\n /**\n * @internal\n * @hidden\n * A reference to the auto-generated SearchClient\n */\n private readonly client: GeneratedClient;\n\n /**\n * Creates an instance of SearchClient.\n *\n * Example usage:\n * ```ts\n * const { SearchClient, AzureKeyCredential } = require(\"@azure/search-documents\");\n *\n * const client = new SearchClient(\n * \"<endpoint>\",\n * \"<indexName>\",\n * new AzureKeyCredential(\"<Admin Key>\");\n * );\n * ```\n * @param endpoint - The endpoint of the search service\n * @param indexName - The name of the index\n * @param credential - Used to authenticate requests to the service.\n * @param options - Used to configure the Search client.\n */\n constructor(\n endpoint: string,\n indexName: string,\n credential: KeyCredential | TokenCredential,\n options: SearchClientOptions = {}\n ) {\n this.endpoint = endpoint;\n this.indexName = indexName;\n\n const libInfo = `azsdk-js-search-documents/${SDK_VERSION}`;\n if (!options.userAgentOptions) {\n options.userAgentOptions = {};\n }\n if (options.userAgentOptions.userAgentPrefix) {\n options.userAgentOptions.userAgentPrefix = `${options.userAgentOptions.userAgentPrefix} ${libInfo}`;\n } else {\n options.userAgentOptions.userAgentPrefix = libInfo;\n }\n\n const internalPipelineOptions: InternalPipelineOptions = {\n ...options,\n ...{\n loggingOptions: {\n logger: logger.info,\n allowedHeaderNames: [\n \"elapsed-time\",\n \"Location\",\n \"OData-MaxVersion\",\n \"OData-Version\",\n \"Prefer\",\n \"throttle-reason\"\n ]\n }\n }\n };\n\n const scope: string = options.audience\n ? `${options.audience}/.default`\n : `${KnownSearchAudience.AzurePublicCloud}/.default`;\n\n const requestPolicyFactory: RequestPolicyFactory = isTokenCredential(credential)\n ? bearerTokenAuthenticationPolicy(credential, scope)\n : createSearchApiKeyCredentialPolicy(credential);\n\n const pipeline = createPipelineFromOptions(internalPipelineOptions, requestPolicyFactory);\n\n if (Array.isArray(pipeline.requestPolicyFactories)) {\n pipeline.requestPolicyFactories.unshift(odataMetadataPolicy(\"none\"));\n }\n\n let apiVersion = this.apiVersion;\n\n if (options.apiVersion) {\n if (![\"2020-06-30-Preview\", \"2020-06-30\"].includes(options.apiVersion)) {\n throw new Error(`Invalid Api Version: ${options.apiVersion}`);\n }\n apiVersion = options.apiVersion;\n }\n\n this.client = new GeneratedClient(this.endpoint, this.indexName, apiVersion, pipeline);\n }\n\n /**\n * Retrieves the number of documents in the index.\n * @param options - Options to the count operation.\n */\n public async getDocumentsCount(options: CountDocumentsOptions = {}): Promise<number> {\n const { span, updatedOptions } = createSpan(\"SearchClient-getDocumentsCount\", options);\n try {\n const result = await this.client.documents.count(\n operationOptionsToRequestOptionsBase(updatedOptions)\n );\n return Number(result._response.bodyAsText);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Based on a partial searchText from the user, return a list\n * of potential completion strings based on a specified suggester.\n * @param searchText - The search text on which to base autocomplete results.\n * @param suggesterName - The name of the suggester as specified in the suggesters collection that's part of the index definition.\n * @param options - Options to the autocomplete operation.\n */\n public async autocomplete<Fields extends keyof T>(\n searchText: string,\n suggesterName: string,\n options: AutocompleteOptions<Fields> = {}\n ): Promise<AutocompleteResult> {\n const { operationOptions, restOptions } = this.extractOperationOptions({ ...options });\n const { searchFields, ...nonFieldOptions } = restOptions;\n const fullOptions: AutocompleteRequest = {\n searchText: searchText,\n suggesterName: suggesterName,\n searchFields: this.convertSearchFields<Fields>(searchFields),\n ...nonFieldOptions\n };\n\n if (!fullOptions.searchText) {\n throw new RangeError(\"searchText must be provided.\");\n }\n\n if (!fullOptions.suggesterName) {\n throw new RangeError(\"suggesterName must be provided.\");\n }\n\n const { span, updatedOptions } = createSpan(\"SearchClient-autocomplete\", operationOptions);\n\n try {\n const result = await this.client.documents.autocompletePost(\n fullOptions,\n operationOptionsToRequestOptionsBase(updatedOptions)\n );\n return result;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n private async searchDocuments<Fields extends keyof T>(\n searchText?: string,\n options: SearchOptions<Fields> = {},\n nextPageParameters: SearchRequest = {}\n ): Promise<SearchDocumentsPageResult<Pick<T, Fields>>> {\n const { operationOptions, restOptions } = this.extractOperationOptions({ ...options });\n const { select, searchFields, orderBy, ...nonFieldOptions } = restOptions;\n const fullOptions: SearchRequest = {\n searchFields: this.convertSearchFields<Fields>(searchFields),\n select: this.convertSelect<Fields>(select),\n orderBy: this.convertOrderBy(orderBy),\n ...nonFieldOptions,\n ...nextPageParameters\n };\n\n const { span, updatedOptions } = createSpan(\"SearchClient-searchDocuments\", operationOptions);\n\n try {\n const result = await this.client.documents.searchPost(\n {\n ...fullOptions,\n includeTotalResultCount: fullOptions.includeTotalCount,\n searchText: searchText\n },\n operationOptionsToRequestOptionsBase(updatedOptions)\n );\n\n const { results, count, coverage, facets, nextLink } = result;\n\n const modifiedResults = utils.generatedSearchResultToPublicSearchResult<T>(results);\n\n const converted: SearchDocumentsPageResult<T> = {\n results: modifiedResults,\n count,\n coverage,\n facets,\n continuationToken: this.encodeContinuationToken(nextLink, result.nextPageParameters)\n };\n\n return deserialize<SearchDocumentsPageResult<Pick<T, Fields>>>(converted);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n private async *listSearchResultsPage<Fields extends keyof T>(\n searchText?: string,\n options: SearchOptions<Fields> = {},\n settings: ListSearchResultsPageSettings = {}\n ): AsyncIterableIterator<SearchDocumentsPageResult<Pick<T, Fields>>> {\n let decodedContinuation = this.decodeContinuationToken(settings.continuationToken);\n let result = await this.searchDocuments<Fields>(\n searchText,\n options,\n decodedContinuation?.nextPageParameters\n );\n\n yield result;\n\n // Technically, we should also leverage nextLink, but the generated code\n // doesn't support this yet.\n while (result.continuationToken) {\n decodedContinuation = this.decodeContinuationToken(result.continuationToken);\n result = await this.searchDocuments(\n searchText,\n options,\n decodedContinuation?.nextPageParameters\n );\n yield result;\n }\n }\n\n private async *listSearchResultsAll<Fields extends keyof T>(\n firstPage: SearchDocumentsPageResult<Pick<T, Fields>>,\n searchText?: string,\n options: SearchOptions<Fields> = {}\n ): AsyncIterableIterator<SearchResult<Pick<T, Fields>>> {\n yield* firstPage.results;\n if (firstPage.continuationToken) {\n for await (const page of this.listSearchResultsPage(searchText, options, {\n continuationToken: firstPage.continuationToken\n })) {\n yield* page.results;\n }\n }\n }\n\n private listSearchResults<Fields extends keyof T>(\n firstPage: SearchDocumentsPageResult<Pick<T, Fields>>,\n searchText?: string,\n options: SearchOptions<Fields> = {}\n ): SearchIterator<Pick<T, Fields>> {\n const iter = this.listSearchResultsAll(firstPage, searchText, options);\n\n return {\n next() {\n return iter.next();\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n byPage: (settings: ListSearchResultsPageSettings = {}) => {\n return this.listSearchResultsPage(searchText, options, settings);\n }\n };\n }\n\n /**\n * Performs a search on the current index given\n * the specified arguments.\n * @param searchText - Text to search\n * @param options - Options for the search operation.\n */\n public async search<Fields extends keyof T>(\n searchText?: string,\n options: SearchOptions<Fields> = {}\n ): Promise<SearchDocumentsResult<Pick<T, Fields>>> {\n const { span, updatedOptions } = createSpan(\"SearchClient-search\", options);\n\n try {\n const pageResult = await this.searchDocuments(searchText, updatedOptions);\n\n const { count, coverage, facets } = pageResult;\n\n return {\n count,\n coverage,\n facets,\n results: this.listSearchResults(pageResult, searchText, updatedOptions)\n };\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Returns a short list of suggestions based on the searchText\n * and specified suggester.\n * @param searchText - The search text to use to suggest documents. Must be at least 1 character, and no more than 100 characters.\n * @param suggesterName - The name of the suggester as specified in the suggesters collection that's part of the index definition.\n * @param options - Options for the suggest operation\n */\n public async suggest<Fields extends keyof T = never>(\n searchText: string,\n suggesterName: string,\n options: SuggestOptions<Fields> = {}\n ): Promise<SuggestDocumentsResult<Pick<T, Fields>>> {\n const { operationOptions, restOptions } = this.extractOperationOptions({ ...options });\n const { select, searchFields, orderBy, ...nonFieldOptions } = restOptions;\n const fullOptions: SuggestRequest = {\n searchText: searchText,\n suggesterName: suggesterName,\n searchFields: this.convertSearchFields<Fields>(searchFields),\n select: this.convertSelect<Fields>(select),\n orderBy: this.convertOrderBy(orderBy),\n ...nonFieldOptions\n };\n\n if (!fullOptions.searchText) {\n throw new RangeError(\"searchText must be provided.\");\n }\n\n if (!fullOptions.suggesterName) {\n throw new RangeError(\"suggesterName must be provided.\");\n }\n\n const { span, updatedOptions } = createSpan(\"SearchClient-suggest\", operationOptions);\n\n try {\n const result = await this.client.documents.suggestPost(\n fullOptions,\n operationOptionsToRequestOptionsBase(updatedOptions)\n );\n\n const modifiedResult = utils.generatedSuggestDocumentsResultToPublicSuggestDocumentsResult<T>(\n result\n );\n\n return deserialize<SuggestDocumentsResult<Pick<T, Fields>>>(modifiedResult);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieve a particular document from the index by key.\n * @param key - The primary key value of the document\n * @param options - Additional options\n */\n public async getDocument<Fields extends keyof T>(\n key: string,\n options: GetDocumentOptions<Fields> = {}\n ): Promise<T> {\n const { span, updatedOptions } = createSpan(\"SearchClient-getDocument\", options);\n try {\n const result = await this.client.documents.get(\n key,\n operationOptionsToRequestOptionsBase(updatedOptions)\n );\n return deserialize<T>(result.body);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Perform a set of index modifications (upload, merge, mergeOrUpload, delete)\n * for the given set of documents.\n * This operation may partially succeed and not all document operations will\n * be reflected in the index. If you would like to treat this as an exception,\n * set the `throwOnAnyFailure` option to true.\n * For more details about how merging works, see: https://docs.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param batch - An array of actions to perform on the index.\n * @param options - Additional options.\n */\n public async indexDocuments(\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n batch: IndexDocumentsBatch<T>,\n options: IndexDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-indexDocuments\", options);\n try {\n const result = await this.client.documents.index(\n { actions: serialize(batch.actions) },\n operationOptionsToRequestOptionsBase(updatedOptions)\n );\n if (options.throwOnAnyFailure && result._response.status === 207) {\n throw result;\n }\n return result;\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Upload an array of documents to the index.\n * @param documents - The documents to upload.\n * @param options - Additional options.\n */\n public async uploadDocuments(\n documents: T[],\n options: UploadDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-uploadDocuments\", options);\n\n const batch = new IndexDocumentsBatch<T>();\n batch.upload(documents);\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Update a set of documents in the index.\n * For more details about how merging works, see https://docs.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param documents - The updated documents.\n * @param options - Additional options.\n */\n public async mergeDocuments(\n documents: T[],\n options: MergeDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-mergeDocuments\", options);\n\n const batch = new IndexDocumentsBatch<T>();\n batch.merge(documents);\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Update a set of documents in the index or upload them if they don't exist.\n * For more details about how merging works, see https://docs.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param documents - The updated documents.\n * @param options - Additional options.\n */\n public async mergeOrUploadDocuments(\n documents: T[],\n options: MergeOrUploadDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-mergeDocuments\", options);\n\n const batch = new IndexDocumentsBatch<T>();\n batch.mergeOrUpload(documents);\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Delete a set of documents.\n * @param documents - Documents to be deleted.\n * @param options - Additional options.\n */\n public async deleteDocuments(\n documents: T[],\n options?: DeleteDocumentsOptions\n ): Promise<IndexDocumentsResult>;\n\n /**\n * Delete a set of documents.\n * @param keyName - The name of their primary key in the index.\n * @param keyValues - The primary key values of documents to delete.\n * @param options - Additional options.\n */\n public async deleteDocuments(\n keyName: keyof T,\n keyValues: string[],\n options?: DeleteDocumentsOptions\n ): Promise<IndexDocumentsResult>;\n\n public async deleteDocuments(\n keyNameOrDocuments: keyof T | T[],\n keyValuesOrOptions?: string[] | DeleteDocumentsOptions,\n options: DeleteDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-deleteDocuments\", options);\n\n const batch = new IndexDocumentsBatch<T>();\n if (typeof keyNameOrDocuments === \"string\") {\n batch.delete(keyNameOrDocuments, keyValuesOrOptions as string[]);\n } else {\n batch.delete(keyNameOrDocuments as T[]);\n }\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e) {\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: e.message\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n private encodeContinuationToken(\n nextLink: string | undefined,\n nextPageParameters: SearchRequest | undefined\n ): string | undefined {\n if (!nextLink || !nextPageParameters) {\n return undefined;\n }\n const payload = JSON.stringify({\n apiVersion: this.apiVersion,\n nextLink,\n nextPageParameters\n });\n return encode(payload);\n }\n\n private decodeContinuationToken(\n token?: string\n ): { nextPageParameters: SearchRequest; nextLink: string } | undefined {\n if (!token) {\n return undefined;\n }\n\n const decodedToken = decode(token);\n\n try {\n const result: {\n apiVersion: string;\n nextLink: string;\n nextPageParameters: SearchRequest;\n } = JSON.parse(decodedToken);\n\n if (result.apiVersion !== this.apiVersion) {\n throw new RangeError(`Continuation token uses unsupported apiVersion \"${this.apiVersion}\"`);\n }\n\n return {\n nextLink: result.nextLink,\n nextPageParameters: result.nextPageParameters\n };\n } catch (e) {\n throw new Error(`Corrupted or invalid continuation token: ${decodedToken}`);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-shadow\n private extractOperationOptions<T extends OperationOptions>(\n obj: T\n ): {\n operationOptions: OperationOptions;\n restOptions: Pick<T, Exclude<keyof T, keyof OperationOptions>>;\n } {\n const { abortSignal, requestOptions, tracingOptions, ...restOptions } = obj;\n\n return {\n operationOptions: {\n abortSignal,\n requestOptions,\n tracingOptions\n },\n restOptions\n };\n }\n\n private convertSelect<Fields>(select?: Fields[]): string | undefined {\n if (select) {\n return select.join(\",\");\n }\n return select;\n }\n\n private convertSearchFields<Fields>(searchFields?: Fields[]): string | undefined {\n if (searchFields) {\n return searchFields.join(\",\");\n }\n return searchFields;\n }\n\n private convertOrderBy(orderBy?: string[]): string | undefined {\n if (orderBy) {\n return orderBy.join(\",\");\n }\n return orderBy;\n }\n}\n"]}
1
+ {"version":3,"file":"searchClient.js","sourceRoot":"","sources":["../../src/searchClient.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\n/// <reference lib=\"esnext.asynciterable\" />\n\nimport { InternalClientPipelineOptions } from \"@azure/core-client\";\nimport {\n LogPolicyOptions,\n UserAgentPolicyOptions,\n bearerTokenAuthenticationPolicy,\n} from \"@azure/core-rest-pipeline\";\nimport { SearchClient as GeneratedClient } from \"./generated/data/searchClient\";\nimport { KeyCredential, TokenCredential, isTokenCredential } from \"@azure/core-auth\";\nimport { createSearchApiKeyCredentialPolicy } from \"./searchApiKeyCredentialPolicy\";\nimport { logger } from \"./logger\";\nimport {\n AutocompleteRequest,\n AutocompleteResult,\n IndexDocumentsResult,\n SuggestRequest,\n SearchRequest as GeneratedSearchRequest,\n} from \"./generated/data/models\";\nimport { createSpan } from \"./tracing\";\nimport { deserialize, serialize } from \"./serialization\";\nimport {\n AutocompleteOptions,\n CountDocumentsOptions,\n DeleteDocumentsOptions,\n GetDocumentOptions,\n IndexDocumentsOptions,\n ListSearchResultsPageSettings,\n MergeDocumentsOptions,\n MergeOrUploadDocumentsOptions,\n SearchDocumentsPageResult,\n SearchDocumentsResult,\n SearchIterator,\n SearchOptions,\n SearchRequest,\n SearchResult,\n SuggestDocumentsResult,\n SuggestOptions,\n UploadDocumentsOptions,\n} from \"./indexModels\";\nimport { createOdataMetadataPolicy } from \"./odataMetadataPolicy\";\nimport { IndexDocumentsBatch } from \"./indexDocumentsBatch\";\nimport { decode, encode } from \"./base64\";\nimport * as utils from \"./serviceUtils\";\nimport { IndexDocumentsClient } from \"./searchIndexingBufferedSender\";\nimport { ExtendedCommonClientOptions } from \"@azure/core-http-compat\";\nimport { KnownSearchAudience } from \"./searchAudience\";\nimport { SDK_VERSION } from \"./constants\";\n\n/**\n * Client options used to configure Cognitive Search API requests.\n */\nexport interface SearchClientOptions extends ExtendedCommonClientOptions {\n /**\n * The API version to use when communicating with the service.\n */\n apiVersion?: string;\n\n /**\n * The Audience to use for authentication with Azure Active Directory (AAD). The\n * audience is not considered when using a shared key.\n * {@link KnownSearchAudience} can be used interchangeably with audience\n */\n audience?: string;\n}\n\n/**\n * Class used to perform operations against a search index,\n * including querying documents in the index as well as\n * adding, updating, and removing them.\n */\nexport class SearchClient<TModel> implements IndexDocumentsClient<TModel> {\n /**\n * The API version to use when communicating with the service.\n */\n public readonly apiVersion: string = utils.defaultServiceVersion;\n\n /**\n * The endpoint of the search service\n */\n public readonly endpoint: string;\n\n /**\n * The name of the index\n */\n public readonly indexName: string;\n\n /**\n * @internal\n * @hidden\n * A reference to the auto-generated SearchClient\n */\n private readonly client: GeneratedClient;\n\n /**\n * Creates an instance of SearchClient.\n *\n * Example usage:\n * ```ts\n * const { SearchClient, AzureKeyCredential } = require(\"@azure/search-documents\");\n *\n * const client = new SearchClient(\n * \"<endpoint>\",\n * \"<indexName>\",\n * new AzureKeyCredential(\"<Admin Key>\")\n * );\n * ```\n * @param endpoint - The endpoint of the search service\n * @param indexName - The name of the index\n * @param credential - Used to authenticate requests to the service.\n * @param options - Used to configure the Search client.\n *\n * @typeParam TModel - An optional type that represents the documents stored in\n * the search index. For the best typing experience, all non-key fields should\n * be marked optional and nullable, and the key property should have the\n * non-nullable type `string`.\n */\n constructor(\n endpoint: string,\n indexName: string,\n credential: KeyCredential | TokenCredential,\n options: SearchClientOptions = {}\n ) {\n this.endpoint = endpoint;\n this.indexName = indexName;\n\n const libInfo = `azsdk-js-search-documents/${SDK_VERSION}`;\n const userAgentOptions: UserAgentPolicyOptions = {\n ...options.userAgentOptions,\n userAgentPrefix: options.userAgentOptions?.userAgentPrefix\n ? `${options.userAgentOptions.userAgentPrefix} ${libInfo}`\n : libInfo,\n };\n\n const loggingOptions: LogPolicyOptions = {\n logger: logger.info,\n additionalAllowedHeaderNames: [\n \"elapsed-time\",\n \"Location\",\n \"OData-MaxVersion\",\n \"OData-Version\",\n \"Prefer\",\n \"throttle-reason\",\n ],\n };\n\n const internalClientPipelineOptions: InternalClientPipelineOptions = {\n ...options,\n userAgentOptions,\n loggingOptions,\n };\n\n this.apiVersion = options.apiVersion ?? utils.defaultServiceVersion;\n\n this.client = new GeneratedClient(\n this.endpoint,\n this.indexName,\n this.apiVersion,\n internalClientPipelineOptions\n );\n\n if (isTokenCredential(credential)) {\n const scope: string = options.audience\n ? `${options.audience}/.default`\n : `${KnownSearchAudience.AzurePublicCloud}/.default`;\n\n this.client.pipeline.addPolicy(\n bearerTokenAuthenticationPolicy({ credential, scopes: scope })\n );\n } else {\n this.client.pipeline.addPolicy(createSearchApiKeyCredentialPolicy(credential));\n }\n\n this.client.pipeline.addPolicy(createOdataMetadataPolicy(\"none\"));\n }\n\n /**\n * Retrieves the number of documents in the index.\n * @param options - Options to the count operation.\n */\n public async getDocumentsCount(options: CountDocumentsOptions = {}): Promise<number> {\n const { span, updatedOptions } = createSpan(\"SearchClient-getDocumentsCount\", options);\n try {\n let documentsCount: number = 0;\n await this.client.documents.count({\n ...updatedOptions,\n onResponse: (rawResponse, flatResponse) => {\n documentsCount = Number(rawResponse.bodyAsText);\n if (updatedOptions.onResponse) {\n updatedOptions.onResponse(rawResponse, flatResponse);\n }\n },\n });\n\n return documentsCount;\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Based on a partial searchText from the user, return a list\n * of potential completion strings based on a specified suggester.\n * @param searchText - The search text on which to base autocomplete results.\n * @param suggesterName - The name of the suggester as specified in the suggesters collection that's part of the index definition.\n * @param options - Options to the autocomplete operation.\n */\n public async autocomplete<TFields extends keyof TModel>(\n searchText: string,\n suggesterName: string,\n options: AutocompleteOptions<TFields> = {}\n ): Promise<AutocompleteResult> {\n const { searchFields, ...nonFieldOptions } = options;\n const fullOptions: AutocompleteRequest = {\n searchText: searchText,\n suggesterName: suggesterName,\n searchFields: this.convertSearchFields(searchFields as unknown as string[]),\n ...nonFieldOptions,\n };\n\n if (!fullOptions.searchText) {\n throw new RangeError(\"searchText must be provided.\");\n }\n\n if (!fullOptions.suggesterName) {\n throw new RangeError(\"suggesterName must be provided.\");\n }\n\n const { span, updatedOptions } = createSpan(\"SearchClient-autocomplete\", options);\n\n try {\n const result = await this.client.documents.autocompletePost(fullOptions, updatedOptions);\n return result;\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n private async searchDocuments<TFields extends keyof TModel>(\n searchText?: string,\n options: SearchOptions<TFields> = {},\n nextPageParameters: SearchRequest = {}\n ): Promise<SearchDocumentsPageResult<Pick<TModel, TFields>>> {\n const { searchFields, select, orderBy, includeTotalCount, ...restOptions } = options;\n const fullOptions: GeneratedSearchRequest = {\n ...restOptions,\n ...nextPageParameters,\n searchFields: this.convertSearchFields(searchFields as string[]),\n select: this.convertSelect<TFields>(select as TFields[]) || \"*\",\n orderBy: this.convertOrderBy(orderBy),\n includeTotalResultCount: includeTotalCount,\n };\n\n const { span, updatedOptions } = createSpan(\"SearchClient-searchDocuments\", options);\n\n try {\n const result = await this.client.documents.searchPost(\n {\n ...fullOptions,\n searchText: searchText,\n },\n updatedOptions\n );\n\n const {\n results,\n nextLink,\n nextPageParameters: resultNextPageParameters,\n ...restResult\n } = result;\n\n const modifiedResults = utils.generatedSearchResultToPublicSearchResult<TModel>(results);\n\n const converted: SearchDocumentsPageResult<Pick<TModel, TFields>> = {\n ...restResult,\n results: modifiedResults,\n continuationToken: this.encodeContinuationToken(nextLink, resultNextPageParameters),\n };\n\n return deserialize<SearchDocumentsPageResult<Pick<TModel, TFields>>>(converted);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n private async *listSearchResultsPage<TFields extends keyof TModel>(\n searchText?: string,\n options: SearchOptions<TFields> = {},\n settings: ListSearchResultsPageSettings = {}\n ): AsyncIterableIterator<SearchDocumentsPageResult<Pick<TModel, TFields>>> {\n let decodedContinuation = this.decodeContinuationToken(settings.continuationToken);\n let result = await this.searchDocuments<TFields>(\n searchText,\n options,\n decodedContinuation?.nextPageParameters\n );\n\n yield result;\n\n // Technically, we should also leverage nextLink, but the generated code\n // doesn't support this yet.\n while (result.continuationToken) {\n decodedContinuation = this.decodeContinuationToken(result.continuationToken);\n result = await this.searchDocuments(\n searchText,\n options,\n decodedContinuation?.nextPageParameters\n );\n yield result;\n }\n }\n\n private async *listSearchResultsAll<TFields extends keyof TModel>(\n firstPage: SearchDocumentsPageResult<Pick<TModel, TFields>>,\n searchText?: string,\n options: SearchOptions<TFields> = {}\n ): AsyncIterableIterator<SearchResult<Pick<TModel, TFields>>> {\n yield* firstPage.results;\n if (firstPage.continuationToken) {\n for await (const page of this.listSearchResultsPage(searchText, options, {\n continuationToken: firstPage.continuationToken,\n })) {\n yield* page.results;\n }\n }\n }\n\n private listSearchResults<TFields extends keyof TModel>(\n firstPage: SearchDocumentsPageResult<Pick<TModel, TFields>>,\n searchText?: string,\n options: SearchOptions<TFields> = {}\n ): SearchIterator<Pick<TModel, TFields>> {\n const iter = this.listSearchResultsAll(firstPage, searchText, options);\n\n return {\n next() {\n return iter.next();\n },\n [Symbol.asyncIterator]() {\n return this;\n },\n byPage: (settings: ListSearchResultsPageSettings = {}) => {\n return this.listSearchResultsPage(searchText, options, settings);\n },\n };\n }\n\n /**\n * Performs a search on the current index given\n * the specified arguments.\n * @param searchText - Text to search\n * @param options - Options for the search operation.\n */\n public async search<TFields extends keyof TModel>(\n searchText?: string,\n options: SearchOptions<TFields> = {}\n ): Promise<SearchDocumentsResult<Pick<TModel, TFields>>> {\n const { span, updatedOptions } = createSpan(\"SearchClient-search\", options);\n\n try {\n const pageResult = await this.searchDocuments(searchText, updatedOptions);\n\n return {\n ...pageResult,\n results: this.listSearchResults(pageResult, searchText, updatedOptions),\n };\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Returns a short list of suggestions based on the searchText\n * and specified suggester.\n * @param searchText - The search text to use to suggest documents. Must be at least 1 character, and no more than 100 characters.\n * @param suggesterName - The name of the suggester as specified in the suggesters collection that's part of the index definition.\n * @param options - Options for the suggest operation\n */\n public async suggest<TFields extends keyof TModel = never>(\n searchText: string,\n suggesterName: string,\n options: SuggestOptions<TFields> = {}\n ): Promise<SuggestDocumentsResult<Pick<TModel, TFields>>> {\n const { select, searchFields, orderBy, ...nonFieldOptions } = options;\n const fullOptions: SuggestRequest = {\n searchText: searchText,\n suggesterName: suggesterName,\n select: this.convertSelect<TFields>(select as TFields[]),\n searchFields: this.convertSearchFields(searchFields as string[]),\n orderBy: this.convertOrderBy(orderBy),\n ...nonFieldOptions,\n };\n\n if (!fullOptions.searchText) {\n throw new RangeError(\"searchText must be provided.\");\n }\n\n if (!fullOptions.suggesterName) {\n throw new RangeError(\"suggesterName must be provided.\");\n }\n\n const { span, updatedOptions } = createSpan(\"SearchClient-suggest\", options);\n\n try {\n const result = await this.client.documents.suggestPost(fullOptions, updatedOptions);\n\n const modifiedResult =\n utils.generatedSuggestDocumentsResultToPublicSuggestDocumentsResult<TModel>(result);\n\n return deserialize<SuggestDocumentsResult<Pick<TModel, TFields>>>(modifiedResult);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Retrieve a particular document from the index by key.\n * @param key - The primary key value of the document\n * @param options - Additional options\n */\n public async getDocument<TFields extends Extract<keyof TModel, string>>(\n key: string,\n options: GetDocumentOptions<TFields> = {}\n ): Promise<TModel> {\n const { span, updatedOptions } = createSpan(\"SearchClient-getDocument\", options);\n try {\n const result = await this.client.documents.get(key, updatedOptions);\n return deserialize<TModel>(result);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Perform a set of index modifications (upload, merge, mergeOrUpload, delete)\n * for the given set of documents.\n * This operation may partially succeed and not all document operations will\n * be reflected in the index. If you would like to treat this as an exception,\n * set the `throwOnAnyFailure` option to true.\n * For more details about how merging works, see: https://docs.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param batch - An array of actions to perform on the index.\n * @param options - Additional options.\n */\n public async indexDocuments(\n // eslint-disable-next-line @azure/azure-sdk/ts-use-interface-parameters\n batch: IndexDocumentsBatch<TModel>,\n options: IndexDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-indexDocuments\", options);\n try {\n let status: number = 0;\n const result = await this.client.documents.index(\n { actions: serialize(batch.actions) },\n {\n ...updatedOptions,\n onResponse: (rawResponse, flatResponse) => {\n status = rawResponse.status;\n if (updatedOptions.onResponse) {\n updatedOptions.onResponse(rawResponse, flatResponse);\n }\n },\n }\n );\n if (options.throwOnAnyFailure && status === 207) {\n throw result;\n }\n return result;\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Upload an array of documents to the index.\n * @param documents - The documents to upload.\n * @param options - Additional options.\n */\n public async uploadDocuments(\n documents: TModel[],\n options: UploadDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-uploadDocuments\", options);\n\n const batch = new IndexDocumentsBatch<TModel>();\n batch.upload(documents);\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Update a set of documents in the index.\n * For more details about how merging works, see https://docs.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param documents - The updated documents.\n * @param options - Additional options.\n */\n public async mergeDocuments(\n documents: TModel[],\n options: MergeDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-mergeDocuments\", options);\n\n const batch = new IndexDocumentsBatch<TModel>();\n batch.merge(documents);\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Update a set of documents in the index or upload them if they don't exist.\n * For more details about how merging works, see https://docs.microsoft.com/en-us/rest/api/searchservice/AddUpdate-or-Delete-Documents\n * @param documents - The updated documents.\n * @param options - Additional options.\n */\n public async mergeOrUploadDocuments(\n documents: TModel[],\n options: MergeOrUploadDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-mergeDocuments\", options);\n\n const batch = new IndexDocumentsBatch<TModel>();\n batch.mergeOrUpload(documents);\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n /**\n * Delete a set of documents.\n * @param documents - Documents to be deleted.\n * @param options - Additional options.\n */\n public async deleteDocuments(\n documents: TModel[],\n options?: DeleteDocumentsOptions\n ): Promise<IndexDocumentsResult>;\n\n /**\n * Delete a set of documents.\n * @param keyName - The name of their primary key in the index.\n * @param keyValues - The primary key values of documents to delete.\n * @param options - Additional options.\n */\n public async deleteDocuments(\n keyName: keyof TModel,\n keyValues: string[],\n options?: DeleteDocumentsOptions\n ): Promise<IndexDocumentsResult>;\n\n public async deleteDocuments(\n keyNameOrDocuments: keyof TModel | TModel[],\n keyValuesOrOptions?: string[] | DeleteDocumentsOptions,\n options: DeleteDocumentsOptions = {}\n ): Promise<IndexDocumentsResult> {\n const { span, updatedOptions } = createSpan(\"SearchClient-deleteDocuments\", options);\n\n const batch = new IndexDocumentsBatch<TModel>();\n if (typeof keyNameOrDocuments === \"string\") {\n batch.delete(keyNameOrDocuments, keyValuesOrOptions as string[]);\n } else {\n batch.delete(keyNameOrDocuments as TModel[]);\n }\n\n try {\n return await this.indexDocuments(batch, updatedOptions);\n } catch (e: any) {\n span.setStatus({\n status: \"error\",\n error: e.message,\n });\n throw e;\n } finally {\n span.end();\n }\n }\n\n private encodeContinuationToken(\n nextLink: string | undefined,\n nextPageParameters: SearchRequest | undefined\n ): string | undefined {\n if (!nextLink || !nextPageParameters) {\n return undefined;\n }\n const payload = JSON.stringify({\n apiVersion: this.apiVersion,\n nextLink,\n nextPageParameters,\n });\n return encode(payload);\n }\n\n private decodeContinuationToken(\n token?: string\n ): { nextPageParameters: SearchRequest; nextLink: string } | undefined {\n if (!token) {\n return undefined;\n }\n\n const decodedToken = decode(token);\n\n try {\n const result: {\n apiVersion: string;\n nextLink: string;\n nextPageParameters: SearchRequest;\n } = JSON.parse(decodedToken);\n\n if (result.apiVersion !== this.apiVersion) {\n throw new RangeError(`Continuation token uses unsupported apiVersion \"${this.apiVersion}\"`);\n }\n\n return {\n nextLink: result.nextLink,\n nextPageParameters: result.nextPageParameters,\n };\n } catch (e: any) {\n throw new Error(`Corrupted or invalid continuation token: ${decodedToken}`);\n }\n }\n\n private convertSelect<TFields>(select?: TFields[]): string | undefined {\n if (select) {\n return select.join(\",\");\n }\n return select;\n }\n\n private convertSearchFields(searchFields?: string[]): string | undefined {\n if (searchFields) {\n return searchFields.join(\",\");\n }\n return searchFields;\n }\n\n private convertOrderBy(orderBy?: string[]): string | undefined {\n if (orderBy) {\n return orderBy.join(\",\");\n }\n return orderBy;\n }\n}\n"]}