@azure/core-client 1.10.2-alpha.20260311.2 → 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.
- package/dist/browser/authorizeRequestOnTenantChallenge.js +1 -2
- package/dist/browser/authorizeRequestOnTenantChallenge.js.map +1 -1
- package/dist/browser/base64.d.ts +1 -5
- package/dist/browser/base64.js +6 -14
- package/dist/browser/base64.js.map +1 -1
- package/dist/browser/interfaceHelpers.js +1 -2
- package/dist/browser/interfaceHelpers.js.map +1 -1
- package/dist/browser/operationHelpers.js +8 -4
- package/dist/browser/operationHelpers.js.map +1 -1
- package/dist/browser/serializationPolicy.js +1 -1
- package/dist/browser/serializationPolicy.js.map +1 -1
- package/dist/browser/serializer.js +32 -11
- package/dist/browser/serializer.js.map +1 -1
- package/dist/browser/serviceClient.js +2 -2
- package/dist/browser/serviceClient.js.map +1 -1
- package/dist/browser/{state.d.ts → state-web.d.mts} +1 -1
- package/dist/browser/{state.js → state-web.mjs} +1 -1
- package/dist/browser/state-web.mjs.map +1 -0
- package/dist/browser/urlHelpers.js +2 -1
- package/dist/browser/urlHelpers.js.map +1 -1
- package/dist/commonjs/authorizeRequestOnTenantChallenge.js +1 -2
- package/dist/commonjs/authorizeRequestOnTenantChallenge.js.map +1 -1
- package/dist/commonjs/base64.d.ts +1 -1
- package/dist/commonjs/base64.js +6 -6
- package/dist/commonjs/base64.js.map +1 -1
- package/dist/commonjs/interfaceHelpers.js +1 -2
- package/dist/commonjs/interfaceHelpers.js.map +1 -1
- package/dist/commonjs/operationHelpers.js +10 -6
- package/dist/commonjs/operationHelpers.js.map +1 -1
- package/dist/commonjs/serializationPolicy.js +1 -1
- package/dist/commonjs/serializationPolicy.js.map +1 -1
- package/dist/commonjs/serializer.js +32 -11
- package/dist/commonjs/serializer.js.map +1 -1
- package/dist/commonjs/serviceClient.js +2 -2
- package/dist/commonjs/serviceClient.js.map +1 -1
- package/dist/commonjs/{state.d.ts → state-cjs.d.ts} +1 -1
- package/dist/commonjs/{state.js → state-cjs.js} +1 -1
- package/dist/commonjs/state-cjs.js.map +1 -0
- package/dist/commonjs/tsdoc-metadata.json +1 -1
- package/dist/commonjs/urlHelpers.js +2 -1
- package/dist/commonjs/urlHelpers.js.map +1 -1
- package/dist/esm/authorizeRequestOnClaimChallenge.js +67 -44
- package/dist/esm/authorizeRequestOnClaimChallenge.js.map +1 -7
- package/dist/esm/authorizeRequestOnTenantChallenge.js +97 -72
- package/dist/esm/authorizeRequestOnTenantChallenge.js.map +1 -7
- package/dist/esm/base64.d.ts +1 -1
- package/dist/esm/base64.js +32 -15
- package/dist/esm/base64.js.map +1 -7
- package/dist/esm/deserializationPolicy.js +202 -205
- package/dist/esm/deserializationPolicy.js.map +1 -7
- package/dist/esm/httpClientCache.js +8 -8
- package/dist/esm/httpClientCache.js.map +1 -7
- package/dist/esm/index.js +11 -31
- package/dist/esm/index.js.map +1 -7
- package/dist/esm/interfaceHelpers.js +34 -23
- package/dist/esm/interfaceHelpers.js.map +1 -7
- package/dist/esm/interfaces.js +11 -6
- package/dist/esm/interfaces.js.map +1 -7
- package/dist/esm/log.js +4 -4
- package/dist/esm/log.js.map +1 -7
- package/dist/esm/operationHelpers.js +86 -73
- package/dist/esm/operationHelpers.js.map +1 -7
- package/dist/esm/pipeline.js +23 -22
- package/dist/esm/pipeline.js.map +1 -7
- package/dist/esm/serializationPolicy.js +134 -163
- package/dist/esm/serializationPolicy.js.map +1 -7
- package/dist/esm/serializer.js +877 -812
- package/dist/esm/serializer.js.map +1 -7
- package/dist/esm/serviceClient.js +150 -151
- package/dist/esm/serviceClient.js.map +1 -7
- package/dist/esm/state-cjs.d.ts +8 -0
- package/dist/esm/state-cjs.js +9 -0
- package/dist/esm/state-cjs.js.map +1 -0
- package/dist/esm/state.js +10 -5
- package/dist/esm/state.js.map +1 -7
- package/dist/esm/urlHelpers.js +207 -199
- package/dist/esm/urlHelpers.js.map +1 -7
- package/dist/esm/utils.js +118 -64
- package/dist/esm/utils.js.map +1 -7
- package/dist/react-native/authorizeRequestOnTenantChallenge.js +1 -2
- package/dist/react-native/authorizeRequestOnTenantChallenge.js.map +1 -1
- package/dist/react-native/base64.d.ts +1 -1
- package/dist/react-native/base64.js +6 -6
- package/dist/react-native/base64.js.map +1 -1
- package/dist/react-native/interfaceHelpers.js +1 -2
- package/dist/react-native/interfaceHelpers.js.map +1 -1
- package/dist/react-native/operationHelpers.js +8 -4
- package/dist/react-native/operationHelpers.js.map +1 -1
- package/dist/react-native/serializationPolicy.js +1 -1
- package/dist/react-native/serializationPolicy.js.map +1 -1
- package/dist/react-native/serializer.js +32 -11
- package/dist/react-native/serializer.js.map +1 -1
- package/dist/react-native/serviceClient.js +2 -2
- package/dist/react-native/serviceClient.js.map +1 -1
- package/dist/react-native/state-web.d.mts +8 -0
- package/dist/react-native/state-web.mjs +9 -0
- package/dist/react-native/state-web.mjs.map +1 -0
- package/dist/react-native/urlHelpers.js +2 -1
- package/dist/react-native/urlHelpers.js.map +1 -1
- package/package.json +31 -17
- package/dist/browser/state.js.map +0 -1
- package/dist/commonjs/state.js.map +0 -1
- package/dist/react-native/state.d.ts +0 -8
- package/dist/react-native/state.js +0 -10
- 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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
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
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
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
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
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
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
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
|
-
|
|
130
|
-
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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
|
-
|
|
188
|
-
|
|
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
|
-
|
|
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
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
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
|
-
|
|
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
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
export function getCachedDefaultHttpClient() {
|
|
6
|
+
if (!cachedHttpClient) {
|
|
7
|
+
cachedHttpClient = createDefaultHttpClient();
|
|
8
|
+
}
|
|
9
|
+
return cachedHttpClient;
|
|
8
10
|
}
|
|
9
|
-
|
|
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
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
} from "./
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
package/dist/esm/index.js.map
CHANGED
|
@@ -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"]}
|