UNPKG

46.2 kBSource Map (JSON)View Raw
1{"version":3,"file":"logging.js","sourceRoot":"","sources":["../src/logging.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\r\n// See LICENSE in the project root for license information.\r\n\r\nimport * as colors from 'colors';\r\nimport * as Gulp from 'gulp';\r\nimport * as path from 'path';\r\n// eslint-disable-next-line\r\nconst prettyTime = require('pretty-hrtime');\r\n\r\nimport { IBuildConfig } from './IBuildConfig';\r\nimport * as state from './State';\r\nimport { getFlagValue } from './config';\r\nimport { getConfig } from './index';\r\n\r\nconst WROTE_ERROR_KEY: string = '__gulpCoreBuildWroteError';\r\n\r\ninterface ILocalCache {\r\n warnings: string[];\r\n errors: string[];\r\n taskRun: number;\r\n subTasksRun: number;\r\n testsRun: number;\r\n testsPassed: number;\r\n testsFailed: number;\r\n testsFlakyFailed: number;\r\n testsSkipped: number;\r\n taskErrors: number;\r\n coverageResults: number;\r\n coveragePass: number;\r\n coverageTotal: number;\r\n totalTaskHrTime: [number, number] | undefined;\r\n start?: [number, number];\r\n taskCreationTime?: [number, number];\r\n totalTaskSrc: number;\r\n wroteSummary: boolean;\r\n writingSummary: boolean;\r\n writeSummaryCallbacks: (() => void)[];\r\n watchMode?: boolean;\r\n fromRunGulp?: boolean;\r\n exitCode: number;\r\n writeSummaryLogs: string[];\r\n gulp: typeof Gulp | undefined;\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n gulpErrorCallback: undefined | ((err: any) => void);\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n gulpStopCallback: undefined | ((err: any) => void);\r\n errorAndWarningSuppressions: (string | RegExp)[];\r\n shouldLogWarningsDuringSummary: boolean;\r\n shouldLogErrorsDuringSummary: boolean;\r\n}\r\n\r\nlet wiredUpErrorHandling: boolean = false;\r\nlet duringFastExit: boolean = false;\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nconst globalInstance: any = global as any;\r\n\r\nconst localCache: ILocalCache = globalInstance.__loggingCache = globalInstance.__loggingCache || {\r\n warnings: [],\r\n errors: [],\r\n testsRun: 0,\r\n subTasksRun: 0,\r\n testsPassed: 0,\r\n testsFailed: 0,\r\n testsFlakyFailed: 0,\r\n testsSkipped: 0,\r\n taskRun: 0,\r\n taskErrors: 0,\r\n coverageResults: 0,\r\n coveragePass: 0,\r\n coverageTotal: 0,\r\n totalTaskHrTime: undefined,\r\n totalTaskSrc: 0,\r\n wroteSummary: false,\r\n writingSummary: false,\r\n writeSummaryCallbacks: [],\r\n exitCode: 0,\r\n writeSummaryLogs: [],\r\n errorAndWarningSuppressions: [],\r\n gulp: undefined,\r\n gulpErrorCallback: undefined,\r\n gulpStopCallback: undefined,\r\n shouldLogErrorsDuringSummary: false,\r\n shouldLogWarningsDuringSummary: false\r\n};\r\n\r\nif (!localCache.start) {\r\n localCache.start = process.hrtime();\r\n}\r\n\r\nfunction isVerbose(): boolean {\r\n return getFlagValue('verbose');\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction formatError(e: any): string | undefined {\r\n\r\n if (!e.err) {\r\n if (isVerbose()) {\r\n return e.message + '\\r\\n' + e.stack;\r\n } else {\r\n return e.message;\r\n }\r\n }\r\n\r\n // PluginError\r\n if (typeof e.err.showStack === 'boolean') {\r\n return e.err.toString() + (e.err.stack && isVerbose() ? '\\r\\n' + e.err.stack : '');\r\n }\r\n\r\n // normal error\r\n if (e.err.stack) {\r\n if (isVerbose()) {\r\n return e.err.stack;\r\n } else {\r\n return e.err.message;\r\n }\r\n }\r\n\r\n // unknown (string, number, etc.)\r\n if (typeof (Error) === 'undefined') {\r\n if (isVerbose()) {\r\n return e.message + '\\r\\n' + e.stack;\r\n } else {\r\n return e.message;\r\n }\r\n } else {\r\n let output: string = String(e.err);\r\n\r\n try {\r\n output = JSON.stringify(e.err);\r\n } catch (e) {\r\n // Do nothing\r\n }\r\n\r\n if (isVerbose()) {\r\n return new Error(output).stack;\r\n } else {\r\n return new Error(output).message;\r\n }\r\n }\r\n}\r\n\r\nfunction afterStreamFlushed(streamName: string, callback: () => void): void {\r\n if (duringFastExit) {\r\n callback();\r\n } else {\r\n const stream: NodeJS.WritableStream = process[streamName];\r\n const outputWritten: boolean = stream.write('');\r\n if (outputWritten) {\r\n setTimeout(() => {\r\n callback();\r\n }, 250);\r\n } else {\r\n stream.once('drain', () => {\r\n setTimeout(() => {\r\n callback();\r\n }, 250);\r\n });\r\n }\r\n }\r\n}\r\n\r\nfunction afterStreamsFlushed(callback: () => void): void {\r\n afterStreamFlushed('stdout', () => {\r\n afterStreamFlushed('stderr', () => {\r\n callback();\r\n });\r\n });\r\n}\r\n\r\nfunction writeSummary(callback: () => void): void {\r\n\r\n localCache.writeSummaryCallbacks.push(callback);\r\n\r\n if (!localCache.writingSummary) {\r\n localCache.writingSummary = true;\r\n\r\n // flush the log\r\n afterStreamsFlushed(() => {\r\n const shouldRelogIssues: boolean = getFlagValue('relogIssues');\r\n log(colors.magenta('==================[ Finished ]=================='));\r\n\r\n const warnings: string[] = getWarnings();\r\n if (shouldRelogIssues) {\r\n for (let x: number = 0; x < warnings.length; x++) {\r\n console.error(colors.yellow(warnings[x]));\r\n }\r\n }\r\n\r\n if (shouldRelogIssues && (localCache.taskErrors > 0 || getErrors().length)) {\r\n const errors: string[] = getErrors();\r\n for (let x: number = 0; x < errors.length; x++) {\r\n console.error(colors.red(errors[x]));\r\n }\r\n }\r\n\r\n afterStreamsFlushed(() => {\r\n for (const writeSummaryString of localCache.writeSummaryLogs) {\r\n log(writeSummaryString);\r\n }\r\n const totalDuration: [number, number] = process.hrtime(getStart());\r\n\r\n const name: string = state.builtPackage.name || 'with unknown name';\r\n const version: string = state.builtPackage.version || 'unknown';\r\n log(`Project ${name} version:`, colors.yellow(version));\r\n log('Build tools version:', colors.yellow(state.coreBuildPackage.version || ''));\r\n log('Node version:', colors.yellow(process.version));\r\n // log('Create tasks duration:', colors.yellow(prettyTime(localCache.taskCreationTime)));\r\n // log('Read src tasks duration:', colors.yellow(prettyTime(localCache.totalTaskHrTime)));\r\n log('Total duration:', colors.yellow(prettyTime(totalDuration)));\r\n // log(`Tasks run: ${colors.yellow(localCache.taskRun + '')} ` +\r\n // `Subtasks run: ${colors.yellow(localCache.subTasksRun + '')}`);\r\n\r\n if (localCache.testsRun > 0) {\r\n log('Tests results -',\r\n 'Passed:', colors.green(localCache.testsPassed + ''),\r\n 'Failed:', colors.red(localCache.testsFailed + ''),\r\n // 'Flaky:', colors.yellow(localCache.testsFlakyFailed + ''),\r\n 'Skipped:', colors.yellow(localCache.testsSkipped + ''));\r\n }\r\n\r\n if (localCache.coverageResults > 0) {\r\n log(\r\n 'Coverage results -',\r\n 'Passed:', colors.green(localCache.coveragePass + ''),\r\n 'Failed:', colors.red((localCache.coverageResults - localCache.coveragePass) + ''),\r\n 'Avg. Cov.:', colors.yellow(Math.floor(localCache.coverageTotal / localCache.coverageResults) + '%'));\r\n }\r\n\r\n if (getWarnings().length) {\r\n log('Task warnings:', colors.yellow(getWarnings().length.toString()));\r\n }\r\n\r\n let totalErrors: number = 0;\r\n\r\n if (localCache.taskErrors > 0 || getErrors().length) {\r\n totalErrors = (localCache.taskErrors + getErrors().length);\r\n log('Task errors:', colors.red(totalErrors + ''));\r\n }\r\n\r\n localCache.wroteSummary = true;\r\n const callbacks: (() => void)[] = localCache.writeSummaryCallbacks;\r\n localCache.writeSummaryCallbacks = [];\r\n for (const writeSummaryCallback of callbacks) {\r\n writeSummaryCallback();\r\n }\r\n });\r\n });\r\n } else if (localCache.wroteSummary) {\r\n const callbacks: (() => void)[] = localCache.writeSummaryCallbacks;\r\n localCache.writeSummaryCallbacks = [];\r\n for (const writeSummaryCallback of callbacks) {\r\n writeSummaryCallback();\r\n }\r\n }\r\n}\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nfunction _writeTaskError(e: any): void {\r\n if (!e || !(e.err && e.err[WROTE_ERROR_KEY])) {\r\n writeError(e);\r\n localCache.taskErrors++;\r\n }\r\n}\r\n\r\nfunction exitProcess(errorCode: number): void {\r\n if (!localCache.watchMode) {\r\n process.stdout.write('', () => {\r\n process.exit(errorCode);\r\n });\r\n }\r\n}\r\n\r\nfunction wireUpProcessErrorHandling(shouldWarningsFailBuild: boolean): void {\r\n if (!wiredUpErrorHandling) {\r\n wiredUpErrorHandling = true;\r\n\r\n let wroteToStdErr: boolean = false;\r\n\r\n if (shouldWarningsFailBuild) {\r\n const oldStdErr: Function = process.stderr.write;\r\n process.stderr.write = function (text: string | Buffer): boolean {\r\n if (text.toString()) {\r\n wroteToStdErr = true;\r\n return oldStdErr.apply(process.stderr, arguments);\r\n }\r\n return true;\r\n };\r\n }\r\n\r\n process.on('exit', (code: number) => {\r\n duringFastExit = true;\r\n if (!global['dontWatchExit']) { // eslint-disable-line dot-notation\r\n if (!localCache.wroteSummary) {\r\n localCache.wroteSummary = true;\r\n console.log('About to exit with code:', code);\r\n console.error('Process terminated before summary could be written, possible error in async code not ' +\r\n 'continuing!');\r\n console.log('Trying to exit with exit code 1');\r\n exitProcess(1);\r\n } else {\r\n if (localCache.exitCode !== 0) {\r\n console.log(`Exiting with exit code: ${localCache.exitCode}`);\r\n exitProcess(localCache.exitCode);\r\n } else if (wroteToStdErr) {\r\n console.error(`The build failed because a task wrote output to stderr.`);\r\n console.log(`Exiting with exit code: 1`);\r\n exitProcess(1);\r\n }\r\n }\r\n }\r\n });\r\n\r\n process.on('uncaughtException',\r\n (err: Error) => {\r\n console.error(err);\r\n\r\n _writeTaskError(err);\r\n writeSummary(() => {\r\n exitProcess(1);\r\n\r\n if (localCache.gulpErrorCallback) {\r\n localCache.gulpErrorCallback(err);\r\n }\r\n });\r\n });\r\n }\r\n}\r\n\r\nfunction markErrorAsWritten(err: Error): void {\r\n try {\r\n err[WROTE_ERROR_KEY] = true;\r\n } catch (e) {\r\n // Do Nothing\r\n }\r\n}\r\n\r\n/**\r\n * Adds a message to be displayed in the summary after execution is complete.\r\n * @param value - the message to display\r\n * @public\r\n */\r\nexport function logSummary(value: string): void {\r\n localCache.writeSummaryLogs.push(value);\r\n}\r\n\r\n/**\r\n * Log a message to the console\r\n * @param args - the messages to log to the console\r\n * @public\r\n */\r\nexport function log(...args: string[]): void {\r\n const currentTime: Date = new Date();\r\n const timestamp: string = colors.gray(\r\n [padTimePart(currentTime.getHours()),\r\n padTimePart(currentTime.getMinutes()),\r\n padTimePart(currentTime.getSeconds())]\r\n .join(':'));\r\n console.log(`[${timestamp}] ${args.join('')}`);\r\n}\r\n\r\nfunction padTimePart(timepart: number): string {\r\n return timepart >= 10 ? timepart.toString(10) : `0${timepart.toString(10)}`;\r\n}\r\n\r\n/**\r\n * Resets the state of the logging cache\r\n * @public\r\n */\r\nexport function reset(): void {\r\n localCache.start = process.hrtime();\r\n localCache.warnings = [];\r\n localCache.errors = [];\r\n localCache.coverageResults = 0;\r\n localCache.coveragePass = 0;\r\n localCache.coverageTotal = 0;\r\n localCache.taskRun = 0;\r\n localCache.subTasksRun = 0;\r\n localCache.taskErrors = 0;\r\n localCache.totalTaskHrTime = undefined;\r\n localCache.totalTaskSrc = 0;\r\n localCache.wroteSummary = false;\r\n localCache.writingSummary = false;\r\n localCache.writeSummaryCallbacks = [];\r\n localCache.testsRun = 0;\r\n localCache.testsPassed = 0;\r\n localCache.testsFailed = 0;\r\n localCache.testsFlakyFailed = 0;\r\n localCache.testsSkipped = 0;\r\n localCache.writeSummaryLogs = [];\r\n}\r\n\r\n/**\r\n * The result of a functional test run\r\n * @public\r\n */\r\nexport enum TestResultState {\r\n Passed,\r\n Failed,\r\n FlakyFailed,\r\n Skipped\r\n}\r\n\r\n/**\r\n * Store a single functional test run's information\r\n * @param name - the name of the test\r\n * @param result - the result of the test\r\n * @param duration - the length of time it took for the test to execute\r\n * @public\r\n */\r\nexport function functionalTestRun(name: string, result: TestResultState, duration: number): void {\r\n localCache.testsRun++;\r\n\r\n switch (result) {\r\n case TestResultState.Failed:\r\n localCache.testsFailed++;\r\n break;\r\n case TestResultState.Passed:\r\n localCache.testsPassed++;\r\n break;\r\n case TestResultState.FlakyFailed:\r\n localCache.testsFlakyFailed++;\r\n break;\r\n case TestResultState.Skipped:\r\n localCache.testsSkipped++;\r\n break;\r\n }\r\n}\r\n\r\n/** @public */\r\nexport function endTaskSrc(taskName: string, startHrtime: [number, number], fileCount: number): void {\r\n localCache.totalTaskSrc++;\r\n const taskDuration: [number, number] = process.hrtime(startHrtime);\r\n if (!localCache.totalTaskHrTime) {\r\n localCache.totalTaskHrTime = taskDuration;\r\n } else {\r\n localCache.totalTaskHrTime[0] += taskDuration[0];\r\n const nanoSecTotal: number = taskDuration[1] + localCache.totalTaskHrTime[1];\r\n if (nanoSecTotal > 1e9) {\r\n localCache.totalTaskHrTime[0]++;\r\n localCache.totalTaskHrTime[1] = nanoSecTotal - 1e9;\r\n } else {\r\n localCache.totalTaskHrTime[1] = nanoSecTotal;\r\n }\r\n }\r\n\r\n log(taskName, 'read src task duration:', colors.yellow(prettyTime(taskDuration)), `- ${fileCount} files`);\r\n}\r\n\r\n/**\r\n * Store coverage information, potentially logging an error if the coverage is below the threshold\r\n * @param coverage - the coverage of the file as a percentage\r\n * @param threshold - the minimum coverage for the file as a percentage, an error will be logged if coverage is below\r\n * the threshold\r\n * @param filePath - the path to the file whose coverage is being measured\r\n * @public\r\n */\r\nexport function coverageData(coverage: number, threshold: number, filePath: string): void {\r\n localCache.coverageResults++;\r\n\r\n if (coverage < threshold) {\r\n error('Coverage:', Math.floor(coverage) + '% (<' + threshold + '%) -', filePath);\r\n } else {\r\n localCache.coveragePass++;\r\n }\r\n\r\n localCache.coverageTotal += coverage;\r\n}\r\n\r\n// eslint-disable-next-line no-control-regex\r\nconst colorCodeRegex: RegExp = /\\x1B[[(?);]{0,2}(;?\\d)*./g;\r\n\r\n/**\r\n * Adds a suppression for an error or warning\r\n * @param suppression - the error or warning as a string or Regular Expression\r\n * @public\r\n */\r\nexport function addSuppression(suppression: string | RegExp): void {\r\n\r\n if (typeof suppression === 'string') {\r\n suppression = normalizeMessage(suppression);\r\n }\r\n\r\n localCache.errorAndWarningSuppressions.push(suppression);\r\n\r\n if (getConfig().verbose) {\r\n logSummary(`${colors.yellow('Suppressing')} - ${suppression.toString()}`);\r\n }\r\n}\r\n\r\n/**\r\n * Logs a warning. It will be logged to standard error and cause the build to fail\r\n * if buildConfig.shouldWarningsFailBuild is true, otherwise it will be logged to standard output.\r\n * @param message - the warning description\r\n * @public\r\n */\r\nexport function warn(...args: string[]): void {\r\n args.splice(0, 0, 'Warning -');\r\n\r\n const stringMessage: string = normalizeMessage(args.join(' '));\r\n\r\n if (!messageIsSuppressed(stringMessage)) {\r\n localCache.warnings.push(stringMessage);\r\n log(colors.yellow.apply(undefined, args));\r\n }\r\n}\r\n\r\n/**\r\n * Logs an error to standard error and causes the build to fail.\r\n * @param message - the error description\r\n * @public\r\n */\r\nexport function error(...args: string[]): void {\r\n args.splice(0, 0, 'Error -');\r\n\r\n const stringMessage: string = normalizeMessage(args.join(' '));\r\n\r\n if (!messageIsSuppressed(stringMessage)) {\r\n localCache.errors.push(stringMessage);\r\n log(colors.red.apply(undefined, args));\r\n }\r\n}\r\n\r\n/**\r\n * Logs a message about a particular file\r\n * @param write - the function which will write message\r\n * @param taskName - the name of the task which is doing the logging\r\n * @param filePath - the path to the file which encountered an issue\r\n * @param line - the line in the file which had an issue\r\n * @param column - the column in the file which had an issue\r\n * @param errorCode - the custom error code representing this error\r\n * @param message - a description of the error\r\n * @public\r\n */\r\nexport function fileLog(\r\n write: (text: string) => void,\r\n taskName: string,\r\n filePath: string,\r\n line: number,\r\n column: number,\r\n errorCode: string,\r\n message: string\r\n): void {\r\n\r\n if (!filePath) {\r\n filePath = '<undefined path>';\r\n } else if (path.isAbsolute(filePath)) {\r\n filePath = path.relative(process.cwd(), filePath);\r\n }\r\n\r\n write(`${colors.cyan(taskName)} - ${filePath}(${line},${column}): error ${errorCode}: ${message}`);\r\n}\r\n\r\n/**\r\n * Logs a warning regarding a specific file.\r\n * @param filePath - the path to the file which encountered an issue\r\n * @param line - the line in the file which had an issue\r\n * @param column - the column in the file which had an issue\r\n * @param warningCode - the custom warning code representing this warning\r\n * @param message - a description of the warning\r\n * @public\r\n */\r\nexport function fileWarning(\r\n taskName: string,\r\n filePath: string,\r\n line: number,\r\n column: number,\r\n errorCode: string,\r\n message: string\r\n): void {\r\n fileLog(warn, taskName, filePath, line, column, errorCode, message);\r\n}\r\n\r\n/**\r\n * Logs an error regarding a specific file to standard error and causes the build to fail.\r\n * @param filePath - the path to the file which encountered an issue\r\n * @param line - the line in the file which had an issue\r\n * @param column - the column in the file which had an issue\r\n * @param errorCode - the custom error code representing this error\r\n * @param message - a description of the error\r\n * @public\r\n */\r\nexport function fileError(\r\n taskName: string,\r\n filePath: string,\r\n line: number,\r\n column: number,\r\n errorCode: string,\r\n message: string\r\n): void {\r\n fileLog(error, taskName, filePath, line, column, errorCode, message);\r\n}\r\n\r\n/**\r\n * Logs a message to standard output if the verbose flag is specified.\r\n * @param args - the messages to log when in verbose mode\r\n * @public\r\n */\r\nexport function verbose(...args: string[]): void {\r\n\r\n if (getFlagValue('verbose')) {\r\n log.apply(undefined, args);\r\n }\r\n}\r\n\r\n/** @public */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function generateGulpError(err: any): any {\r\n if (isVerbose()) {\r\n return err;\r\n } else {\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n const output: any = {\r\n showStack: false,\r\n toString: (): string => {\r\n return '';\r\n }\r\n };\r\n\r\n markErrorAsWritten(output);\r\n\r\n return output;\r\n }\r\n}\r\n\r\n/**\r\n * Logs an error to standard error and causes the build to fail.\r\n * @param e - the error (can be a string or Error object)\r\n * @public\r\n */\r\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\r\nexport function writeError(e: any): void {\r\n if (e) {\r\n if (!e[WROTE_ERROR_KEY]) {\r\n if (e.err) {\r\n if (!e.err[WROTE_ERROR_KEY]) {\r\n const msg: string | undefined = formatError(e);\r\n const time: string = prettyTime(e.hrDuration);\r\n\r\n error(\r\n '\\'' + colors.cyan(e.task) + '\\'',\r\n colors.red(e.subTask ? 'sub task errored after' : 'errored after'),\r\n colors.magenta(time),\r\n '\\r\\n',\r\n msg || ''\r\n );\r\n markErrorAsWritten(e.err[WROTE_ERROR_KEY]);\r\n }\r\n } else if (e.fileName) {\r\n // This is probably a plugin error\r\n if (isVerbose()) {\r\n error(\r\n e.message,\r\n '\\r\\n',\r\n e.plugin + ': \\'' + colors.yellow(e.fileName) + '\\':' + e.lineNumber,\r\n '\\r\\n',\r\n e.stack\r\n );\r\n } else {\r\n error(\r\n e.message,\r\n '\\r\\n',\r\n e.plugin + ': \\'' + colors.yellow(e.fileName) + '\\':' + e.lineNumber\r\n );\r\n }\r\n } else {\r\n if (isVerbose()) {\r\n error(\r\n 'Unknown',\r\n '\\r\\n',\r\n colors.red(e.message),\r\n '\\r\\n',\r\n e.stack);\r\n } else {\r\n error(\r\n 'Unknown',\r\n '\\r\\n',\r\n colors.red(e.message));\r\n }\r\n }\r\n markErrorAsWritten(e);\r\n }\r\n } else {\r\n error('Unknown Error Object');\r\n }\r\n}\r\n\r\n/**\r\n * Returns the list of warnings which have been logged\r\n * @public\r\n */\r\nexport function getWarnings(): string[] {\r\n return localCache.warnings;\r\n}\r\n\r\n/**\r\n * Returns the list of errors which have been logged\r\n * @public\r\n */\r\nexport function getErrors(): string[] {\r\n return localCache.errors;\r\n}\r\n\r\n/** @public */\r\nexport function getStart(): [number, number] | undefined {\r\n return localCache.start;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport function setWatchMode(): void {\r\n localCache.watchMode = true;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport function getWatchMode(): boolean | undefined {\r\n return localCache.watchMode;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport function setExitCode(exitCode: number): void {\r\n localCache.exitCode = exitCode;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport function logStartSubtask(name: string): void {\r\n log(`Starting subtask '${colors.cyan(name)}'...`);\r\n localCache.subTasksRun++;\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport function logEndSubtask(name: string, startTime: [number, number], errorObject?: Error): void {\r\n const duration: [number, number] = process.hrtime(startTime);\r\n\r\n if (name) {\r\n if (!errorObject) {\r\n const durationString: string = prettyTime(duration);\r\n log(`Finished subtask '${colors.cyan(name)}' after ${colors.magenta(durationString)}`);\r\n } else {\r\n writeError({\r\n err: errorObject,\r\n task: name,\r\n subTask: true,\r\n hrDuration: duration\r\n });\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport function initialize(\r\n gulp: typeof Gulp,\r\n config: IBuildConfig,\r\n gulpErrorCallback?: (err: Error) => void,\r\n gulpStopCallback?: (err: Error) => void\r\n): void {\r\n // This will add logging to the gulp execution\r\n\r\n localCache.gulp = gulp;\r\n\r\n wireUpProcessErrorHandling(config.shouldWarningsFailBuild);\r\n\r\n localCache.gulpErrorCallback = gulpErrorCallback || (() => {\r\n\r\n // Do Nothing\r\n });\r\n\r\n localCache.gulpStopCallback = gulpStopCallback || (() => {\r\n\r\n // Do Nothing\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n gulp.on('start', (err: any) => {\r\n\r\n log('Starting gulp');\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n gulp.on('stop', (err: any) => {\r\n\r\n writeSummary(() => {\r\n // error if we have any errors\r\n if (localCache.taskErrors > 0 ||\r\n (getWarnings().length && config.shouldWarningsFailBuild) ||\r\n getErrors().length ||\r\n localCache.testsFailed > 0) {\r\n exitProcess(1);\r\n }\r\n\r\n if (localCache.gulpStopCallback) {\r\n localCache.gulpStopCallback(err);\r\n }\r\n exitProcess(0);\r\n });\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n gulp.on('err', (err: any) => {\r\n\r\n _writeTaskError(err);\r\n writeSummary(() => {\r\n exitProcess(1);\r\n if (localCache.gulpErrorCallback) {\r\n localCache.gulpErrorCallback(err);\r\n }\r\n });\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n gulp.on('task_start', (e: any) => {\r\n\r\n if (localCache.fromRunGulp) {\r\n log('Starting', '\\'' + colors.cyan(e.task) + '\\'...');\r\n }\r\n\r\n localCache.taskRun++;\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n gulp.on('task_stop', (e: any) => {\r\n\r\n const time: string = prettyTime(e.hrDuration);\r\n\r\n if (localCache.fromRunGulp) {\r\n log(\r\n 'Finished', '\\'' + colors.cyan(e.task) + '\\'',\r\n 'after', colors.magenta(time)\r\n );\r\n }\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n gulp.on('task_err', (err: any) => {\r\n\r\n _writeTaskError(err);\r\n writeSummary(() => {\r\n exitProcess(1);\r\n });\r\n });\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\r\n gulp.on('task_not_found', (err: any) => {\r\n\r\n log(\r\n colors.red('Task \\'' + err.task + '\\' is not in your gulpfile')\r\n );\r\n log('Please check the documentation for proper gulpfile formatting');\r\n exitProcess(1);\r\n });\r\n}\r\n\r\n/**\r\n * @public\r\n */\r\nexport function markTaskCreationTime(): void {\r\n localCache.taskCreationTime = process.hrtime(getStart());\r\n}\r\n\r\nfunction messageIsSuppressed(message: string): boolean {\r\n for (const suppression of localCache.errorAndWarningSuppressions) {\r\n if (typeof suppression === 'string' && message === suppression) {\r\n return true;\r\n } else if (suppression instanceof RegExp && message.match(suppression)) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction normalizeMessage(message: string): string {\r\n return message\r\n .replace(colorCodeRegex, '') // remove colors\r\n .replace(/\\r\\n/g, '\\n') // normalize newline\r\n .replace(/\\\\/g, '/'); // normalize slashes\r\n}\r\n"]}
\No newline at end of file