| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- import { isAbsolute, join } from 'node:path';
- import process from 'node:process';
- import createStylelint from './createStylelint.mjs';
- import { isString } from './utils/validateTypes.mjs';
- import lintSource from './lintSource.mjs';
- /** @import {Config as StylelintConfig, PostcssPluginOptions} from 'stylelint' */
- /**
- * @type {import('postcss').PluginCreator<PostcssPluginOptions>}
- */
- export default function postcssPlugin(options = {}) {
- const [cwd, tailoredOptions] = isConfig(options)
- ? [process.cwd(), { config: options }]
- : [('cwd' in options && isString(options.cwd) && options.cwd) || process.cwd(), options];
- const stylelint = createStylelint(tailoredOptions);
- return {
- postcssPlugin: 'stylelint',
- /**
- * @param {import('postcss').Root} root
- * @param {import('postcss').Helpers} helpers
- * @returns {Promise<void>}
- */
- async Once(root, { result }) {
- let filePath = root.source && root.source.input.file;
- if (filePath && !isAbsolute(filePath)) {
- filePath = join(cwd, filePath);
- }
- await lintSource(stylelint, {
- filePath,
- existingPostcssResult: result,
- });
- },
- };
- }
- postcssPlugin.postcss = true;
- /**
- * @param {PostcssPluginOptions} options
- * @returns {options is StylelintConfig}
- */
- function isConfig(options) {
- return 'rules' in options;
- }
|