@azure/core-client 1.10.2-alpha.20260306.4 → 1.10.2

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 (105) hide show
  1. package/dist/browser/authorizeRequestOnTenantChallenge.js +1 -2
  2. package/dist/browser/authorizeRequestOnTenantChallenge.js.map +1 -1
  3. package/dist/browser/base64.d.ts +1 -5
  4. package/dist/browser/base64.js +6 -14
  5. package/dist/browser/base64.js.map +1 -1
  6. package/dist/browser/interfaceHelpers.js +1 -2
  7. package/dist/browser/interfaceHelpers.js.map +1 -1
  8. package/dist/browser/operationHelpers.js +8 -4
  9. package/dist/browser/operationHelpers.js.map +1 -1
  10. package/dist/browser/serializationPolicy.js +1 -1
  11. package/dist/browser/serializationPolicy.js.map +1 -1
  12. package/dist/browser/serializer.js +32 -11
  13. package/dist/browser/serializer.js.map +1 -1
  14. package/dist/browser/serviceClient.js +2 -2
  15. package/dist/browser/serviceClient.js.map +1 -1
  16. package/dist/browser/{state.d.ts → state-web.d.mts} +1 -1
  17. package/dist/browser/{state.js → state-web.mjs} +1 -1
  18. package/dist/browser/state-web.mjs.map +1 -0
  19. package/dist/browser/urlHelpers.js +2 -1
  20. package/dist/browser/urlHelpers.js.map +1 -1
  21. package/dist/commonjs/authorizeRequestOnTenantChallenge.js +1 -2
  22. package/dist/commonjs/authorizeRequestOnTenantChallenge.js.map +1 -1
  23. package/dist/commonjs/base64.d.ts +1 -1
  24. package/dist/commonjs/base64.js +6 -6
  25. package/dist/commonjs/base64.js.map +1 -1
  26. package/dist/commonjs/interfaceHelpers.js +1 -2
  27. package/dist/commonjs/interfaceHelpers.js.map +1 -1
  28. package/dist/commonjs/operationHelpers.js +10 -6
  29. package/dist/commonjs/operationHelpers.js.map +1 -1
  30. package/dist/commonjs/serializationPolicy.js +1 -1
  31. package/dist/commonjs/serializationPolicy.js.map +1 -1
  32. package/dist/commonjs/serializer.js +32 -11
  33. package/dist/commonjs/serializer.js.map +1 -1
  34. package/dist/commonjs/serviceClient.js +2 -2
  35. package/dist/commonjs/serviceClient.js.map +1 -1
  36. package/dist/commonjs/{state.d.ts → state-cjs.d.ts} +1 -1
  37. package/dist/commonjs/{state.js → state-cjs.js} +1 -1
  38. package/dist/commonjs/state-cjs.js.map +1 -0
  39. package/dist/commonjs/tsdoc-metadata.json +1 -1
  40. package/dist/commonjs/urlHelpers.js +2 -1
  41. package/dist/commonjs/urlHelpers.js.map +1 -1
  42. package/dist/esm/authorizeRequestOnClaimChallenge.js +67 -44
  43. package/dist/esm/authorizeRequestOnClaimChallenge.js.map +1 -7
  44. package/dist/esm/authorizeRequestOnTenantChallenge.js +97 -72
  45. package/dist/esm/authorizeRequestOnTenantChallenge.js.map +1 -7
  46. package/dist/esm/base64.d.ts +1 -1
  47. package/dist/esm/base64.js +32 -15
  48. package/dist/esm/base64.js.map +1 -7
  49. package/dist/esm/deserializationPolicy.js +202 -205
  50. package/dist/esm/deserializationPolicy.js.map +1 -7
  51. package/dist/esm/httpClientCache.js +8 -8
  52. package/dist/esm/httpClientCache.js.map +1 -7
  53. package/dist/esm/index.js +11 -31
  54. package/dist/esm/index.js.map +1 -7
  55. package/dist/esm/interfaceHelpers.js +34 -23
  56. package/dist/esm/interfaceHelpers.js.map +1 -7
  57. package/dist/esm/interfaces.js +11 -6
  58. package/dist/esm/interfaces.js.map +1 -7
  59. package/dist/esm/log.js +4 -4
  60. package/dist/esm/log.js.map +1 -7
  61. package/dist/esm/operationHelpers.js +86 -73
  62. package/dist/esm/operationHelpers.js.map +1 -7
  63. package/dist/esm/pipeline.js +23 -22
  64. package/dist/esm/pipeline.js.map +1 -7
  65. package/dist/esm/serializationPolicy.js +134 -163
  66. package/dist/esm/serializationPolicy.js.map +1 -7
  67. package/dist/esm/serializer.js +877 -812
  68. package/dist/esm/serializer.js.map +1 -7
  69. package/dist/esm/serviceClient.js +150 -151
  70. package/dist/esm/serviceClient.js.map +1 -7
  71. package/dist/esm/state-cjs.d.ts +8 -0
  72. package/dist/esm/state-cjs.js +9 -0
  73. package/dist/esm/state-cjs.js.map +1 -0
  74. package/dist/esm/state.js +10 -5
  75. package/dist/esm/state.js.map +1 -7
  76. package/dist/esm/urlHelpers.js +207 -199
  77. package/dist/esm/urlHelpers.js.map +1 -7
  78. package/dist/esm/utils.js +118 -64
  79. package/dist/esm/utils.js.map +1 -7
  80. package/dist/react-native/authorizeRequestOnTenantChallenge.js +1 -2
  81. package/dist/react-native/authorizeRequestOnTenantChallenge.js.map +1 -1
  82. package/dist/react-native/base64.d.ts +1 -1
  83. package/dist/react-native/base64.js +6 -6
  84. package/dist/react-native/base64.js.map +1 -1
  85. package/dist/react-native/interfaceHelpers.js +1 -2
  86. package/dist/react-native/interfaceHelpers.js.map +1 -1
  87. package/dist/react-native/operationHelpers.js +8 -4
  88. package/dist/react-native/operationHelpers.js.map +1 -1
  89. package/dist/react-native/serializationPolicy.js +1 -1
  90. package/dist/react-native/serializationPolicy.js.map +1 -1
  91. package/dist/react-native/serializer.js +32 -11
  92. package/dist/react-native/serializer.js.map +1 -1
  93. package/dist/react-native/serviceClient.js +2 -2
  94. package/dist/react-native/serviceClient.js.map +1 -1
  95. package/dist/react-native/state-web.d.mts +8 -0
  96. package/dist/react-native/state-web.mjs +9 -0
  97. package/dist/react-native/state-web.mjs.map +1 -0
  98. package/dist/react-native/urlHelpers.js +2 -1
  99. package/dist/react-native/urlHelpers.js.map +1 -1
  100. package/package.json +33 -19
  101. package/dist/browser/state.js.map +0 -1
  102. package/dist/commonjs/state.js.map +0 -1
  103. package/dist/react-native/state.d.ts +0 -8
  104. package/dist/react-native/state.js +0 -10
  105. package/dist/react-native/state.js.map +0 -1
@@ -1,233 +1,230 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
1
3
  import { XML_CHARKEY } from "./interfaces.js";
2
4
  import { RestError } from "@azure/core-rest-pipeline";
3
5
  import { MapperTypeNames } from "./serializer.js";
4
6
  import { getOperationRequestInfo } from "./operationHelpers.js";
5
7
  const defaultJsonContentTypes = ["application/json", "text/json"];
6
8
  const defaultXmlContentTypes = ["application/xml", "application/atom+xml"];
7
- const deserializationPolicyName = "deserializationPolicy";
8
- function deserializationPolicy(options = {}) {
9
- const jsonContentTypes = options.expectedContentTypes?.json ?? defaultJsonContentTypes;
10
- const xmlContentTypes = options.expectedContentTypes?.xml ?? defaultXmlContentTypes;
11
- const parseXML = options.parseXML;
12
- const serializerOptions = options.serializerOptions;
13
- const updatedOptions = {
14
- xml: {
15
- rootName: serializerOptions?.xml.rootName ?? "",
16
- includeRoot: serializerOptions?.xml.includeRoot ?? false,
17
- xmlCharKey: serializerOptions?.xml.xmlCharKey ?? XML_CHARKEY
18
- }
19
- };
20
- return {
21
- name: deserializationPolicyName,
22
- async sendRequest(request, next) {
23
- const response = await next(request);
24
- return deserializeResponseBody(
25
- jsonContentTypes,
26
- xmlContentTypes,
27
- response,
28
- updatedOptions,
29
- parseXML
30
- );
31
- }
32
- };
9
+ /**
10
+ * The programmatic identifier of the deserializationPolicy.
11
+ */
12
+ export const deserializationPolicyName = "deserializationPolicy";
13
+ /**
14
+ * This policy handles parsing out responses according to OperationSpecs on the request.
15
+ */
16
+ export function deserializationPolicy(options = {}) {
17
+ const jsonContentTypes = options.expectedContentTypes?.json ?? defaultJsonContentTypes;
18
+ const xmlContentTypes = options.expectedContentTypes?.xml ?? defaultXmlContentTypes;
19
+ const parseXML = options.parseXML;
20
+ const serializerOptions = options.serializerOptions;
21
+ const updatedOptions = {
22
+ xml: {
23
+ rootName: serializerOptions?.xml.rootName ?? "",
24
+ includeRoot: serializerOptions?.xml.includeRoot ?? false,
25
+ xmlCharKey: serializerOptions?.xml.xmlCharKey ?? XML_CHARKEY,
26
+ },
27
+ };
28
+ return {
29
+ name: deserializationPolicyName,
30
+ async sendRequest(request, next) {
31
+ const response = await next(request);
32
+ return deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, updatedOptions, parseXML);
33
+ },
34
+ };
33
35
  }
34
36
  function getOperationResponseMap(parsedResponse) {
35
- let result;
36
- const request = parsedResponse.request;
37
- const operationInfo = getOperationRequestInfo(request);
38
- const operationSpec = operationInfo?.operationSpec;
39
- if (operationSpec) {
40
- if (!operationInfo?.operationResponseGetter) {
41
- result = operationSpec.responses[parsedResponse.status];
42
- } else {
43
- result = operationInfo?.operationResponseGetter(operationSpec, parsedResponse);
37
+ let result;
38
+ const request = parsedResponse.request;
39
+ const operationInfo = getOperationRequestInfo(request);
40
+ const operationSpec = operationInfo?.operationSpec;
41
+ if (operationSpec) {
42
+ if (!operationInfo?.operationResponseGetter) {
43
+ result = operationSpec.responses[parsedResponse.status];
44
+ }
45
+ else {
46
+ result = operationInfo?.operationResponseGetter(operationSpec, parsedResponse);
47
+ }
44
48
  }
45
- }
46
- return result;
49
+ return result;
47
50
  }
48
51
  function shouldDeserializeResponse(parsedResponse) {
49
- const request = parsedResponse.request;
50
- const operationInfo = getOperationRequestInfo(request);
51
- const shouldDeserialize = operationInfo?.shouldDeserialize;
52
- let result;
53
- if (shouldDeserialize === void 0) {
54
- result = true;
55
- } else if (typeof shouldDeserialize === "boolean") {
56
- result = shouldDeserialize;
57
- } else {
58
- result = shouldDeserialize(parsedResponse);
59
- }
60
- return result;
52
+ const request = parsedResponse.request;
53
+ const operationInfo = getOperationRequestInfo(request);
54
+ const shouldDeserialize = operationInfo?.shouldDeserialize;
55
+ let result;
56
+ if (shouldDeserialize === undefined) {
57
+ result = true;
58
+ }
59
+ else if (typeof shouldDeserialize === "boolean") {
60
+ result = shouldDeserialize;
61
+ }
62
+ else {
63
+ result = shouldDeserialize(parsedResponse);
64
+ }
65
+ return result;
61
66
  }
62
67
  async function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, options, parseXML) {
63
- const parsedResponse = await parse(
64
- jsonContentTypes,
65
- xmlContentTypes,
66
- response,
67
- options,
68
- parseXML
69
- );
70
- if (!shouldDeserializeResponse(parsedResponse)) {
71
- return parsedResponse;
72
- }
73
- const operationInfo = getOperationRequestInfo(parsedResponse.request);
74
- const operationSpec = operationInfo?.operationSpec;
75
- if (!operationSpec || !operationSpec.responses) {
76
- return parsedResponse;
77
- }
78
- const responseSpec = getOperationResponseMap(parsedResponse);
79
- const { error, shouldReturnResponse } = handleErrorResponse(
80
- parsedResponse,
81
- operationSpec,
82
- responseSpec,
83
- options
84
- );
85
- if (error) {
86
- throw error;
87
- } else if (shouldReturnResponse) {
88
- return parsedResponse;
89
- }
90
- if (responseSpec) {
91
- if (responseSpec.bodyMapper) {
92
- let valueToDeserialize = parsedResponse.parsedBody;
93
- if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperTypeNames.Sequence) {
94
- valueToDeserialize = typeof valueToDeserialize === "object" ? valueToDeserialize[responseSpec.bodyMapper.xmlElementName] : [];
95
- }
96
- try {
97
- parsedResponse.parsedBody = operationSpec.serializer.deserialize(
98
- responseSpec.bodyMapper,
99
- valueToDeserialize,
100
- "operationRes.parsedBody",
101
- options
102
- );
103
- } catch (deserializeError) {
104
- const restError = new RestError(
105
- `Error ${deserializeError} occurred in deserializing the responseBody - ${parsedResponse.bodyAsText}`,
106
- {
107
- statusCode: parsedResponse.status,
108
- request: parsedResponse.request,
109
- response: parsedResponse
110
- }
111
- );
112
- throw restError;
113
- }
114
- } else if (operationSpec.httpMethod === "HEAD") {
115
- parsedResponse.parsedBody = response.status >= 200 && response.status < 300;
68
+ const parsedResponse = await parse(jsonContentTypes, xmlContentTypes, response, options, parseXML);
69
+ if (!shouldDeserializeResponse(parsedResponse)) {
70
+ return parsedResponse;
71
+ }
72
+ const operationInfo = getOperationRequestInfo(parsedResponse.request);
73
+ const operationSpec = operationInfo?.operationSpec;
74
+ if (!operationSpec || !operationSpec.responses) {
75
+ return parsedResponse;
76
+ }
77
+ const responseSpec = getOperationResponseMap(parsedResponse);
78
+ const { error, shouldReturnResponse } = handleErrorResponse(parsedResponse, operationSpec, responseSpec, options);
79
+ if (error) {
80
+ throw error;
81
+ }
82
+ else if (shouldReturnResponse) {
83
+ return parsedResponse;
116
84
  }
117
- if (responseSpec.headersMapper) {
118
- parsedResponse.parsedHeaders = operationSpec.serializer.deserialize(
119
- responseSpec.headersMapper,
120
- parsedResponse.headers.toJSON(),
121
- "operationRes.parsedHeaders",
122
- { xml: {}, ignoreUnknownProperties: true }
123
- );
85
+ // An operation response spec does exist for current status code, so
86
+ // use it to deserialize the response.
87
+ if (responseSpec) {
88
+ if (responseSpec.bodyMapper) {
89
+ let valueToDeserialize = parsedResponse.parsedBody;
90
+ if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperTypeNames.Sequence) {
91
+ valueToDeserialize =
92
+ typeof valueToDeserialize === "object"
93
+ ? valueToDeserialize[responseSpec.bodyMapper.xmlElementName]
94
+ : [];
95
+ }
96
+ try {
97
+ parsedResponse.parsedBody = operationSpec.serializer.deserialize(responseSpec.bodyMapper, valueToDeserialize, "operationRes.parsedBody", options);
98
+ }
99
+ catch (deserializeError) {
100
+ const restError = new RestError(`Error ${deserializeError} occurred in deserializing the responseBody - ${parsedResponse.bodyAsText}`, {
101
+ statusCode: parsedResponse.status,
102
+ request: parsedResponse.request,
103
+ response: parsedResponse,
104
+ });
105
+ throw restError;
106
+ }
107
+ }
108
+ else if (operationSpec.httpMethod === "HEAD") {
109
+ // head methods never have a body, but we return a boolean to indicate presence/absence of the resource
110
+ parsedResponse.parsedBody = response.status >= 200 && response.status < 300;
111
+ }
112
+ if (responseSpec.headersMapper) {
113
+ parsedResponse.parsedHeaders = operationSpec.serializer.deserialize(responseSpec.headersMapper, parsedResponse.headers.toJSON(), "operationRes.parsedHeaders", { xml: {}, ignoreUnknownProperties: true });
114
+ }
124
115
  }
125
- }
126
- return parsedResponse;
116
+ return parsedResponse;
127
117
  }
128
118
  function isOperationSpecEmpty(operationSpec) {
129
- const expectedStatusCodes = Object.keys(operationSpec.responses);
130
- return expectedStatusCodes.length === 0 || expectedStatusCodes.length === 1 && expectedStatusCodes[0] === "default";
119
+ const expectedStatusCodes = Object.keys(operationSpec.responses);
120
+ return (expectedStatusCodes.length === 0 ||
121
+ (expectedStatusCodes.length === 1 && expectedStatusCodes[0] === "default"));
131
122
  }
132
123
  function handleErrorResponse(parsedResponse, operationSpec, responseSpec, options) {
133
- const isSuccessByStatus = 200 <= parsedResponse.status && parsedResponse.status < 300;
134
- const isExpectedStatusCode = isOperationSpecEmpty(operationSpec) ? isSuccessByStatus : !!responseSpec;
135
- if (isExpectedStatusCode) {
136
- if (responseSpec) {
137
- if (!responseSpec.isError) {
138
- return { error: null, shouldReturnResponse: false };
139
- }
140
- } else {
141
- return { error: null, shouldReturnResponse: false };
124
+ const isSuccessByStatus = 200 <= parsedResponse.status && parsedResponse.status < 300;
125
+ const isExpectedStatusCode = isOperationSpecEmpty(operationSpec)
126
+ ? isSuccessByStatus
127
+ : !!responseSpec;
128
+ if (isExpectedStatusCode) {
129
+ if (responseSpec) {
130
+ if (!responseSpec.isError) {
131
+ return { error: null, shouldReturnResponse: false };
132
+ }
133
+ }
134
+ else {
135
+ return { error: null, shouldReturnResponse: false };
136
+ }
137
+ }
138
+ const errorResponseSpec = responseSpec ?? operationSpec.responses.default;
139
+ const initialErrorMessage = parsedResponse.request.streamResponseStatusCodes?.has(parsedResponse.status)
140
+ ? `Unexpected status code: ${parsedResponse.status}`
141
+ : parsedResponse.bodyAsText;
142
+ const error = new RestError(initialErrorMessage, {
143
+ statusCode: parsedResponse.status,
144
+ request: parsedResponse.request,
145
+ response: parsedResponse,
146
+ });
147
+ // If the item failed but there's no error spec or default spec to deserialize the error,
148
+ // and the parsed body doesn't look like an error object,
149
+ // we should fail so we just throw the parsed response
150
+ if (!errorResponseSpec &&
151
+ !(parsedResponse.parsedBody?.error?.code && parsedResponse.parsedBody?.error?.message)) {
152
+ throw error;
142
153
  }
143
- }
144
- const errorResponseSpec = responseSpec ?? operationSpec.responses.default;
145
- const initialErrorMessage = parsedResponse.request.streamResponseStatusCodes?.has(
146
- parsedResponse.status
147
- ) ? `Unexpected status code: ${parsedResponse.status}` : parsedResponse.bodyAsText;
148
- const error = new RestError(initialErrorMessage, {
149
- statusCode: parsedResponse.status,
150
- request: parsedResponse.request,
151
- response: parsedResponse
152
- });
153
- if (!errorResponseSpec && !(parsedResponse.parsedBody?.error?.code && parsedResponse.parsedBody?.error?.message)) {
154
- throw error;
155
- }
156
- const defaultBodyMapper = errorResponseSpec?.bodyMapper;
157
- const defaultHeadersMapper = errorResponseSpec?.headersMapper;
158
- try {
159
- if (parsedResponse.parsedBody) {
160
- const parsedBody = parsedResponse.parsedBody;
161
- let deserializedError;
162
- if (defaultBodyMapper) {
163
- let valueToDeserialize = parsedBody;
164
- if (operationSpec.isXML && defaultBodyMapper.type.name === MapperTypeNames.Sequence) {
165
- valueToDeserialize = [];
166
- const elementName = defaultBodyMapper.xmlElementName;
167
- if (typeof parsedBody === "object" && elementName) {
168
- valueToDeserialize = parsedBody[elementName];
169
- }
154
+ const defaultBodyMapper = errorResponseSpec?.bodyMapper;
155
+ const defaultHeadersMapper = errorResponseSpec?.headersMapper;
156
+ try {
157
+ // If error response has a body, try to deserialize it using default body mapper.
158
+ // Then try to extract error code & message from it
159
+ if (parsedResponse.parsedBody) {
160
+ const parsedBody = parsedResponse.parsedBody;
161
+ let deserializedError;
162
+ if (defaultBodyMapper) {
163
+ let valueToDeserialize = parsedBody;
164
+ if (operationSpec.isXML && defaultBodyMapper.type.name === MapperTypeNames.Sequence) {
165
+ valueToDeserialize = [];
166
+ const elementName = defaultBodyMapper.xmlElementName;
167
+ if (typeof parsedBody === "object" && elementName) {
168
+ valueToDeserialize = parsedBody[elementName];
169
+ }
170
+ }
171
+ deserializedError = operationSpec.serializer.deserialize(defaultBodyMapper, valueToDeserialize, "error.response.parsedBody", options);
172
+ }
173
+ const internalError = parsedBody.error || deserializedError || parsedBody;
174
+ error.code = internalError.code;
175
+ if (internalError.message) {
176
+ error.message = internalError.message;
177
+ }
178
+ if (defaultBodyMapper) {
179
+ error.response.parsedBody = deserializedError;
180
+ }
181
+ }
182
+ // If error response has headers, try to deserialize it using default header mapper
183
+ if (parsedResponse.headers && defaultHeadersMapper) {
184
+ error.response.parsedHeaders =
185
+ operationSpec.serializer.deserialize(defaultHeadersMapper, parsedResponse.headers.toJSON(), "operationRes.parsedHeaders");
170
186
  }
171
- deserializedError = operationSpec.serializer.deserialize(
172
- defaultBodyMapper,
173
- valueToDeserialize,
174
- "error.response.parsedBody",
175
- options
176
- );
177
- }
178
- const internalError = parsedBody.error || deserializedError || parsedBody;
179
- error.code = internalError.code;
180
- if (internalError.message) {
181
- error.message = internalError.message;
182
- }
183
- if (defaultBodyMapper) {
184
- error.response.parsedBody = deserializedError;
185
- }
186
187
  }
187
- if (parsedResponse.headers && defaultHeadersMapper) {
188
- error.response.parsedHeaders = operationSpec.serializer.deserialize(
189
- defaultHeadersMapper,
190
- parsedResponse.headers.toJSON(),
191
- "operationRes.parsedHeaders"
192
- );
188
+ catch (defaultError) {
189
+ error.message = `Error "${defaultError.message}" occurred in deserializing the responseBody - "${parsedResponse.bodyAsText}" for the default response.`;
193
190
  }
194
- } catch (defaultError) {
195
- error.message = `Error "${defaultError.message}" occurred in deserializing the responseBody - "${parsedResponse.bodyAsText}" for the default response.`;
196
- }
197
- return { error, shouldReturnResponse: false };
191
+ return { error, shouldReturnResponse: false };
198
192
  }
199
193
  async function parse(jsonContentTypes, xmlContentTypes, operationResponse, opts, parseXML) {
200
- if (!operationResponse.request.streamResponseStatusCodes?.has(operationResponse.status) && operationResponse.bodyAsText) {
201
- const text = operationResponse.bodyAsText;
202
- const contentType = operationResponse.headers.get("Content-Type") || "";
203
- const contentComponents = !contentType ? [] : contentType.split(";").map((component) => component.toLowerCase());
204
- try {
205
- if (contentComponents.length === 0 || contentComponents.some((component) => jsonContentTypes.indexOf(component) !== -1)) {
206
- operationResponse.parsedBody = JSON.parse(text);
207
- return operationResponse;
208
- } else if (contentComponents.some((component) => xmlContentTypes.indexOf(component) !== -1)) {
209
- if (!parseXML) {
210
- throw new Error("Parsing XML not supported.");
194
+ if (!operationResponse.request.streamResponseStatusCodes?.has(operationResponse.status) &&
195
+ operationResponse.bodyAsText) {
196
+ const text = operationResponse.bodyAsText;
197
+ const contentType = operationResponse.headers.get("Content-Type") || "";
198
+ const contentComponents = !contentType
199
+ ? []
200
+ : contentType.split(";").map((component) => component.toLowerCase());
201
+ try {
202
+ if (contentComponents.length === 0 ||
203
+ contentComponents.some((component) => jsonContentTypes.indexOf(component) !== -1)) {
204
+ operationResponse.parsedBody = JSON.parse(text);
205
+ return operationResponse;
206
+ }
207
+ else if (contentComponents.some((component) => xmlContentTypes.indexOf(component) !== -1)) {
208
+ if (!parseXML) {
209
+ throw new Error("Parsing XML not supported.");
210
+ }
211
+ const body = await parseXML(text, opts.xml);
212
+ operationResponse.parsedBody = body;
213
+ return operationResponse;
214
+ }
215
+ }
216
+ catch (err) {
217
+ const msg = `Error "${err}" occurred while parsing the response body - ${operationResponse.bodyAsText}.`;
218
+ const errCode = err.code || RestError.PARSE_ERROR;
219
+ const e = new RestError(msg, {
220
+ code: errCode,
221
+ statusCode: operationResponse.status,
222
+ request: operationResponse.request,
223
+ response: operationResponse,
224
+ });
225
+ throw e;
211
226
  }
212
- const body = await parseXML(text, opts.xml);
213
- operationResponse.parsedBody = body;
214
- return operationResponse;
215
- }
216
- } catch (err) {
217
- const msg = `Error "${err}" occurred while parsing the response body - ${operationResponse.bodyAsText}.`;
218
- const errCode = err.code || RestError.PARSE_ERROR;
219
- const e = new RestError(msg, {
220
- code: errCode,
221
- statusCode: operationResponse.status,
222
- request: operationResponse.request,
223
- response: operationResponse
224
- });
225
- throw e;
226
227
  }
227
- }
228
- return operationResponse;
228
+ return operationResponse;
229
229
  }
230
- export {
231
- deserializationPolicy,
232
- deserializationPolicyName
233
- };
230
+ //# sourceMappingURL=deserializationPolicy.js.map
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/core-client/src/deserializationPolicy.ts"],
4
- "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n FullOperationResponse,\n OperationRequest,\n OperationResponseMap,\n OperationSpec,\n RequiredSerializerOptions,\n SerializerOptions,\n XmlOptions,\n} from \"./interfaces.js\";\nimport { XML_CHARKEY } from \"./interfaces.js\";\nimport type {\n PipelinePolicy,\n PipelineRequest,\n PipelineResponse,\n SendRequest,\n} from \"@azure/core-rest-pipeline\";\nimport { RestError } from \"@azure/core-rest-pipeline\";\nimport { MapperTypeNames } from \"./serializer.js\";\nimport { getOperationRequestInfo } from \"./operationHelpers.js\";\n\nconst defaultJsonContentTypes = [\"application/json\", \"text/json\"];\nconst defaultXmlContentTypes = [\"application/xml\", \"application/atom+xml\"];\n\n/**\n * The programmatic identifier of the deserializationPolicy.\n */\nexport const deserializationPolicyName = \"deserializationPolicy\";\n\n/**\n * Options to configure API response deserialization.\n */\nexport interface DeserializationPolicyOptions {\n /**\n * Configures the expected content types for the deserialization of\n * JSON and XML response bodies.\n */\n expectedContentTypes?: DeserializationContentTypes;\n\n /**\n * A function that is able to parse XML. Required for XML support.\n */\n parseXML?: (str: string, opts?: XmlOptions) => Promise<any>;\n\n /**\n * Configures behavior of xml parser and builder.\n */\n serializerOptions?: SerializerOptions;\n}\n\n/**\n * The content-types that will indicate that an operation response should be deserialized in a\n * particular way.\n */\nexport interface DeserializationContentTypes {\n /**\n * The content-types that indicate that an operation response should be deserialized as JSON.\n * Defaults to [ \"application/json\", \"text/json\" ].\n */\n json?: string[];\n\n /**\n * The content-types that indicate that an operation response should be deserialized as XML.\n * Defaults to [ \"application/xml\", \"application/atom+xml\" ].\n */\n xml?: string[];\n}\n\n/**\n * This policy handles parsing out responses according to OperationSpecs on the request.\n */\nexport function deserializationPolicy(options: DeserializationPolicyOptions = {}): PipelinePolicy {\n const jsonContentTypes = options.expectedContentTypes?.json ?? defaultJsonContentTypes;\n const xmlContentTypes = options.expectedContentTypes?.xml ?? defaultXmlContentTypes;\n const parseXML = options.parseXML;\n const serializerOptions = options.serializerOptions;\n const updatedOptions: RequiredSerializerOptions = {\n xml: {\n rootName: serializerOptions?.xml.rootName ?? \"\",\n includeRoot: serializerOptions?.xml.includeRoot ?? false,\n xmlCharKey: serializerOptions?.xml.xmlCharKey ?? XML_CHARKEY,\n },\n };\n\n return {\n name: deserializationPolicyName,\n async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {\n const response = await next(request);\n return deserializeResponseBody(\n jsonContentTypes,\n xmlContentTypes,\n response,\n updatedOptions,\n parseXML,\n );\n },\n };\n}\n\nfunction getOperationResponseMap(\n parsedResponse: PipelineResponse,\n): undefined | OperationResponseMap {\n let result: OperationResponseMap | undefined;\n const request: OperationRequest = parsedResponse.request;\n const operationInfo = getOperationRequestInfo(request);\n const operationSpec = operationInfo?.operationSpec;\n if (operationSpec) {\n if (!operationInfo?.operationResponseGetter) {\n result = operationSpec.responses[parsedResponse.status];\n } else {\n result = operationInfo?.operationResponseGetter(operationSpec, parsedResponse);\n }\n }\n return result;\n}\n\nfunction shouldDeserializeResponse(parsedResponse: PipelineResponse): boolean {\n const request: OperationRequest = parsedResponse.request;\n const operationInfo = getOperationRequestInfo(request);\n const shouldDeserialize = operationInfo?.shouldDeserialize;\n let result: boolean;\n if (shouldDeserialize === undefined) {\n result = true;\n } else if (typeof shouldDeserialize === \"boolean\") {\n result = shouldDeserialize;\n } else {\n result = shouldDeserialize(parsedResponse);\n }\n return result;\n}\n\nasync function deserializeResponseBody(\n jsonContentTypes: string[],\n xmlContentTypes: string[],\n response: PipelineResponse,\n options: RequiredSerializerOptions,\n parseXML?: (str: string, opts?: XmlOptions) => Promise<any>,\n): Promise<PipelineResponse> {\n const parsedResponse = await parse(\n jsonContentTypes,\n xmlContentTypes,\n response,\n options,\n parseXML,\n );\n if (!shouldDeserializeResponse(parsedResponse)) {\n return parsedResponse;\n }\n\n const operationInfo = getOperationRequestInfo(parsedResponse.request);\n const operationSpec = operationInfo?.operationSpec;\n if (!operationSpec || !operationSpec.responses) {\n return parsedResponse;\n }\n\n const responseSpec = getOperationResponseMap(parsedResponse);\n const { error, shouldReturnResponse } = handleErrorResponse(\n parsedResponse,\n operationSpec,\n responseSpec,\n options,\n );\n if (error) {\n throw error;\n } else if (shouldReturnResponse) {\n return parsedResponse;\n }\n\n // An operation response spec does exist for current status code, so\n // use it to deserialize the response.\n if (responseSpec) {\n if (responseSpec.bodyMapper) {\n let valueToDeserialize: any = parsedResponse.parsedBody;\n if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperTypeNames.Sequence) {\n valueToDeserialize =\n typeof valueToDeserialize === \"object\"\n ? valueToDeserialize[responseSpec.bodyMapper.xmlElementName!]\n : [];\n }\n try {\n parsedResponse.parsedBody = operationSpec.serializer.deserialize(\n responseSpec.bodyMapper,\n valueToDeserialize,\n \"operationRes.parsedBody\",\n options,\n );\n } catch (deserializeError: any) {\n const restError = new RestError(\n `Error ${deserializeError} occurred in deserializing the responseBody - ${parsedResponse.bodyAsText}`,\n {\n statusCode: parsedResponse.status,\n request: parsedResponse.request,\n response: parsedResponse,\n },\n );\n throw restError;\n }\n } else if (operationSpec.httpMethod === \"HEAD\") {\n // head methods never have a body, but we return a boolean to indicate presence/absence of the resource\n parsedResponse.parsedBody = response.status >= 200 && response.status < 300;\n }\n\n if (responseSpec.headersMapper) {\n parsedResponse.parsedHeaders = operationSpec.serializer.deserialize(\n responseSpec.headersMapper,\n parsedResponse.headers.toJSON(),\n \"operationRes.parsedHeaders\",\n { xml: {}, ignoreUnknownProperties: true },\n );\n }\n }\n\n return parsedResponse;\n}\n\nfunction isOperationSpecEmpty(operationSpec: OperationSpec): boolean {\n const expectedStatusCodes = Object.keys(operationSpec.responses);\n return (\n expectedStatusCodes.length === 0 ||\n (expectedStatusCodes.length === 1 && expectedStatusCodes[0] === \"default\")\n );\n}\n\nfunction handleErrorResponse(\n parsedResponse: FullOperationResponse,\n operationSpec: OperationSpec,\n responseSpec: OperationResponseMap | undefined,\n options: RequiredSerializerOptions,\n): { error: RestError | null; shouldReturnResponse: boolean } {\n const isSuccessByStatus = 200 <= parsedResponse.status && parsedResponse.status < 300;\n const isExpectedStatusCode: boolean = isOperationSpecEmpty(operationSpec)\n ? isSuccessByStatus\n : !!responseSpec;\n\n if (isExpectedStatusCode) {\n if (responseSpec) {\n if (!responseSpec.isError) {\n return { error: null, shouldReturnResponse: false };\n }\n } else {\n return { error: null, shouldReturnResponse: false };\n }\n }\n\n const errorResponseSpec = responseSpec ?? operationSpec.responses.default;\n\n const initialErrorMessage = parsedResponse.request.streamResponseStatusCodes?.has(\n parsedResponse.status,\n )\n ? `Unexpected status code: ${parsedResponse.status}`\n : (parsedResponse.bodyAsText as string);\n\n const error = new RestError(initialErrorMessage, {\n statusCode: parsedResponse.status,\n request: parsedResponse.request,\n response: parsedResponse,\n });\n\n // If the item failed but there's no error spec or default spec to deserialize the error,\n // and the parsed body doesn't look like an error object,\n // we should fail so we just throw the parsed response\n if (\n !errorResponseSpec &&\n !(parsedResponse.parsedBody?.error?.code && parsedResponse.parsedBody?.error?.message)\n ) {\n throw error;\n }\n\n const defaultBodyMapper = errorResponseSpec?.bodyMapper;\n const defaultHeadersMapper = errorResponseSpec?.headersMapper;\n\n try {\n // If error response has a body, try to deserialize it using default body mapper.\n // Then try to extract error code & message from it\n if (parsedResponse.parsedBody) {\n const parsedBody = parsedResponse.parsedBody;\n let deserializedError;\n\n if (defaultBodyMapper) {\n let valueToDeserialize: any = parsedBody;\n if (operationSpec.isXML && defaultBodyMapper.type.name === MapperTypeNames.Sequence) {\n valueToDeserialize = [];\n const elementName = defaultBodyMapper.xmlElementName;\n if (typeof parsedBody === \"object\" && elementName) {\n valueToDeserialize = parsedBody[elementName];\n }\n }\n deserializedError = operationSpec.serializer.deserialize(\n defaultBodyMapper,\n valueToDeserialize,\n \"error.response.parsedBody\",\n options,\n );\n }\n\n const internalError: any = parsedBody.error || deserializedError || parsedBody;\n error.code = internalError.code;\n if (internalError.message) {\n error.message = internalError.message;\n }\n\n if (defaultBodyMapper) {\n (error.response! as FullOperationResponse).parsedBody = deserializedError;\n }\n }\n\n // If error response has headers, try to deserialize it using default header mapper\n if (parsedResponse.headers && defaultHeadersMapper) {\n (error.response! as FullOperationResponse).parsedHeaders =\n operationSpec.serializer.deserialize(\n defaultHeadersMapper,\n parsedResponse.headers.toJSON(),\n \"operationRes.parsedHeaders\",\n );\n }\n } catch (defaultError: any) {\n error.message = `Error \"${defaultError.message}\" occurred in deserializing the responseBody - \"${parsedResponse.bodyAsText}\" for the default response.`;\n }\n\n return { error, shouldReturnResponse: false };\n}\n\nasync function parse(\n jsonContentTypes: string[],\n xmlContentTypes: string[],\n operationResponse: FullOperationResponse,\n opts: RequiredSerializerOptions,\n parseXML?: (str: string, opts?: XmlOptions) => Promise<any>,\n): Promise<FullOperationResponse> {\n if (\n !operationResponse.request.streamResponseStatusCodes?.has(operationResponse.status) &&\n operationResponse.bodyAsText\n ) {\n const text = operationResponse.bodyAsText;\n const contentType: string = operationResponse.headers.get(\"Content-Type\") || \"\";\n const contentComponents: string[] = !contentType\n ? []\n : contentType.split(\";\").map((component) => component.toLowerCase());\n\n try {\n if (\n contentComponents.length === 0 ||\n contentComponents.some((component) => jsonContentTypes.indexOf(component) !== -1)\n ) {\n operationResponse.parsedBody = JSON.parse(text);\n return operationResponse;\n } else if (contentComponents.some((component) => xmlContentTypes.indexOf(component) !== -1)) {\n if (!parseXML) {\n throw new Error(\"Parsing XML not supported.\");\n }\n const body = await parseXML(text, opts.xml);\n operationResponse.parsedBody = body;\n return operationResponse;\n }\n } catch (err: any) {\n const msg = `Error \"${err}\" occurred while parsing the response body - ${operationResponse.bodyAsText}.`;\n const errCode = err.code || RestError.PARSE_ERROR;\n const e = new RestError(msg, {\n code: errCode,\n statusCode: operationResponse.status,\n request: operationResponse.request,\n response: operationResponse,\n });\n throw e;\n }\n }\n\n return operationResponse;\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
1
+ {"version":3,"file":"deserializationPolicy.js","sourceRoot":"","sources":["../../src/deserializationPolicy.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n FullOperationResponse,\n OperationRequest,\n OperationResponseMap,\n OperationSpec,\n RequiredSerializerOptions,\n SerializerOptions,\n XmlOptions,\n} from \"./interfaces.js\";\nimport { XML_CHARKEY } from \"./interfaces.js\";\nimport type {\n PipelinePolicy,\n PipelineRequest,\n PipelineResponse,\n SendRequest,\n} from \"@azure/core-rest-pipeline\";\nimport { RestError } from \"@azure/core-rest-pipeline\";\nimport { MapperTypeNames } from \"./serializer.js\";\nimport { getOperationRequestInfo } from \"./operationHelpers.js\";\n\nconst defaultJsonContentTypes = [\"application/json\", \"text/json\"];\nconst defaultXmlContentTypes = [\"application/xml\", \"application/atom+xml\"];\n\n/**\n * The programmatic identifier of the deserializationPolicy.\n */\nexport const deserializationPolicyName = \"deserializationPolicy\";\n\n/**\n * Options to configure API response deserialization.\n */\nexport interface DeserializationPolicyOptions {\n /**\n * Configures the expected content types for the deserialization of\n * JSON and XML response bodies.\n */\n expectedContentTypes?: DeserializationContentTypes;\n\n /**\n * A function that is able to parse XML. Required for XML support.\n */\n parseXML?: (str: string, opts?: XmlOptions) => Promise<any>;\n\n /**\n * Configures behavior of xml parser and builder.\n */\n serializerOptions?: SerializerOptions;\n}\n\n/**\n * The content-types that will indicate that an operation response should be deserialized in a\n * particular way.\n */\nexport interface DeserializationContentTypes {\n /**\n * The content-types that indicate that an operation response should be deserialized as JSON.\n * Defaults to [ \"application/json\", \"text/json\" ].\n */\n json?: string[];\n\n /**\n * The content-types that indicate that an operation response should be deserialized as XML.\n * Defaults to [ \"application/xml\", \"application/atom+xml\" ].\n */\n xml?: string[];\n}\n\n/**\n * This policy handles parsing out responses according to OperationSpecs on the request.\n */\nexport function deserializationPolicy(options: DeserializationPolicyOptions = {}): PipelinePolicy {\n const jsonContentTypes = options.expectedContentTypes?.json ?? defaultJsonContentTypes;\n const xmlContentTypes = options.expectedContentTypes?.xml ?? defaultXmlContentTypes;\n const parseXML = options.parseXML;\n const serializerOptions = options.serializerOptions;\n const updatedOptions: RequiredSerializerOptions = {\n xml: {\n rootName: serializerOptions?.xml.rootName ?? \"\",\n includeRoot: serializerOptions?.xml.includeRoot ?? false,\n xmlCharKey: serializerOptions?.xml.xmlCharKey ?? XML_CHARKEY,\n },\n };\n\n return {\n name: deserializationPolicyName,\n async sendRequest(request: PipelineRequest, next: SendRequest): Promise<PipelineResponse> {\n const response = await next(request);\n return deserializeResponseBody(\n jsonContentTypes,\n xmlContentTypes,\n response,\n updatedOptions,\n parseXML,\n );\n },\n };\n}\n\nfunction getOperationResponseMap(\n parsedResponse: PipelineResponse,\n): undefined | OperationResponseMap {\n let result: OperationResponseMap | undefined;\n const request: OperationRequest = parsedResponse.request;\n const operationInfo = getOperationRequestInfo(request);\n const operationSpec = operationInfo?.operationSpec;\n if (operationSpec) {\n if (!operationInfo?.operationResponseGetter) {\n result = operationSpec.responses[parsedResponse.status];\n } else {\n result = operationInfo?.operationResponseGetter(operationSpec, parsedResponse);\n }\n }\n return result;\n}\n\nfunction shouldDeserializeResponse(parsedResponse: PipelineResponse): boolean {\n const request: OperationRequest = parsedResponse.request;\n const operationInfo = getOperationRequestInfo(request);\n const shouldDeserialize = operationInfo?.shouldDeserialize;\n let result: boolean;\n if (shouldDeserialize === undefined) {\n result = true;\n } else if (typeof shouldDeserialize === \"boolean\") {\n result = shouldDeserialize;\n } else {\n result = shouldDeserialize(parsedResponse);\n }\n return result;\n}\n\nasync function deserializeResponseBody(\n jsonContentTypes: string[],\n xmlContentTypes: string[],\n response: PipelineResponse,\n options: RequiredSerializerOptions,\n parseXML?: (str: string, opts?: XmlOptions) => Promise<any>,\n): Promise<PipelineResponse> {\n const parsedResponse = await parse(\n jsonContentTypes,\n xmlContentTypes,\n response,\n options,\n parseXML,\n );\n if (!shouldDeserializeResponse(parsedResponse)) {\n return parsedResponse;\n }\n\n const operationInfo = getOperationRequestInfo(parsedResponse.request);\n const operationSpec = operationInfo?.operationSpec;\n if (!operationSpec || !operationSpec.responses) {\n return parsedResponse;\n }\n\n const responseSpec = getOperationResponseMap(parsedResponse);\n const { error, shouldReturnResponse } = handleErrorResponse(\n parsedResponse,\n operationSpec,\n responseSpec,\n options,\n );\n if (error) {\n throw error;\n } else if (shouldReturnResponse) {\n return parsedResponse;\n }\n\n // An operation response spec does exist for current status code, so\n // use it to deserialize the response.\n if (responseSpec) {\n if (responseSpec.bodyMapper) {\n let valueToDeserialize: any = parsedResponse.parsedBody;\n if (operationSpec.isXML && responseSpec.bodyMapper.type.name === MapperTypeNames.Sequence) {\n valueToDeserialize =\n typeof valueToDeserialize === \"object\"\n ? valueToDeserialize[responseSpec.bodyMapper.xmlElementName!]\n : [];\n }\n try {\n parsedResponse.parsedBody = operationSpec.serializer.deserialize(\n responseSpec.bodyMapper,\n valueToDeserialize,\n \"operationRes.parsedBody\",\n options,\n );\n } catch (deserializeError: any) {\n const restError = new RestError(\n `Error ${deserializeError} occurred in deserializing the responseBody - ${parsedResponse.bodyAsText}`,\n {\n statusCode: parsedResponse.status,\n request: parsedResponse.request,\n response: parsedResponse,\n },\n );\n throw restError;\n }\n } else if (operationSpec.httpMethod === \"HEAD\") {\n // head methods never have a body, but we return a boolean to indicate presence/absence of the resource\n parsedResponse.parsedBody = response.status >= 200 && response.status < 300;\n }\n\n if (responseSpec.headersMapper) {\n parsedResponse.parsedHeaders = operationSpec.serializer.deserialize(\n responseSpec.headersMapper,\n parsedResponse.headers.toJSON(),\n \"operationRes.parsedHeaders\",\n { xml: {}, ignoreUnknownProperties: true },\n );\n }\n }\n\n return parsedResponse;\n}\n\nfunction isOperationSpecEmpty(operationSpec: OperationSpec): boolean {\n const expectedStatusCodes = Object.keys(operationSpec.responses);\n return (\n expectedStatusCodes.length === 0 ||\n (expectedStatusCodes.length === 1 && expectedStatusCodes[0] === \"default\")\n );\n}\n\nfunction handleErrorResponse(\n parsedResponse: FullOperationResponse,\n operationSpec: OperationSpec,\n responseSpec: OperationResponseMap | undefined,\n options: RequiredSerializerOptions,\n): { error: RestError | null; shouldReturnResponse: boolean } {\n const isSuccessByStatus = 200 <= parsedResponse.status && parsedResponse.status < 300;\n const isExpectedStatusCode: boolean = isOperationSpecEmpty(operationSpec)\n ? isSuccessByStatus\n : !!responseSpec;\n\n if (isExpectedStatusCode) {\n if (responseSpec) {\n if (!responseSpec.isError) {\n return { error: null, shouldReturnResponse: false };\n }\n } else {\n return { error: null, shouldReturnResponse: false };\n }\n }\n\n const errorResponseSpec = responseSpec ?? operationSpec.responses.default;\n\n const initialErrorMessage = parsedResponse.request.streamResponseStatusCodes?.has(\n parsedResponse.status,\n )\n ? `Unexpected status code: ${parsedResponse.status}`\n : (parsedResponse.bodyAsText as string);\n\n const error = new RestError(initialErrorMessage, {\n statusCode: parsedResponse.status,\n request: parsedResponse.request,\n response: parsedResponse,\n });\n\n // If the item failed but there's no error spec or default spec to deserialize the error,\n // and the parsed body doesn't look like an error object,\n // we should fail so we just throw the parsed response\n if (\n !errorResponseSpec &&\n !(parsedResponse.parsedBody?.error?.code && parsedResponse.parsedBody?.error?.message)\n ) {\n throw error;\n }\n\n const defaultBodyMapper = errorResponseSpec?.bodyMapper;\n const defaultHeadersMapper = errorResponseSpec?.headersMapper;\n\n try {\n // If error response has a body, try to deserialize it using default body mapper.\n // Then try to extract error code & message from it\n if (parsedResponse.parsedBody) {\n const parsedBody = parsedResponse.parsedBody;\n let deserializedError;\n\n if (defaultBodyMapper) {\n let valueToDeserialize: any = parsedBody;\n if (operationSpec.isXML && defaultBodyMapper.type.name === MapperTypeNames.Sequence) {\n valueToDeserialize = [];\n const elementName = defaultBodyMapper.xmlElementName;\n if (typeof parsedBody === \"object\" && elementName) {\n valueToDeserialize = parsedBody[elementName];\n }\n }\n deserializedError = operationSpec.serializer.deserialize(\n defaultBodyMapper,\n valueToDeserialize,\n \"error.response.parsedBody\",\n options,\n );\n }\n\n const internalError: any = parsedBody.error || deserializedError || parsedBody;\n error.code = internalError.code;\n if (internalError.message) {\n error.message = internalError.message;\n }\n\n if (defaultBodyMapper) {\n (error.response! as FullOperationResponse).parsedBody = deserializedError;\n }\n }\n\n // If error response has headers, try to deserialize it using default header mapper\n if (parsedResponse.headers && defaultHeadersMapper) {\n (error.response! as FullOperationResponse).parsedHeaders =\n operationSpec.serializer.deserialize(\n defaultHeadersMapper,\n parsedResponse.headers.toJSON(),\n \"operationRes.parsedHeaders\",\n );\n }\n } catch (defaultError: any) {\n error.message = `Error \"${defaultError.message}\" occurred in deserializing the responseBody - \"${parsedResponse.bodyAsText}\" for the default response.`;\n }\n\n return { error, shouldReturnResponse: false };\n}\n\nasync function parse(\n jsonContentTypes: string[],\n xmlContentTypes: string[],\n operationResponse: FullOperationResponse,\n opts: RequiredSerializerOptions,\n parseXML?: (str: string, opts?: XmlOptions) => Promise<any>,\n): Promise<FullOperationResponse> {\n if (\n !operationResponse.request.streamResponseStatusCodes?.has(operationResponse.status) &&\n operationResponse.bodyAsText\n ) {\n const text = operationResponse.bodyAsText;\n const contentType: string = operationResponse.headers.get(\"Content-Type\") || \"\";\n const contentComponents: string[] = !contentType\n ? []\n : contentType.split(\";\").map((component) => component.toLowerCase());\n\n try {\n if (\n contentComponents.length === 0 ||\n contentComponents.some((component) => jsonContentTypes.indexOf(component) !== -1)\n ) {\n operationResponse.parsedBody = JSON.parse(text);\n return operationResponse;\n } else if (contentComponents.some((component) => xmlContentTypes.indexOf(component) !== -1)) {\n if (!parseXML) {\n throw new Error(\"Parsing XML not supported.\");\n }\n const body = await parseXML(text, opts.xml);\n operationResponse.parsedBody = body;\n return operationResponse;\n }\n } catch (err: any) {\n const msg = `Error \"${err}\" occurred while parsing the response body - ${operationResponse.bodyAsText}.`;\n const errCode = err.code || RestError.PARSE_ERROR;\n const e = new RestError(msg, {\n code: errCode,\n statusCode: operationResponse.status,\n request: operationResponse.request,\n response: operationResponse,\n });\n throw e;\n }\n }\n\n return operationResponse;\n}\n"]}
@@ -1,11 +1,11 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
1
3
  import { createDefaultHttpClient } from "@azure/core-rest-pipeline";
2
4
  let cachedHttpClient;
3
- function getCachedDefaultHttpClient() {
4
- if (!cachedHttpClient) {
5
- cachedHttpClient = createDefaultHttpClient();
6
- }
7
- return cachedHttpClient;
5
+ export function getCachedDefaultHttpClient() {
6
+ if (!cachedHttpClient) {
7
+ cachedHttpClient = createDefaultHttpClient();
8
+ }
9
+ return cachedHttpClient;
8
10
  }
9
- export {
10
- getCachedDefaultHttpClient
11
- };
11
+ //# sourceMappingURL=httpClientCache.js.map
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/core-client/src/httpClientCache.ts"],
4
- "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { HttpClient } from \"@azure/core-rest-pipeline\";\nimport { createDefaultHttpClient } from \"@azure/core-rest-pipeline\";\n\nlet cachedHttpClient: HttpClient | undefined;\n\nexport function getCachedDefaultHttpClient(): HttpClient {\n if (!cachedHttpClient) {\n cachedHttpClient = createDefaultHttpClient();\n }\n\n return cachedHttpClient;\n}\n"],
5
- "mappings": "AAIA,SAAS,+BAA+B;AAExC,IAAI;AAEG,SAAS,6BAAyC;AACvD,MAAI,CAAC,kBAAkB;AACrB,uBAAmB,wBAAwB;AAAA,EAC7C;AAEA,SAAO;AACT;",
6
- "names": []
7
- }
1
+ {"version":3,"file":"httpClientCache.js","sourceRoot":"","sources":["../../src/httpClientCache.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAGlC,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE,IAAI,gBAAwC,CAAC;AAE7C,MAAM,UAAU,0BAA0B;IACxC,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,gBAAgB,GAAG,uBAAuB,EAAE,CAAC;IAC/C,CAAC;IAED,OAAO,gBAAgB,CAAC;AAC1B,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { HttpClient } from \"@azure/core-rest-pipeline\";\nimport { createDefaultHttpClient } from \"@azure/core-rest-pipeline\";\n\nlet cachedHttpClient: HttpClient | undefined;\n\nexport function getCachedDefaultHttpClient(): HttpClient {\n if (!cachedHttpClient) {\n cachedHttpClient = createDefaultHttpClient();\n }\n\n return cachedHttpClient;\n}\n"]}
package/dist/esm/index.js CHANGED
@@ -1,31 +1,11 @@
1
- import { createSerializer, MapperTypeNames } from "./serializer.js";
2
- import { ServiceClient } from "./serviceClient.js";
3
- import { createClientPipeline } from "./pipeline.js";
4
- import {
5
- XML_ATTRKEY,
6
- XML_CHARKEY
7
- } from "./interfaces.js";
8
- import {
9
- deserializationPolicy,
10
- deserializationPolicyName
11
- } from "./deserializationPolicy.js";
12
- import {
13
- serializationPolicy,
14
- serializationPolicyName
15
- } from "./serializationPolicy.js";
16
- import { authorizeRequestOnClaimChallenge } from "./authorizeRequestOnClaimChallenge.js";
17
- import { authorizeRequestOnTenantChallenge } from "./authorizeRequestOnTenantChallenge.js";
18
- export {
19
- MapperTypeNames,
20
- ServiceClient,
21
- XML_ATTRKEY,
22
- XML_CHARKEY,
23
- authorizeRequestOnClaimChallenge,
24
- authorizeRequestOnTenantChallenge,
25
- createClientPipeline,
26
- createSerializer,
27
- deserializationPolicy,
28
- deserializationPolicyName,
29
- serializationPolicy,
30
- serializationPolicyName
31
- };
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ export { createSerializer, MapperTypeNames } from "./serializer.js";
4
+ export { ServiceClient } from "./serviceClient.js";
5
+ export { createClientPipeline } from "./pipeline.js";
6
+ export { XML_ATTRKEY, XML_CHARKEY, } from "./interfaces.js";
7
+ export { deserializationPolicy, deserializationPolicyName, } from "./deserializationPolicy.js";
8
+ export { serializationPolicy, serializationPolicyName, } from "./serializationPolicy.js";
9
+ export { authorizeRequestOnClaimChallenge } from "./authorizeRequestOnClaimChallenge.js";
10
+ export { authorizeRequestOnTenantChallenge } from "./authorizeRequestOnTenantChallenge.js";
11
+ //# sourceMappingURL=index.js.map
@@ -1,7 +1 @@
1
- {
2
- "version": 3,
3
- "sources": ["/mnt/vss/_work/1/s/sdk/core/core-client/src/index.ts"],
4
- "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport { createSerializer, MapperTypeNames } from \"./serializer.js\";\nexport { ServiceClient, type ServiceClientOptions } from \"./serviceClient.js\";\nexport { createClientPipeline, type InternalClientPipelineOptions } from \"./pipeline.js\";\nexport {\n type OperationSpec,\n type OperationArguments,\n type OperationOptions,\n type OperationResponseMap,\n type OperationParameter,\n type OperationQueryParameter,\n type OperationURLParameter,\n type Serializer,\n type BaseMapper,\n type Mapper,\n type MapperType,\n type SimpleMapperType,\n type EnumMapper,\n type EnumMapperType,\n type SequenceMapper,\n type SequenceMapperType,\n type DictionaryMapper,\n type DictionaryMapperType,\n type CompositeMapper,\n type CompositeMapperType,\n type MapperConstraints,\n type OperationRequest,\n type OperationRequestOptions,\n type OperationRequestInfo,\n type QueryCollectionFormat,\n type ParameterPath,\n type FullOperationResponse,\n type PolymorphicDiscriminator,\n type SpanConfig,\n XML_ATTRKEY,\n XML_CHARKEY,\n type XmlOptions,\n type SerializerOptions,\n type RawResponseCallback,\n type CommonClientOptions,\n type AdditionalPolicyConfig,\n} from \"./interfaces.js\";\nexport {\n deserializationPolicy,\n deserializationPolicyName,\n type DeserializationPolicyOptions,\n type DeserializationContentTypes,\n} from \"./deserializationPolicy.js\";\nexport {\n serializationPolicy,\n serializationPolicyName,\n type SerializationPolicyOptions,\n} from \"./serializationPolicy.js\";\nexport { authorizeRequestOnClaimChallenge } from \"./authorizeRequestOnClaimChallenge.js\";\nexport { authorizeRequestOnTenantChallenge } from \"./authorizeRequestOnTenantChallenge.js\";\n"],
5
- "mappings": "AAGA,SAAS,kBAAkB,uBAAuB;AAClD,SAAS,qBAAgD;AACzD,SAAS,4BAAgE;AACzE;AAAA,EA8BE;AAAA,EACA;AAAA,OAMK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAGK;AACP;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAS,wCAAwC;AACjD,SAAS,yCAAyC;",
6
- "names": []
7
- }
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpE,OAAO,EAAE,aAAa,EAA6B,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAsC,MAAM,eAAe,CAAC;AACzF,OAAO,EA8BL,WAAW,EACX,WAAW,GAMZ,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,qBAAqB,EACrB,yBAAyB,GAG1B,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,mBAAmB,EACnB,uBAAuB,GAExB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAC;AACzF,OAAO,EAAE,iCAAiC,EAAE,MAAM,wCAAwC,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport { createSerializer, MapperTypeNames } from \"./serializer.js\";\nexport { ServiceClient, type ServiceClientOptions } from \"./serviceClient.js\";\nexport { createClientPipeline, type InternalClientPipelineOptions } from \"./pipeline.js\";\nexport {\n type OperationSpec,\n type OperationArguments,\n type OperationOptions,\n type OperationResponseMap,\n type OperationParameter,\n type OperationQueryParameter,\n type OperationURLParameter,\n type Serializer,\n type BaseMapper,\n type Mapper,\n type MapperType,\n type SimpleMapperType,\n type EnumMapper,\n type EnumMapperType,\n type SequenceMapper,\n type SequenceMapperType,\n type DictionaryMapper,\n type DictionaryMapperType,\n type CompositeMapper,\n type CompositeMapperType,\n type MapperConstraints,\n type OperationRequest,\n type OperationRequestOptions,\n type OperationRequestInfo,\n type QueryCollectionFormat,\n type ParameterPath,\n type FullOperationResponse,\n type PolymorphicDiscriminator,\n type SpanConfig,\n XML_ATTRKEY,\n XML_CHARKEY,\n type XmlOptions,\n type SerializerOptions,\n type RawResponseCallback,\n type CommonClientOptions,\n type AdditionalPolicyConfig,\n} from \"./interfaces.js\";\nexport {\n deserializationPolicy,\n deserializationPolicyName,\n type DeserializationPolicyOptions,\n type DeserializationContentTypes,\n} from \"./deserializationPolicy.js\";\nexport {\n serializationPolicy,\n serializationPolicyName,\n type SerializationPolicyOptions,\n} from \"./serializationPolicy.js\";\nexport { authorizeRequestOnClaimChallenge } from \"./authorizeRequestOnClaimChallenge.js\";\nexport { authorizeRequestOnTenantChallenge } from \"./authorizeRequestOnTenantChallenge.js\";\n"]}