{"version":3,"sources":["../../../packages/tools/wac-cli/src/angular15/upgrader/audit/declare-override-updater.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,2CAA2C,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAGnE;;GAEG;AACH,qBAAa,sBAAuB,YAAW,OAAO;IAClD;;;;;OAKG;IACI,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;CA8CvE","file":"declare-override-updater.d.ts","sourcesContent":["import { Common, ResolveState } from '../../../common';\r\nimport { Updater } from '../../../upgrade/models/updater-interface';\r\nimport { ErrorResult } from '../../../upgrade/models/error-result';\r\nimport { Logger } from '../../utils/logger';\r\n\r\n/**\r\n * Updater for DeclareOverride errors.\r\n */\r\nexport class DeclareOverrideUpdater implements Updater {\r\n    /**\r\n     * The update function.\r\n     * @param fileData the file data.\r\n     * @param error the error object.\r\n     * @returns The updated file data.\r\n     */\r\n    public update(fileData: string, error: ErrorResult): Promise<string> {\r\n        if (!fileData) {\r\n            Logger.error(`Cannot find file data`);\r\n        }\r\n        let result;\r\n        const overrideNameRegex =  /Property\\s+'([^']+)'(?=\\s+will\\s+overwrite\\s+the\\s+base\\s+property)/;\r\n        let overrideName: string;\r\n        try {\r\n            overrideName = error.message.match(overrideNameRegex)[1];\r\n            Logger.log(`Found parameter name from error message as ${overrideName}`);\r\n        } catch (error) {\r\n            Logger.error(`Cannot find parameter name from ${error.message}`);\r\n            return new Promise(resolve => resolve(''));\r\n        }\r\n\r\n        // const parameterRegex = new RegExp(`(public|protected|private)\\\\s+${overrideName}:\\\\s*\\\\w+\\\\s*;`, 'g');\r\n        // work for below cases:\r\n        // public input: string;\r\n        // public input: string[];\r\n        // Not yet support below cases:\r\n        // public input: string<>;\r\n        // public input: string<[]>;\r\n        // public input: string<[]>[];\r\n        // public input: string<[]>[][];\r\n        const parameterRegex = new RegExp(`(public|protected|private)\\\\s+${overrideName}:\\\\s*(?:\\\\w+(\\\\[\\\\])?)(?:<\\\\w+>)?\\\\s*;`, 'g');\r\n        Logger.log(`INFO - parameterRegex: ${parameterRegex}`);\r\n        const parameters = fileData.match(parameterRegex);\r\n\r\n        const validationParameterRegex = new RegExp(`declare\\\\s+(public|protected|private)\\\\s+${overrideName}:\\\\s*(?:\\\\w+(\\\\[\\\\])?)(?:<\\\\w+>)?\\\\s*;`, 'g');\r\n        Logger.log(`INFO - validationParameterRegex: ${validationParameterRegex}`);\r\n        const shouldUpdate = !!!fileData.match(validationParameterRegex);\r\n        Logger.log(shouldUpdate ? `INFO - shouldUpdate: ${shouldUpdate}`: `INFO - shouldUpdate: ${shouldUpdate}`);\r\n\r\n        Logger.log(`INFO - parameters: ${parameters}`);\r\n        const replaceString = parameters ? parameters[0] : '';\r\n\r\n        if (replaceString.length && shouldUpdate) {\r\n            result = Common.replaceInString(fileData, parameterRegex, `declare ${replaceString}`);\r\n            error.resolved = ResolveState.Resolved;\r\n        } else {\r\n            error.resolved = ResolveState.Resolved;\r\n            Logger.error(`Cannot find replaceString`);\r\n            return new Promise(resolve => resolve(''));\r\n        }\r\n        return new Promise(resolve => resolve(result));\r\n    }\r\n}\r\n"]}