Vikrant Puppala created THRIFT-6130:
---------------------------------------
Summary: Node.js library cannot load in CommonJS environments with
ESM-only uuid dependency
Key: THRIFT-6130
URL: https://issues.apache.org/jira/browse/THRIFT-6130
Project: Thrift
Issue Type: Bug
Components: Node.js - Library
Affects Versions: 0.24.0, 0.23.0
Reporter: Vikrant Puppala
Fix For: 0.25.0
h3. Problem
The Node.js runtime package is CommonJS, but thrift 0.23.0 and 0.24.0 load uuid
synchronously from binary_protocol.js and compact_protocol.js:
{code:javascript}
const { parse: uuidParse, stringify: uuidStringify } = require("uuid");
{code}
The published dependency ranges resolve to uuid 13.x or 14.x. uuid removed
CommonJS support in version 12, so CommonJS consumers and tools that do not
transform ESM inside node_modules cannot load thrift.
h3. Reproduction
{code:bash}
mkdir thrift-commonjs-repro
cd thrift-commonjs-repro
npm init -y
npm install [email protected] [email protected]
{code}
Create index.test.js:
{code:javascript}
const thrift = require("thrift");
test("loads from CommonJS", () => {
expect(thrift).toBeDefined();
});
{code}
Then run:
{code:bash}
npx jest --runInBand
{code}
The suite fails before executing any test:
{code}
node_modules/uuid/dist-node/index.js:1
export { default as MAX } from './max.js';
^^^^^^
SyntaxError: Unexpected token 'export'
{code}
The same failure occurs through @databricks/[email protected]. A complete downstream
report is available at
https://github.com/databricks/databricks-sql-nodejs/issues/461.
h3. Expected behavior
A CommonJS consumer should be able to load the CommonJS thrift package without
custom ESM transforms or root-level dependency overrides.
h3. Proposed fix
Remove the runtime uuid dependency from the Node.js library and provide the
UUID parse/stringify operations internally. Add direct tests for UUID
validation and binary/compact protocol round trips, plus a CommonJS
package-load regression test.
This avoids coupling the CommonJS runtime to uuid's module format and prevents
the same regression on future uuid major releases.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)