UNPKG

@azure-tools/typespec-azure-resource-manager

Version:

TypeSpec Azure Resource Manager library

35 lines 1.47 kB
import { createRule } from "@typespec/compiler"; import { getResponsesForOperation } from "@typespec/http"; // import { getExtensions } from "@typespec/openapi"; import { getLroMetadata } from "@azure-tools/typespec-azure-core"; import { isTemplatedInterfaceOperation } from "./utils.js"; /** * verify if retry-after header appears in response body . */ export const retryAfterRule = createRule({ name: "retry-after", severity: "warning", description: "Check if retry-after header appears in response body.", messages: { default: `For long-running operations, the Retry-After header indicates how long the client should wait before polling the operation status, please add this header to the 201 or 202 response for this operation.`, }, create(context) { return { operation: (op) => { if (isTemplatedInterfaceOperation(op)) { return; } const isLRO = getLroMetadata(context.program, op) !== undefined; if (isLRO && !hasRetryAfterHeader(context.program, op)) { context.reportDiagnostic({ target: op, }); } }, }; }, }); function hasRetryAfterHeader(program, op) { return !!getResponsesForOperation(program, op)[0].find((re) => re.responses.find((res) => res.headers?.["Retry-After"])); } //# sourceMappingURL=retry-after.js.map