@azure/core-client
Version:
Core library for interfacing with AutoRest generated code
98 lines • 3.86 kB
JavaScript
;
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
Object.defineProperty(exports, "__esModule", { value: true });
exports.getOperationArgumentValueFromParameter = getOperationArgumentValueFromParameter;
exports.getOperationRequestInfo = getOperationRequestInfo;
const state_js_1 = require("./state.js");
/**
* @internal
* Retrieves the value to use for a given operation argument
* @param operationArguments - The arguments passed from the generated client
* @param parameter - The parameter description
* @param fallbackObject - If something isn't found in the arguments bag, look here.
* Generally used to look at the service client properties.
*/
function getOperationArgumentValueFromParameter(operationArguments, parameter, fallbackObject) {
let parameterPath = parameter.parameterPath;
const parameterMapper = parameter.mapper;
let value;
if (typeof parameterPath === "string") {
parameterPath = [parameterPath];
}
if (Array.isArray(parameterPath)) {
if (parameterPath.length > 0) {
if (parameterMapper.isConstant) {
value = parameterMapper.defaultValue;
}
else {
let propertySearchResult = getPropertyFromParameterPath(operationArguments, parameterPath);
if (!propertySearchResult.propertyFound && fallbackObject) {
propertySearchResult = getPropertyFromParameterPath(fallbackObject, parameterPath);
}
let useDefaultValue = false;
if (!propertySearchResult.propertyFound) {
useDefaultValue =
parameterMapper.required ||
(parameterPath[0] === "options" && parameterPath.length === 2);
}
value = useDefaultValue ? parameterMapper.defaultValue : propertySearchResult.propertyValue;
}
}
}
else {
if (parameterMapper.required) {
value = {};
}
for (const propertyName in parameterPath) {
const propertyMapper = parameterMapper.type.modelProperties[propertyName];
const propertyPath = parameterPath[propertyName];
const propertyValue = getOperationArgumentValueFromParameter(operationArguments, {
parameterPath: propertyPath,
mapper: propertyMapper,
}, fallbackObject);
if (propertyValue !== undefined) {
if (!value) {
value = {};
}
value[propertyName] = propertyValue;
}
}
}
return value;
}
function getPropertyFromParameterPath(parent, parameterPath) {
const result = { propertyFound: false };
let i = 0;
for (; i < parameterPath.length; ++i) {
const parameterPathPart = parameterPath[i];
// Make sure to check inherited properties too, so don't use hasOwnProperty().
if (parent && parameterPathPart in parent) {
parent = parent[parameterPathPart];
}
else {
break;
}
}
if (i === parameterPath.length) {
result.propertyValue = parent;
result.propertyFound = true;
}
return result;
}
const originalRequestSymbol = Symbol.for("@azure/core-client original request");
function hasOriginalRequest(request) {
return originalRequestSymbol in request;
}
function getOperationRequestInfo(request) {
if (hasOriginalRequest(request)) {
return getOperationRequestInfo(request[originalRequestSymbol]);
}
let info = state_js_1.state.operationRequestMap.get(request);
if (!info) {
info = {};
state_js_1.state.operationRequestMap.set(request, info);
}
return info;
}
//# sourceMappingURL=operationHelpers.js.map