in powershell/plugins/plugin-create-inline-properties.ts [341:410]
function createVirtualParameters(operation: CommandOperation) {
// dolauli expand body parameter
// for virtual parameters, there are two keys, operation and body
const virtualParameters = {
operation: new Array<VirtualParameter>(),
body: new Array<VirtualParameter>()
};
const dropBodyParameter = !!operation.details.default.dropBodyParameter;
// loop thru the parameters of the command operation, and if there is a body parameter, expand it if necessary.
for (const parameter of values(operation.parameters)) {
if (parameter.details.default.constantValue) {
// this parameter has a constant value -- SKIP IT
continue;
}
// dolauli fromhost and apiversion are not exposed, this if block looks useless
if (parameter.details.default.fromHost || parameter.details.default.apiversion) {
// handled in the generator right now. Not exposed to the user directly.
continue;
}
if (dropBodyParameter && parameter.details.default.isBodyParameter) {
// the client will make a hidden body parameter for this, and we're expected to fill it.
const vps = parameter.schema.language.default.virtualProperties;
if (vps) {
for (const virtualProperty of [...vps.inherited, ...vps.owned, ...vps.inlined]) {
// dolauli add virtual parameter for virtual property
if (virtualProperty.private || virtualProperty.readOnly || virtualProperty.property.readOnly || virtualProperty.property.language.default.constantValue !== undefined || virtualProperty.property.language.default.HeaderProperty === 'Header') {
// private or readonly properties aren't needed as parameters.
continue;
}
// Add support for x-ms-mutability
if (operation.operationType === OperationType.Create && !(<VirtualProperty>virtualProperty).create) {
continue;
} else if (operation.operationType === OperationType.Update && !(<VirtualProperty>virtualProperty).update) {
continue;
}
virtualParameters.body.push({
name: virtualProperty.name,
description: virtualProperty.property.language.default.description,
nameOptions: virtualProperty.nameOptions,
required: parameter.required ? shouldBeRequired(operation, virtualProperty) : false,
schema: virtualProperty.property.schema,
origin: virtualProperty,
alias: []
});
}
}
} else {
// dolauli if not drop body or not body parameter add it to operation
const combinedDescription = getCombinedDescription(parameter.schema.language.default.description, parameter.schema.externalDocs?.url);
parameter.schema.language.default.description = combinedDescription;
virtualParameters.operation.push({
name: parameter.details.default.name,
nameOptions: [parameter.details.default.name],
description: parameter.details.default.description,
required: parameter.details.default.isBodyParameter ? true : parameter.required,
schema: parameter.schema,
origin: parameter,
alias: []
});
}
}
resolveParameterNames([], virtualParameters);
// dolauli see operation.details.default.virtualParameters
operation.details.default.virtualParameters = virtualParameters;
}