createStylelint.js 2.4 KB

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