diff --git a/common/config/rush/pnpm-lock.yaml b/common/config/rush/pnpm-lock.yaml index fa00866a3b9d..6c40fa373dc0 100644 --- a/common/config/rush/pnpm-lock.yaml +++ b/common/config/rush/pnpm-lock.yaml @@ -1572,7 +1572,6 @@ packages: /@opentelemetry/node/0.22.0_@opentelemetry+api@1.0.4: resolution: {integrity: sha512-+HhGbDruQ7cwejVOIYyxRa28uosnG8W95NiQZ6qE8PXXPsDSyGeftAPbtYpGit0H2f5hrVcMlwmWHeAo9xkSLA==} engines: {node: '>=8.0.0'} - deprecated: Package renamed to @opentelemetry/sdk-trace-node peerDependencies: '@opentelemetry/api': ^1.0.0 dependencies: @@ -3877,6 +3876,13 @@ packages: strnum: 1.0.5 dev: false + /fast-xml-parser/4.0.1: + resolution: {integrity: sha512-EN1yOXDmMqpHrqkwTlCJDvFjepJBoBxjLRDtDxFmqrBILGV3NyFWpmcsofSKCCzc+YxhvNreB5rcKzG+TlyWpg==} + hasBin: true + dependencies: + strnum: 1.0.5 + dev: false + /fastq/1.13.0: resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} dependencies: @@ -12217,7 +12223,7 @@ packages: dev: false file:projects/core-xml.tgz: - resolution: {integrity: sha512-BLlp886QCP1A0KeLgCqrVbO/wRtOmsBuXL7cOVvcbpWBaKF/2w62fS6hl+d0o5RXXGk2IyXNVJLaFLGo3Fv4iw==, tarball: file:projects/core-xml.tgz} + resolution: {integrity: sha512-V2IuzfEt3WddBEJcb8blIT4waWFu/ouN5XmqU0dBRsTmjhCeurXsMARrwClfo2wEbH73A6hkyimxHMiOghM9dQ==, tarball: file:projects/core-xml.tgz} name: '@rush-temp/core-xml' version: 0.0.0 dependencies: @@ -12231,7 +12237,7 @@ packages: cross-env: 7.0.3 downlevel-dts: 0.8.0 eslint: 7.32.0 - fast-xml-parser: 3.21.1 + fast-xml-parser: 4.0.1 inherits: 2.0.4 karma: 6.3.11 karma-chrome-launcher: 3.1.0 diff --git a/sdk/core/core-xml/CHANGELOG.md b/sdk/core/core-xml/CHANGELOG.md index bb45590628dc..343a4018190c 100644 --- a/sdk/core/core-xml/CHANGELOG.md +++ b/sdk/core/core-xml/CHANGELOG.md @@ -1,15 +1,11 @@ # Release History -## 1.1.1 (Unreleased) - -### Features Added - -### Breaking Changes - -### Bugs Fixed +## 1.2.0 (Unreleased) ### Other Changes +- Upgrade to `fast-xml-parser` to v4 [PR# 19898](https://github.com/Azure/azure-sdk-for-js/pull/19898) + ## 1.1.0 (2022-01-06) ### Other Changes diff --git a/sdk/core/core-xml/package.json b/sdk/core/core-xml/package.json index 654747a1ca39..394327df9978 100644 --- a/sdk/core/core-xml/package.json +++ b/sdk/core/core-xml/package.json @@ -1,6 +1,6 @@ { "name": "@azure/core-xml", - "version": "1.1.1", + "version": "1.2.0", "description": "Core library for interacting with XML payloads", "sdk-type": "client", "main": "dist/index.js", @@ -66,7 +66,7 @@ "prettier": "@azure/eslint-plugin-azure-sdk/prettier.json", "dependencies": { "tslib": "^2.2.0", - "fast-xml-parser": "^3.20.0" + "fast-xml-parser": "^4.0.1" }, "devDependencies": { "@azure/dev-tool": "^1.0.0", diff --git a/sdk/core/core-xml/src/xml.ts b/sdk/core/core-xml/src/xml.ts index 7f0d85fa2991..b50fb3dd89d9 100644 --- a/sdk/core/core-xml/src/xml.ts +++ b/sdk/core/core-xml/src/xml.ts @@ -1,14 +1,15 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT license. -import { j2xParser, parse, validate } from "fast-xml-parser"; +import { XMLBuilder, XMLValidator, XMLParser } from "fast-xml-parser"; import { XML_ATTRKEY, XML_CHARKEY, XmlOptions } from "./xml.common"; function getCommonOptions(options: XmlOptions) { return { - attrNodeName: XML_ATTRKEY, + attributesGroupName: XML_ATTRKEY, textNodeName: options.xmlCharKey ?? XML_CHARKEY, ignoreAttributes: false, + suppressBooleanAttributes: false, }; } @@ -17,7 +18,7 @@ function getSerializerOptions(options: XmlOptions = {}) { ...getCommonOptions(options), attributeNamePrefix: "@_", format: true, - supressEmptyNode: true, + suppressEmptyNode: true, indentBy: "", rootNodeName: options.rootName ?? "root", }; @@ -27,7 +28,7 @@ function getParserOptions(options: XmlOptions = {}) { return { ...getCommonOptions(options), parseAttributeValue: false, - parseNodeValue: false, + parseTagValue: false, attributeNamePrefix: "", }; } @@ -39,11 +40,11 @@ function getParserOptions(options: XmlOptions = {}) { */ export function stringifyXML(obj: unknown, opts: XmlOptions = {}): string { const parserOptions = getSerializerOptions(opts); - const j2x = new j2xParser(parserOptions); + const j2x = new XMLBuilder(parserOptions); const node = { [parserOptions.rootNodeName]: obj }; - const xmlData: string = j2x.parse(node); + const xmlData: string = j2x.build(node); return `${xmlData}`.replace(/\n/g, ""); } @@ -58,13 +59,14 @@ export async function parseXML(str: string, opts: XmlOptions = {}): Promise throw new Error("Document is empty"); } - const validation = validate(str); + const validation = XMLValidator.validate(str); if (validation !== true) { throw validation; } - const parsedXml = parse(unescapeHTML(str), getParserOptions(opts)); + const parser = new XMLParser(getParserOptions(opts)); + const parsedXml = parser.parse(unescapeHTML(str)); if (!opts.includeRoot) { for (const key of Object.keys(parsedXml)) {