From e6882c42c96911a0cd4aad8ce1cc03922ab9dd90 Mon Sep 17 00:00:00 2001 From: Jannis Morgenstern Date: Mon, 30 Jun 2025 18:30:31 +0200 Subject: [PATCH] refactor: use `fast-xml-parser` to parse and build XML --- lib/updaters/types/maven.js | 25 ++++++++++++------------- package.json | 3 +-- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/lib/updaters/types/maven.js b/lib/updaters/types/maven.js index 37d81c5be..07dceb151 100644 --- a/lib/updaters/types/maven.js +++ b/lib/updaters/types/maven.js @@ -1,40 +1,39 @@ -const jsdom = require('jsdom'); -const serialize = require('w3c-xmlserializer'); const detectNewline = require('detect-newline'); +const { XMLParser, XMLBuilder } = require('fast-xml-parser'); + const CRLF = '\r\n'; const LF = '\n'; function pomDocument(contents) { - const dom = new jsdom.JSDOM(''); - const parser = new dom.window.DOMParser(); - return parser.parseFromString(contents, 'application/xml'); + const parser = new XMLParser(); + return parser.parse(contents); } -function pomVersionElement(document) { - const versionElement = document.querySelector('project > version'); +function pomVersion(document) { + const version = document?.project?.version; - if (!versionElement) { + if (!version) { throw new Error( 'Failed to read the version field in your pom file - is it present?', ); } - return versionElement; + return version; } module.exports.readVersion = function (contents) { const document = pomDocument(contents); - return pomVersionElement(document).textContent; + return pomVersion(document); }; module.exports.writeVersion = function (contents, version) { const newline = detectNewline(contents); const document = pomDocument(contents); - const versionElement = pomVersionElement(document); - versionElement.textContent = version; + document.project.version = version; - const xml = serialize(document); + const builder = new XMLBuilder({format: true}); + const xml = builder.build(document); if (newline === CRLF) { return xml.replace(/\n/g, CRLF) + CRLF; diff --git a/package.json b/package.json index 08dc46110..da3a89388 100644 --- a/package.json +++ b/package.json @@ -47,12 +47,11 @@ "detect-indent": "^6.1.0", "detect-newline": "^3.1.0", "dotgitignore": "^2.1.0", + "fast-xml-parser": "^5.2.5", "figures": "^3.2.0", "find-up": "^5.0.0", "git-semver-tags": "^5.0.1", - "jsdom": "^25.0.1", "semver": "^7.6.3", - "w3c-xmlserializer": "^5.0.0", "yaml": "^2.6.0", "yargs": "^17.7.2" },