function checkSchemaFormat()

in packages/rulesets/src/spectral/functions/schema-format.ts [10:68]


function checkSchemaFormat(schema: any, options: any, { path }: { path: JsonPath }): IFunctionResult[] {
  if (schema === null || typeof schema !== "object") {
    return [] as IFunctionResult[]
  }

  const errors: IFunctionResult[] = []

  const schemaFormats = [
    // number format
    "int32",
    "int64",
    "float",
    "double",
    "unixtime",
    // OAS-defined formats
    "byte",
    "binary",
    "date",
    "date-time",
    "password",
    // Additional formats recognized by autorest
    "char",
    "time",
    "date-time-rfc1123",
    "date-time-rfc7231", // Support for https://github.com/Azure/autorest/issues/4740
    "duration",
    "uuid",
    "base64url",
    "url",
    "odata-query",
    "certificate",

    // ajv supported format
    "uri",
    "uri-reference",
    "uri-template",
    "email",
    "hostname",
    "ipv4",
    "ipv6",
    "regex",
    "json-pointer",
    "relative-json-pointer",
    // for arm id purpose
    "arm-id",
  ]

  // Only validate "format" if "type" is ("boolean" | "integer" | "number" | "string")
  // https://github.com/OAI/OpenAPI-Specification/blob/8a8a9a6b7be4b192612bf01170bbb6974d491be3/versions/2.0.md#data-types
  if ((schema.type === "boolean" || schema.type === "integer" || schema.type === "number" || schema.type === "string") && schema.format) {
    if (!schemaFormats.includes(schema.format)) {
      errors.push({
        message: `${schema.format}`,
        path: [...path, "format"],
      })
    }
  }
  return errors
}