This is an automated email from the ASF dual-hosted git repository. jimexist pushed a commit to branch claude/intelligent-varahamihira-7964e6 in repository https://gitbox.apache.org/repos/asf/thrift.git
commit 5acb41d4a8b049b881d7711cf1396ba98e3bce6f Author: Jiayu Liu <[email protected]> AuthorDate: Mon May 25 08:15:23 2026 +0800 No ticket: Drop uuid dependency in favor of native parse/stringify Client: nodejs The uuid npm package was used only for parse() and stringify() in the binary and compact protocols. Replaced with a small in-tree helper so the runtime no longer pulls in an external dependency for two trivial hex conversions. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]> --- lib/nodejs/lib/thrift/binary_protocol.js | 2 +- lib/nodejs/lib/thrift/compact_protocol.js | 2 +- lib/nodejs/lib/thrift/uuid.js | 69 +++++++++++++++++++++++++++++++ package-lock.json | 14 ------- package.json | 1 - 5 files changed, 71 insertions(+), 17 deletions(-) diff --git a/lib/nodejs/lib/thrift/binary_protocol.js b/lib/nodejs/lib/thrift/binary_protocol.js index b2c3720a6..e26b52b4d 100644 --- a/lib/nodejs/lib/thrift/binary_protocol.js +++ b/lib/nodejs/lib/thrift/binary_protocol.js @@ -23,7 +23,7 @@ var Int64 = require("node-int64"); var Thrift = require("./thrift"); var Type = Thrift.Type; -const { parse: uuidParse, stringify: uuidStringify } = require("uuid"); +const { parse: uuidParse, stringify: uuidStringify } = require("./uuid"); module.exports = TBinaryProtocol; diff --git a/lib/nodejs/lib/thrift/compact_protocol.js b/lib/nodejs/lib/thrift/compact_protocol.js index 2f6fc71b4..c70b20839 100644 --- a/lib/nodejs/lib/thrift/compact_protocol.js +++ b/lib/nodejs/lib/thrift/compact_protocol.js @@ -22,7 +22,7 @@ var Int64 = require("node-int64"); var Thrift = require("./thrift"); var Type = Thrift.Type; -const { parse: uuidParse, stringify: uuidStringify } = require("uuid"); +const { parse: uuidParse, stringify: uuidStringify } = require("./uuid"); module.exports = TCompactProtocol; diff --git a/lib/nodejs/lib/thrift/uuid.js b/lib/nodejs/lib/thrift/uuid.js new file mode 100644 index 000000000..83a77ee95 --- /dev/null +++ b/lib/nodejs/lib/thrift/uuid.js @@ -0,0 +1,69 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +const UUID_RE = + /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; + +exports.parse = function (uuid) { + if (typeof uuid !== "string") { + throw new TypeError("Invalid UUID"); + } + if (!UUID_RE.test(uuid)) { + throw new TypeError("Invalid UUID"); + } + const hex = uuid.replace(/-/g, ""); + const bytes = new Uint8Array(16); + for (let i = 0; i < 16; i++) { + bytes[i] = parseInt(hex.substr(i * 2, 2), 16); + } + return bytes; +}; + +const HEX = []; +for (let i = 0; i < 256; i++) { + HEX.push((i + 0x100).toString(16).slice(1)); +} + +exports.stringify = function (bytes) { + if (!bytes || bytes.length < 16) { + throw new TypeError("Invalid UUID byte array"); + } + return ( + HEX[bytes[0]] + + HEX[bytes[1]] + + HEX[bytes[2]] + + HEX[bytes[3]] + + "-" + + HEX[bytes[4]] + + HEX[bytes[5]] + + "-" + + HEX[bytes[6]] + + HEX[bytes[7]] + + "-" + + HEX[bytes[8]] + + HEX[bytes[9]] + + "-" + + HEX[bytes[10]] + + HEX[bytes[11]] + + HEX[bytes[12]] + + HEX[bytes[13]] + + HEX[bytes[14]] + + HEX[bytes[15]] + ); +}; diff --git a/package-lock.json b/package-lock.json index e8ce4f151..b8530cb39 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,6 @@ "isomorphic-ws": "^4.0.1", "node-int64": "^0.4.0", "q": "^1.5.0", - "uuid": "^14.0.0", "ws": "^5.2.3" }, "devDependencies": { @@ -3070,19 +3069,6 @@ "node": ">= 0.4.0" } }, - "node_modules/uuid": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.0.tgz", - "integrity": "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist-node/bin/uuid" - } - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", diff --git a/package.json b/package.json index febc130fe..d415ab14e 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,6 @@ "isomorphic-ws": "^4.0.1", "node-int64": "^0.4.0", "q": "^1.5.0", - "uuid": "^14.0.0", "ws": "^5.2.3" }, "devDependencies": {
