UNPKG

35.5 kBSource Map (JSON)View Raw
1{"version":3,"file":"MessageRouter.js","sourceRoot":"","sources":["../../src/collector/MessageRouter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.\n// See LICENSE in the project root for license information.\n\nimport colors from 'colors';\nimport * as ts from 'typescript';\nimport * as tsdoc from '@microsoft/tsdoc';\nimport { Sort, InternalError } from '@rushstack/node-core-library';\n\nimport { AstDeclaration } from '../analyzer/AstDeclaration';\nimport { AstSymbol } from '../analyzer/AstSymbol';\nimport {\n ExtractorMessage,\n ExtractorMessageCategory,\n IExtractorMessageOptions,\n IExtractorMessageProperties\n} from '../api/ExtractorMessage';\nimport { ExtractorMessageId, allExtractorMessageIds } from '../api/ExtractorMessageId';\nimport { IExtractorMessagesConfig, IConfigMessageReportingRule } from '../api/IConfigFile';\nimport { ISourceLocation, SourceMapper } from './SourceMapper';\nimport { ExtractorLogLevel } from '../api/ExtractorLogLevel';\nimport { ConsoleMessageId } from '../api/ConsoleMessageId';\n\ninterface IReportingRule {\n logLevel: ExtractorLogLevel;\n addToApiReportFile: boolean;\n}\n\nexport interface IMessageRouterOptions {\n workingPackageFolder: string | undefined;\n messageCallback: ((message: ExtractorMessage) => void) | undefined;\n messagesConfig: IExtractorMessagesConfig;\n showVerboseMessages: boolean;\n showDiagnostics: boolean;\n tsdocConfiguration: tsdoc.TSDocConfiguration;\n sourceMapper: SourceMapper;\n}\n\nexport interface IBuildJsonDumpObjectOptions {\n /**\n * {@link MessageRouter.buildJsonDumpObject} will omit any objects keys with these names.\n */\n keyNamesToOmit?: string[];\n}\n\nexport class MessageRouter {\n public static readonly DIAGNOSTICS_LINE: string =\n '============================================================';\n\n private readonly _workingPackageFolder: string | undefined;\n private readonly _messageCallback: ((message: ExtractorMessage) => void) | undefined;\n\n // All messages\n private readonly _messages: ExtractorMessage[];\n\n // For each AstDeclaration, the messages associated with it. This is used when addToApiReportFile=true\n private readonly _associatedMessagesForAstDeclaration: Map<AstDeclaration, ExtractorMessage[]>;\n\n private readonly _sourceMapper: SourceMapper;\n\n private readonly _tsdocConfiguration: tsdoc.TSDocConfiguration;\n\n // Normalized representation of the routing rules from api-extractor.json\n private _reportingRuleByMessageId: Map<string, IReportingRule> = new Map<string, IReportingRule>();\n private _compilerDefaultRule: IReportingRule = {\n logLevel: ExtractorLogLevel.None,\n addToApiReportFile: false\n };\n private _extractorDefaultRule: IReportingRule = {\n logLevel: ExtractorLogLevel.None,\n addToApiReportFile: false\n };\n private _tsdocDefaultRule: IReportingRule = { logLevel: ExtractorLogLevel.None, addToApiReportFile: false };\n\n public errorCount: number = 0;\n public warningCount: number = 0;\n\n /**\n * See {@link IExtractorInvokeOptions.showVerboseMessages}\n */\n public readonly showVerboseMessages: boolean;\n\n /**\n * See {@link IExtractorInvokeOptions.showDiagnostics}\n */\n public readonly showDiagnostics: boolean;\n\n public constructor(options: IMessageRouterOptions) {\n this._workingPackageFolder = options.workingPackageFolder;\n this._messageCallback = options.messageCallback;\n\n this._messages = [];\n this._associatedMessagesForAstDeclaration = new Map<AstDeclaration, ExtractorMessage[]>();\n this._sourceMapper = options.sourceMapper;\n this._tsdocConfiguration = options.tsdocConfiguration;\n\n // showDiagnostics implies showVerboseMessages\n this.showVerboseMessages = options.showVerboseMessages || options.showDiagnostics;\n this.showDiagnostics = options.showDiagnostics;\n\n this._applyMessagesConfig(options.messagesConfig);\n }\n\n /**\n * Read the api-extractor.json configuration and build up the tables of routing rules.\n */\n private _applyMessagesConfig(messagesConfig: IExtractorMessagesConfig): void {\n if (messagesConfig.compilerMessageReporting) {\n for (const messageId of Object.getOwnPropertyNames(messagesConfig.compilerMessageReporting)) {\n const reportingRule: IReportingRule = MessageRouter._getNormalizedRule(\n messagesConfig.compilerMessageReporting[messageId]\n );\n\n if (messageId === 'default') {\n this._compilerDefaultRule = reportingRule;\n } else if (!/^TS[0-9]+$/.test(messageId)) {\n throw new Error(\n `Error in API Extractor config: The messages.compilerMessageReporting table contains` +\n ` an invalid entry \"${messageId}\". The identifier format is \"TS\" followed by an integer.`\n );\n } else {\n this._reportingRuleByMessageId.set(messageId, reportingRule);\n }\n }\n }\n\n if (messagesConfig.extractorMessageReporting) {\n for (const messageId of Object.getOwnPropertyNames(messagesConfig.extractorMessageReporting)) {\n const reportingRule: IReportingRule = MessageRouter._getNormalizedRule(\n messagesConfig.extractorMessageReporting[messageId]\n );\n\n if (messageId === 'default') {\n this._extractorDefaultRule = reportingRule;\n } else if (!/^ae-/.test(messageId)) {\n throw new Error(\n `Error in API Extractor config: The messages.extractorMessageReporting table contains` +\n ` an invalid entry \"${messageId}\". The name should begin with the \"ae-\" prefix.`\n );\n } else if (!allExtractorMessageIds.has(messageId)) {\n throw new Error(\n `Error in API Extractor config: The messages.extractorMessageReporting table contains` +\n ` an unrecognized identifier \"${messageId}\". Is it spelled correctly?`\n );\n } else {\n this._reportingRuleByMessageId.set(messageId, reportingRule);\n }\n }\n }\n\n if (messagesConfig.tsdocMessageReporting) {\n for (const messageId of Object.getOwnPropertyNames(messagesConfig.tsdocMessageReporting)) {\n const reportingRule: IReportingRule = MessageRouter._getNormalizedRule(\n messagesConfig.tsdocMessageReporting[messageId]\n );\n\n if (messageId === 'default') {\n this._tsdocDefaultRule = reportingRule;\n } else if (!/^tsdoc-/.test(messageId)) {\n throw new Error(\n `Error in API Extractor config: The messages.tsdocMessageReporting table contains` +\n ` an invalid entry \"${messageId}\". The name should begin with the \"tsdoc-\" prefix.`\n );\n } else if (!this._tsdocConfiguration.isKnownMessageId(messageId)) {\n throw new Error(\n `Error in API Extractor config: The messages.tsdocMessageReporting table contains` +\n ` an unrecognized identifier \"${messageId}\". Is it spelled correctly?`\n );\n } else {\n this._reportingRuleByMessageId.set(messageId, reportingRule);\n }\n }\n }\n }\n\n private static _getNormalizedRule(rule: IConfigMessageReportingRule): IReportingRule {\n return {\n logLevel: rule.logLevel || 'none',\n addToApiReportFile: rule.addToApiReportFile || false\n };\n }\n\n public get messages(): ReadonlyArray<ExtractorMessage> {\n return this._messages;\n }\n\n /**\n * Add a diagnostic message reported by the TypeScript compiler\n */\n public addCompilerDiagnostic(diagnostic: ts.Diagnostic): void {\n switch (diagnostic.category) {\n case ts.DiagnosticCategory.Suggestion:\n case ts.DiagnosticCategory.Message:\n return; // ignore noise\n }\n\n const messageText: string = ts.flattenDiagnosticMessageText(diagnostic.messageText, '\\n');\n const options: IExtractorMessageOptions = {\n category: ExtractorMessageCategory.Compiler,\n messageId: `TS${diagnostic.code}`,\n text: messageText\n };\n\n if (diagnostic.file) {\n // NOTE: Since compiler errors pertain to issues specific to the .d.ts files,\n // we do not apply source mappings for them.\n const sourceFile: ts.SourceFile = diagnostic.file;\n const sourceLocation: ISourceLocation = this._sourceMapper.getSourceLocation({\n sourceFile,\n pos: diagnostic.start || 0,\n useDtsLocation: true\n });\n options.sourceFilePath = sourceLocation.sourceFilePath;\n options.sourceFileLine = sourceLocation.sourceFileLine;\n options.sourceFileColumn = sourceLocation.sourceFileColumn;\n }\n\n this._messages.push(new ExtractorMessage(options));\n }\n\n /**\n * Add a message from the API Extractor analysis\n */\n public addAnalyzerIssue(\n messageId: ExtractorMessageId,\n messageText: string,\n astDeclarationOrSymbol: AstDeclaration | AstSymbol,\n properties?: IExtractorMessageProperties\n ): void {\n let astDeclaration: AstDeclaration;\n if (astDeclarationOrSymbol instanceof AstDeclaration) {\n astDeclaration = astDeclarationOrSymbol;\n } else {\n astDeclaration = astDeclarationOrSymbol.astDeclarations[0];\n }\n\n const extractorMessage: ExtractorMessage = this.addAnalyzerIssueForPosition(\n messageId,\n messageText,\n astDeclaration.declaration.getSourceFile(),\n astDeclaration.declaration.getStart(),\n properties\n );\n\n this._associateMessageWithAstDeclaration(extractorMessage, astDeclaration);\n }\n\n /**\n * Add all messages produced from an invocation of the TSDoc parser, assuming they refer to\n * code in the specified source file.\n */\n public addTsdocMessages(\n parserContext: tsdoc.ParserContext,\n sourceFile: ts.SourceFile,\n astDeclaration?: AstDeclaration\n ): void {\n for (const message of parserContext.log.messages) {\n const options: IExtractorMessageOptions = {\n category: ExtractorMessageCategory.TSDoc,\n messageId: message.messageId,\n text: message.unformattedText\n };\n\n const sourceLocation: ISourceLocation = this._sourceMapper.getSourceLocation({\n sourceFile,\n pos: message.textRange.pos\n });\n options.sourceFilePath = sourceLocation.sourceFilePath;\n options.sourceFileLine = sourceLocation.sourceFileLine;\n options.sourceFileColumn = sourceLocation.sourceFileColumn;\n\n const extractorMessage: ExtractorMessage = new ExtractorMessage(options);\n\n if (astDeclaration) {\n this._associateMessageWithAstDeclaration(extractorMessage, astDeclaration);\n }\n\n this._messages.push(extractorMessage);\n }\n }\n\n /**\n * Recursively collects the primitive members (numbers, strings, arrays, etc) into an object that\n * is JSON serializable. This is used by the \"--diagnostics\" feature to dump the state of configuration objects.\n *\n * @returns a JSON serializable object (possibly including `null` values)\n * or `undefined` if the input cannot be represented as JSON\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public static buildJsonDumpObject(input: any, options?: IBuildJsonDumpObjectOptions): any | undefined {\n if (!options) {\n options = {};\n }\n\n const keyNamesToOmit: Set<string> = new Set(options.keyNamesToOmit);\n\n return MessageRouter._buildJsonDumpObject(input, keyNamesToOmit);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private static _buildJsonDumpObject(input: any, keyNamesToOmit: Set<string>): any | undefined {\n if (input === null || input === undefined) {\n return null; // JSON uses null instead of undefined\n }\n\n switch (typeof input) {\n case 'boolean':\n case 'number':\n case 'string':\n return input;\n case 'object':\n if (Array.isArray(input)) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const outputArray: any[] = [];\n for (const element of input) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const serializedElement: any = MessageRouter._buildJsonDumpObject(element, keyNamesToOmit);\n if (serializedElement !== undefined) {\n outputArray.push(serializedElement);\n }\n }\n return outputArray;\n }\n\n const outputObject: object = {};\n for (const key of Object.getOwnPropertyNames(input)) {\n if (keyNamesToOmit.has(key)) {\n continue;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const value: any = input[key];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const serializedValue: any = MessageRouter._buildJsonDumpObject(value, keyNamesToOmit);\n\n if (serializedValue !== undefined) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (outputObject as any)[key] = serializedValue;\n }\n }\n return outputObject;\n }\n\n return undefined;\n }\n\n /**\n * Record this message in _associatedMessagesForAstDeclaration\n */\n private _associateMessageWithAstDeclaration(\n extractorMessage: ExtractorMessage,\n astDeclaration: AstDeclaration\n ): void {\n let associatedMessages: ExtractorMessage[] | undefined =\n this._associatedMessagesForAstDeclaration.get(astDeclaration);\n\n if (!associatedMessages) {\n associatedMessages = [];\n this._associatedMessagesForAstDeclaration.set(astDeclaration, associatedMessages);\n }\n associatedMessages.push(extractorMessage);\n }\n\n /**\n * Add a message for a location in an arbitrary source file.\n */\n public addAnalyzerIssueForPosition(\n messageId: ExtractorMessageId,\n messageText: string,\n sourceFile: ts.SourceFile,\n pos: number,\n properties?: IExtractorMessageProperties\n ): ExtractorMessage {\n const options: IExtractorMessageOptions = {\n category: ExtractorMessageCategory.Extractor,\n messageId,\n text: messageText,\n properties\n };\n\n const sourceLocation: ISourceLocation = this._sourceMapper.getSourceLocation({\n sourceFile,\n pos\n });\n options.sourceFilePath = sourceLocation.sourceFilePath;\n options.sourceFileLine = sourceLocation.sourceFileLine;\n options.sourceFileColumn = sourceLocation.sourceFileColumn;\n\n const extractorMessage: ExtractorMessage = new ExtractorMessage(options);\n\n this._messages.push(extractorMessage);\n return extractorMessage;\n }\n\n /**\n * This is used when writing the API report file. It looks up any messages that were configured to get emitted\n * in the API report file and returns them. It also records that they were emitted, which suppresses them from\n * being shown on the console.\n */\n public fetchAssociatedMessagesForReviewFile(astDeclaration: AstDeclaration): ExtractorMessage[] {\n const messagesForApiReportFile: ExtractorMessage[] = [];\n\n const associatedMessages: ExtractorMessage[] =\n this._associatedMessagesForAstDeclaration.get(astDeclaration) || [];\n for (const associatedMessage of associatedMessages) {\n // Make sure we didn't already report this message for some reason\n if (!associatedMessage.handled) {\n // Is this message type configured to go in the API report file?\n const reportingRule: IReportingRule = this._getRuleForMessage(associatedMessage);\n if (reportingRule.addToApiReportFile) {\n // Include it in the result, and record that it went to the API report file\n messagesForApiReportFile.push(associatedMessage);\n associatedMessage.handled = true;\n }\n }\n }\n\n this._sortMessagesForOutput(messagesForApiReportFile);\n return messagesForApiReportFile;\n }\n\n /**\n * This returns all remaining messages that were flagged with `addToApiReportFile`, but which were not\n * retreieved using `fetchAssociatedMessagesForReviewFile()`.\n */\n public fetchUnassociatedMessagesForReviewFile(): ExtractorMessage[] {\n const messagesForApiReportFile: ExtractorMessage[] = [];\n\n for (const unassociatedMessage of this.messages) {\n // Make sure we didn't already report this message for some reason\n if (!unassociatedMessage.handled) {\n // Is this message type configured to go in the API report file?\n const reportingRule: IReportingRule = this._getRuleForMessage(unassociatedMessage);\n if (reportingRule.addToApiReportFile) {\n // Include it in the result, and record that it went to the API report file\n messagesForApiReportFile.push(unassociatedMessage);\n unassociatedMessage.handled = true;\n }\n }\n }\n\n this._sortMessagesForOutput(messagesForApiReportFile);\n return messagesForApiReportFile;\n }\n\n /**\n * This returns the list of remaining messages that were not already processed by\n * `fetchAssociatedMessagesForReviewFile()` or `fetchUnassociatedMessagesForReviewFile()`.\n * These messages will be shown on the console.\n */\n public handleRemainingNonConsoleMessages(): void {\n const messagesForLogger: ExtractorMessage[] = [];\n\n for (const message of this.messages) {\n // Make sure we didn't already report this message\n if (!message.handled) {\n messagesForLogger.push(message);\n }\n }\n\n this._sortMessagesForOutput(messagesForLogger);\n\n for (const message of messagesForLogger) {\n this._handleMessage(message);\n }\n }\n\n public logError(\n messageId: ConsoleMessageId,\n message: string,\n properties?: IExtractorMessageProperties\n ): void {\n this._handleMessage(\n new ExtractorMessage({\n category: ExtractorMessageCategory.Console,\n messageId,\n text: message,\n properties,\n logLevel: ExtractorLogLevel.Error\n })\n );\n }\n\n public logWarning(\n messageId: ConsoleMessageId,\n message: string,\n properties?: IExtractorMessageProperties\n ): void {\n this._handleMessage(\n new ExtractorMessage({\n category: ExtractorMessageCategory.Console,\n messageId,\n text: message,\n properties,\n logLevel: ExtractorLogLevel.Warning\n })\n );\n }\n\n public logInfo(\n messageId: ConsoleMessageId,\n message: string,\n properties?: IExtractorMessageProperties\n ): void {\n this._handleMessage(\n new ExtractorMessage({\n category: ExtractorMessageCategory.Console,\n messageId,\n text: message,\n properties,\n logLevel: ExtractorLogLevel.Info\n })\n );\n }\n\n public logVerbose(\n messageId: ConsoleMessageId,\n message: string,\n properties?: IExtractorMessageProperties\n ): void {\n this._handleMessage(\n new ExtractorMessage({\n category: ExtractorMessageCategory.Console,\n messageId,\n text: message,\n properties,\n logLevel: ExtractorLogLevel.Verbose\n })\n );\n }\n\n public logDiagnosticHeader(title: string): void {\n this.logDiagnostic(MessageRouter.DIAGNOSTICS_LINE);\n this.logDiagnostic(`DIAGNOSTIC: ` + title);\n this.logDiagnostic(MessageRouter.DIAGNOSTICS_LINE);\n }\n\n public logDiagnosticFooter(): void {\n this.logDiagnostic(MessageRouter.DIAGNOSTICS_LINE + '\\n');\n }\n\n public logDiagnostic(message: string): void {\n if (this.showDiagnostics) {\n this.logVerbose(ConsoleMessageId.Diagnostics, message);\n }\n }\n\n /**\n * Give the calling application a chance to handle the `ExtractorMessage`, and if not, display it on the console.\n */\n private _handleMessage(message: ExtractorMessage): void {\n // Don't tally messages that were already \"handled\" by writing them into the API report\n if (message.handled) {\n return;\n }\n\n // Assign the ExtractorMessage.logLevel; the message callback may adjust it below\n if (message.category === ExtractorMessageCategory.Console) {\n // Console messages have their category log level assigned via logInfo(), logVerbose(), etc.\n } else {\n const reportingRule: IReportingRule = this._getRuleForMessage(message);\n message.logLevel = reportingRule.logLevel;\n }\n\n // If there is a callback, allow it to modify and/or handle the message\n if (this._messageCallback) {\n this._messageCallback(message);\n }\n\n // Update the statistics\n switch (message.logLevel) {\n case ExtractorLogLevel.Error:\n ++this.errorCount;\n break;\n case ExtractorLogLevel.Warning:\n ++this.warningCount;\n break;\n }\n\n if (message.handled) {\n return;\n }\n\n // The messageCallback did not handle the message, so perform default handling\n message.handled = true;\n\n if (message.logLevel === ExtractorLogLevel.None) {\n return;\n }\n\n let messageText: string;\n if (message.category === ExtractorMessageCategory.Console) {\n messageText = message.text;\n } else {\n messageText = message.formatMessageWithLocation(this._workingPackageFolder);\n }\n\n switch (message.logLevel) {\n case ExtractorLogLevel.Error:\n console.error(colors.red('Error: ' + messageText));\n break;\n case ExtractorLogLevel.Warning:\n console.warn(colors.yellow('Warning: ' + messageText));\n break;\n case ExtractorLogLevel.Info:\n console.log(messageText);\n break;\n case ExtractorLogLevel.Verbose:\n if (this.showVerboseMessages) {\n console.log(colors.cyan(messageText));\n }\n break;\n default:\n throw new Error(`Invalid logLevel value: ${JSON.stringify(message.logLevel)}`);\n }\n }\n\n /**\n * For a given message, determine the IReportingRule based on the rule tables.\n */\n private _getRuleForMessage(message: ExtractorMessage): IReportingRule {\n const reportingRule: IReportingRule | undefined = this._reportingRuleByMessageId.get(message.messageId);\n if (reportingRule) {\n return reportingRule;\n }\n switch (message.category) {\n case ExtractorMessageCategory.Compiler:\n return this._compilerDefaultRule;\n case ExtractorMessageCategory.Extractor:\n return this._extractorDefaultRule;\n case ExtractorMessageCategory.TSDoc:\n return this._tsdocDefaultRule;\n case ExtractorMessageCategory.Console:\n throw new InternalError('ExtractorMessageCategory.Console is not supported with IReportingRule');\n }\n }\n\n /**\n * Sorts an array of messages according to a reasonable ordering\n */\n private _sortMessagesForOutput(messages: ExtractorMessage[]): void {\n messages.sort((a, b) => {\n let diff: number;\n // First sort by file name\n diff = Sort.compareByValue(a.sourceFilePath, b.sourceFilePath);\n if (diff !== 0) {\n return diff;\n }\n // Then sort by line number\n diff = Sort.compareByValue(a.sourceFileLine, b.sourceFileLine);\n if (diff !== 0) {\n return diff;\n }\n // Then sort by messageId\n return Sort.compareByValue(a.messageId, b.messageId);\n });\n }\n}\n"]}
\No newline at end of file