apex-code-coverage-transformer 3.0.2 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -5,6 +5,13 @@
5
5
 
6
6
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
7
7
 
8
+ ## [3.0.3](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v3.0.2...v3.0.3) (2026-08-19)
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * **deps:** replace fast-xml-builder with in-house XML builder ([#373](https://github.com/mcarvin8/apex-code-coverage-transformer/issues/373)) ([b537784](https://github.com/mcarvin8/apex-code-coverage-transformer/commit/b537784cc1568a8c32bd8a4e06c954ee86e2f63f))
14
+
8
15
  ## [3.0.2](https://github.com/mcarvin8/apex-code-coverage-transformer/compare/v3.0.1...v3.0.2) (2026-08-17)
9
16
 
10
17
 
@@ -1,8 +1,8 @@
1
1
  import { writeFile } from 'node:fs/promises';
2
2
  import { basename, dirname, extname, join } from 'node:path';
3
- import XMLBuilder from 'fast-xml-builder';
4
3
  import { HandlerRegistry } from '../handlers/HandlerRegistry.js';
5
4
  import { builderOptions, XML_HEADER_CONFIG } from '../utils/constants.js';
5
+ import { XmlBuilder } from '../utils/xmlBuilder.js';
6
6
  import { generateGitHubActions } from './generators/generateGitHubActions.js';
7
7
  import { generateHtml } from './generators/generateHtml.js';
8
8
  import { generateMarkdown } from './generators/generateMarkdown.js';
@@ -43,7 +43,7 @@ function generateReportContent(coverageObj, format, options) {
43
43
  }
44
44
  function generateXmlContent(coverageObj, format) {
45
45
  const isHeadless = isXmlReportFormat(format);
46
- const builder = new XMLBuilder(builderOptions);
46
+ const builder = new XmlBuilder(builderOptions);
47
47
  let xml = builder.build(coverageObj);
48
48
  if (isHeadless) {
49
49
  xml = xml.replace(/^<\?xml[^>]*>\s*/i, '');
@@ -1 +1 @@
1
- {"version":3,"file":"reportGenerator.js","sourceRoot":"","sources":["../../src/transformers/reportGenerator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reportGenerator.js","sourceRoot":"","sources":["../../src/transformers/reportGenerator.ts"],"names":[],"mappings":"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"}
@@ -6,18 +6,8 @@ import { XmlHeaderConfig, XmlReportFormat } from './types.js';
6
6
  */
7
7
  export declare const formatOptions: string[];
8
8
  export declare const builderOptions: {
9
- commentPropName: string;
10
- ignoreAttributes: boolean;
11
- ignoreNameSpace: boolean;
12
- parseTagValue: boolean;
13
- parseNodeValue: boolean;
14
- parseAttributeValue: boolean;
15
- trimValues: boolean;
16
- processEntities: boolean;
9
+ attributeNamePrefix: string;
17
10
  format: boolean;
18
11
  indentBy: string;
19
- suppressBooleanAttributes: boolean;
20
- suppressEmptyNode: boolean;
21
- attributeNamePrefix: string;
22
12
  };
23
13
  export declare const XML_HEADER_CONFIG: Record<XmlReportFormat, XmlHeaderConfig>;
@@ -7,19 +7,9 @@ import '../handlers/getHandler.js';
7
7
  */
8
8
  export const formatOptions = HandlerRegistry.getAvailableFormats();
9
9
  export const builderOptions = {
10
- commentPropName: '#comment',
11
- ignoreAttributes: false,
12
- ignoreNameSpace: false,
13
- parseTagValue: false,
14
- parseNodeValue: false,
15
- parseAttributeValue: false,
16
- trimValues: true,
17
- processEntities: false,
10
+ attributeNamePrefix: '@',
18
11
  format: true,
19
12
  indentBy: ' ',
20
- suppressBooleanAttributes: false,
21
- suppressEmptyNode: true,
22
- attributeNamePrefix: '@',
23
13
  };
24
14
  export const XML_HEADER_CONFIG = {
25
15
  cobertura: {
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,mDAAmD;AACnD,OAAO,2BAA2B,CAAC;AAGnC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAa,eAAe,CAAC,mBAAmB,EAAE,CAAC;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,eAAe,EAAE,UAAU;IAC3B,gBAAgB,EAAE,KAAK;IACvB,eAAe,EAAE,KAAK;IACtB,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,KAAK;IACrB,mBAAmB,EAAE,KAAK;IAC1B,UAAU,EAAE,IAAI;IAChB,eAAe,EAAE,KAAK;IACtB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;IACd,yBAAyB,EAAE,KAAK;IAChC,iBAAiB,EAAE,IAAI;IACvB,mBAAmB,EAAE,GAAG;CACzB,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAA6C;IACzE,SAAS,EAAE;QACT,OAAO,EAAE,wBAAwB;QACjC,OAAO,EAAE,mFAAmF;KAC7F;IACD,MAAM,EAAE;QACN,OAAO,EAAE,wCAAwC;KAClD;IACD,MAAM,EAAE;QACN,OAAO,EAAE,yDAAyD;QAClE,OAAO,EAAE,uEAAuE;KACjF;IACD,SAAS,EAAE;QACT,OAAO,EAAE,wCAAwC;KAClD;CACF,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEjE,mDAAmD;AACnD,OAAO,2BAA2B,CAAC;AAGnC;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAa,eAAe,CAAC,mBAAmB,EAAE,CAAC;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,mBAAmB,EAAE,GAAG;IACxB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAA6C;IACzE,SAAS,EAAE;QACT,OAAO,EAAE,wBAAwB;QACjC,OAAO,EAAE,mFAAmF;KAC7F;IACD,MAAM,EAAE;QACN,OAAO,EAAE,wCAAwC;KAClD;IACD,MAAM,EAAE;QACN,OAAO,EAAE,yDAAyD;QAClE,OAAO,EAAE,uEAAuE;KACjF;IACD,SAAS,EAAE;QACT,OAAO,EAAE,wCAAwC;KAClD;CACF,CAAC"}
@@ -0,0 +1,22 @@
1
+ export type XmlBuilderOptions = {
2
+ attributeNamePrefix?: string;
3
+ format?: boolean;
4
+ indentBy?: string;
5
+ };
6
+ type XmlNode = Record<string, unknown>;
7
+ /**
8
+ * Minimal XML serializer for this plugin's coverage-object shapes: nested plain
9
+ * objects become elements, `@`-prefixed keys become attributes, arrays repeat
10
+ * the tag, and childless elements self-close. Replaces fast-xml-builder, which
11
+ * this codebase only ever used with a fixed, narrow slice of its options.
12
+ */
13
+ export declare class XmlBuilder {
14
+ private readonly options;
15
+ constructor(options?: XmlBuilderOptions);
16
+ build(obj: XmlNode): string;
17
+ private buildChildren;
18
+ private buildElement;
19
+ private splitAttributesAndChildren;
20
+ private buildAttribute;
21
+ }
22
+ export {};
@@ -0,0 +1,68 @@
1
+ 'use strict';
2
+ const DEFAULT_OPTIONS = {
3
+ attributeNamePrefix: '@',
4
+ format: true,
5
+ indentBy: ' ',
6
+ };
7
+ /**
8
+ * Minimal XML serializer for this plugin's coverage-object shapes: nested plain
9
+ * objects become elements, `@`-prefixed keys become attributes, arrays repeat
10
+ * the tag, and childless elements self-close. Replaces fast-xml-builder, which
11
+ * this codebase only ever used with a fixed, narrow slice of its options.
12
+ */
13
+ export class XmlBuilder {
14
+ options;
15
+ constructor(options = {}) {
16
+ this.options = { ...DEFAULT_OPTIONS, ...options };
17
+ }
18
+ build(obj) {
19
+ return this.buildChildren(obj, 0);
20
+ }
21
+ buildChildren(obj, level) {
22
+ let out = '';
23
+ for (const [key, value] of Object.entries(obj)) {
24
+ if (value === undefined)
25
+ continue;
26
+ out += Array.isArray(value)
27
+ ? value.map((item) => this.buildElement(key, item, level)).join('')
28
+ : this.buildElement(key, value, level);
29
+ }
30
+ return out;
31
+ }
32
+ buildElement(key, value, level) {
33
+ const indent = this.options.format ? this.options.indentBy.repeat(level) : '';
34
+ const newline = this.options.format ? '\n' : '';
35
+ if (value !== null && typeof value === 'object') {
36
+ const { attrStr, children } = this.splitAttributesAndChildren(value);
37
+ if (!children) {
38
+ return `${indent}<${key}${attrStr}/>${newline}`;
39
+ }
40
+ const inner = this.buildChildren(children, level + 1);
41
+ return `${indent}<${key}${attrStr}>${newline}${inner}${indent}</${key}>${newline}`;
42
+ }
43
+ const text = String(value);
44
+ return text === '' ? `${indent}<${key}/>${newline}` : `${indent}<${key}>${text}</${key}>${newline}`;
45
+ }
46
+ splitAttributesAndChildren(obj) {
47
+ const prefix = this.options.attributeNamePrefix;
48
+ let attrStr = '';
49
+ let children;
50
+ for (const [key, value] of Object.entries(obj)) {
51
+ if (value === undefined)
52
+ continue;
53
+ if (key.startsWith(prefix)) {
54
+ attrStr += this.buildAttribute(key.slice(prefix.length), value);
55
+ }
56
+ else {
57
+ children ??= {};
58
+ children[key] = value;
59
+ }
60
+ }
61
+ return { attrStr, children };
62
+ }
63
+ buildAttribute(name, value) {
64
+ const escaped = String(value).replace(/"/g, '&quot;').replace(/'/g, '&apos;');
65
+ return ` ${name}="${escaped}"`;
66
+ }
67
+ }
68
+ //# sourceMappingURL=xmlBuilder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xmlBuilder.js","sourceRoot":"","sources":["../../src/utils/xmlBuilder.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAUb,MAAM,eAAe,GAAgC;IACnD,mBAAmB,EAAE,GAAG;IACxB,MAAM,EAAE,IAAI;IACZ,QAAQ,EAAE,IAAI;CACf,CAAC;AAEF;;;;;GAKG;AACH,MAAM,OAAO,UAAU;IACJ,OAAO,CAA8B;IAEtD,YAAY,OAAO,GAAsB,EAAE;QACzC,IAAI,CAAC,OAAO,GAAG,EAAE,GAAG,eAAe,EAAE,GAAG,OAAO,EAAE,CAAC;IACpD,CAAC;IAED,KAAK,CAAC,GAAY;QAChB,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IACpC,CAAC;IAEO,aAAa,CAAC,GAAY,EAAE,KAAa;QAC/C,IAAI,GAAG,GAAG,EAAE,CAAC;QACb,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;gBACzB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnE,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAEO,YAAY,CAAC,GAAW,EAAE,KAAc,EAAE,KAAa;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAEhD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAChD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,0BAA0B,CAAC,KAAgB,CAAC,CAAC;YAChF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,GAAG,MAAM,IAAI,GAAG,GAAG,OAAO,KAAK,OAAO,EAAE,CAAC;YAClD,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;YACtD,OAAO,GAAG,MAAM,IAAI,GAAG,GAAG,OAAO,IAAI,OAAO,GAAG,KAAK,GAAG,MAAM,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;QACrF,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;IACtG,CAAC;IAEO,0BAA0B,CAAC,GAAY;QAC7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,mBAAmB,CAAC;QAChD,IAAI,OAAO,GAAG,EAAE,CAAC;QACjB,IAAI,QAA6B,CAAC;QAElC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC/C,IAAI,KAAK,KAAK,SAAS;gBAAE,SAAS;YAClC,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;YAClE,CAAC;iBAAM,CAAC;gBACN,QAAQ,KAAK,EAAE,CAAC;gBAChB,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;IAC/B,CAAC;IAEO,cAAc,CAAC,IAAY,EAAE,KAAc;QACjD,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC9E,OAAO,IAAI,IAAI,KAAK,OAAO,GAAG,CAAC;IACjC,CAAC;CACF"}
@@ -131,5 +131,5 @@
131
131
  ]
132
132
  }
133
133
  },
134
- "version": "3.0.2"
134
+ "version": "3.0.3"
135
135
  }
package/package.json CHANGED
@@ -1,15 +1,14 @@
1
1
  {
2
2
  "name": "apex-code-coverage-transformer",
3
3
  "description": "Transform Salesforce Apex code coverage JSON for SonarQube, SonarCloud, GitHub, GitLab, Azure, and Bitbucket",
4
- "version": "3.0.2",
4
+ "version": "3.0.3",
5
5
  "dependencies": {
6
6
  "@oclif/core": "4.13.3",
7
7
  "@salesforce/core": "9.1.2",
8
- "@salesforce/sf-plugins-core": "13.0.0",
9
- "fast-xml-builder": "1.3.0"
8
+ "@salesforce/sf-plugins-core": "13.0.0"
10
9
  },
11
10
  "devDependencies": {
12
- "@biomejs/biome": "2.5.8",
11
+ "@biomejs/biome": "2.5.9",
13
12
  "@commitlint/cli": "21.2.2",
14
13
  "@commitlint/config-conventional": "21.2.2",
15
14
  "@salesforce/cli-plugins-testkit": "5.3.66",
@@ -263,5 +262,8 @@
263
262
  },
264
263
  "bugs": {
265
264
  "url": "https://github.com/mcarvin8/apex-code-coverage-transformer/issues"
265
+ },
266
+ "allowScripts": {
267
+ "esbuild@0.28.1": true
266
268
  }
267
269
  }