// Copyright (c) Microsoft Corporation. // Licensed under the MIT license. /** * @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. */ export 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 operationRequestMap = new WeakMap(); const originalRequestSymbol = Symbol.for("@azure/core-client original request"); function hasOriginalRequest(request) { return originalRequestSymbol in request; } export function getOperationRequestInfo(request) { if (hasOriginalRequest(request)) { return getOperationRequestInfo(request[originalRequestSymbol]); } let info = operationRequestMap.get(request); if (!info) { info = {}; operationRequestMap.set(request, info); } return info; } //# sourceMappingURL=operationHelpers.js.map