private ExpandAllOf()

in src/lib/util/resolveSwagger.ts [230:283]


  private ExpandAllOf(schema: any) {
    if (!schema || !schema.allOf) {
      return
    }
    this.checkCircularAllOf(schema, undefined, [])
    const schemaList = schema.properties ? schema.properties : {}
    for (const reference of sm.values(schema.allOf)) {
      let allOfSchema = reference as any
      if (allOfSchema.$ref) {
        allOfSchema = this.dereference(allOfSchema.$ref)
        if (!allOfSchema) {
          throw new Error("Invalid reference:" + allOfSchema.$ref)
        }
      }
      if (allOfSchema.allOf) {
        this.ExpandAllOf(allOfSchema)
      }
      if (allOfSchema.properties) {
        sm.keys(allOfSchema.properties).forEach(key => {
          if (sm.keys(schemaList).some(k => k === key)) {
            if (!this.isEqual(allOfSchema.properties[key], schemaList[key])) {
              const allOfProp = allOfSchema.properties[key]
              const allOfPath = getPath(getInfo(allOfProp) as ObjectInfo)
              const allOfOriginalPosition = this.map.originalPositionFor(getFilePosition(allOfProp) as FilePosition)

              const schemaListProp = schemaList[key]
              const schemaListPath = getPath(getInfo(schemaListProp) as ObjectInfo)
              const schemaListOriginalPosition = this.map.originalPositionFor(getFilePosition(schemaListProp) as FilePosition)

              throw new Error(
                `incompatible properties : ${key}\n` +
                  `  ${schemaListPath.join("/")}\n` +
                  `    at ${schemaListOriginalPosition.source}#L${schemaListOriginalPosition.line}:${schemaListOriginalPosition.column}\n` +
                  `  ${allOfPath.join("/")}\n` +
                  `    at ${allOfOriginalPosition.source}#L${allOfOriginalPosition.line}:${allOfOriginalPosition.column}`
              )
            }
          } else {
            schemaList[key] = allOfSchema.properties[key]
          }
        })
      }
      if (allOfSchema.required) {
        const requiredProperties = schema.required ? schema.required : []
        sm.values(allOfSchema.required).forEach(prop => {
          if (!sm.values(requiredProperties).some(v => v === prop)) {
            requiredProperties.push(prop)
          }
        })
        schema.required = requiredProperties
      }
    }
    schema.properties = schemaList
  }