| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- // NOTICE: This file is generated by Rollup. To modify it,
- // please instead edit the ESM counterpart and rebuild with Rollup (npm run build).
- 'use strict';
- const promises = require('node:fs/promises');
- const postcss = require('postcss');
- const dynamicImport = require('./utils/dynamicImport.cjs');
- const getModulePath = require('./utils/getModulePath.cjs');
- const normalizeFixMode = require('./utils/normalizeFixMode.cjs');
- /** @import {Result, Syntax} from 'postcss' */
- /** @import {CustomSyntax, GetPostcssOptions, InternalApi as StylelintInternalApi} from 'stylelint' */
- const postcssProcessor = postcss();
- /**
- * @param {StylelintInternalApi} stylelint
- * @param {GetPostcssOptions} options
- *
- * @returns {Promise<Result>}
- */
- async function getPostcssResult(stylelint, { customSyntax, filePath, code } = {}) {
- const cached = filePath ? stylelint._postcssResultCache.get(filePath) : undefined;
- if (cached) {
- return cached;
- }
- const fix = normalizeFixMode(stylelint._options.fix);
- const syntax = await (customSyntax
- ? getCustomSyntax(customSyntax, stylelint._options.configBasedir)
- : cssSyntax(fix === 'lax'));
- const postcssOptions = {
- from: filePath,
- syntax,
- };
- /** @type {string | undefined} */
- let getCode;
- if (code !== undefined) {
- getCode = code;
- } else if (filePath) {
- getCode = await promises.readFile(filePath, 'utf8');
- }
- if (getCode === undefined) {
- throw new Error('code or filePath required');
- }
- const postcssResult = await postcssProcessor.process(getCode, postcssOptions).async();
- if (filePath) {
- stylelint._postcssResultCache.set(filePath, postcssResult);
- }
- return postcssResult;
- }
- /**
- * @param {CustomSyntax} customSyntax
- * @param {string | undefined} basedir
- * @returns {Promise<Syntax>}
- */
- async function getCustomSyntax(customSyntax, basedir) {
- if (typeof customSyntax === 'string') {
- const customSyntaxLookup = basedir ? getModulePath(basedir, customSyntax) : customSyntax;
- let resolved;
- try {
- resolved = await dynamicImport(customSyntaxLookup);
- resolved = resolved.default ?? resolved;
- } catch (error) {
- if (
- error &&
- typeof error === 'object' &&
- 'code' in error &&
- // TODO: Remove 'MODULE_NOT_FOUND' when we drop the CommonJS support.
- // See https://nodejs.org/api/errors.html#module_not_found
- (error.code === 'MODULE_NOT_FOUND' || error.code === 'ERR_MODULE_NOT_FOUND') &&
- 'message' in error &&
- typeof error.message === 'string' &&
- error.message.includes(customSyntax)
- ) {
- throw new Error(
- `Cannot resolve custom syntax module "${customSyntax}". Check that module "${customSyntax}" is available and spelled correctly.\n\nCaused by: ${error}`,
- );
- }
- throw error;
- }
- /*
- * PostCSS allows for syntaxes that only contain a parser, however,
- * it then expects the syntax to be set as the `parse` option.
- */
- if (!resolved.parse) {
- resolved = {
- parse: resolved,
- stringify: postcss.stringify,
- };
- }
- return resolved;
- }
- if (typeof customSyntax === 'object') {
- if (typeof customSyntax.parse === 'function') {
- return { ...customSyntax };
- }
- throw new TypeError(
- 'An object provided to the "customSyntax" option must have a "parse" property. Ensure the "parse" property exists and its value is a function.',
- );
- }
- throw new Error('Custom syntax must be a string or a Syntax object');
- }
- /**
- * @param {boolean} fix
- * @returns {Promise<Syntax>}
- */
- async function cssSyntax(fix) {
- const parse = await (fix ? import('postcss-safe-parser').then((m) => m.default) : postcss.parse);
- return { parse, stringify: postcss.stringify };
- }
- module.exports = getPostcssResult;
|