UNPKG

@microsoft/windows-admin-center-sdk

Version:

Microsoft - Windows Admin Center Shell

132 lines (130 loc) 6.74 kB
"use strict"; 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