You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
88 lines
2.9 KiB
88 lines
2.9 KiB
'use strict'; |
|
|
|
const _ = require('lodash'); |
|
const augmentConfig = require('./augmentConfig'); |
|
const createStylelintResult = require('./createStylelintResult'); |
|
const getConfigForFile = require('./getConfigForFile'); |
|
const getPostcssResult = require('./getPostcssResult'); |
|
const isPathIgnored = require('./isPathIgnored'); |
|
const lintSource = require('./lintSource'); |
|
const path = require('path'); |
|
const { cosmiconfig } = require('cosmiconfig'); |
|
|
|
const IS_TEST = process.env.NODE_ENV === 'test'; |
|
const STOP_DIR = IS_TEST ? path.resolve(__dirname, '..') : undefined; |
|
|
|
/** @typedef {import('stylelint').StylelintInternalApi} StylelintInternalApi */ |
|
|
|
/** |
|
* The stylelint "internal API" is passed among functions |
|
* so that methods on a stylelint instance can invoke |
|
* each other while sharing options and caches |
|
* @param {import('stylelint').StylelintStandaloneOptions} options |
|
* @returns {StylelintInternalApi} |
|
*/ |
|
module.exports = function (options = {}) { |
|
/** @type {Partial<StylelintInternalApi>} */ |
|
const stylelint = { _options: options }; |
|
|
|
options.configOverrides = options.configOverrides || {}; |
|
|
|
if (options.ignoreDisables) { |
|
options.configOverrides.ignoreDisables = options.ignoreDisables; |
|
} |
|
|
|
if (options.reportNeedlessDisables) { |
|
options.configOverrides.reportNeedlessDisables = options.reportNeedlessDisables; |
|
} |
|
|
|
if (options.reportInvalidScopeDisables) { |
|
options.configOverrides.reportInvalidScopeDisables = options.reportInvalidScopeDisables; |
|
} |
|
|
|
if (options.reportDescriptionlessDisables) { |
|
options.configOverrides.reportDescriptionlessDisables = options.reportDescriptionlessDisables; |
|
} |
|
|
|
// Two separate explorers so they can each have their own transform |
|
// function whose results are cached by cosmiconfig |
|
stylelint._fullExplorer = cosmiconfig('stylelint', { |
|
// @ts-ignore TODO TYPES found out which cosmiconfig types are valid |
|
transform: _.partial( |
|
augmentConfig.augmentConfigFull, |
|
/** @type{StylelintInternalApi} */ (stylelint), |
|
), |
|
stopDir: STOP_DIR, |
|
}); |
|
// @ts-ignore TODO TYPES found out which cosmiconfig types are valid |
|
stylelint._extendExplorer = cosmiconfig(null, { |
|
transform: _.partial( |
|
augmentConfig.augmentConfigExtended, |
|
/** @type{StylelintInternalApi} */ (stylelint), |
|
), |
|
stopDir: STOP_DIR, |
|
}); |
|
|
|
stylelint._specifiedConfigCache = new Map(); |
|
stylelint._postcssResultCache = new Map(); |
|
stylelint._createStylelintResult = _.partial( |
|
createStylelintResult, |
|
/** @type{StylelintInternalApi} */ (stylelint), |
|
); |
|
stylelint._getPostcssResult = _.partial( |
|
getPostcssResult, |
|
/** @type{StylelintInternalApi} */ (stylelint), |
|
); |
|
stylelint._lintSource = _.partial(lintSource, /** @type{StylelintInternalApi} */ (stylelint)); |
|
|
|
stylelint.getConfigForFile = _.partial( |
|
getConfigForFile, |
|
/** @type{StylelintInternalApi} */ (stylelint), |
|
); |
|
stylelint.isPathIgnored = _.partial( |
|
isPathIgnored, |
|
/** @type{StylelintInternalApi} */ (stylelint), |
|
); |
|
|
|
return /** @type{StylelintInternalApi} */ (stylelint); |
|
};
|
|
|