function exploreTypedef()

in compiler/src/transform/filter-by-availability.ts [110:171]


  function exploreTypedef (typeDef: TypeDefinition): void {
    // handle generics
    // not really useful for everyone, still useful for type_alias
    if (typeDef.kind === 'interface' || typeDef.kind === 'request' || typeDef.kind === 'response' || typeDef.kind === 'type_alias') {
      typeDef.generics?.forEach((generic) => {
        addTypeToOutput(generic)
      })
    }

    // handle behaviors
    if (typeDef.kind === 'interface' || typeDef.kind === 'request' || typeDef.kind === 'response') {
      typeDef.behaviors?.forEach((behavior) => {
        addTypeToOutput(behavior.type)
        behavior.generics?.forEach((generic) => {
          addValueOf(generic)
        })
      })
    }

    // handle inherits & implements
    if (typeDef.kind === 'interface' || typeDef.kind === 'request') {
      if (typeDef.inherits !== undefined) {
        addTypeToOutput(typeDef.inherits.type)
      }
    }

    // handle body value and body properties for request and response
    if (typeDef.kind === 'request' || typeDef.kind === 'response') {
      switch (typeDef.body.kind) {
        case 'value':
          addValueOf(typeDef.body.value)
          break
        case 'properties':
          typeDef.body.properties.forEach((property) => {
            addValueOf(property.type)
          })
          break
      }
    }

    // left over specific cases
    switch (typeDef.kind) {
      case 'interface':
        typeDef.properties.forEach((property) => {
          addValueOf(property.type)
        })
        break

      case 'request':
        typeDef.path.forEach((path) => {
          addValueOf(path.type)
        })
        typeDef.query.forEach((query) => {
          addValueOf(query.type)
        })
        break

      case 'type_alias':
        addValueOf(typeDef.type)
        break
    }
  }