/
writeFile.ts
42 lines (35 loc) · 1.32 KB
/
writeFile.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import * as fs from 'fs';
import * as vscode from 'vscode';
import { Builder as XMLBuilder } from 'xml2js';
import { handleError, getProjFileExtension, isHeadlessXML } from '../../utils';
const getErrorMessage = (pickedProjFile: string): string => {
const extension = getProjFileExtension(pickedProjFile);
const fileDescription = extension ? `.${extension}` : 'project';
return `Failed to write an updated ${fileDescription} file. Please try again later.`;
};
export default function writeFile({
pickedProjFile,
contents,
selectedPackageName,
selectedVersion,
originalContents = ''
}): Promise<string | never> {
return new Promise((resolve, reject) => {
const xmlBuilder = new XMLBuilder({
headless: isHeadlessXML(originalContents)
});
let xml;
try {
xml = xmlBuilder.buildObject(contents);
}
catch (ex) {
return handleError(ex, getErrorMessage(pickedProjFile), reject);
}
fs.writeFile(pickedProjFile, xml, (err) => {
if (err) {
return handleError(err, getErrorMessage(pickedProjFile), reject);
}
return resolve(`Success! Wrote ${selectedPackageName}@${selectedVersion} to ${pickedProjFile}. Run dotnet restore to update your project.`);
});
});
}