|
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- '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);
- };
|