elearning/Frontend-Learner/node_modules/@nuxt/eslint-config/dist/chunks/formatters.mjs
2026-01-13 10:48:02 +07:00

235 lines
5.6 KiB
JavaScript

import { isPackageExists } from 'local-pkg';
import { e as ensurePackages, i as interopDefault, p as parserPlain } from '../shared/eslint-config.CePp8IWi.mjs';
import { b as GLOB_CSS, c as GLOB_POSTCSS, d as GLOB_SCSS, e as GLOB_LESS, f as GLOB_HTML, g as GLOB_XML, h as GLOB_SVG, i as GLOB_MARKDOWN, j as GLOB_GRAPHQL } from '../shared/eslint-config.CUi9znUC.mjs';
import 'eslint-flat-config-utils';
import 'eslint-config-flat-gitignore';
import 'pathe';
import 'node:process';
import '@nuxt/eslint-plugin';
import '@eslint/js';
import 'globals';
function mergePrettierOptions(options, overrides = {}) {
return {
...options,
...overrides,
plugins: [
...overrides.plugins || [],
...options.plugins || []
]
};
}
async function formatters(options = {}, stylistic) {
if (!options)
return [];
if (options === true) {
const isPrettierPluginXmlInScope = isPackageExists("@prettier/plugin-xml");
options = {
css: true,
graphql: true,
html: true,
// Markdown is disabled by default as many Nuxt projects use MDC with @nuxt/content,
// where Prettier doesn't fully understand.
markdown: false,
svg: isPrettierPluginXmlInScope,
xml: isPrettierPluginXmlInScope
};
}
await ensurePackages([
"eslint-plugin-format",
options.xml || options.svg ? "@prettier/plugin-xml" : void 0
]);
const {
indent,
quotes,
semi
} = {
indent: 2,
quotes: "single",
semi: false,
...stylistic
};
const prettierOptions = Object.assign(
{
endOfLine: "auto",
printWidth: 120,
semi,
singleQuote: quotes === "single",
tabWidth: typeof indent === "number" ? indent : 2,
trailingComma: "all",
useTabs: indent === "tab"
},
options.prettierOptions || {}
);
const prettierXmlOptions = {
xmlQuoteAttributes: "double",
xmlSelfClosingSpace: true,
xmlSortAttributesByKey: false,
xmlWhitespaceSensitivity: "ignore"
};
const dprintOptions = Object.assign(
{
indentWidth: typeof indent === "number" ? indent : 2,
quoteStyle: quotes === "single" ? "preferSingle" : "preferDouble",
useTabs: indent === "tab"
},
options.dprintOptions || {}
);
const pluginFormat = await interopDefault(import('eslint-plugin-format'));
const configs = [
{
name: "nuxt/formatter/setup",
plugins: {
format: pluginFormat
}
}
];
if (options.css) {
configs.push(
{
files: [GLOB_CSS, GLOB_POSTCSS],
languageOptions: {
parser: parserPlain
},
name: "nuxt/formatter/css",
rules: {
"format/prettier": [
"error",
mergePrettierOptions(prettierOptions, {
parser: "css"
})
]
}
},
{
files: [GLOB_SCSS],
languageOptions: {
parser: parserPlain
},
name: "nuxt/formatter/scss",
rules: {
"format/prettier": [
"error",
mergePrettierOptions(prettierOptions, {
parser: "scss"
})
]
}
},
{
files: [GLOB_LESS],
languageOptions: {
parser: parserPlain
},
name: "nuxt/formatter/less",
rules: {
"format/prettier": [
"error",
mergePrettierOptions(prettierOptions, {
parser: "less"
})
]
}
}
);
}
if (options.html) {
configs.push({
files: [GLOB_HTML],
languageOptions: {
parser: parserPlain
},
name: "nuxt/formatter/html",
rules: {
"format/prettier": [
"error",
mergePrettierOptions(prettierOptions, {
parser: "html"
})
]
}
});
}
if (options.xml) {
configs.push({
files: [GLOB_XML],
languageOptions: {
parser: parserPlain
},
name: "nuxt/formatter/xml",
rules: {
"format/prettier": [
"error",
mergePrettierOptions({ ...prettierXmlOptions, ...prettierOptions }, {
parser: "xml",
plugins: [
"@prettier/plugin-xml"
]
})
]
}
});
}
if (options.svg) {
configs.push({
files: [GLOB_SVG],
languageOptions: {
parser: parserPlain
},
name: "nuxt/formatter/svg",
rules: {
"format/prettier": [
"error",
mergePrettierOptions({ ...prettierXmlOptions, ...prettierOptions }, {
parser: "xml",
plugins: [
"@prettier/plugin-xml"
]
})
]
}
});
}
if (options.markdown) {
const formater = options.markdown === true ? "prettier" : options.markdown;
configs.push({
files: [GLOB_MARKDOWN],
languageOptions: {
parser: parserPlain
},
name: "nuxt/formatter/markdown",
rules: {
[`format/${formater}`]: [
"error",
formater === "prettier" ? mergePrettierOptions(prettierOptions, {
embeddedLanguageFormatting: "off",
parser: "markdown"
}) : {
...dprintOptions,
language: "markdown"
}
]
}
});
}
if (options.graphql) {
configs.push({
files: [GLOB_GRAPHQL],
languageOptions: {
parser: parserPlain
},
name: "nuxt/formatter/graphql",
rules: {
"format/prettier": [
"error",
mergePrettierOptions(prettierOptions, {
parser: "graphql"
})
]
}
});
}
return configs;
}
export { formatters };