in packages/rulesets/src/native/utilities/swagger-workspace.ts [75:114]
export function getProperties(schema: EnhancedSchema, inventory: ISwaggerInventory) {
let source = schema
const visited = new Set<any>()
while (source.value && source.value.$ref && !visited.has(source.value)) {
visited.add(source.value)
source = resolveRef(source, inventory)!
}
if (!source || !source.value) {
return []
}
let result: { [key: string]: EnhancedSchema } = {}
let model = source.value
// for list call, the properties are in the value.items.$ref
// skip for models in common-types
const reference = model.properties?.value?.items?.$ref
if (reference?.includes("/common-types/") && reference?.includes("/types.json#/definitions/")) {
result["common-types"] = createEnhancedSchema("", "")
return result
}
else if(reference){
const referenceSchema = resolveRef(createEnhancedSchema(model.properties.value.items, source.file), inventory)
if (referenceSchema && referenceSchema.value && referenceSchema.value.properties) {
model = referenceSchema.value
}
}
if (model.properties) {
for (const propertyName of Object.keys(model.properties)) {
result[propertyName] = createEnhancedSchema(model.properties[propertyName], source.file)
}
}
if (model.allOf) {
for (const element of model.allOf) {
const properties: any = getProperties({ file: source.file, value: element }, inventory)
if (properties) {
result = { ...properties, ...result }
}
}
}
return result
}