UNPKG

2.41 kBJavaScriptView Raw
1'use strict';
2
3const _ = require('lodash');
4const augmentConfig = require('./augmentConfig');
5const createStylelintResult = require('./createStylelintResult');
6const getConfigForFile = require('./getConfigForFile');
7const getPostcssResult = require('./getPostcssResult');
8const isPathIgnored = require('./isPathIgnored');
9const lintSource = require('./lintSource');
10const path = require('path');
11const { cosmiconfig } = require('cosmiconfig');
12
13const IS_TEST = process.env.NODE_ENV === 'test';
14const STOP_DIR = IS_TEST ? path.resolve(__dirname, '..') : undefined;
15
16/** @typedef {import('stylelint').StylelintInternalApi} StylelintInternalApi */
17
18/**
19 * The stylelint "internal API" is passed among functions
20 * so that methods on a stylelint instance can invoke
21 * each other while sharing options and caches
22 * @param {import('stylelint').StylelintStandaloneOptions} options
23 * @returns {StylelintInternalApi}
24 */
25module.exports = function(options = {}) {
26 /** @type {Partial<StylelintInternalApi>} */
27 const stylelint = { _options: options };
28
29 // Two separate explorers so they can each have their own transform
30 // function whose results are cached by cosmiconfig
31 // @ts-ignore TODO TYPES found out which cosmiconfig types are valid
32 stylelint._fullExplorer = cosmiconfig('stylelint', {
33 transform: _.partial(
34 augmentConfig.augmentConfigFull,
35 /** @type{StylelintInternalApi} */ (stylelint),
36 ),
37 stopDir: STOP_DIR,
38 });
39 // @ts-ignore TODO TYPES found out which cosmiconfig types are valid
40 stylelint._extendExplorer = cosmiconfig(null, {
41 transform: _.partial(
42 augmentConfig.augmentConfigExtended,
43 /** @type{StylelintInternalApi} */ (stylelint),
44 ),
45 stopDir: STOP_DIR,
46 });
47
48 stylelint._specifiedConfigCache = new Map();
49 stylelint._postcssResultCache = new Map();
50 stylelint._createStylelintResult = _.partial(
51 createStylelintResult,
52 /** @type{StylelintInternalApi} */ (stylelint),
53 );
54 stylelint._getPostcssResult = _.partial(
55 getPostcssResult,
56 /** @type{StylelintInternalApi} */ (stylelint),
57 );
58 stylelint._lintSource = _.partial(lintSource, /** @type{StylelintInternalApi} */ (stylelint));
59
60 stylelint.getConfigForFile = _.partial(
61 getConfigForFile,
62 /** @type{StylelintInternalApi} */ (stylelint),
63 );
64 stylelint.isPathIgnored = _.partial(
65 isPathIgnored,
66 /** @type{StylelintInternalApi} */ (stylelint),
67 );
68
69 return /** @type{StylelintInternalApi} */ (stylelint);
70};