| // NOTICE: This file is generated by Rollup. To modify it, |
| // please instead edit the ESM counterpart and rebuild with Rollup (npm run build). |
| 'use strict'; |
| |
| const path = require('node:path'); |
| const postcss = require('postcss'); |
| const descriptionlessDisables = require('./descriptionlessDisables.cjs'); |
| const getConfigForFile = require('./getConfigForFile.cjs'); |
| const getPostcssResult = require('./getPostcssResult.cjs'); |
| const invalidScopeDisables = require('./invalidScopeDisables.cjs'); |
| const isPathIgnored = require('./isPathIgnored.cjs'); |
| const isPathNotFoundError = require('./utils/isPathNotFoundError.cjs'); |
| const lintPostcssResult = require('./lintPostcssResult.cjs'); |
| const needlessDisables = require('./needlessDisables.cjs'); |
| const reportDisables = require('./reportDisables.cjs'); |
| const unscopedDisables = require('./unscopedDisables.cjs'); |
| |
| /** @import {Result} from 'postcss' */ |
| /** @import {GetLintSourceOptions as Options, InternalApi as StylelintInternalApi, PostcssResult, StylelintPostcssResult} from 'stylelint' */ |
| |
| /** |
| * Run stylelint on a PostCSS Result, either one that is provided |
| * or one that we create |
| * @param {StylelintInternalApi} stylelint |
| * @param {Options} options |
| * @returns {Promise<PostcssResult>} |
| */ |
| async function lintSource(stylelint, options = {}) { |
| if (!options.filePath && options.code === undefined && !options.existingPostcssResult) { |
| return Promise.reject(new Error('You must provide filePath, code, or existingPostcssResult')); |
| } |
| |
| const isCodeNotFile = options.code !== undefined; |
| |
| const inputFilePath = isCodeNotFile ? options.codeFilename : options.filePath; |
| |
| if (inputFilePath !== undefined && !path.isAbsolute(inputFilePath)) { |
| if (isCodeNotFile) { |
| return Promise.reject(new Error('codeFilename must be an absolute path')); |
| } |
| |
| return Promise.reject(new Error('filePath must be an absolute path')); |
| } |
| |
| const isIgnored = await isPathIgnored(stylelint, inputFilePath).catch((err) => { |
| if (isCodeNotFile && isPathNotFoundError(err)) return false; |
| |
| throw err; |
| }); |
| |
| if (isIgnored) { |
| return createEmptyPostcssResult(inputFilePath, options.existingPostcssResult); |
| } |
| |
| const configForFile = await getConfigForFile({ |
| stylelint, |
| searchPath: inputFilePath, |
| filePath: inputFilePath, |
| }); |
| |
| if (!configForFile) { |
| return Promise.reject(new Error('Config file not found')); |
| } |
| |
| const config = configForFile.config; |
| const existingPostcssResult = options.existingPostcssResult; |
| |
| if (options.cache) { |
| stylelint._fileCache.calcHashOfConfig(config); |
| |
| if (options.filePath && !stylelint._fileCache.hasFileChanged(options.filePath)) { |
| return createEmptyPostcssResult(inputFilePath, existingPostcssResult); |
| } |
| } |
| |
| const postcssResult = |
| existingPostcssResult || |
| (await getPostcssResult(stylelint, { |
| code: options.code, |
| codeFilename: options.codeFilename, |
| filePath: inputFilePath, |
| customSyntax: config.customSyntax, |
| })); |
| |
| const stylelintPostcssResult = Object.assign(postcssResult, { |
| stylelint: { |
| ruleSeverities: {}, |
| customMessages: {}, |
| customUrls: {}, |
| ruleMetadata: {}, |
| fixersData: {}, |
| rangesOfComputedEditInfos: [], |
| disabledRanges: {}, |
| }, |
| }); |
| |
| await lintPostcssResult(stylelint._options, stylelintPostcssResult, config); |
| |
| reportDisables(stylelintPostcssResult); |
| needlessDisables(stylelintPostcssResult); |
| invalidScopeDisables(stylelintPostcssResult); |
| descriptionlessDisables(stylelintPostcssResult); |
| unscopedDisables(stylelintPostcssResult); |
| |
| return stylelintPostcssResult; |
| } |
| |
| /** |
| * @returns {StylelintPostcssResult} |
| */ |
| function createEmptyStylelintPostcssResult() { |
| return { |
| ruleSeverities: {}, |
| customMessages: {}, |
| customUrls: {}, |
| ruleMetadata: {}, |
| fixersData: {}, |
| rangesOfComputedEditInfos: [], |
| disabledRanges: {}, |
| ignored: true, |
| stylelintError: false, |
| stylelintWarning: false, |
| }; |
| } |
| |
| /** |
| * @param {string | undefined} filePath |
| * @param {Options['existingPostcssResult']} existingPostcssResult |
| * @returns {PostcssResult} |
| */ |
| function createEmptyPostcssResult(filePath, existingPostcssResult) { |
| return Object.assign(existingPostcssResult ?? postcss().process('', { from: filePath }).sync(), { |
| stylelint: createEmptyStylelintPostcssResult(), |
| }); |
| } |
| |
| module.exports = lintSource; |