UNPKG

@alexlit/lint-kit

Version:

Preset of configuration files and dependencies for linting web applications (designed for Vue.js with TypeScript)

83 lines (70 loc) 1.94 kB
import { omit } from 'radash'; const DEFAULT_PLUGINS = { 'jsdoc': true, 'packagejson': true, 'pug': true, 'sh': true, 'solidity': true, 'sort-json': true, 'xml': true, }; const OPTIONAL_PLUGINS = { php: false, ruby: false, sql: false, tailwindcss: false, }; const PLUGINS = { ...DEFAULT_PLUGINS, ...OPTIONAL_PLUGINS }; /** * Create plugins config list * * @param {PLUGINS} plugins Enabled/disabled plugins list * * @returns {import('prettier').Config} Prettier configuration */ const createPluginsConfig = async (plugins = {}) => { let pluginsConfig = { plugins: [] }; const pluginEntries = Object.entries({ ...PLUGINS, ...plugins }); for (const [name, isActive] of pluginEntries) { if (isActive) { const { default: config } = await import( `@alexlit/config-prettier/plugins/${name}.js` ); if (config.plugins?.length > 0) { pluginsConfig.plugins.push(...config.plugins); } pluginsConfig = { ...pluginsConfig, ...omit(config, ['plugins']) }; } } return pluginsConfig; }; /** * Create prettier config * * @param {PLUGINS} plugins * @param {import('prettier').Config} options Prettier options * * @returns {import('prettier').Config} Prettier configuration */ export const createConfig = async (plugins = {}, options = {}) => { const pluginsConfig = await createPluginsConfig(plugins); return { bracketSameLine: false, endOfLine: 'lf', objectWrap: 'collapse', overrides: [ ...(pluginsConfig.overrides ?? []), ...(options.overrides ?? []), ], plugins: [...(pluginsConfig.plugins ?? []), ...(options.plugins ?? [])], proseWrap: 'always', quoteProps: 'consistent', singleAttributePerLine: true, singleQuote: true, tabWidth: 2, trailingComma: 'all', vueIndentScriptAndStyle: true, ...omit(pluginsConfig, ['plugins']), ...omit(options, ['plugins']), }; };