code: private void preprocessExportDeclaration(Node n) {
      if (!n.getString().equals("exports")
          || !isAssignTarget(n)
          || !n.getGrandparent().isExprResult()) {
        return;
      }
  
      checkState(currentScript.defaultExportRhs == null);
      Node exportRhs = n.getNext();
      if (isNamedExportsLiteral(exportRhs)) {
        Node insertionPoint = n.getGrandparent();
        for (Node key = exportRhs.getFirstChild(); key != null; key = key.getNext()) {
          String exportName = key.getString();
          JSDocInfo jsdoc = key.getJSDocInfo();
          Node rhs = key.hasChildren() ? key.removeFirstChild() : IR.name(exportName).srcref(key);
          Node lhs = IR.getprop(IR.name("exports"), IR.string(exportName)).srcrefTree(key);
          Node newExport =
              IR.exprResult(IR.assign(lhs, rhs).srcref(key).setJSDocInfo(jsdoc)).srcref(key);
          insertionPoint.getParent().addChildAfter(newExport, insertionPoint);
          insertionPoint = newExport;
        }
        n.getGrandparent().detach();
      }
    }
docs: Rewrites object literal exports to the standard named exports style. i.e.
  exports = {Foo, Bar}
  to
  exports.Foo = Foo;
  exports.Bar = Bar;
  This makes the module exports into a more standard format for later passes.