@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
132 lines (130 loc) • 6.74 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.PackageUpdater = void 0;
const tslib_1 = require("tslib");
const child_process_1 = require("child_process");
const fs_1 = tslib_1.__importDefault(require("fs"));
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
const common_1 = require("../common");
class PackageUpdater {
/**
* Updates package.json file with new package versions
* @param {string} rootPath Root path of the target repository
* @param {boolean} internal Flag indicating if upgrade is running for an internal WAC repository
* @param {boolean} audit Flag indicating if upgrade is running it audit mode
* @param {string[]} updateSource Array used to emit logs to file
* @returns {Promise<boolean>} Empty promise indicating function completion
*/
async updatePackages(audit, updateSource, experimental) {
if (!audit) {
console.log('Beginning package update.');
}
else {
console.log('Beginning package update audit.');
}
const packageFile = common_1.Common.rootPath + '\\package.json';
const templatePackageFile = common_1.Common.cliRootPath + 'templates\\wac-template\\package.json';
const removeListFile = common_1.Common.cliRootPath + 'src\\config\\package-remove-list.json';
const templatePackages = common_1.Common.readFileJSON(templatePackageFile);
const templatePeerDependencies = templatePackages.peerDependencies;
const templateDevDependencies = templatePackages.devDependencies;
const templateScripts = templatePackages.scripts;
// Use equality operator instead of strict equality operator to check for null or undefined
if (templatePeerDependencies == null || templateDevDependencies == null) {
throw new Error(`An unexpected error occurred, template package file is malformed. Please verify file at path ${templatePackageFile} has both "peerDependencies" and "devDependencies" defined.`);
}
if (experimental) {
templatePeerDependencies['@microsoft/windows-admin-center-sdk'] = 'experimental';
templateDevDependencies['@microsoft/windows-admin-center-sdk'] = 'experimental';
}
const removeList = common_1.Common.readFileJSON(removeListFile).packages;
const packages = common_1.Common.readFileJSON(packageFile);
if (packages === null) {
console.log(`No existing package file exists, creating new package file at path ${packageFile}.`);
fs_1.default.copyFileSync(templatePackageFile, packageFile);
}
if (packages.peerDependencies == null) {
packages.peerDependencies = {};
}
if (packages.devDependencies == null) {
packages.devDependencies = {};
}
packages.scripts = templateScripts;
const peerDependencies = packages.peerDependencies;
const devDependencies = packages.devDependencies;
const internal = peerDependencies['@microsoft/windows-admin-center-sdk'] || devDependencies['@microsoft/windows-admin-center-sdk']
? false : true;
if (internal) {
await this.getMsftSmeVersion([templatePeerDependencies, templateDevDependencies]);
}
this.updatePackageObject(templatePeerDependencies, peerDependencies, removeList, internal, updateSource);
this.updatePackageObject(templateDevDependencies, devDependencies, removeList, internal, updateSource);
updateSource.push('\n');
if (!audit) {
console.log('Finished updating packages, writing to file.');
fs_extra_1.default.writeJSONSync(packageFile, packages, { spaces: 2 });
console.log('Running npm install, please wait...');
return new Promise((resolve) => (0, child_process_1.exec)('npm install', (error, stdout, stderr) => {
if (error !== null) {
console.log('Error during npm install: ' + error);
}
if (stderr !== null) {
console.log('Error during npm install: ' + stderr);
}
console.log(stdout + '\n');
resolve(internal);
}));
}
else {
console.log('Finished audit of package update.');
return new Promise(resolve => resolve(internal));
}
}
updatePackageObject(sourceObject, targetObject, removeList, internal, updateSource) {
this.checkPackageRemoveList(removeList, targetObject, updateSource);
for (const pack in sourceObject) {
if ((internal && pack === '@microsoft/windows-admin-center-sdk') ||
(!internal && (pack.startsWith('@msft-sme') || pack === '@microsoft/windows-admin-center-sdk/tools'))) {
continue;
}
const message = `Package '${pack}' will go to version ${sourceObject[pack]}`;
console.log(message);
updateSource.push(message + '\n');
targetObject[pack] = sourceObject[pack];
}
}
checkPackageRemoveList(removeList, targetObject, updateSource) {
for (const pack of removeList) {
if (Object.prototype.hasOwnProperty.call(targetObject, pack)) {
const message = `Package '${pack}' will be removed`;
console.log(message);
updateSource.push(message + '\n');
delete targetObject[pack];
}
}
}
getMsftSmeVersion(targets) {
return new Promise((resolve) => {
(0, child_process_1.exec)('npm show "@microsoft/windows-admin-center-sdk/tools@2" version --json', (error, stdout, stderr) => {
if (error || stderr) {
console.log('Failed to retrieve latest @msft-sme package version, falling back to pre-set values.');
resolve(null);
}
const shellPackageFile = common_1.Common.cliRootPath + 'src\\config\\shell-package-list.json';
const shellPackages = common_1.Common.readFileJSON(shellPackageFile).packages;
const versionList = JSON.parse(stdout);
const version = versionList[versionList.length - 1];
targets.forEach((target) => {
for (const pack of shellPackages) {
if (target[pack] != null) {
target[pack] = version;
}
}
});
resolve();
});
});
}
}
exports.PackageUpdater = PackageUpdater;
//# sourceMappingURL=package-updater.js.map