@spot-meetings/code-style
Version:
Spot's Code Style guide (ESLint, Prettier)
102 lines (83 loc) • 2.2 kB
JavaScript
/* eslint-disable no-console */
const readline = require('readline')
const path = require('path')
const fs = require('fs')
const rl = readline.createInterface({
output: process.stdout,
input: process.stdin,
})
const question = (message) =>
new Promise((resolve) => {
rl.question(message, resolve)
})
const writeDefaultConfigs = () => {
console.log('Writing default configs...')
try {
fs.writeFileSync(
'.eslintrc',
`${JSON.stringify(
{
extends: '@spot-meetings/eslint-config/javascript',
},
null,
2,
)}\n`,
)
fs.writeFileSync(
'.prettierrc.js',
`module.exports = require('@spot-meetings/code-style/prettier')\n`,
)
} catch (err) {
console.error(err)
}
}
const writeSourceConfigs = (src) => {
console.log(`Writing TypeScript config on "${src}"...`)
try {
// eslint-disable-next-line security/detect-non-literal-fs-filename
fs.writeFileSync(
path.join(src, '.eslintrc'),
`${JSON.stringify(
{
extends: '@spot-meetings/eslint-config/typescript',
parserOptions: {
project: './tsconfig.json',
},
},
null,
2,
)}\n`,
)
} catch (err) {
console.error(err)
}
}
const main = async () => {
const shouldWriteBaseConfigs = await question(
'Overwrite any existing .eslintrc and .prettier.js files with the default configs? (Y/n) ',
)
if (!shouldWriteBaseConfigs || /y/i.test(shouldWriteBaseConfigs)) {
writeDefaultConfigs()
} else {
console.log('Skipping base configs install.')
}
const shouldWriteSourceConfigs = await question(
'Add TypeScript config to your source folder? (Y/n) ',
)
if (!shouldWriteSourceConfigs || /y/i.test(shouldWriteSourceConfigs)) {
const src = await question('[CAUTION!] Enter your source folder: ')
if (!src) {
console.warn('No source folder was entered. Skipping.')
}
writeSourceConfigs(src)
} else {
console.log('Skipping source config install.')
}
rl.on('close', () => {
console.log('\nHappy coding!')
process.exit(0)
})
rl.close()
}
main()