@elsikora/setup-wizard
Version:
Setup Wizard - CLI scaffolding utility
64 lines (59 loc) • 2.56 kB
JavaScript
#!/usr/bin/env node
import { LINT_STAGED_FEATURE_CONFIG } from '../../domain/constant/lint-staged-feature-config.constant.js';
import { ELintStagedFeature } from '../../domain/enum/lint-staged-feature.enum.js';
/**
* Configuration constant for lint-staged.
* Provides a template function for generating lint-staged configuration files.
*/
const LINT_STAGED_CONFIG = {
/**
* Generates a lint-staged configuration file content.
* Creates a JavaScript configuration file that dynamically applies linting tools
* based on file extensions and enabled features.
* @param features - Array of lint-staged features to enable
* @returns String content for the lint-staged configuration file
*/
template: (features) => {
const lintCommands = [];
const fileFilters = [];
if (features.includes(ELintStagedFeature.PRETTIER)) {
lintCommands.push('commands.push("prettier --write --ignore-unknown");');
}
if (features.includes(ELintStagedFeature.ESLINT)) {
const extensions = LINT_STAGED_FEATURE_CONFIG[ELintStagedFeature.ESLINT].fileExtensions;
fileFilters.push(`
const eslintFiles = files.filter((fileName) => {
const validExtensions = ${JSON.stringify(extensions)};
const fileExtension = fileName.split(".").pop();
const hasValidExtension = validExtensions.includes(fileExtension);
const hasNoExtension = !fileName.includes(".");
return hasValidExtension && !hasNoExtension;
});
if (eslintFiles.length > 0) {
commands.push(\`eslint --fix --max-warnings=0 --no-ignore \${eslintFiles.join(" ")}\`);
}`);
}
if (features.includes(ELintStagedFeature.STYLELINT)) {
const extensions = LINT_STAGED_FEATURE_CONFIG[ELintStagedFeature.STYLELINT].fileExtensions;
fileFilters.push(`
const styleFiles = files.filter((fileName) => {
const validExtensions = ${JSON.stringify(extensions)};
const fileExtension = fileName.split(".").pop();
return validExtensions.includes(fileExtension);
});
if (styleFiles.length > 0) {
commands.push(\`stylelint --fix \${styleFiles.join(" ")}\`);
}`);
}
return `export default {
"*": (files) => {
const commands = [];
${lintCommands.join("\n ")}
${fileFilters.join("\n")}
return commands;
},
};`;
},
};
export { LINT_STAGED_CONFIG };
//# sourceMappingURL=lint-staged-config.constant.js.map