diff --git a/app-frontend/src/containers/apps/appDetails/deploy/BuildLogsView.tsx b/app-frontend/src/containers/apps/appDetails/deploy/BuildLogsView.tsx index 8cf02f8..2e7676b 100644 --- a/app-frontend/src/containers/apps/appDetails/deploy/BuildLogsView.tsx +++ b/app-frontend/src/containers/apps/appDetails/deploy/BuildLogsView.tsx @@ -3,6 +3,7 @@ import ApiComponent from "../../../global/ApiComponent"; import Toaster from "../../../../utils/Toaster"; import ClickableLink from "../../../global/ClickableLink"; import { Input, Icon, Alert, Row, Spin } from "antd"; +import Utils from "../../../../utils/Utils"; export default class BuildLogsView extends ApiComponent< { @@ -44,7 +45,7 @@ export default class BuildLogsView extends ApiComponent< self.setState({ expandedLogs: true }); } - let lines = logInfo.logs.lines; + let lines = logInfo.logs.lines as string[]; let firstLineNumberOfLogs = logInfo.logs.firstLineNumber; let firstLinesToPrint = 0; if (firstLineNumberOfLogs > self.state.lastLineNumberPrinted) { @@ -68,8 +69,10 @@ export default class BuildLogsView extends ApiComponent< let lineAdded = false; let buildLogs = self.state.buildLogs; + const ansiRegex = Utils.getAnsiColorRegex(); for (let i = firstLinesToPrint; i < lines.length; i++) { - buildLogs += (lines[i] || "").trim() + "\n"; + const newLine = (lines[i] || "").trim().replace(ansiRegex, ""); + buildLogs += newLine + "\n"; lineAdded = true; } diff --git a/app-frontend/src/utils/Utils.ts b/app-frontend/src/utils/Utils.ts index 0bfb7a9..6eb44b5 100644 --- a/app-frontend/src/utils/Utils.ts +++ b/app-frontend/src/utils/Utils.ts @@ -11,5 +11,14 @@ export default { v = c === "x" ? r : (r & 0x3) | 0x8; return v.toString(16); }); + }, + + getAnsiColorRegex() { + const pattern = [ + "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:[a-zA-Z\\d]*(?:;[a-zA-Z\\d]*)*)?\\u0007)", + "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))" + ].join("|"); + + return new RegExp(pattern, "g"); } };