in packages/typespec-powershell/src/convertor/convertor.ts [175:230]
function addOperation(psContext: SdkContext, op: HttpOperation, operationGroup: OperationGroup, model: PwshModel, emitterOptions: PSOptions) {
const operationId = resolveOperationId(psContext, op, operationGroup);
const newOperation = new Operation( operationId.split('_')[1] ?? pascalCase(op.operation.name), getDoc(psContext.program, op.operation) ?? "");
newOperation.operationId = operationId;
// Add Api versions
newOperation.apiVersions = newOperation.apiVersions || [];
newOperation.apiVersions.push({ version: getEnrichedDefaultApiVersion(psContext.program, psContext) || "" });
// Add URl parameters
if (urlParameters.length > 0) {
newOperation.parameters = newOperation.parameters || [];
newOperation.parameters.push(...urlParameters);
}
// Add query and path parameters
const parameters = op.parameters.parameters.filter(p => p.type === "path" || p.type === "query");
for (const parameter of parameters) {
const newParameter = createParameter(psContext, parameter, model);
newOperation.parameters = newOperation.parameters || [];
newOperation.parameters.push(newParameter);
}
// Add request
newOperation.requests = newOperation.requests || [];
const newRequest = new Request();
newOperation.requests.push(newRequest);
const headerParameters = op.parameters.parameters.filter(p => p.type === "header");
for (const parameter of headerParameters) {
const newParameter = createParameter(psContext, parameter, model);
newRequest.parameters = newRequest.parameters || [];
newOperation.requests[0].parameters?.push(newParameter);
}
// Add host parameter
if (endpoint === '{$host}') {
const hostParameter = createHostParameter(psContext, model);
newOperation.parameters = newOperation.parameters || [];
newOperation.parameters.push(hostParameter);
}
// Add request body if it exists
if (op.parameters.body && op.parameters.body.bodyKind === "single" && !(op.parameters.body.type.kind === "Intrinsic" && op.parameters.body.type.name === "void")) {
const newParameter = createBodyParameter(psContext, op.parameters.body, model);
newRequest.parameters = newRequest.parameters || [];
newOperation.requests[0].parameters?.push(newParameter);
}
const httpProtocol = new Protocol();
httpProtocol.method = op.verb;
httpProtocol.path = op.path;
// hard code the media type to json for the time being by xiaogang.
httpProtocol.knownMediaType = "json";
httpProtocol.mediaTypes = ["application/json"];
httpProtocol.uri = endpoint;
newOperation.requests[0].protocol.http = httpProtocol;
// Add responses include exceptions
addResponses(psContext, op, newOperation, model, emitterOptions);
// Add extensions
addExtensions(psContext, op, newOperation, model);
operationGroup.addOperation(newOperation);
}