UNPKG

@scalar/api-reference

Version:

Generate beautiful API references from OpenAPI documents

49 lines (48 loc) 1.47 kB
import { getResolvedRef } from "@scalar/workspace-store/helpers/get-resolved-ref"; import { isArraySchema } from "@scalar/workspace-store/schemas/v3.1/strict/type-guards"; const COMPOSITION_KEYWORDS = ["allOf", "oneOf", "anyOf"]; const isObjectType = (schema) => { if ("type" in schema && schema.type) { if (Array.isArray(schema.type)) { return schema.type.includes("object"); } return schema.type === "object"; } return "properties" in schema; }; const hasComplexFeatures = (schema) => "$ref" in schema || "discriminator" in schema || COMPOSITION_KEYWORDS.some((keyword) => keyword in schema); const hasComplexNestedArrayItems = (items) => { if (!isArraySchema(items) || typeof items.items !== "object") { return false; } if ("$ref" in items.items) { return true; } const nestedItems = getResolvedRef(items.items); if (!nestedItems) { return false; } return isObjectType(nestedItems) || hasComplexFeatures(nestedItems) || isArraySchema(nestedItems); }; const hasComplexArrayItems = (value) => { if (!value || !isArraySchema(value) || typeof value.items !== "object") { return false; } if ("$ref" in value.items) { return true; } const items = getResolvedRef(value.items); if (!items) { return false; } if (hasComplexFeatures(items)) { return true; } if (isObjectType(items)) { return true; } return hasComplexNestedArrayItems(items); }; export { hasComplexArrayItems };