THRIFT-4653: ES6 classes support (#1615)

* ES6 classes support
* Lint generated code
* ES6 Tests for NodeJS
* Add eslint rules for nodejs
* Run prettier/eslint on nodejs test code
diff --git a/lib/nodejs/test/test_handler.js b/lib/nodejs/test/test_handler.js
index 5c89f7a..317a7c8 100644
--- a/lib/nodejs/test/test_handler.js
+++ b/lib/nodejs/test/test_handler.js
@@ -19,18 +19,17 @@
 
 //This is the server side Node test handler for the standard
 //  Apache Thrift test service.
+const helpers = require("./helpers");
+const ttypes = require(`./${helpers.genPath}/ThriftTest_types`);
+const TException = require("thrift").Thrift.TException;
 
-var ttypes = require('./gen-nodejs/ThriftTest_types');
-var TException = require('thrift').Thrift.TException;
-
-function makeSyncHandler(label) {
+function makeSyncHandler() {
   return function(thing) {
-    //console.log(label + '(\'' + thing + '\')');
     return thing;
-  }
+  };
 }
 
-var syncHandlers = {
+const syncHandlers = {
   testVoid: testVoid,
   testMapMap: testMapMap,
   testInsanity: testInsanity,
@@ -44,10 +43,10 @@
   return function(thing, result) {
     thing = syncHandlers[label](thing);
     result(null, thing);
-  }
+  };
 }
 
-var asyncHandlers = {
+const asyncHandlers = {
   testVoid: testVoidAsync,
   testMulti: testMultiAsync,
   testException: testExceptionAsync,
@@ -55,22 +54,22 @@
   testOneway: testOnewayAsync
 };
 
-var identityHandlers = [
-  'testString',
-  'testBool',
-  'testByte',
-  'testI32',
-  'testI64',
-  'testDouble',
-  'testBinary',
-  'testStruct',
-  'testNest',
-  'testMap',
-  'testStringMap',
-  'testSet',
-  'testList',
-  'testEnum',
-  'testTypedef'
+const identityHandlers = [
+  "testString",
+  "testBool",
+  "testByte",
+  "testI32",
+  "testI64",
+  "testDouble",
+  "testBinary",
+  "testStruct",
+  "testNest",
+  "testMap",
+  "testStringMap",
+  "testSet",
+  "testList",
+  "testEnum",
+  "testTypedef"
 ];
 
 function testVoid() {
@@ -81,13 +80,11 @@
   result(testVoid());
 }
 
-function testMapMap(hello) {
-  //console.log('testMapMap(' + hello + ')');
-
-  var mapmap = [];
-  var pos = [];
-  var neg = [];
-  for (var i = 1; i < 5; i++) {
+function testMapMap() {
+  const mapmap = [];
+  const pos = [];
+  const neg = [];
+  for (let i = 1; i < 5; i++) {
     pos[i] = i;
     neg[-i] = -i;
   }
@@ -102,16 +99,16 @@
   //console.log(argument);
   //console.log(')');
 
-  var first_map = [];
-  var second_map = [];
+  const first_map = [];
+  const second_map = [];
 
   first_map[ttypes.Numberz.TWO] = argument;
   first_map[ttypes.Numberz.THREE] = argument;
 
-  var looney = new ttypes.Insanity();
+  const looney = new ttypes.Insanity();
   second_map[ttypes.Numberz.SIX] = looney;
 
-  var insane = [];
+  const insane = [];
   insane[1] = first_map;
   insane[2] = second_map;
 
@@ -120,11 +117,11 @@
   return insane;
 }
 
-function testMulti(arg0, arg1, arg2, arg3, arg4, arg5) {
+function testMulti(arg0, arg1, arg2) {
   //console.log('testMulti()');
 
-  var hello = new ttypes.Xtruct();
-  hello.string_thing = 'Hello2';
+  const hello = new ttypes.Xtruct();
+  hello.string_thing = "Hello2";
   hello.byte_thing = arg0;
   hello.i32_thing = arg1;
   hello.i64_thing = arg2;
@@ -132,18 +129,18 @@
 }
 
 function testMultiAsync(arg0, arg1, arg2, arg3, arg4, arg5, result) {
-  var hello = testMulti(arg0, arg1, arg2, arg3, arg4, arg5);
+  const hello = testMulti(arg0, arg1, arg2, arg3, arg4, arg5);
   result(null, hello);
 }
 
 function testException(arg) {
   //console.log('testException('+arg+')');
-  if (arg === 'Xception') {
-    var x = new ttypes.Xception();
+  if (arg === "Xception") {
+    const x = new ttypes.Xception();
     x.errorCode = 1001;
     x.message = arg;
     throw x;
-  } else if (arg === 'TException') {
+  } else if (arg === "TException") {
     throw new TException(arg);
   } else {
     return;
@@ -152,12 +149,12 @@
 
 function testExceptionAsync(arg, result) {
   //console.log('testException('+arg+')');
-  if (arg === 'Xception') {
-    var x = new ttypes.Xception();
+  if (arg === "Xception") {
+    const x = new ttypes.Xception();
     x.errorCode = 1001;
     x.message = arg;
     result(x);
-  } else if (arg === 'TException') {
+  } else if (arg === "TException") {
     result(new TException(arg));
   } else {
     result(null);
@@ -166,49 +163,48 @@
 
 function testMultiException(arg0, arg1) {
   //console.log('testMultiException(' + arg0 + ', ' + arg1 + ')');
-  if (arg0 === ('Xception')) {
-    var x = new ttypes.Xception();
+  if (arg0 === "Xception") {
+    const x = new ttypes.Xception();
     x.errorCode = 1001;
-    x.message = 'This is an Xception';
+    x.message = "This is an Xception";
     throw x;
-  } else if (arg0 === ('Xception2')) {
-    var x2 = new ttypes.Xception2();
+  } else if (arg0 === "Xception2") {
+    const x2 = new ttypes.Xception2();
     x2.errorCode = 2002;
     x2.struct_thing = new ttypes.Xtruct();
-    x2.struct_thing.string_thing = 'This is an Xception2';
+    x2.struct_thing.string_thing = "This is an Xception2";
     throw x2;
   }
 
-  var res = new ttypes.Xtruct();
+  const res = new ttypes.Xtruct();
   res.string_thing = arg1;
   return res;
 }
 
 function testMultiExceptionAsync(arg0, arg1, result) {
   //console.log('testMultiException(' + arg0 + ', ' + arg1 + ')');
-  if (arg0 === ('Xception')) {
-    var x = new ttypes.Xception();
+  if (arg0 === "Xception") {
+    const x = new ttypes.Xception();
     x.errorCode = 1001;
-    x.message = 'This is an Xception';
+    x.message = "This is an Xception";
     result(x);
-  } else if (arg0 === ('Xception2')) {
-    var x2 = new ttypes.Xception2();
+  } else if (arg0 === "Xception2") {
+    const x2 = new ttypes.Xception2();
     x2.errorCode = 2002;
     x2.struct_thing = new ttypes.Xtruct();
-    x2.struct_thing.string_thing = 'This is an Xception2';
+    x2.struct_thing.string_thing = "This is an Xception2";
     result(x2);
   } else {
-    var res = new ttypes.Xtruct();
+    const res = new ttypes.Xtruct();
     res.string_thing = arg1;
     result(null, res);
   }
 }
 
-function testOneway(sleepFor) {
-  //console.log('testOneway(' + sleepFor + ') => JavaScript (like Rust) never sleeps!');
-}
+//console.log('testOneway(' + sleepFor + ') => JavaScript (like Rust) never sleeps!');
+function testOneway() {}
 
-function testOnewayAsync(sleepFor, result) {
+function testOnewayAsync(sleepFor) {
   testOneway(sleepFor);
 }
 
@@ -217,11 +213,8 @@
   asyncHandlers[label] = makeAsyncHandler(label);
 });
 
-['testMapMap', 'testInsanity'].forEach(function(label) {
+["testMapMap", "testInsanity"].forEach(function(label) {
   asyncHandlers[label] = makeAsyncHandler(label);
 });
 
 exports.ThriftTestHandler = asyncHandlers;
-
-exports.AsyncThriftTestHandler = asyncHandlers;
-exports.SyncThriftTestHandler = asyncHandlers;