@azure/core-client 1.8.0 → 1.8.1-alpha.20240223.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/README.md +0 -4
- package/dist/browser/authorizeRequestOnClaimChallenge.d.ts +43 -0
- package/dist/browser/authorizeRequestOnClaimChallenge.d.ts.map +1 -0
- package/{dist-esm/src → dist/browser}/authorizeRequestOnClaimChallenge.js +3 -3
- package/dist/browser/authorizeRequestOnClaimChallenge.js.map +1 -0
- package/dist/browser/authorizeRequestOnTenantChallenge.d.ts +8 -0
- package/dist/browser/authorizeRequestOnTenantChallenge.d.ts.map +1 -0
- package/{dist-esm/src → dist/browser}/authorizeRequestOnTenantChallenge.js +5 -2
- package/dist/browser/authorizeRequestOnTenantChallenge.js.map +1 -0
- package/dist/browser/base64-browser.d.mts.map +1 -0
- package/dist/browser/base64-browser.mjs.map +1 -0
- package/dist/browser/base64.d.ts +29 -0
- package/{dist-esm/src/base64.browser.js → dist/browser/base64.js} +5 -1
- package/dist/browser/deserializationPolicy.d.ts +45 -0
- package/dist/browser/deserializationPolicy.d.ts.map +1 -0
- package/{dist-esm/src → dist/browser}/deserializationPolicy.js +16 -19
- package/dist/browser/deserializationPolicy.js.map +1 -0
- package/dist/browser/httpClientCache.d.ts +3 -0
- package/dist/browser/httpClientCache.d.ts.map +1 -0
- package/dist/browser/index.d.ts +9 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/index.js +11 -0
- package/dist/browser/index.js.map +1 -0
- package/dist/browser/interfaceHelpers.d.ts +14 -0
- package/dist/browser/interfaceHelpers.d.ts.map +1 -0
- package/{dist-esm/src → dist/browser}/interfaceHelpers.js +1 -1
- package/dist/browser/interfaceHelpers.js.map +1 -0
- package/dist/browser/interfaces.d.ts +664 -0
- package/dist/browser/interfaces.d.ts.map +1 -0
- package/dist/browser/log.d.ts +2 -0
- package/dist/browser/log.d.ts.map +1 -0
- package/dist/browser/operationHelpers.d.ts +14 -0
- package/dist/browser/operationHelpers.d.ts.map +1 -0
- package/dist/browser/operationHelpers.js.map +1 -0
- package/dist/browser/package.json +3 -0
- package/dist/browser/pipeline.d.ts +34 -0
- package/dist/browser/pipeline.d.ts.map +1 -0
- package/{dist-esm/src → dist/browser}/pipeline.js +3 -3
- package/dist/browser/pipeline.js.map +1 -0
- package/dist/browser/serializationPolicy.d.ts +33 -0
- package/dist/browser/serializationPolicy.d.ts.map +1 -0
- package/{dist-esm/src → dist/browser}/serializationPolicy.js +12 -14
- package/dist/browser/serializationPolicy.js.map +1 -0
- package/dist/browser/serializer.d.ts +31 -0
- package/dist/browser/serializer.d.ts.map +1 -0
- package/{dist-esm/src → dist/browser}/serializer.js +25 -26
- package/dist/browser/serializer.js.map +1 -0
- package/dist/browser/serviceClient.d.ts +82 -0
- package/dist/browser/serviceClient.d.ts.map +1 -0
- package/{dist-esm/src → dist/browser}/serviceClient.js +38 -14
- package/dist/browser/serviceClient.js.map +1 -0
- package/dist/browser/urlHelpers.d.ts +7 -0
- package/dist/browser/urlHelpers.d.ts.map +1 -0
- package/{dist-esm/src → dist/browser}/urlHelpers.js +4 -6
- package/dist/browser/urlHelpers.js.map +1 -0
- package/dist/browser/utils.d.ts +37 -0
- package/dist/browser/utils.d.ts.map +1 -0
- package/{dist-esm/src → dist/browser}/utils.js +23 -10
- package/dist/browser/utils.js.map +1 -0
- package/dist/commonjs/authorizeRequestOnClaimChallenge.d.ts +43 -0
- package/dist/commonjs/authorizeRequestOnClaimChallenge.d.ts.map +1 -0
- package/dist/commonjs/authorizeRequestOnClaimChallenge.js +74 -0
- package/dist/commonjs/authorizeRequestOnClaimChallenge.js.map +1 -0
- package/dist/commonjs/authorizeRequestOnTenantChallenge.d.ts +8 -0
- package/dist/commonjs/authorizeRequestOnTenantChallenge.d.ts.map +1 -0
- package/dist/commonjs/authorizeRequestOnTenantChallenge.js +106 -0
- package/dist/commonjs/authorizeRequestOnTenantChallenge.js.map +1 -0
- package/dist/commonjs/base64.d.ts +25 -0
- package/dist/commonjs/base64.d.ts.map +1 -0
- package/dist/commonjs/base64.js +43 -0
- package/dist/commonjs/base64.js.map +1 -0
- package/dist/commonjs/deserializationPolicy.d.ts +45 -0
- package/dist/commonjs/deserializationPolicy.d.ts.map +1 -0
- package/dist/commonjs/deserializationPolicy.js +232 -0
- package/dist/commonjs/deserializationPolicy.js.map +1 -0
- package/dist/commonjs/httpClientCache.d.ts +3 -0
- package/dist/commonjs/httpClientCache.d.ts.map +1 -0
- package/dist/commonjs/httpClientCache.js +15 -0
- package/dist/commonjs/httpClientCache.js.map +1 -0
- package/dist/commonjs/index.d.ts +9 -0
- package/dist/commonjs/index.d.ts.map +1 -0
- package/dist/commonjs/index.js +26 -0
- package/dist/commonjs/index.js.map +1 -0
- package/dist/commonjs/interfaceHelpers.d.ts +14 -0
- package/dist/commonjs/interfaceHelpers.d.ts.map +1 -0
- package/dist/commonjs/interfaceHelpers.js +44 -0
- package/dist/commonjs/interfaceHelpers.js.map +1 -0
- package/dist/commonjs/interfaces.d.ts +664 -0
- package/dist/commonjs/interfaces.d.ts.map +1 -0
- package/dist/commonjs/interfaces.js +14 -0
- package/dist/commonjs/interfaces.js.map +1 -0
- package/dist/commonjs/log.d.ts +2 -0
- package/dist/commonjs/log.d.ts.map +1 -0
- package/dist/commonjs/log.js +8 -0
- package/dist/commonjs/log.js.map +1 -0
- package/dist/commonjs/operationHelpers.d.ts +14 -0
- package/dist/commonjs/operationHelpers.d.ts.map +1 -0
- package/dist/commonjs/operationHelpers.js +99 -0
- package/dist/commonjs/operationHelpers.js.map +1 -0
- package/dist/commonjs/package.json +3 -0
- package/dist/commonjs/pipeline.d.ts +34 -0
- package/dist/commonjs/pipeline.d.ts.map +1 -0
- package/dist/commonjs/pipeline.js +30 -0
- package/dist/commonjs/pipeline.js.map +1 -0
- package/dist/commonjs/serializationPolicy.d.ts +33 -0
- package/dist/commonjs/serializationPolicy.d.ts.map +1 -0
- package/dist/commonjs/serializationPolicy.js +157 -0
- package/dist/commonjs/serializationPolicy.js.map +1 -0
- package/dist/commonjs/serializer.d.ts +31 -0
- package/dist/commonjs/serializer.d.ts.map +1 -0
- package/dist/commonjs/serializer.js +926 -0
- package/dist/commonjs/serializer.js.map +1 -0
- package/dist/commonjs/serviceClient.d.ts +82 -0
- package/dist/commonjs/serviceClient.d.ts.map +1 -0
- package/dist/commonjs/serviceClient.js +177 -0
- package/dist/commonjs/serviceClient.js.map +1 -0
- package/dist/commonjs/tsdoc-metadata.json +11 -0
- package/dist/commonjs/urlHelpers.d.ts +7 -0
- package/dist/commonjs/urlHelpers.d.ts.map +1 -0
- package/dist/commonjs/urlHelpers.js +238 -0
- package/dist/commonjs/urlHelpers.js.map +1 -0
- package/dist/commonjs/utils.d.ts +37 -0
- package/dist/commonjs/utils.d.ts.map +1 -0
- package/dist/commonjs/utils.js +135 -0
- package/dist/commonjs/utils.js.map +1 -0
- package/dist/esm/authorizeRequestOnClaimChallenge.d.ts +43 -0
- package/dist/esm/authorizeRequestOnClaimChallenge.d.ts.map +1 -0
- package/dist/esm/authorizeRequestOnClaimChallenge.js +69 -0
- package/dist/esm/authorizeRequestOnClaimChallenge.js.map +1 -0
- package/dist/esm/authorizeRequestOnTenantChallenge.d.ts +8 -0
- package/dist/esm/authorizeRequestOnTenantChallenge.d.ts.map +1 -0
- package/dist/esm/authorizeRequestOnTenantChallenge.js +102 -0
- package/dist/esm/authorizeRequestOnTenantChallenge.js.map +1 -0
- package/dist/esm/base64.d.ts +25 -0
- package/dist/esm/base64.d.ts.map +1 -0
- package/{dist-esm/src → dist/esm}/base64.js +0 -2
- package/dist/esm/base64.js.map +1 -0
- package/dist/esm/deserializationPolicy.d.ts +45 -0
- package/dist/esm/deserializationPolicy.d.ts.map +1 -0
- package/dist/esm/deserializationPolicy.js +228 -0
- package/dist/esm/deserializationPolicy.js.map +1 -0
- package/dist/esm/httpClientCache.d.ts +3 -0
- package/dist/esm/httpClientCache.d.ts.map +1 -0
- package/dist/esm/httpClientCache.js +11 -0
- package/dist/esm/httpClientCache.js.map +1 -0
- package/dist/esm/index.d.ts +9 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +11 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interfaceHelpers.d.ts +14 -0
- package/dist/esm/interfaceHelpers.d.ts.map +1 -0
- package/dist/esm/interfaceHelpers.js +39 -0
- package/dist/esm/interfaceHelpers.js.map +1 -0
- package/dist/esm/interfaces.d.ts +664 -0
- package/dist/esm/interfaces.d.ts.map +1 -0
- package/dist/esm/interfaces.js +11 -0
- package/dist/esm/interfaces.js.map +1 -0
- package/dist/esm/log.d.ts +2 -0
- package/dist/esm/log.d.ts.map +1 -0
- package/dist/esm/log.js +5 -0
- package/dist/esm/log.js.map +1 -0
- package/dist/esm/operationHelpers.d.ts +14 -0
- package/dist/esm/operationHelpers.d.ts.map +1 -0
- package/dist/esm/operationHelpers.js +94 -0
- package/dist/esm/operationHelpers.js.map +1 -0
- package/dist/esm/package.json +3 -0
- package/dist/esm/pipeline.d.ts +34 -0
- package/dist/esm/pipeline.d.ts.map +1 -0
- package/dist/esm/pipeline.js +26 -0
- package/dist/esm/pipeline.js.map +1 -0
- package/dist/esm/serializationPolicy.d.ts +33 -0
- package/dist/esm/serializationPolicy.d.ts.map +1 -0
- package/dist/esm/serializationPolicy.js +151 -0
- package/dist/esm/serializationPolicy.js.map +1 -0
- package/dist/esm/serializer.d.ts +31 -0
- package/dist/esm/serializer.d.ts.map +1 -0
- package/dist/esm/serializer.js +921 -0
- package/dist/esm/serializer.js.map +1 -0
- package/dist/esm/serviceClient.d.ts +82 -0
- package/dist/esm/serviceClient.d.ts.map +1 -0
- package/dist/esm/serviceClient.js +173 -0
- package/dist/esm/serviceClient.js.map +1 -0
- package/dist/esm/urlHelpers.d.ts +7 -0
- package/dist/esm/urlHelpers.d.ts.map +1 -0
- package/dist/esm/urlHelpers.js +233 -0
- package/dist/esm/urlHelpers.js.map +1 -0
- package/dist/esm/utils.d.ts +37 -0
- package/dist/esm/utils.d.ts.map +1 -0
- package/dist/esm/utils.js +128 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/react-native/authorizeRequestOnClaimChallenge.d.ts +43 -0
- package/dist/react-native/authorizeRequestOnClaimChallenge.d.ts.map +1 -0
- package/dist/react-native/authorizeRequestOnClaimChallenge.js +69 -0
- package/dist/react-native/authorizeRequestOnClaimChallenge.js.map +1 -0
- package/dist/react-native/authorizeRequestOnTenantChallenge.d.ts +8 -0
- package/dist/react-native/authorizeRequestOnTenantChallenge.d.ts.map +1 -0
- package/dist/react-native/authorizeRequestOnTenantChallenge.js +102 -0
- package/dist/react-native/authorizeRequestOnTenantChallenge.js.map +1 -0
- package/dist/react-native/base64.d.ts +25 -0
- package/dist/react-native/base64.d.ts.map +1 -0
- package/dist/react-native/base64.js +36 -0
- package/dist/react-native/base64.js.map +1 -0
- package/dist/react-native/deserializationPolicy.d.ts +45 -0
- package/dist/react-native/deserializationPolicy.d.ts.map +1 -0
- package/dist/react-native/deserializationPolicy.js +228 -0
- package/dist/react-native/deserializationPolicy.js.map +1 -0
- package/dist/react-native/httpClientCache.d.ts +3 -0
- package/dist/react-native/httpClientCache.d.ts.map +1 -0
- package/dist/react-native/httpClientCache.js +11 -0
- package/dist/react-native/httpClientCache.js.map +1 -0
- package/dist/react-native/index.d.ts +9 -0
- package/dist/react-native/index.d.ts.map +1 -0
- package/dist/react-native/index.js +11 -0
- package/dist/react-native/index.js.map +1 -0
- package/dist/react-native/interfaceHelpers.d.ts +14 -0
- package/dist/react-native/interfaceHelpers.d.ts.map +1 -0
- package/dist/react-native/interfaceHelpers.js +39 -0
- package/dist/react-native/interfaceHelpers.js.map +1 -0
- package/dist/react-native/interfaces.d.ts +664 -0
- package/dist/react-native/interfaces.d.ts.map +1 -0
- package/dist/react-native/interfaces.js +11 -0
- package/dist/react-native/interfaces.js.map +1 -0
- package/dist/react-native/log.d.ts +2 -0
- package/dist/react-native/log.d.ts.map +1 -0
- package/dist/react-native/log.js +5 -0
- package/dist/react-native/log.js.map +1 -0
- package/dist/react-native/operationHelpers.d.ts +14 -0
- package/dist/react-native/operationHelpers.d.ts.map +1 -0
- package/dist/react-native/operationHelpers.js +94 -0
- package/dist/react-native/operationHelpers.js.map +1 -0
- package/dist/react-native/package.json +3 -0
- package/dist/react-native/pipeline.d.ts +34 -0
- package/dist/react-native/pipeline.d.ts.map +1 -0
- package/dist/react-native/pipeline.js +26 -0
- package/dist/react-native/pipeline.js.map +1 -0
- package/dist/react-native/serializationPolicy.d.ts +33 -0
- package/dist/react-native/serializationPolicy.d.ts.map +1 -0
- package/dist/react-native/serializationPolicy.js +151 -0
- package/dist/react-native/serializationPolicy.js.map +1 -0
- package/dist/react-native/serializer.d.ts +31 -0
- package/dist/react-native/serializer.d.ts.map +1 -0
- package/dist/react-native/serializer.js +921 -0
- package/dist/react-native/serializer.js.map +1 -0
- package/dist/react-native/serviceClient.d.ts +82 -0
- package/dist/react-native/serviceClient.d.ts.map +1 -0
- package/dist/react-native/serviceClient.js +173 -0
- package/dist/react-native/serviceClient.js.map +1 -0
- package/dist/react-native/urlHelpers.d.ts +7 -0
- package/dist/react-native/urlHelpers.d.ts.map +1 -0
- package/dist/react-native/urlHelpers.js +233 -0
- package/dist/react-native/urlHelpers.js.map +1 -0
- package/dist/react-native/utils.d.ts +37 -0
- package/dist/react-native/utils.d.ts.map +1 -0
- package/dist/react-native/utils.js +128 -0
- package/dist/react-native/utils.js.map +1 -0
- package/package.json +74 -61
- package/dist/index.js +0 -2185
- package/dist/index.js.map +0 -1
- package/dist-esm/src/authorizeRequestOnClaimChallenge.js.map +0 -1
- package/dist-esm/src/authorizeRequestOnTenantChallenge.js.map +0 -1
- package/dist-esm/src/base64.browser.js.map +0 -1
- package/dist-esm/src/base64.js.map +0 -1
- package/dist-esm/src/deserializationPolicy.js.map +0 -1
- package/dist-esm/src/index.js +0 -11
- package/dist-esm/src/index.js.map +0 -1
- package/dist-esm/src/interfaceHelpers.js.map +0 -1
- package/dist-esm/src/operationHelpers.js.map +0 -1
- package/dist-esm/src/pipeline.js.map +0 -1
- package/dist-esm/src/serializationPolicy.js.map +0 -1
- package/dist-esm/src/serializer.js.map +0 -1
- package/dist-esm/src/serviceClient.js.map +0 -1
- package/dist-esm/src/urlHelpers.js.map +0 -1
- package/dist-esm/src/utils.js.map +0 -1
- /package/{dist-esm/src → dist/browser}/httpClientCache.js +0 -0
- /package/{dist-esm/src → dist/browser}/httpClientCache.js.map +0 -0
- /package/{dist-esm/src → dist/browser}/interfaces.js +0 -0
- /package/{dist-esm/src → dist/browser}/interfaces.js.map +0 -0
- /package/{dist-esm/src → dist/browser}/log.js +0 -0
- /package/{dist-esm/src → dist/browser}/log.js.map +0 -0
- /package/{dist-esm/src → dist/browser}/operationHelpers.js +0 -0
- /package/{types/latest → dist}/core-client.d.ts +0 -0
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT license.
|
|
3
|
+
import { getOperationArgumentValueFromParameter } from "./operationHelpers.js";
|
|
4
|
+
import { getPathStringFromParameter } from "./interfaceHelpers.js";
|
|
5
|
+
const CollectionFormatToDelimiterMap = {
|
|
6
|
+
CSV: ",",
|
|
7
|
+
SSV: " ",
|
|
8
|
+
Multi: "Multi",
|
|
9
|
+
TSV: "\t",
|
|
10
|
+
Pipes: "|",
|
|
11
|
+
};
|
|
12
|
+
export function getRequestUrl(baseUri, operationSpec, operationArguments, fallbackObject) {
|
|
13
|
+
const urlReplacements = calculateUrlReplacements(operationSpec, operationArguments, fallbackObject);
|
|
14
|
+
let isAbsolutePath = false;
|
|
15
|
+
let requestUrl = replaceAll(baseUri, urlReplacements);
|
|
16
|
+
if (operationSpec.path) {
|
|
17
|
+
let path = replaceAll(operationSpec.path, urlReplacements);
|
|
18
|
+
// QUIRK: sometimes we get a path component like /{nextLink}
|
|
19
|
+
// which may be a fully formed URL with a leading /. In that case, we should
|
|
20
|
+
// remove the leading /
|
|
21
|
+
if (operationSpec.path === "/{nextLink}" && path.startsWith("/")) {
|
|
22
|
+
path = path.substring(1);
|
|
23
|
+
}
|
|
24
|
+
// QUIRK: sometimes we get a path component like {nextLink}
|
|
25
|
+
// which may be a fully formed URL. In that case, we should
|
|
26
|
+
// ignore the baseUri.
|
|
27
|
+
if (isAbsoluteUrl(path)) {
|
|
28
|
+
requestUrl = path;
|
|
29
|
+
isAbsolutePath = true;
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
requestUrl = appendPath(requestUrl, path);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const { queryParams, sequenceParams } = calculateQueryParameters(operationSpec, operationArguments, fallbackObject);
|
|
36
|
+
/**
|
|
37
|
+
* Notice that this call sets the `noOverwrite` parameter to true if the `requestUrl`
|
|
38
|
+
* is an absolute path. This ensures that existing query parameter values in `requestUrl`
|
|
39
|
+
* do not get overwritten. On the other hand when `requestUrl` is not absolute path, it
|
|
40
|
+
* is still being built so there is nothing to overwrite.
|
|
41
|
+
*/
|
|
42
|
+
requestUrl = appendQueryParams(requestUrl, queryParams, sequenceParams, isAbsolutePath);
|
|
43
|
+
return requestUrl;
|
|
44
|
+
}
|
|
45
|
+
function replaceAll(input, replacements) {
|
|
46
|
+
let result = input;
|
|
47
|
+
for (const [searchValue, replaceValue] of replacements) {
|
|
48
|
+
result = result.split(searchValue).join(replaceValue);
|
|
49
|
+
}
|
|
50
|
+
return result;
|
|
51
|
+
}
|
|
52
|
+
function calculateUrlReplacements(operationSpec, operationArguments, fallbackObject) {
|
|
53
|
+
const result = new Map();
|
|
54
|
+
if (operationSpec.urlParameters?.length) {
|
|
55
|
+
for (const urlParameter of operationSpec.urlParameters) {
|
|
56
|
+
let urlParameterValue = getOperationArgumentValueFromParameter(operationArguments, urlParameter, fallbackObject);
|
|
57
|
+
const parameterPathString = getPathStringFromParameter(urlParameter);
|
|
58
|
+
urlParameterValue = operationSpec.serializer.serialize(urlParameter.mapper, urlParameterValue, parameterPathString);
|
|
59
|
+
if (!urlParameter.skipEncoding) {
|
|
60
|
+
urlParameterValue = encodeURIComponent(urlParameterValue);
|
|
61
|
+
}
|
|
62
|
+
result.set(`{${urlParameter.mapper.serializedName || parameterPathString}}`, urlParameterValue);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return result;
|
|
66
|
+
}
|
|
67
|
+
function isAbsoluteUrl(url) {
|
|
68
|
+
return url.includes("://");
|
|
69
|
+
}
|
|
70
|
+
function appendPath(url, pathToAppend) {
|
|
71
|
+
if (!pathToAppend) {
|
|
72
|
+
return url;
|
|
73
|
+
}
|
|
74
|
+
const parsedUrl = new URL(url);
|
|
75
|
+
let newPath = parsedUrl.pathname;
|
|
76
|
+
if (!newPath.endsWith("/")) {
|
|
77
|
+
newPath = `${newPath}/`;
|
|
78
|
+
}
|
|
79
|
+
if (pathToAppend.startsWith("/")) {
|
|
80
|
+
pathToAppend = pathToAppend.substring(1);
|
|
81
|
+
}
|
|
82
|
+
const searchStart = pathToAppend.indexOf("?");
|
|
83
|
+
if (searchStart !== -1) {
|
|
84
|
+
const path = pathToAppend.substring(0, searchStart);
|
|
85
|
+
const search = pathToAppend.substring(searchStart + 1);
|
|
86
|
+
newPath = newPath + path;
|
|
87
|
+
if (search) {
|
|
88
|
+
parsedUrl.search = parsedUrl.search ? `${parsedUrl.search}&${search}` : search;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
newPath = newPath + pathToAppend;
|
|
93
|
+
}
|
|
94
|
+
parsedUrl.pathname = newPath;
|
|
95
|
+
return parsedUrl.toString();
|
|
96
|
+
}
|
|
97
|
+
function calculateQueryParameters(operationSpec, operationArguments, fallbackObject) {
|
|
98
|
+
const result = new Map();
|
|
99
|
+
const sequenceParams = new Set();
|
|
100
|
+
if (operationSpec.queryParameters?.length) {
|
|
101
|
+
for (const queryParameter of operationSpec.queryParameters) {
|
|
102
|
+
if (queryParameter.mapper.type.name === "Sequence" && queryParameter.mapper.serializedName) {
|
|
103
|
+
sequenceParams.add(queryParameter.mapper.serializedName);
|
|
104
|
+
}
|
|
105
|
+
let queryParameterValue = getOperationArgumentValueFromParameter(operationArguments, queryParameter, fallbackObject);
|
|
106
|
+
if ((queryParameterValue !== undefined && queryParameterValue !== null) ||
|
|
107
|
+
queryParameter.mapper.required) {
|
|
108
|
+
queryParameterValue = operationSpec.serializer.serialize(queryParameter.mapper, queryParameterValue, getPathStringFromParameter(queryParameter));
|
|
109
|
+
const delimiter = queryParameter.collectionFormat
|
|
110
|
+
? CollectionFormatToDelimiterMap[queryParameter.collectionFormat]
|
|
111
|
+
: "";
|
|
112
|
+
if (Array.isArray(queryParameterValue)) {
|
|
113
|
+
// replace null and undefined
|
|
114
|
+
queryParameterValue = queryParameterValue.map((item) => {
|
|
115
|
+
if (item === null || item === undefined) {
|
|
116
|
+
return "";
|
|
117
|
+
}
|
|
118
|
+
return item;
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
if (queryParameter.collectionFormat === "Multi" && queryParameterValue.length === 0) {
|
|
122
|
+
continue;
|
|
123
|
+
}
|
|
124
|
+
else if (Array.isArray(queryParameterValue) &&
|
|
125
|
+
(queryParameter.collectionFormat === "SSV" || queryParameter.collectionFormat === "TSV")) {
|
|
126
|
+
queryParameterValue = queryParameterValue.join(delimiter);
|
|
127
|
+
}
|
|
128
|
+
if (!queryParameter.skipEncoding) {
|
|
129
|
+
if (Array.isArray(queryParameterValue)) {
|
|
130
|
+
queryParameterValue = queryParameterValue.map((item) => {
|
|
131
|
+
return encodeURIComponent(item);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
queryParameterValue = encodeURIComponent(queryParameterValue);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
// Join pipes and CSV *after* encoding, or the server will be upset.
|
|
139
|
+
if (Array.isArray(queryParameterValue) &&
|
|
140
|
+
(queryParameter.collectionFormat === "CSV" || queryParameter.collectionFormat === "Pipes")) {
|
|
141
|
+
queryParameterValue = queryParameterValue.join(delimiter);
|
|
142
|
+
}
|
|
143
|
+
result.set(queryParameter.mapper.serializedName || getPathStringFromParameter(queryParameter), queryParameterValue);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return {
|
|
148
|
+
queryParams: result,
|
|
149
|
+
sequenceParams,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
function simpleParseQueryParams(queryString) {
|
|
153
|
+
const result = new Map();
|
|
154
|
+
if (!queryString || queryString[0] !== "?") {
|
|
155
|
+
return result;
|
|
156
|
+
}
|
|
157
|
+
// remove the leading ?
|
|
158
|
+
queryString = queryString.slice(1);
|
|
159
|
+
const pairs = queryString.split("&");
|
|
160
|
+
for (const pair of pairs) {
|
|
161
|
+
const [name, value] = pair.split("=", 2);
|
|
162
|
+
const existingValue = result.get(name);
|
|
163
|
+
if (existingValue) {
|
|
164
|
+
if (Array.isArray(existingValue)) {
|
|
165
|
+
existingValue.push(value);
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
result.set(name, [existingValue, value]);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
result.set(name, value);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
return result;
|
|
176
|
+
}
|
|
177
|
+
/** @internal */
|
|
178
|
+
export function appendQueryParams(url, queryParams, sequenceParams, noOverwrite = false) {
|
|
179
|
+
if (queryParams.size === 0) {
|
|
180
|
+
return url;
|
|
181
|
+
}
|
|
182
|
+
const parsedUrl = new URL(url);
|
|
183
|
+
// QUIRK: parsedUrl.searchParams will have their name/value pairs decoded, which
|
|
184
|
+
// can change their meaning to the server, such as in the case of a SAS signature.
|
|
185
|
+
// To avoid accidentally un-encoding a query param, we parse the key/values ourselves
|
|
186
|
+
const combinedParams = simpleParseQueryParams(parsedUrl.search);
|
|
187
|
+
for (const [name, value] of queryParams) {
|
|
188
|
+
const existingValue = combinedParams.get(name);
|
|
189
|
+
if (Array.isArray(existingValue)) {
|
|
190
|
+
if (Array.isArray(value)) {
|
|
191
|
+
existingValue.push(...value);
|
|
192
|
+
const valueSet = new Set(existingValue);
|
|
193
|
+
combinedParams.set(name, Array.from(valueSet));
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
existingValue.push(value);
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
else if (existingValue) {
|
|
200
|
+
if (Array.isArray(value)) {
|
|
201
|
+
value.unshift(existingValue);
|
|
202
|
+
}
|
|
203
|
+
else if (sequenceParams.has(name)) {
|
|
204
|
+
combinedParams.set(name, [existingValue, value]);
|
|
205
|
+
}
|
|
206
|
+
if (!noOverwrite) {
|
|
207
|
+
combinedParams.set(name, value);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
combinedParams.set(name, value);
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
const searchPieces = [];
|
|
215
|
+
for (const [name, value] of combinedParams) {
|
|
216
|
+
if (typeof value === "string") {
|
|
217
|
+
searchPieces.push(`${name}=${value}`);
|
|
218
|
+
}
|
|
219
|
+
else if (Array.isArray(value)) {
|
|
220
|
+
// QUIRK: If we get an array of values, include multiple key/value pairs
|
|
221
|
+
for (const subValue of value) {
|
|
222
|
+
searchPieces.push(`${name}=${subValue}`);
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else {
|
|
226
|
+
searchPieces.push(`${name}=${value}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// QUIRK: we have to set search manually as searchParams will encode comma when it shouldn't.
|
|
230
|
+
parsedUrl.search = searchPieces.length ? `?${searchPieces.join("&")}` : "";
|
|
231
|
+
return parsedUrl.toString();
|
|
232
|
+
}
|
|
233
|
+
//# sourceMappingURL=urlHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"urlHelpers.js","sourceRoot":"","sources":["../../src/urlHelpers.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { OperationArguments, OperationSpec, QueryCollectionFormat } from \"./interfaces.js\";\nimport { getOperationArgumentValueFromParameter } from \"./operationHelpers.js\";\nimport { getPathStringFromParameter } from \"./interfaceHelpers.js\";\n\nconst CollectionFormatToDelimiterMap: { [key in QueryCollectionFormat]: string } = {\n CSV: \",\",\n SSV: \" \",\n Multi: \"Multi\",\n TSV: \"\\t\",\n Pipes: \"|\",\n};\n\nexport function getRequestUrl(\n baseUri: string,\n operationSpec: OperationSpec,\n operationArguments: OperationArguments,\n fallbackObject: { [parameterName: string]: any },\n): string {\n const urlReplacements = calculateUrlReplacements(\n operationSpec,\n operationArguments,\n fallbackObject,\n );\n\n let isAbsolutePath = false;\n\n let requestUrl = replaceAll(baseUri, urlReplacements);\n if (operationSpec.path) {\n let path = replaceAll(operationSpec.path, urlReplacements);\n // QUIRK: sometimes we get a path component like /{nextLink}\n // which may be a fully formed URL with a leading /. In that case, we should\n // remove the leading /\n if (operationSpec.path === \"/{nextLink}\" && path.startsWith(\"/\")) {\n path = path.substring(1);\n }\n // QUIRK: sometimes we get a path component like {nextLink}\n // which may be a fully formed URL. In that case, we should\n // ignore the baseUri.\n if (isAbsoluteUrl(path)) {\n requestUrl = path;\n isAbsolutePath = true;\n } else {\n requestUrl = appendPath(requestUrl, path);\n }\n }\n\n const { queryParams, sequenceParams } = calculateQueryParameters(\n operationSpec,\n operationArguments,\n fallbackObject,\n );\n /**\n * Notice that this call sets the `noOverwrite` parameter to true if the `requestUrl`\n * is an absolute path. This ensures that existing query parameter values in `requestUrl`\n * do not get overwritten. On the other hand when `requestUrl` is not absolute path, it\n * is still being built so there is nothing to overwrite.\n */\n requestUrl = appendQueryParams(requestUrl, queryParams, sequenceParams, isAbsolutePath);\n\n return requestUrl;\n}\n\nfunction replaceAll(input: string, replacements: Map<string, string>): string {\n let result = input;\n for (const [searchValue, replaceValue] of replacements) {\n result = result.split(searchValue).join(replaceValue);\n }\n return result;\n}\n\nfunction calculateUrlReplacements(\n operationSpec: OperationSpec,\n operationArguments: OperationArguments,\n fallbackObject: { [parameterName: string]: any },\n): Map<string, string> {\n const result = new Map<string, string>();\n if (operationSpec.urlParameters?.length) {\n for (const urlParameter of operationSpec.urlParameters) {\n let urlParameterValue: string = getOperationArgumentValueFromParameter(\n operationArguments,\n urlParameter,\n fallbackObject,\n );\n const parameterPathString = getPathStringFromParameter(urlParameter);\n urlParameterValue = operationSpec.serializer.serialize(\n urlParameter.mapper,\n urlParameterValue,\n parameterPathString,\n );\n if (!urlParameter.skipEncoding) {\n urlParameterValue = encodeURIComponent(urlParameterValue);\n }\n result.set(\n `{${urlParameter.mapper.serializedName || parameterPathString}}`,\n urlParameterValue,\n );\n }\n }\n return result;\n}\n\nfunction isAbsoluteUrl(url: string): boolean {\n return url.includes(\"://\");\n}\n\nfunction appendPath(url: string, pathToAppend?: string): string {\n if (!pathToAppend) {\n return url;\n }\n\n const parsedUrl = new URL(url);\n let newPath = parsedUrl.pathname;\n\n if (!newPath.endsWith(\"/\")) {\n newPath = `${newPath}/`;\n }\n\n if (pathToAppend.startsWith(\"/\")) {\n pathToAppend = pathToAppend.substring(1);\n }\n\n const searchStart = pathToAppend.indexOf(\"?\");\n if (searchStart !== -1) {\n const path = pathToAppend.substring(0, searchStart);\n const search = pathToAppend.substring(searchStart + 1);\n newPath = newPath + path;\n if (search) {\n parsedUrl.search = parsedUrl.search ? `${parsedUrl.search}&${search}` : search;\n }\n } else {\n newPath = newPath + pathToAppend;\n }\n\n parsedUrl.pathname = newPath;\n\n return parsedUrl.toString();\n}\n\nfunction calculateQueryParameters(\n operationSpec: OperationSpec,\n operationArguments: OperationArguments,\n fallbackObject: { [parameterName: string]: any },\n): {\n queryParams: Map<string, string | string[]>;\n sequenceParams: Set<string>;\n} {\n const result = new Map<string, string | string[]>();\n const sequenceParams: Set<string> = new Set<string>();\n\n if (operationSpec.queryParameters?.length) {\n for (const queryParameter of operationSpec.queryParameters) {\n if (queryParameter.mapper.type.name === \"Sequence\" && queryParameter.mapper.serializedName) {\n sequenceParams.add(queryParameter.mapper.serializedName);\n }\n let queryParameterValue: string | string[] = getOperationArgumentValueFromParameter(\n operationArguments,\n queryParameter,\n fallbackObject,\n );\n if (\n (queryParameterValue !== undefined && queryParameterValue !== null) ||\n queryParameter.mapper.required\n ) {\n queryParameterValue = operationSpec.serializer.serialize(\n queryParameter.mapper,\n queryParameterValue,\n getPathStringFromParameter(queryParameter),\n );\n\n const delimiter = queryParameter.collectionFormat\n ? CollectionFormatToDelimiterMap[queryParameter.collectionFormat]\n : \"\";\n if (Array.isArray(queryParameterValue)) {\n // replace null and undefined\n queryParameterValue = queryParameterValue.map((item) => {\n if (item === null || item === undefined) {\n return \"\";\n }\n\n return item;\n });\n }\n if (queryParameter.collectionFormat === \"Multi\" && queryParameterValue.length === 0) {\n continue;\n } else if (\n Array.isArray(queryParameterValue) &&\n (queryParameter.collectionFormat === \"SSV\" || queryParameter.collectionFormat === \"TSV\")\n ) {\n queryParameterValue = queryParameterValue.join(delimiter);\n }\n if (!queryParameter.skipEncoding) {\n if (Array.isArray(queryParameterValue)) {\n queryParameterValue = queryParameterValue.map((item: string) => {\n return encodeURIComponent(item);\n });\n } else {\n queryParameterValue = encodeURIComponent(queryParameterValue);\n }\n }\n\n // Join pipes and CSV *after* encoding, or the server will be upset.\n if (\n Array.isArray(queryParameterValue) &&\n (queryParameter.collectionFormat === \"CSV\" || queryParameter.collectionFormat === \"Pipes\")\n ) {\n queryParameterValue = queryParameterValue.join(delimiter);\n }\n\n result.set(\n queryParameter.mapper.serializedName || getPathStringFromParameter(queryParameter),\n queryParameterValue,\n );\n }\n }\n }\n return {\n queryParams: result,\n sequenceParams,\n };\n}\n\nfunction simpleParseQueryParams(queryString: string): Map<string, string | string[] | undefined> {\n const result: Map<string, string | string[] | undefined> = new Map<\n string,\n string | string[] | undefined\n >();\n if (!queryString || queryString[0] !== \"?\") {\n return result;\n }\n\n // remove the leading ?\n queryString = queryString.slice(1);\n const pairs = queryString.split(\"&\");\n\n for (const pair of pairs) {\n const [name, value] = pair.split(\"=\", 2);\n const existingValue = result.get(name);\n if (existingValue) {\n if (Array.isArray(existingValue)) {\n existingValue.push(value);\n } else {\n result.set(name, [existingValue, value]);\n }\n } else {\n result.set(name, value);\n }\n }\n\n return result;\n}\n\n/** @internal */\nexport function appendQueryParams(\n url: string,\n queryParams: Map<string, string | string[]>,\n sequenceParams: Set<string>,\n noOverwrite: boolean = false,\n): string {\n if (queryParams.size === 0) {\n return url;\n }\n\n const parsedUrl = new URL(url);\n\n // QUIRK: parsedUrl.searchParams will have their name/value pairs decoded, which\n // can change their meaning to the server, such as in the case of a SAS signature.\n // To avoid accidentally un-encoding a query param, we parse the key/values ourselves\n const combinedParams = simpleParseQueryParams(parsedUrl.search);\n\n for (const [name, value] of queryParams) {\n const existingValue = combinedParams.get(name);\n if (Array.isArray(existingValue)) {\n if (Array.isArray(value)) {\n existingValue.push(...value);\n const valueSet = new Set(existingValue);\n combinedParams.set(name, Array.from(valueSet));\n } else {\n existingValue.push(value);\n }\n } else if (existingValue) {\n if (Array.isArray(value)) {\n value.unshift(existingValue);\n } else if (sequenceParams.has(name)) {\n combinedParams.set(name, [existingValue, value]);\n }\n if (!noOverwrite) {\n combinedParams.set(name, value);\n }\n } else {\n combinedParams.set(name, value);\n }\n }\n\n const searchPieces: string[] = [];\n for (const [name, value] of combinedParams) {\n if (typeof value === \"string\") {\n searchPieces.push(`${name}=${value}`);\n } else if (Array.isArray(value)) {\n // QUIRK: If we get an array of values, include multiple key/value pairs\n for (const subValue of value) {\n searchPieces.push(`${name}=${subValue}`);\n }\n } else {\n searchPieces.push(`${name}=${value}`);\n }\n }\n\n // QUIRK: we have to set search manually as searchParams will encode comma when it shouldn't.\n parsedUrl.search = searchPieces.length ? `?${searchPieces.join(\"&\")}` : \"\";\n return parsedUrl.toString();\n}\n"]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { FullOperationResponse, OperationResponseMap } from "./interfaces.js";
|
|
2
|
+
/**
|
|
3
|
+
* The union of all possible types for a primitive response body.
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export type BodyPrimitive = number | string | boolean | Date | Uint8Array | undefined | null;
|
|
7
|
+
/**
|
|
8
|
+
* A type guard for a primitive response body.
|
|
9
|
+
* @param value - Value to test
|
|
10
|
+
*
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare function isPrimitiveBody(value: unknown, mapperTypeName?: string): value is BodyPrimitive;
|
|
14
|
+
/**
|
|
15
|
+
* Returns true if the given string is in ISO 8601 format.
|
|
16
|
+
* @param value - The value to be validated for ISO 8601 duration format.
|
|
17
|
+
* @internal
|
|
18
|
+
*/
|
|
19
|
+
export declare function isDuration(value: string): boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Returns true if the provided uuid is valid.
|
|
22
|
+
*
|
|
23
|
+
* @param uuid - The uuid that needs to be validated.
|
|
24
|
+
*
|
|
25
|
+
* @internal
|
|
26
|
+
*/
|
|
27
|
+
export declare function isValidUuid(uuid: string): boolean;
|
|
28
|
+
/**
|
|
29
|
+
* Take a `FullOperationResponse` and turn it into a flat
|
|
30
|
+
* response object to hand back to the consumer.
|
|
31
|
+
* @param fullResponse - The processed response from the operation request
|
|
32
|
+
* @param responseSpec - The response map from the OperationSpec
|
|
33
|
+
*
|
|
34
|
+
* @internal
|
|
35
|
+
*/
|
|
36
|
+
export declare function flattenResponse(fullResponse: FullOperationResponse, responseSpec: OperationResponseMap | undefined): unknown;
|
|
37
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAGA,OAAO,EAAmB,qBAAqB,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAE/F;;;GAGG;AACH,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,UAAU,GAAG,SAAS,GAAG,IAAI,CAAC;AAE7F;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,KAAK,IAAI,aAAa,CAY/F;AAKD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEjD;AAKD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAyDD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,YAAY,EAAE,qBAAqB,EACnC,YAAY,EAAE,oBAAoB,GAAG,SAAS,GAC7C,OAAO,CA4DT"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT license.
|
|
3
|
+
/**
|
|
4
|
+
* A type guard for a primitive response body.
|
|
5
|
+
* @param value - Value to test
|
|
6
|
+
*
|
|
7
|
+
* @internal
|
|
8
|
+
*/
|
|
9
|
+
export function isPrimitiveBody(value, mapperTypeName) {
|
|
10
|
+
return (mapperTypeName !== "Composite" &&
|
|
11
|
+
mapperTypeName !== "Dictionary" &&
|
|
12
|
+
(typeof value === "string" ||
|
|
13
|
+
typeof value === "number" ||
|
|
14
|
+
typeof value === "boolean" ||
|
|
15
|
+
mapperTypeName?.match(/^(Date|DateTime|DateTimeRfc1123|UnixTime|ByteArray|Base64Url)$/i) !==
|
|
16
|
+
null ||
|
|
17
|
+
value === undefined ||
|
|
18
|
+
value === null));
|
|
19
|
+
}
|
|
20
|
+
const validateISODuration = /^(-|\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;
|
|
21
|
+
/**
|
|
22
|
+
* Returns true if the given string is in ISO 8601 format.
|
|
23
|
+
* @param value - The value to be validated for ISO 8601 duration format.
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
export function isDuration(value) {
|
|
27
|
+
return validateISODuration.test(value);
|
|
28
|
+
}
|
|
29
|
+
const validUuidRegex = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/i;
|
|
30
|
+
/**
|
|
31
|
+
* Returns true if the provided uuid is valid.
|
|
32
|
+
*
|
|
33
|
+
* @param uuid - The uuid that needs to be validated.
|
|
34
|
+
*
|
|
35
|
+
* @internal
|
|
36
|
+
*/
|
|
37
|
+
export function isValidUuid(uuid) {
|
|
38
|
+
return validUuidRegex.test(uuid);
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Maps the response as follows:
|
|
42
|
+
* - wraps the response body if needed (typically if its type is primitive).
|
|
43
|
+
* - returns null if the combination of the headers and the body is empty.
|
|
44
|
+
* - otherwise, returns the combination of the headers and the body.
|
|
45
|
+
*
|
|
46
|
+
* @param responseObject - a representation of the parsed response
|
|
47
|
+
* @returns the response that will be returned to the user which can be null and/or wrapped
|
|
48
|
+
*
|
|
49
|
+
* @internal
|
|
50
|
+
*/
|
|
51
|
+
function handleNullableResponseAndWrappableBody(responseObject) {
|
|
52
|
+
const combinedHeadersAndBody = {
|
|
53
|
+
...responseObject.headers,
|
|
54
|
+
...responseObject.body,
|
|
55
|
+
};
|
|
56
|
+
if (responseObject.hasNullableType &&
|
|
57
|
+
Object.getOwnPropertyNames(combinedHeadersAndBody).length === 0) {
|
|
58
|
+
return responseObject.shouldWrapBody ? { body: null } : null;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
return responseObject.shouldWrapBody
|
|
62
|
+
? {
|
|
63
|
+
...responseObject.headers,
|
|
64
|
+
body: responseObject.body,
|
|
65
|
+
}
|
|
66
|
+
: combinedHeadersAndBody;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Take a `FullOperationResponse` and turn it into a flat
|
|
71
|
+
* response object to hand back to the consumer.
|
|
72
|
+
* @param fullResponse - The processed response from the operation request
|
|
73
|
+
* @param responseSpec - The response map from the OperationSpec
|
|
74
|
+
*
|
|
75
|
+
* @internal
|
|
76
|
+
*/
|
|
77
|
+
export function flattenResponse(fullResponse, responseSpec) {
|
|
78
|
+
const parsedHeaders = fullResponse.parsedHeaders;
|
|
79
|
+
// head methods never have a body, but we return a boolean set to body property
|
|
80
|
+
// to indicate presence/absence of the resource
|
|
81
|
+
if (fullResponse.request.method === "HEAD") {
|
|
82
|
+
return {
|
|
83
|
+
...parsedHeaders,
|
|
84
|
+
body: fullResponse.parsedBody,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
const bodyMapper = responseSpec && responseSpec.bodyMapper;
|
|
88
|
+
const isNullable = Boolean(bodyMapper?.nullable);
|
|
89
|
+
const expectedBodyTypeName = bodyMapper?.type.name;
|
|
90
|
+
/** If the body is asked for, we look at the expected body type to handle it */
|
|
91
|
+
if (expectedBodyTypeName === "Stream") {
|
|
92
|
+
return {
|
|
93
|
+
...parsedHeaders,
|
|
94
|
+
blobBody: fullResponse.blobBody,
|
|
95
|
+
readableStreamBody: fullResponse.readableStreamBody,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
const modelProperties = (expectedBodyTypeName === "Composite" &&
|
|
99
|
+
bodyMapper.type.modelProperties) ||
|
|
100
|
+
{};
|
|
101
|
+
const isPageableResponse = Object.keys(modelProperties).some((k) => modelProperties[k].serializedName === "");
|
|
102
|
+
if (expectedBodyTypeName === "Sequence" || isPageableResponse) {
|
|
103
|
+
const arrayResponse = fullResponse.parsedBody ?? [];
|
|
104
|
+
for (const key of Object.keys(modelProperties)) {
|
|
105
|
+
if (modelProperties[key].serializedName) {
|
|
106
|
+
arrayResponse[key] = fullResponse.parsedBody?.[key];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (parsedHeaders) {
|
|
110
|
+
for (const key of Object.keys(parsedHeaders)) {
|
|
111
|
+
arrayResponse[key] = parsedHeaders[key];
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return isNullable &&
|
|
115
|
+
!fullResponse.parsedBody &&
|
|
116
|
+
!parsedHeaders &&
|
|
117
|
+
Object.getOwnPropertyNames(modelProperties).length === 0
|
|
118
|
+
? null
|
|
119
|
+
: arrayResponse;
|
|
120
|
+
}
|
|
121
|
+
return handleNullableResponseAndWrappableBody({
|
|
122
|
+
body: fullResponse.parsedBody,
|
|
123
|
+
headers: parsedHeaders,
|
|
124
|
+
hasNullableType: isNullable,
|
|
125
|
+
shouldWrapBody: isPrimitiveBody(fullResponse.parsedBody, expectedBodyTypeName),
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT license.\n\nimport { CompositeMapper, FullOperationResponse, OperationResponseMap } from \"./interfaces.js\";\n\n/**\n * The union of all possible types for a primitive response body.\n * @internal\n */\nexport type BodyPrimitive = number | string | boolean | Date | Uint8Array | undefined | null;\n\n/**\n * A type guard for a primitive response body.\n * @param value - Value to test\n *\n * @internal\n */\nexport function isPrimitiveBody(value: unknown, mapperTypeName?: string): value is BodyPrimitive {\n return (\n mapperTypeName !== \"Composite\" &&\n mapperTypeName !== \"Dictionary\" &&\n (typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"boolean\" ||\n mapperTypeName?.match(/^(Date|DateTime|DateTimeRfc1123|UnixTime|ByteArray|Base64Url)$/i) !==\n null ||\n value === undefined ||\n value === null)\n );\n}\n\nconst validateISODuration =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n/**\n * Returns true if the given string is in ISO 8601 format.\n * @param value - The value to be validated for ISO 8601 duration format.\n * @internal\n */\nexport function isDuration(value: string): boolean {\n return validateISODuration.test(value);\n}\n\nconst validUuidRegex =\n /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/i;\n\n/**\n * Returns true if the provided uuid is valid.\n *\n * @param uuid - The uuid that needs to be validated.\n *\n * @internal\n */\nexport function isValidUuid(uuid: string): boolean {\n return validUuidRegex.test(uuid);\n}\n\n/**\n * Representation of parsed response headers and body coupled with information\n * about how to map them:\n * - whether the response body should be wrapped (typically if its type is primitive).\n * - whether the response is nullable so it can be null if the combination of\n * the headers and the body is empty.\n */\ninterface ResponseObjectWithMetadata {\n /** whether the mapper allows nullable body */\n hasNullableType: boolean;\n /** whether the response's body should be wrapped */\n shouldWrapBody: boolean;\n /** parsed headers of the response */\n headers:\n | {\n [key: string]: unknown;\n }\n | undefined;\n /** parsed body of the response */\n body: any;\n}\n\n/**\n * Maps the response as follows:\n * - wraps the response body if needed (typically if its type is primitive).\n * - returns null if the combination of the headers and the body is empty.\n * - otherwise, returns the combination of the headers and the body.\n *\n * @param responseObject - a representation of the parsed response\n * @returns the response that will be returned to the user which can be null and/or wrapped\n *\n * @internal\n */\nfunction handleNullableResponseAndWrappableBody(\n responseObject: ResponseObjectWithMetadata,\n): unknown | null {\n const combinedHeadersAndBody = {\n ...responseObject.headers,\n ...responseObject.body,\n };\n if (\n responseObject.hasNullableType &&\n Object.getOwnPropertyNames(combinedHeadersAndBody).length === 0\n ) {\n return responseObject.shouldWrapBody ? { body: null } : null;\n } else {\n return responseObject.shouldWrapBody\n ? {\n ...responseObject.headers,\n body: responseObject.body,\n }\n : combinedHeadersAndBody;\n }\n}\n\n/**\n * Take a `FullOperationResponse` and turn it into a flat\n * response object to hand back to the consumer.\n * @param fullResponse - The processed response from the operation request\n * @param responseSpec - The response map from the OperationSpec\n *\n * @internal\n */\nexport function flattenResponse(\n fullResponse: FullOperationResponse,\n responseSpec: OperationResponseMap | undefined,\n): unknown {\n const parsedHeaders = fullResponse.parsedHeaders;\n\n // head methods never have a body, but we return a boolean set to body property\n // to indicate presence/absence of the resource\n if (fullResponse.request.method === \"HEAD\") {\n return {\n ...parsedHeaders,\n body: fullResponse.parsedBody,\n };\n }\n const bodyMapper = responseSpec && responseSpec.bodyMapper;\n const isNullable = Boolean(bodyMapper?.nullable);\n const expectedBodyTypeName = bodyMapper?.type.name;\n\n /** If the body is asked for, we look at the expected body type to handle it */\n if (expectedBodyTypeName === \"Stream\") {\n return {\n ...parsedHeaders,\n blobBody: fullResponse.blobBody,\n readableStreamBody: fullResponse.readableStreamBody,\n };\n }\n\n const modelProperties =\n (expectedBodyTypeName === \"Composite\" &&\n (bodyMapper as CompositeMapper).type.modelProperties) ||\n {};\n const isPageableResponse = Object.keys(modelProperties).some(\n (k) => modelProperties[k].serializedName === \"\",\n );\n if (expectedBodyTypeName === \"Sequence\" || isPageableResponse) {\n const arrayResponse: { [key: string]: unknown } =\n fullResponse.parsedBody ?? ([] as unknown as { [key: string]: unknown });\n\n for (const key of Object.keys(modelProperties)) {\n if (modelProperties[key].serializedName) {\n arrayResponse[key] = fullResponse.parsedBody?.[key];\n }\n }\n\n if (parsedHeaders) {\n for (const key of Object.keys(parsedHeaders)) {\n arrayResponse[key] = parsedHeaders[key];\n }\n }\n return isNullable &&\n !fullResponse.parsedBody &&\n !parsedHeaders &&\n Object.getOwnPropertyNames(modelProperties).length === 0\n ? null\n : arrayResponse;\n }\n\n return handleNullableResponseAndWrappableBody({\n body: fullResponse.parsedBody,\n headers: parsedHeaders,\n hasNullableType: isNullable,\n shouldWrapBody: isPrimitiveBody(fullResponse.parsedBody, expectedBodyTypeName),\n });\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,43 +1,34 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azure/core-client",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.1-alpha.20240223.2",
|
|
4
4
|
"description": "Core library for interfacing with AutoRest generated code",
|
|
5
5
|
"sdk-type": "client",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
"pack": "npm pack 2>&1",
|
|
30
|
-
"test:browser": "npm run clean && npm run build:test && npm run unit-test:browser && npm run integration-test:browser",
|
|
31
|
-
"test:node": "npm run clean && tsc -p . && npm run unit-test:node && npm run integration-test:node",
|
|
32
|
-
"test": "npm run clean && tsc -p . && npm run unit-test:node && dev-tool run bundle && npm run unit-test:browser && npm run integration-test",
|
|
33
|
-
"unit-test:browser": "karma start --single-run",
|
|
34
|
-
"unit-test:node": "cross-env TS_NODE_FILES=true dev-tool run test:node-ts-input --no-test-proxy=true --timeout 50000",
|
|
35
|
-
"unit-test": "npm run unit-test:node && npm run unit-test:browser"
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/commonjs/index.js",
|
|
8
|
+
"types": "./dist/commonjs/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
"./package.json": "./package.json",
|
|
11
|
+
".": {
|
|
12
|
+
"browser": {
|
|
13
|
+
"types": "./dist/browser/index.d.ts",
|
|
14
|
+
"default": "./dist/browser/index.js"
|
|
15
|
+
},
|
|
16
|
+
"react-native": {
|
|
17
|
+
"types": "./dist/react-native/index.d.ts",
|
|
18
|
+
"default": "./dist/react-native/index.js"
|
|
19
|
+
},
|
|
20
|
+
"import": {
|
|
21
|
+
"types": "./dist/esm/index.d.ts",
|
|
22
|
+
"default": "./dist/esm/index.js"
|
|
23
|
+
},
|
|
24
|
+
"require": {
|
|
25
|
+
"types": "./dist/commonjs/index.d.ts",
|
|
26
|
+
"default": "./dist/commonjs/index.js"
|
|
27
|
+
}
|
|
28
|
+
}
|
|
36
29
|
},
|
|
37
30
|
"files": [
|
|
38
31
|
"dist/",
|
|
39
|
-
"dist-esm/src/",
|
|
40
|
-
"types/latest/core-client.d.ts",
|
|
41
32
|
"README.md",
|
|
42
33
|
"LICENSE"
|
|
43
34
|
],
|
|
@@ -57,46 +48,68 @@
|
|
|
57
48
|
"homepage": "https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-client/",
|
|
58
49
|
"sideEffects": false,
|
|
59
50
|
"prettier": "@azure/eslint-plugin-azure-sdk/prettier.json",
|
|
51
|
+
"scripts": {
|
|
52
|
+
"build:samples": "echo Obsolete",
|
|
53
|
+
"build:test": "npm run clean && tshy && dev-tool run build-test",
|
|
54
|
+
"build": "npm run clean && tshy && api-extractor run --local",
|
|
55
|
+
"check-format": "dev-tool run vendored prettier --list-different --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"",
|
|
56
|
+
"clean": "rimraf --glob dist temp types *.tgz *.log",
|
|
57
|
+
"execute:samples": "echo skipped",
|
|
58
|
+
"extract-api": "tshy && api-extractor run --local",
|
|
59
|
+
"format": "dev-tool run vendored prettier --write --config ../../../.prettierrc.json --ignore-path ../../../.prettierignore \"src/**/*.ts\" \"test/**/*.ts\" \"*.{js,json}\"",
|
|
60
|
+
"integration-test:browser": "echo skipped",
|
|
61
|
+
"integration-test:node": "echo skipped",
|
|
62
|
+
"integration-test": "npm run integration-test:node && npm run integration-test:browser",
|
|
63
|
+
"lint:fix": "eslint package.json api-extractor.json src test --ext .ts --fix --fix-type [problem,suggestion]",
|
|
64
|
+
"lint": "eslint package.json api-extractor.json src test --ext .ts",
|
|
65
|
+
"pack": "npm pack 2>&1",
|
|
66
|
+
"test:browser": "npm run clean && npm run build:test && npm run unit-test:browser && npm run integration-test:browser",
|
|
67
|
+
"test:node": "npm run clean && tshy && npm run unit-test:node && npm run integration-test:node",
|
|
68
|
+
"test": "npm run clean && tshy && npm run unit-test:node && dev-tool run bundle && npm run unit-test:browser && npm run integration-test",
|
|
69
|
+
"unit-test:browser": "npm run build:test && dev-tool run test:vitest --no-test-proxy --browser",
|
|
70
|
+
"unit-test:node": "dev-tool run test:vitest --no-test-proxy",
|
|
71
|
+
"unit-test": "npm run unit-test:node && npm run unit-test:browser"
|
|
72
|
+
},
|
|
60
73
|
"dependencies": {
|
|
61
74
|
"@azure/abort-controller": "^2.0.0",
|
|
62
75
|
"@azure/core-auth": "^1.4.0",
|
|
63
76
|
"@azure/core-rest-pipeline": "^1.9.1",
|
|
64
77
|
"@azure/core-tracing": "^1.0.0",
|
|
65
|
-
"@azure/core-util": "^1.
|
|
78
|
+
"@azure/core-util": "^1.6.1",
|
|
66
79
|
"@azure/logger": "^1.0.0",
|
|
67
|
-
"tslib": "^2.2
|
|
80
|
+
"tslib": "^2.6.2"
|
|
68
81
|
},
|
|
69
82
|
"devDependencies": {
|
|
70
|
-
"@azure/core-xml": "^1.
|
|
71
|
-
"@
|
|
72
|
-
"@
|
|
73
|
-
"@
|
|
83
|
+
"@azure/core-xml": "^1.3.4",
|
|
84
|
+
"@azure/dev-tool": ">=1.0.0-alpha <1.0.0-alphb",
|
|
85
|
+
"@azure/eslint-plugin-azure-sdk": ">=3.0.0-alpha <3.0.0-alphb",
|
|
86
|
+
"@microsoft/api-extractor": "^7.40.3",
|
|
74
87
|
"@types/node": "^18.0.0",
|
|
75
|
-
"@
|
|
76
|
-
"@
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
80
|
-
"
|
|
81
|
-
"
|
|
82
|
-
"karma": "^6.2.0",
|
|
83
|
-
"karma-chrome-launcher": "^3.0.0",
|
|
84
|
-
"karma-coverage": "^2.0.0",
|
|
85
|
-
"karma-env-preprocessor": "^0.1.1",
|
|
86
|
-
"karma-firefox-launcher": "^1.1.0",
|
|
87
|
-
"karma-junit-reporter": "^2.0.1",
|
|
88
|
-
"karma-mocha": "^2.0.1",
|
|
89
|
-
"karma-mocha-reporter": "^2.2.5",
|
|
90
|
-
"karma-sourcemap-loader": "^0.3.8",
|
|
91
|
-
"mocha": "^10.0.0",
|
|
92
|
-
"rimraf": "^3.0.0",
|
|
93
|
-
"sinon": "^17.0.0",
|
|
94
|
-
"ts-node": "^10.0.0",
|
|
88
|
+
"@vitest/browser": "^1.3.1",
|
|
89
|
+
"@vitest/coverage-istanbul": "^1.3.1",
|
|
90
|
+
"eslint": "^8.56.0",
|
|
91
|
+
"playwright": "^1.41.2",
|
|
92
|
+
"prettier": "^3.2.5",
|
|
93
|
+
"rimraf": "^5.0.5",
|
|
94
|
+
"tshy": "^1.11.1",
|
|
95
95
|
"typescript": "~5.3.3",
|
|
96
|
-
"
|
|
97
|
-
"esm": "^3.2.18"
|
|
96
|
+
"vitest": "^1.3.1"
|
|
98
97
|
},
|
|
99
98
|
"//metadata": {
|
|
100
99
|
"migrationDate": "2023-03-08T18:36:03.000Z"
|
|
100
|
+
},
|
|
101
|
+
"tshy": {
|
|
102
|
+
"exports": {
|
|
103
|
+
"./package.json": "./package.json",
|
|
104
|
+
".": "./src/index.ts"
|
|
105
|
+
},
|
|
106
|
+
"dialects": [
|
|
107
|
+
"esm",
|
|
108
|
+
"commonjs"
|
|
109
|
+
],
|
|
110
|
+
"esmDialects": [
|
|
111
|
+
"browser",
|
|
112
|
+
"react-native"
|
|
113
|
+
]
|
|
101
114
|
}
|
|
102
115
|
}
|