UNPKG

@sap/cds-dk

Version:

Command line client and development toolkit for the SAP Cloud Application Programming Model

66 lines (55 loc) 2 kB
const fs = require('node:fs') const path = require('node:path') const io = require('../../../lint/io') const cds = require('../../../cds') const { merge } = require('../../merge') const { dim, bold } = require('../../../util/term') const ESLINT_LANGS_FOR_FILE_TYPE = { cds: ['cds', 'csn'], csv: ['csv', 'csv (semicolon)', 'tsv', 'tab'], js: ['javascript'], ts: ['typescript'], java: ['java'] } /** * Searches for ESLint config file types (in order or precedence) * and returns corresponding directory (usually project's root dir) * https://eslint.org/docs/user-guide/configuring#configuration-file-formats * @param {string} currentDir start here * @returns {string} dir containing ESLint config file (empty if not exists) */ function getConfigPath(currentDir = '.') { let configFiles = [ 'eslint.config.js', 'eslint.config.cjs', 'eslint.config.mjs' ] for (const configFile of configFiles) { const configPath = path.join(currentDir, configFile) if (fs.existsSync(configPath) && fs.statSync(configPath).isFile()) { return configPath } } return '' } module.exports = class LintTemplate extends require('../../plugin') { static help() { return 'configure cds lint' } async run() { // Require local ESLint plugin installation and corresponding config await this.#addEslintPluginConfig() // Generate VS Code extension settings const extensions = new Set(Object.values(ESLINT_LANGS_FOR_FILE_TYPE).flat()) await io.sanitizeVscodeSettings( path.join(cds.root, '.vscode/settings.json'), Array.from(extensions) ) await merge(path.join(__dirname, 'files', 'package.json')).into('package.json') console.log('\n', dim('Make sure to also run ' + bold('npm i') + dim(' to install the newly added dependencies.'))) } async #addEslintPluginConfig() { const configPath = getConfigPath(cds.root) || path.join(cds.root, 'eslint.config.mjs') await io.sanitizeEslintConfig(configPath) } }