"use strict";
|
// 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
|