export function getProperties()

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
  }