Skip to content

Commit

Permalink
fix: check xml namespace in each package
Browse files Browse the repository at this point in the history
  • Loading branch information
mcarvin8 committed Nov 18, 2024
1 parent 7e434be commit 9c99e1c
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 5 deletions.
7 changes: 4 additions & 3 deletions src/helpers/buildPackage.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { XMLBuilder } from 'fast-xml-parser';

import { PackageXmlObject } from './types.js';
import { sfXmlns } from './constants.js';

const xmlConf = {
format: true,
Expand Down Expand Up @@ -42,7 +43,7 @@ export function buildPackage(packageContents: PackageXmlObject[], apiVersions: s
// Construct the XML data as a JSON-like object
const packageXmlObject: PackageXmlObject = {
Package: {
'@_xmlns': 'http://soap.sforce.com/2006/04/metadata',
'@_xmlns': sfXmlns,
types: mergedPackage.Package.types.map((type) => ({
members: type.members.sort((a, b) => a.localeCompare(b)),
name: type.name,
Expand All @@ -58,8 +59,8 @@ export function buildPackage(packageContents: PackageXmlObject[], apiVersions: s
// Ensure formatting for an empty package
if (mergedPackage.Package.types.length === 0) {
xmlContent = xmlContent.replace(
'<Package xmlns="http://soap.sforce.com/2006/04/metadata"></Package>',
'<Package xmlns="http://soap.sforce.com/2006/04/metadata">\n\n</Package>'
`<Package xmlns="${sfXmlns}"></Package>`,
`<Package xmlns="${sfXmlns}">\n\n</Package>`
);
}

Expand Down
1 change: 1 addition & 0 deletions src/helpers/constants.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export const sfXmlns = 'http://soap.sforce.com/2006/04/metadata';
9 changes: 7 additions & 2 deletions src/helpers/parsePackage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import { XMLParser } from 'fast-xml-parser';

import { PackageXmlObject } from './types.js';
import { sfXmlns } from './constants.js';

const XML_PARSER_OPTION = {
ignoreAttributes: false,
Expand Down Expand Up @@ -30,8 +31,8 @@ export function parsePackageXml(xmlContent: string): PackageXmlObject | null {
if (!packageData.types) {
return null;
}
const allowedKeys = new Set(['types', 'version']);
const packageKeys = Object.keys(parsed.Package).filter((key) => key !== '@_xmlns');
const allowedKeys = new Set(['types', 'version', '@_xmlns']);
const packageKeys = Object.keys(parsed.Package);
const hasUnexpectedKeys = packageKeys.some((key) => !allowedKeys.has(key));
if (hasUnexpectedKeys) {
return null;
Expand Down Expand Up @@ -74,6 +75,10 @@ export function parsePackageXml(xmlContent: string): PackageXmlObject | null {
packageData.version = packageData.version[0] as string;
}

if (packageData['@_xmlns'] !== sfXmlns) {
return null;
}

// Validate the final structure
if (isPackageXmlObject({ Package: packageData })) {
return { Package: packageData as PackageXmlObject['Package'] };
Expand Down

0 comments on commit 9c99e1c

Please sign in to comment.