in compiler/src/steps/validate-model.ts [325:375]
function validateTypeDef (typeDef: model.TypeDefinition): void {
if (typesSeen.has(fqn(typeDef.name))) {
// Already visited
return
}
typesSeen.add(fqn(typeDef.name))
// Start a new context, type definitions are top-level elements
const oldContext = context
context = []
context.push(`${typeDef.kind} definition ${typeDef.name.namespace}:${typeDef.name.name}`)
// Validate description URL
if (typeDef.docUrl != null) {
try {
new URL(typeDef.docUrl) // eslint-disable-line no-new
} catch (error) {
modelError('Description URL is malformed')
}
}
switch (typeDef.kind) {
case 'request':
validateRequest(typeDef)
break
case 'response':
validateResponse(typeDef)
break
case 'interface':
validateInterface(typeDef)
break
case 'enum':
validateEnum(typeDef)
break
case 'type_alias':
validateTypeAlias(typeDef)
break
default:
// @ts-expect-error
// eslint-disable-next-line @typescript-eslint/restrict-template-expressions
throw new Error(`Unknown kind: ${typeDef.kind}`)
}
// Restore previous context
context = oldContext
}