code: function topLevelItems(root) {
              var topLevel = [];
              function recur(item) {
                  if (isTopLevel(item)) {
                      topLevel.push(item);
                      if (item.children) {
                          for (var _i = 0, _a = item.children; _i < _a.length; _i++) {
                              var child = _a[_i];
                              recur(child);
                          }
                      }
                  }
              }
              recur(root);
              return topLevel;
              function isTopLevel(item) {
                  switch (navigationBarNodeKind(item)) {
                      case 221 /* ClassDeclaration */:
                      case 192 /* ClassExpression */:
                      case 224 /* EnumDeclaration */:
                      case 222 /* InterfaceDeclaration */:
                      case 225 /* ModuleDeclaration */:
                      case 256 /* SourceFile */:
                      case 223 /* TypeAliasDeclaration */:
                      case 279 /* JSDocTypedefTag */:
                          return true;
                      case 148 /* Constructor */:
                      case 147 /* MethodDeclaration */:
                      case 149 /* GetAccessor */:
                      case 150 /* SetAccessor */:
                          return hasSomeImportantChild(item);
                      case 180 /* ArrowFunction */:
                      case 220 /* FunctionDeclaration */:
                      case 179 /* FunctionExpression */:
                          return isTopLevelFunctionDeclaration(item);
                      default:
                          return false;
                  }
                  function isTopLevelFunctionDeclaration(item) {
                      if (!item.node.body) {
                          return false;
                      }
                      switch (navigationBarNodeKind(item.parent)) {
                          case 226 /* ModuleBlock */:
                          case 256 /* SourceFile */:
                          case 147 /* MethodDeclaration */:
                          case 148 /* Constructor */:
                              return true;
                          default:
                              return hasSomeImportantChild(item);
                      }
                  }
                  function hasSomeImportantChild(item) {
                      return ts.forEach(item.children, function (child) {
                          var childKind = navigationBarNodeKind(child);
                          return childKind !== 218 /* VariableDeclaration */ && childKind !== 169 /* BindingElement */;
                      });
                  }
              }
          }
docs: Flattens the NavNode tree to a list, keeping only the top-level items.