UNPKG

1.81 kBJavaScriptView Raw
1'use strict';
2
3const augmentConfig = require('./augmentConfig');
4const createStylelintResult = require('./createStylelintResult');
5const getConfigForFile = require('./getConfigForFile');
6const getPostcssResult = require('./getPostcssResult');
7const isPathIgnored = require('./isPathIgnored');
8const lintSource = require('./lintSource');
9const { cosmiconfig } = require('cosmiconfig');
10
11const IS_TEST = process.env.NODE_ENV === 'test';
12const STOP_DIR = IS_TEST ? process.cwd() : undefined;
13
14/** @typedef {import('stylelint').InternalApi} StylelintInternalApi */
15
16/**
17 * The stylelint "internal API" is passed among functions
18 * so that methods on a stylelint instance can invoke
19 * each other while sharing options and caches.
20 *
21 * @param {import('stylelint').LinterOptions} options
22 * @returns {StylelintInternalApi}
23 */
24function createStylelint(options = {}) {
25 const cwd = options.cwd || process.cwd();
26
27 /** @type {StylelintInternalApi} */
28 // @ts-expect-error -- TS2740: Type '{ _options: LinterOptions; }' is missing the following properties from type 'InternalApi'
29 const stylelint = { _options: { ...options, cwd } };
30
31 stylelint._extendExplorer = cosmiconfig('', {
32 transform: augmentConfig.augmentConfigExtended(cwd),
33 stopDir: STOP_DIR,
34 });
35
36 stylelint._specifiedConfigCache = new Map();
37 stylelint._postcssResultCache = new Map();
38 stylelint._createStylelintResult = createStylelintResult.bind(null, stylelint);
39 stylelint._getPostcssResult = getPostcssResult.bind(null, stylelint);
40 stylelint._lintSource = lintSource.bind(null, stylelint);
41
42 stylelint.getConfigForFile = getConfigForFile.bind(null, stylelint);
43 stylelint.isPathIgnored = isPathIgnored.bind(null, stylelint);
44
45 return stylelint;
46}
47
48module.exports = /** @type {typeof import('stylelint').createLinter} */ (createStylelint);