in powershell/plugins/sdk-create-inline-properties.ts [356:412]
async function implementGroupParameters(state: State) {
const parameterGroup = new Map<string, ObjectSchema>();
const parameterGroupContainerHeader = new Map<string, boolean>();
const parameterGroupContainerOthers = new Map<string, boolean>();
const parameterAdded = new Map<string, Array<string>>();
for (const operationGroup of state.model.operationGroups) {
for (const operation of operationGroup.operations) {
const operationGroupParameters = new Array<Parameter>();
// value means if the parameter is required
const addedOperationGroupParameters = new Map<string, boolean>();
for (const parameter of [...(operation.requests && operation.requests.length > 0 ? operation.requests[0].parameters || [] : []), ...(operation.parameters || [])]) {
if (parameter.extensions && parameter.extensions['x-ms-parameter-grouping']) {
const key = parameterGroupName(operationGroup, operation, parameter.extensions['x-ms-parameter-grouping']);
if (parameter.protocol.http?.in === ParameterLocation.Header) {
parameterGroupContainerHeader.set(key, true);
} else {
parameterGroupContainerOthers.set(key, true);
}
const groupObj = parameterGroup.get(key) || new ObjectSchema(key, '');
if (!parameterGroup.has(key)) {
groupObj.extensions = {};
groupObj.extensions['x-ms-parameter-grouping'] = parameter.extensions['x-ms-parameter-grouping'];
parameterGroup.set(key, groupObj);
parameterAdded.set(key, []);
state.model.schemas.objects = state.model.schemas.objects || [];
state.model.schemas.objects.push(groupObj);
}
const prop = new Property(parameter.language.default.name, parameter.language.default.description, parameter.schema, {
required: parameter.required,
});
if (parameterAdded.has(key) && (parameterAdded.get(key) || []).indexOf(parameter.language.default.name) === -1) {
groupObj.addProperty(prop);
parameterAdded.set(key, [...(parameterAdded.get(key) || []), parameter.language.default.name]);
}
if (!addedOperationGroupParameters.has(key)) {
addedOperationGroupParameters.set(key, !!(parameter.required));
const groupParameter = new Parameter(camelCase(key), '', groupObj);
groupParameter.protocol.http = groupParameter.protocol.http || new Protocol();
groupParameter.protocol.http.in = 'complex';
operationGroupParameters.push(groupParameter);
} else {
if (!addedOperationGroupParameters.get(key)) {
addedOperationGroupParameters.set(key, !!(parameter.required));
}
}
} else {
continue;
}
}
for (const groupParameter of operationGroupParameters) {
groupParameter.required = addedOperationGroupParameters.get(pascalCase(groupParameter.language.default.name)) || false;
}
operation.parameters = [...operationGroupParameters, ...(operation.parameters || [])];
}
}
implementGroupParametersForPagination(state, parameterGroup, parameterGroupContainerHeader, parameterGroupContainerOthers);
}