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
}
}