Skip to content

Commit

Permalink
Merge pull request #1 from Drackin/master
Browse files Browse the repository at this point in the history
feat: add more linting options and fix bugs
  • Loading branch information
Mehmetali345Dev committed Jul 15, 2022
2 parents eab68a7 + 65b83e6 commit bb95bc9
Show file tree
Hide file tree
Showing 9 changed files with 148 additions and 21 deletions.
9 changes: 9 additions & 0 deletions extras/.eslintrc-prettier
@@ -0,0 +1,9 @@
{
"extends": [
"@antfu",
"prettier"
],
"rules": {
"indent": "error"
}
}
4 changes: 4 additions & 0 deletions extras/.jshintrc
@@ -0,0 +1,4 @@
{
"undef": true,
"unused": true
}
1 change: 1 addition & 0 deletions extras/.prettierrc
@@ -0,0 +1 @@
{}
14 changes: 14 additions & 0 deletions extras/tslint.json
@@ -0,0 +1,14 @@
{
"extends": "tslint:recommended",
"rules": {
"new-parens": true,
"no-arg": true,
"no-bitwise": true,
"no-conditional-assignment": true,
"no-consecutive-blank-lines": false,
"no-console": {
"severity": "warning",
"options": ["debug", "info", "log", "time", "timeEnd", "trace"]
}
}
}
33 changes: 25 additions & 8 deletions src/cli.ts
Expand Up @@ -4,7 +4,7 @@ import { resolve } from 'path'
import { create } from 'create-create-app'
import pc from 'picocolors'
import { getExtraModules, getUiFrameworkPackage } from './utils'
import { addExtraModules, installEslint, installUiFramework, updateNuxtConfig } from './modules'
import { addExtraModules, installLinter, installPrettier, installUiFramework, updateNuxtConfig } from './modules'

const templateRoot = resolve(__dirname, '..', 'templates')

Expand All @@ -26,25 +26,42 @@ create('create-nuxt3', {
choices: getExtraModules(),
prompt: 'if-no-arg',
},
eslint: {
linterModules: {
type: 'list',
describe: 'Select a Linter',
choices: ['None', 'ESLint', 'JSHint', 'TSLint'],
prompt: 'if-no-arg',
},
prettier: {
type: 'confirm',
describe: 'Use ESLint?',
describe: 'Use Prettier for Formatting?',
prompt: 'if-no-arg',
},
},
after: ({ answers, packageDir }) => {
// Installs Selected UI Framework if it is not None
if (answers.uiFramework !== 'None')
installUiFramework(packageDir, answers.uiFramework)

// Installs Additional Nuxt Modules
if (answers.nuxtModules)
addExtraModules(packageDir, answers.nuxtModules)
if (answers.eslint)
installEslint(packageDir)
const modules = [...answers.nuxtModules, ...answers.uiFramework === 'None' ? [] : [getUiFrameworkPackage(answers.uiFramework)]]

// Installs Selected Linter if it is not None
if (answers.linterModules !== 'None')
installLinter(packageDir, answers.linterModules as string)

// Installs Prettier if it is selected
if (answers.prettier)
installPrettier(packageDir, answers.linterModules === 'ESLint')

const modules = [...answers.nuxtModules as string[], ...answers.uiFramework === 'None' ? [] : [getUiFrameworkPackage(answers.uiFramework)]]
updateNuxtConfig(packageDir, modules)
},
caveat: ({ answers }) => {

caveat: ({ packageDir }) => {
console.log(`
${pc.green(`Change your directory to project directory with 'cd ${answers.name}' command`)}
${pc.green(`Change your directory to project directory with 'cd ${packageDir}' command`)}
${pc.yellow('Install dependencies with \'npm install\', \'yarn install\' or \'pnpm install --shamefully-hoist\'')}
${pc.yellow('And start development server with \'npm run dev\', \'yarn dev\' or \'pnpm dev\' ')}
`)
Expand Down
2 changes: 1 addition & 1 deletion src/constants.ts
Expand Up @@ -73,6 +73,6 @@ import { defineNuxtConfig } from 'nuxt'
// https://v3.nuxtjs.org/api/configuration/nuxt.config
export default defineNuxtConfig({
modules:[]
modules:[]
})
`
52 changes: 52 additions & 0 deletions src/installers.ts
@@ -0,0 +1,52 @@
import fs from 'fs'
import { resolve } from 'path'

const extrasRoot = resolve(__dirname, '..', 'extras')

export const installESLint = (packageDir: string) => {
// Parse package.json, add eslint dependencies and scripts
const packageJson = JSON.parse(fs.readFileSync(`${packageDir}/package.json`, 'utf8'))

packageJson.devDependencies.eslint = '*'
packageJson.devDependencies['@antfu/eslint-config'] = '*'
packageJson.devDependencies.typescript = '*'

// Add eslint scripts
packageJson.scripts.lint = 'eslint .'
packageJson.scripts['lint:fix'] = 'eslint . --fix'

// Save package.json and copy eslint configuration
fs.copyFileSync(`${extrasRoot}/.eslintrc`, `${packageDir}/.eslintrc`)
fs.writeFileSync(`${packageDir}/package.json`, JSON.stringify(packageJson, null, 2))
}

export const installJSHint = (packageDir: string) => {
// Parse package.json, add jshint dependencies and scripts
const packageJson = JSON.parse(fs.readFileSync(`${packageDir}/package.json`, 'utf8'))

packageJson.devDependencies.jshint = '*'
packageJson.devDependencies['@antfu/jshint-config'] = '*'
packageJson.devDependencies.typescript = '*'

// Add jshint script
packageJson.scripts.lint = 'jshint .'

// Save package.json and copy jshint configuration
fs.copyFileSync(`${extrasRoot}/.jshintrc`, `${packageDir}/.jshintrc`)
fs.writeFileSync(`${packageDir}/package.json`, JSON.stringify(packageJson, null, 2))
}

export const installTSLint = (packageDir: string) => {
// Parse package.json, add tslint dependencies and scripts
const packageJson = JSON.parse(fs.readFileSync(`${packageDir}/package.json`, 'utf8'))

packageJson.devDependencies.tslint = '*'
packageJson.devDependencies.typescript = '*'

// Add tslint script
packageJson.scripts.lint = 'tslint .'

// Save package.json and copy tslint configuration
fs.copyFileSync(`${extrasRoot}/tslint.json`, `${packageDir}/tslint.json`)
fs.writeFileSync(`${packageDir}/package.json`, JSON.stringify(packageJson, null, 2))
}
50 changes: 40 additions & 10 deletions src/modules.ts
Expand Up @@ -2,6 +2,7 @@ import fs from 'fs'
import { resolve } from 'path'
import { extraModules, nuxtConfig, uiFrameworks } from './constants'
import type { Module } from './types'
import { installESLint, installJSHint, installTSLint } from './installers'

const extrasRoot = resolve(__dirname, '..', 'extras')

Expand Down Expand Up @@ -49,20 +50,49 @@ export function addExtraModules(packageDir: string, selectedModules: any): void
sortPackageJson(packageDir)
}

export function installEslint(packageDir: string) {
// Parse package.json, add eslint dependencies and scripts
export function installLinter(packageDir: string, linterModule: string) {
// Compare linters and install the selected one
switch (linterModule.toLowerCase()) {
case 'eslint':
installESLint(packageDir)
break

case 'jshint':
installJSHint(packageDir)
break

case 'tslint':
installTSLint(packageDir)
break

default:
break
}

// Save package.json
sortPackageJson(packageDir)
}

export function installPrettier(packageDir: string, hasEslint: boolean) {
// Parse package.json, add prettier dependencies and scripts
const packageJson = JSON.parse(fs.readFileSync(`${packageDir}/package.json`, 'utf8'))

packageJson.devDependencies.eslint = '*'
packageJson.devDependencies['@antfu/eslint-config'] = '*'
packageJson.devDependencies.prettier = '*'
if (hasEslint)
packageJson.devDependencies['eslint-config-prettier'] = '*'
packageJson.devDependencies.typescript = '*'

// Add eslint scripts
packageJson.scripts.lint = 'eslint .'
packageJson.scripts['lint:fix'] = 'eslint . --fix'

// Save package.json and copy eslint configuration
fs.copyFileSync(`${extrasRoot}/.eslintrc`, `${packageDir}/.eslintrc`)
// Add prettier scripts
packageJson.scripts.format = 'prettier .'
packageJson.scripts['format:write'] = 'prettier --write .'

// Save package.json and copy prettier configuration
// And if .eslintrc exists, delete it and copy prettier configuration
fs.copyFileSync(`${extrasRoot}/.prettierrc`, `${packageDir}/.prettierrc`)
if (hasEslint && fs.existsSync(`${packageDir}/.eslintrc`))
fs.unlinkSync(`${packageDir}/.eslintrc`)
if (hasEslint)
fs.copyFileSync(`${extrasRoot}/.eslintrc-prettier`, `${packageDir}/.eslintrc`)
fs.writeFileSync(`${packageDir}/package.json`, JSON.stringify(packageJson, null, 2))
sortPackageJson(packageDir)
}
Expand Down
4 changes: 2 additions & 2 deletions templates/default/tsconfig.json
@@ -1,3 +1,3 @@
{
"extends": "./.nuxt/tsconfig.json",
}
"extends": "./.nuxt/tsconfig.json"
}

0 comments on commit bb95bc9

Please sign in to comment.