@microsoft/windows-admin-center-sdk
Version:
Microsoft - Windows Admin Center Shell
64 lines (62 loc) • 2.95 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.DeclareOverrideUpdater = void 0;
const common_1 = require("../../../common");
const logger_1 = require("../../utils/logger");
/**
* Updater for DeclareOverride errors.
*/
class DeclareOverrideUpdater {
/**
* The update function.
* @param fileData the file data.
* @param error the error object.
* @returns The updated file data.
*/
update(fileData, error) {
if (!fileData) {
logger_1.Logger.error(`Cannot find file data`);
}
let result;
const overrideNameRegex = /Property\s+'([^']+)'(?=\s+will\s+overwrite\s+the\s+base\s+property)/;
let overrideName;
try {
overrideName = error.message.match(overrideNameRegex)[1];
logger_1.Logger.log(`Found parameter name from error message as ${overrideName}`);
}
catch (error) {
logger_1.Logger.error(`Cannot find parameter name from ${error.message}`);
return new Promise(resolve => resolve(''));
}
// const parameterRegex = new RegExp(`(public|protected|private)\\s+${overrideName}:\\s*\\w+\\s*;`, 'g');
// work for below cases:
// public input: string;
// public input: string[];
// Not yet support below cases:
// public input: string<>;
// public input: string<[]>;
// public input: string<[]>[];
// public input: string<[]>[][];
const parameterRegex = new RegExp(`(public|protected|private)\\s+${overrideName}:\\s*(?:\\w+(\\[\\])?)(?:<\\w+>)?\\s*;`, 'g');
logger_1.Logger.log(`INFO - parameterRegex: ${parameterRegex}`);
const parameters = fileData.match(parameterRegex);
const validationParameterRegex = new RegExp(`declare\\s+(public|protected|private)\\s+${overrideName}:\\s*(?:\\w+(\\[\\])?)(?:<\\w+>)?\\s*;`, 'g');
logger_1.Logger.log(`INFO - validationParameterRegex: ${validationParameterRegex}`);
const shouldUpdate = !!!fileData.match(validationParameterRegex);
logger_1.Logger.log(shouldUpdate ? `INFO - shouldUpdate: ${shouldUpdate}` : `INFO - shouldUpdate: ${shouldUpdate}`);
logger_1.Logger.log(`INFO - parameters: ${parameters}`);
const replaceString = parameters ? parameters[0] : '';
if (replaceString.length && shouldUpdate) {
result = common_1.Common.replaceInString(fileData, parameterRegex, `declare ${replaceString}`);
error.resolved = common_1.ResolveState.Resolved;
}
else {
error.resolved = common_1.ResolveState.Resolved;
logger_1.Logger.error(`Cannot find replaceString`);
return new Promise(resolve => resolve(''));
}
return new Promise(resolve => resolve(result));
}
}
exports.DeclareOverrideUpdater = DeclareOverrideUpdater;
//# sourceMappingURL=declare-override-updater.js.map