THRIFT-5811: Add ESM support to nodejs codegen
Client: nodejs
Patch: Cameron Martin <cameronm@graphcore.ai>
This closes #3083
This adds a flag to the JS generator to output ES modules instead of CommonJS. This is only valid when targeting node. A lot of the changes here are to test this.
The `testAll.sh` script now generates an ES module version of the services and types, and tests the client and the server with these. This has a few knock-on effects. Firstly, any module that imports a generated ES module must itself be an ES module, since CommonJS modules cannot import ES modules. ES modules also do not support `NODE_PATH`, so instead the tests directory is converted into a node package with a `file:` dependency on the root thrift package.
diff --git a/eslint.config.mjs b/eslint.config.mjs
index a27b211..2f70a88 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -24,7 +24,7 @@
...globals.node,
},
- ecmaVersion: 2017,
+ ecmaVersion: 2022,
sourceType: "commonjs",
},
@@ -41,4 +41,10 @@
],
},
},
+ {
+ files: ["**/*.mjs"],
+ languageOptions: {
+ sourceType: "module",
+ },
+ },
];