/* @flow */ "use strict"; /*:: type postcssType = { atRule: Function, comment: Function, decl: Function, list: any, parse: any, plugin: Function, root: Function, rule: Function, stringify: any, vendor: any, } */ const _ = require("lodash"); const createStylelint = require("./createStylelint"); const path = require("path"); const postcss /*: postcssType*/ = require("postcss"); //'block-no-empty': bool || Array /*:: type OptionsT = { config?: { extends?: Array, plugins?: Array, rules?: Object, }; configBasedir?: string; configFile?: string; defaultSeverity?: string; from?: string; ignoreDisables?: boolean; ignoreFiles?: string; pluginFunctions?: Object; plugins?: Array; rules?: Object; } */ /*:: type rootParamT = { raws: { semicolon: boolean, after: string, }, type: string, nodes: Array, source: { input: { css: string, id?: string, file?: string, }, start: { line: number, column: number, } } } */ /*:: type resultParamT = { processor: { version: string, plugins: Array, }, messages: Array, root: { raws: { semicolon: boolean, after: string, }, type: string, nodes: Array, source: { input: Object, start: Object, }, }, opts: { config?: { rules: Object, }, configFile?: string, defaultSeverity?: string, rules?: Object, ignoreDisables?: boolean, ignoreFiles?: string, from?: string, syntax?: { parse: Function, stringify: Function, } }, css: ?any, map: ?any, lastPlugin: { postcssPlugin: string, postcssVersion: string, } } */ /*:: type postcssPromise = Promise*/ module.exports = postcss.plugin("stylelint", function( options /*: OptionsT*/ ) /*: Function*/ { options = options || {}; const tailoredOptions /*: Object*/ = options.rules ? { config: options } : options; const stylelint /*: stylelint$internalApi*/ = createStylelint( tailoredOptions ); // prettier-ignore return (root/*: rootParamT*/, result/*: resultParamT*/)/*: Promise*/ => { let filePath = options.from || _.get(root, "source.input.file"); if (filePath !== undefined && !path.isAbsolute(filePath)) { filePath = path.join(process.cwd(), filePath); } return stylelint._lintSource({ filePath, existingPostcssResult: result }); }; });