3 const _ = require("lodash");
5 /*:: type messageType = {
14 stylelintType?: string,
15 stylelintReference?: string,
19 /*:: type postcssResultType = {
24 messages: Array<messageType>,
49 ruleSeverities: Object,
50 customMessages: Object,
56 stylelintError?: boolean,
61 /*:: type resultType = {
63 codeProcessors?: Array<Function>,
64 ignorePatterns?: string,
65 processors?: Array<any>,
67 resultProcessors?: Array<Function>,
74 module.exports = function(
75 stylelint /*: stylelint$internalApi*/,
76 postcssResult /*: postcssResultType*/,
77 filePath /*:: ?: string*/
78 ) /*: Promise<stylelint$result>*/ {
79 const source = !postcssResult.root.source
81 : postcssResult.root.source.input.file ||
82 postcssResult.root.source.input.id;
84 // Strip out deprecation warnings from the messages
85 const deprecationMessages = _.remove(postcssResult.messages, {
86 stylelintType: "deprecation"
88 const deprecations = deprecationMessages.map((
89 deprecationMessage /*: messageType*/
92 text: deprecationMessage.text,
93 reference: deprecationMessage.stylelintReference
97 // Also strip out invalid options
98 const invalidOptionMessages = _.remove(postcssResult.messages, {
99 stylelintType: "invalidOption"
101 const invalidOptionWarnings = invalidOptionMessages.map((
102 invalidOptionMessage /*: messageType*/
105 text: invalidOptionMessage.text
109 const parseErrors = _.remove(postcssResult.messages, {
110 stylelintType: "parseError"
113 // This defines the stylelint result object that formatters receive
114 let stylelintResult = {
117 invalidOptionWarnings,
119 errored: postcssResult.stylelint.stylelintError,
120 warnings: postcssResult.messages.map((message /*: messageType*/) => {
123 column: message.column,
125 severity: message.severity,
129 ignored: postcssResult.stylelint.ignored,
130 _postcssResult: postcssResult
133 return stylelint.getConfigForFile(filePath).then((
134 result /*: resultType*/
136 const config = result.config;
138 if (config.resultProcessors) {
139 config.resultProcessors.forEach(resultProcessor => {
140 // Result processors might just mutate the result object,
141 // or might return a new one
142 const returned = resultProcessor(stylelintResult, source);
144 stylelintResult = returned;
149 return stylelintResult;