@scalar/api-reference
Version:
Generate beautiful API references from OpenAPI documents
49 lines (48 loc) • 1.47 kB
JavaScript
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
};