@sap/cds-dk
Version:
Command line client and development toolkit for the SAP Cloud Application Programming Model
66 lines (55 loc) • 2 kB
JavaScript
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)
}
}