Upgrade typescript
Client: nodejs
Patch: Cameron Martin

Typescript was on a really old version, and upgrading this is necessary for future changes. Upgrading this required upgrading `@types/node` and `commander`, since the old versions of these are not compatible with the newer version of typescript.

This closes #3084
diff --git a/lib/nodejs/test/client.js b/lib/nodejs/test/client.js
index 1d137ff..617039b 100644
--- a/lib/nodejs/test/client.js
+++ b/lib/nodejs/test/client.js
@@ -29,7 +29,7 @@
   require("./test_driver").ThriftTestDriverPromise;
 const SecondService = require(`./${helpers.genPath}/SecondService`);
 
-const program = require("commander");
+const { program } = require("commander");
 
 program
   .option(
@@ -49,7 +49,7 @@
   .option("--ssl", "use SSL transport")
   .option("--callback", "test with callback style functions")
   .option(
-    "-t, --type <type>",
+    "--type <type>",
     "Select server type (http|multiplex|tcp|websocket)",
     "tcp",
   )
@@ -57,26 +57,27 @@
   .option("--es5", "Use es5 code")
   .parse(process.argv);
 
-const host = program.host;
-const port = program.port;
-const domainSocket = program.domainSocket;
-const ssl = program.ssl;
-let type = program.type;
+const opts = program.opts();
+const host = opts.host;
+const port = opts.port;
+const domainSocket = opts.domainSocket;
+const ssl = opts.ssl;
+let type = opts.type;
 
 /* for compatibility with cross test invocation for http transport testing */
-if (program.transport === "http") {
-  program.transport = "buffered";
+if (opts.transport === "http") {
+  opts.transport = "buffered";
   type = "http";
 }
 
-if (program.transport === "websocket") {
-  program.transport = "buffered";
+if (opts.transport === "websocket") {
+  opts.transport = "buffered";
   type = "websocket";
 }
 
 const options = {
-  transport: helpers.transports[program.transport],
-  protocol: helpers.protocols[program.protocol],
+  transport: helpers.transports[opts.transport],
+  protocol: helpers.protocols[opts.protocol],
 };
 
 if (type === "http" || type === "websocket") {
@@ -101,10 +102,8 @@
 
 let connection;
 let client;
-const testDriver = program.callback
-  ? ThriftTestDriver
-  : ThriftTestDriverPromise;
-if (helpers.ecmaMode === "es6" && program.callback) {
+const testDriver = opts.callback ? ThriftTestDriver : ThriftTestDriverPromise;
+if (helpers.ecmaMode === "es6" && opts.callback) {
   console.log("ES6 does not support callback style");
   process.exit(0);
 }
diff --git a/lib/nodejs/test/episodic-code-generation-test/client.js b/lib/nodejs/test/episodic-code-generation-test/client.js
index 631bfe7..cf014c2 100644
--- a/lib/nodejs/test/episodic-code-generation-test/client.js
+++ b/lib/nodejs/test/episodic-code-generation-test/client.js
@@ -22,7 +22,7 @@
 const assert = require("assert");
 const test = require("tape");
 const thrift = require("thrift");
-const program = require("commander");
+const { program } = require("commander");
 
 program
   .option("--host <host>", "Set the thrift server host to connect", "localhost")
@@ -32,8 +32,9 @@
 const Service = require("./gen-2/second-episode/gen-nodejs/Service");
 const Types = require("types-package/first-episode/Types_types");
 
-const host = program.host;
-const port = program.port;
+const opts = program.opts();
+const host = opts.host;
+const port = opts.port;
 
 const options = {
   transport: thrift.TBufferedTransport,
diff --git a/lib/nodejs/test/episodic-code-generation-test/server.js b/lib/nodejs/test/episodic-code-generation-test/server.js
index feca380..2b9a96d 100644
--- a/lib/nodejs/test/episodic-code-generation-test/server.js
+++ b/lib/nodejs/test/episodic-code-generation-test/server.js
@@ -20,7 +20,7 @@
  */
 
 const thrift = require("../../lib/thrift");
-const program = require("commander");
+const { program } = require("commander");
 
 program
   .option("--port <port>", "Set the thrift server port", 9090)
@@ -29,7 +29,8 @@
 const Service = require("./gen-2/second-episode/gen-nodejs/Service");
 const Types = require("types-package/first-episode/Types_types");
 
-const port = program.port;
+const opts = program.opts();
+const port = opts.port;
 
 const options = {
   transport: thrift.TBufferedTransport,
diff --git a/lib/nodejs/test/server.js b/lib/nodejs/test/server.js
index c8e7808..b56bea7 100644
--- a/lib/nodejs/test/server.js
+++ b/lib/nodejs/test/server.js
@@ -22,7 +22,7 @@
 const fs = require("fs");
 const path = require("path");
 const thrift = require("../lib/thrift");
-const program = require("commander");
+const { program } = require("commander");
 const helpers = require("./helpers");
 
 program
@@ -40,7 +40,7 @@
   .option("--port <port>", "Set thrift server port", 9090)
   .option("--domain-socket <path>", "Set thift server unix domain socket")
   .option(
-    "-t, --type <type>",
+    "--type <type>",
     "Select server type (http|multiplex|tcp|websocket)",
     "tcp",
   )
@@ -53,22 +53,23 @@
 const SecondService = require(`./${helpers.genPath}/SecondService`);
 const { ThriftTestHandler } = require("./test_handler");
 
-const port = program.port;
-const domainSocket = program.domainSocket;
-const ssl = program.ssl;
+const opts = program.opts();
+const port = opts.port;
+const domainSocket = opts.domainSocket;
+const ssl = opts.ssl;
 
-let type = program.type;
-if (program.transport === "http") {
-  program.transport = "buffered";
+let type = opts.type;
+if (opts.transport === "http") {
+  opts.transport = "buffered";
   type = "http";
-} else if (program.transport === "websocket") {
-  program.transport = "buffered";
+} else if (opts.transport === "websocket") {
+  opts.transport = "buffered";
   type = "websocket";
 }
 
 let options = {
-  transport: helpers.transports[program.transport],
-  protocol: helpers.protocols[program.protocol],
+  transport: helpers.transports[opts.transport],
+  protocol: helpers.protocols[opts.protocol],
 };
 
 if (type === "http" || type === "websocket") {
diff --git a/lib/nodets/test/client.ts b/lib/nodets/test/client.ts
index a95567f..c2666bc 100644
--- a/lib/nodets/test/client.ts
+++ b/lib/nodets/test/client.ts
@@ -25,17 +25,18 @@
 import ThriftTestDriver = test_driver.ThriftTestDriver;
 import ThriftTestDriverPromise = test_driver.ThriftTestDriverPromise;
 
-// var program = require("commander");
-import * as program from "commander";
+import { program } from "commander";
 
 program
-  .option("--port <port>", "Set thrift server port number to connect", 9090)
+  .option("--port <port>", "Set thrift server port number to connect", Number.parseInt, 9090)
   .option("--promise", "test with promise style functions")
   .option("--protocol", "Set thrift protocol (binary) [protocol]")
   .parse(process.argv);
 
-var port: number = program.port;
-var promise = program.promise;
+
+var opts = program.opts();
+var port: number = opts.port;
+var promise = opts.promise;
 
 var options = {
   transport: Thrift.TBufferedTransport,
diff --git a/lib/nodets/test/server.ts b/lib/nodets/test/server.ts
index 79457ce..5911384 100644
--- a/lib/nodets/test/server.ts
+++ b/lib/nodets/test/server.ts
@@ -1,15 +1,17 @@
 import thrift = require("thrift");
-var program = require("commander");
-import ThriftTest = require("./gen-nodejs/ThriftTest");
-import test_handler = require("./test_handler");
+import { program } from 'commander';
+import ThriftTest = require('./gen-nodejs/ThriftTest');
+import test_handler = require('./test_handler');
+
 
 program
-  .option("--port <port>", "Set thrift server port", 9090)
-  .option("--promise", "test with promise style functions")
-  .option("--protocol", '"Set thrift protocol (binary) [protocol]"')
+  .option('--port <port>', 'Set thrift server port', Number.parseInt, 9090)
+  .option('--promise', 'test with promise style functions')
+  .option('--protocol', '"Set thrift protocol (binary) [protocol]"')
   .parse(process.argv);
 
-var port: number = program.port;
+var opts = program.opts();
+var port: number = opts.port;
 
 var options: thrift.ServerOptions = {
   transport: thrift.TBufferedTransport,
@@ -17,12 +19,8 @@
 };
 
 var server: thrift.Server;
-if (program.promise) {
-  server = thrift.createServer(
-    ThriftTest.Processor,
-    new test_handler.AsyncThriftTestHandler(),
-    options,
-  );
+if (opts.promise) {
+  server = thrift.createServer(ThriftTest.Processor, new test_handler.AsyncThriftTestHandler(), options);
 } else {
   server = thrift.createServer(
     ThriftTest.Processor,
diff --git a/lib/ts/package-lock.json b/lib/ts/package-lock.json
index 244d91d..9740000 100644
--- a/lib/ts/package-lock.json
+++ b/lib/ts/package-lock.json
@@ -31,7 +31,7 @@
         "jslint": "^0.12.0",
         "node-int64": "^0.4.0",
         "phantom": "^6.0.3",
-        "typescript": "^3.2.4"
+        "typescript": "^5.7.2"
       }
     },
     "node_modules/@babel/parser": {
@@ -85,10 +85,13 @@
       "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA=="
     },
     "node_modules/@types/node": {
-      "version": "10.12.18",
-      "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz",
-      "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==",
-      "dev": true
+      "version": "22.10.5",
+      "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.5.tgz",
+      "integrity": "sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==",
+      "dev": true,
+      "dependencies": {
+        "undici-types": "~6.20.0"
+      }
     },
     "node_modules/@types/node-int64": {
       "version": "0.4.29",
@@ -4631,16 +4634,16 @@
       "dev": true
     },
     "node_modules/typescript": {
-      "version": "3.2.4",
-      "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.2.4.tgz",
-      "integrity": "sha512-0RNDbSdEokBeEAkgNbxJ+BLwSManFy9TeXz8uW+48j/xhEXv1ePME60olyzw2XzUqUBNAYFeJadIqAgNqIACwg==",
+      "version": "5.7.3",
+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz",
+      "integrity": "sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==",
       "dev": true,
       "bin": {
         "tsc": "bin/tsc",
         "tsserver": "bin/tsserver"
       },
       "engines": {
-        "node": ">=4.2.0"
+        "node": ">=14.17"
       }
     },
     "node_modules/uc.micro": {
@@ -4729,6 +4732,12 @@
         "node": "*"
       }
     },
+    "node_modules/undici-types": {
+      "version": "6.20.0",
+      "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz",
+      "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==",
+      "dev": true
+    },
     "node_modules/uri-js": {
       "version": "4.2.2",
       "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
diff --git a/lib/ts/package.json b/lib/ts/package.json
index 13aefaa..17988c6 100644
--- a/lib/ts/package.json
+++ b/lib/ts/package.json
@@ -27,7 +27,7 @@
     "jslint": "^0.12.0",
     "node-int64": "^0.4.0",
     "phantom": "^6.0.3",
-    "typescript": "^3.2.4"
+    "typescript": "^5.7.2"
   },
   "dependencies": {
     "bufferutil": "^4.0.1",