|
5 | 5 | * For full license text, see LICENSE.txt file in the repo root or https://opensource.org/licenses/BSD-3-Clause
|
6 | 6 | */
|
7 | 7 |
|
8 |
| -import { XMLParser } from 'fast-xml-parser'; |
| 8 | +import { XMLParser, XMLValidator } from 'fast-xml-parser'; |
9 | 9 | import { ensureArray } from '@salesforce/kit';
|
| 10 | +import { SfError } from '@salesforce/core'; |
10 | 11 | import { MetadataType, RegistryAccess } from '../registry';
|
11 | 12 | import { NodeFSTreeContainer, TreeContainer } from './treeContainers';
|
12 | 13 | import { MetadataComponent } from './types';
|
@@ -52,15 +53,22 @@ export class ManifestResolver {
|
52 | 53 | public async resolve(manifestPath: string): Promise<ResolveManifestResult> {
|
53 | 54 | const components: MetadataComponent[] = [];
|
54 | 55 |
|
55 |
| - const file = await this.tree.readFile(manifestPath); |
56 |
| - |
| 56 | + const file = (await this.tree.readFile(manifestPath)).toString(); |
| 57 | + const validateResult = XMLValidator.validate(file); |
| 58 | + if (validateResult !== true) { |
| 59 | + const error = new SfError( |
| 60 | + `Invalid manifest file: ${manifestPath}. ${validateResult.err.code}: ${validateResult.err.msg} (Line ${validateResult.err.line} Column ${validateResult.err.col})`, |
| 61 | + 'InvalidManifest' |
| 62 | + ); |
| 63 | + error.setData(validateResult.err); |
| 64 | + throw error; |
| 65 | + } |
57 | 66 | const parser = new XMLParser({
|
58 | 67 | stopNodes: ['version'],
|
59 | 68 | // In order to preserve the .0 on the apiVersion skip parsing it
|
60 | 69 | numberParseOptions: { leadingZeros: false, hex: false, skipLike: /\.0$/ },
|
61 | 70 | });
|
62 |
| - const parsedManifest: ParsedPackageManifest = (parser.parse(String(file)) as { Package: ParsedPackageManifest }) |
63 |
| - .Package; |
| 71 | + const parsedManifest: ParsedPackageManifest = (parser.parse(file) as { Package: ParsedPackageManifest }).Package; |
64 | 72 | const packageTypeMembers = ensureArray(parsedManifest.types);
|
65 | 73 | const apiVersion = parsedManifest.version;
|
66 | 74 |
|
|
0 commit comments