function transliterateType()

in src/commands/transliterate.ts [165:215]


function transliterateType(type: Type, rosetta: RosettaTabletReader, language: TargetLanguage): void {
  transliterateDocs({ api: 'type', fqn: type.fqn }, type.docs);
  switch (type.kind) {
    // eslint-disable-next-line @typescript-eslint/ban-ts-comment
    // @ts-ignore 7029
    case TypeKind.Class:
      if (type.initializer) {
        transliterateDocs({ api: 'initializer', fqn: type.fqn }, type.initializer.docs);
      }

    // fallthrough
    case TypeKind.Interface:
      for (const method of type.methods ?? []) {
        transliterateDocs({ api: 'member', fqn: type.fqn, memberName: method.name }, method.docs);
        for (const parameter of method.parameters ?? []) {
          transliterateDocs(
            { api: 'parameter', fqn: type.fqn, methodName: method.name, parameterName: parameter.name },
            parameter.docs,
          );
        }
      }
      for (const property of type.properties ?? []) {
        transliterateDocs({ api: 'member', fqn: type.fqn, memberName: property.name }, property.docs);
      }
      break;

    case TypeKind.Enum:
      for (const member of type.members) {
        transliterateDocs({ api: 'member', fqn: type.fqn, memberName: member.name }, member.docs);
      }
      break;

    default:
      throw new Error(`Unsupported type kind: ${(type as any).kind}`);
  }

  function transliterateDocs(api: ApiLocation, docs: Docs | undefined) {
    if (docs?.remarks) {
      docs.remarks = rosetta.translateSnippetsInMarkdown(api, docs.remarks, language, true /* strict */);
    }

    if (docs?.example) {
      const location = { api, field: { field: 'example' } } as const;
      const snippet = typeScriptSnippetFromVisibleSource(docs.example, location, true /* strict */);
      const translation = rosetta.translateSnippet(snippet, language);
      if (translation != null) {
        docs.example = translation.source;
      }
    }
  }
}