UNPKG

@nx/nuxt

Version:

The Nuxt plugin for Nx contains executors and generators for managing Nuxt applications and libraries within an Nx workspace. It provides: - Integration with libraries such as Vitest, Playwright, Cypress, and Storybook. - Generators for applications, l

90 lines (89 loc) 3.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.addLinting = addLinting; const eslint_1 = require("@nx/eslint"); const versions_1 = require("@nx/eslint/src/utils/versions"); const path_1 = require("nx/src/utils/path"); const devkit_1 = require("@nx/devkit"); const eslint_file_1 = require("@nx/eslint/src/generators/utils/eslint-file"); const versions_2 = require("./versions"); const flat_config_1 = require("@nx/eslint/src/utils/flat-config"); // TODO(colum): Look into the recommended set up using `withNuxt` inside eslint.config.mjs. https://eslint.nuxt.com/packages/config async function addLinting(host, options) { const tasks = []; if (options.linter === 'eslint') { const lintTask = await (0, eslint_1.lintProjectGenerator)(host, { linter: options.linter, project: options.projectName, tsConfigPaths: [(0, path_1.joinPathFragments)(options.projectRoot, 'tsconfig.json')], unitTestRunner: options.unitTestRunner, skipFormat: true, rootProject: options.rootProject, addPlugin: true, }); tasks.push(lintTask); const devDependencies = { '@nuxt/eslint-config': versions_2.nuxtEslintConfigVersion, }; if ((0, eslint_file_1.isEslintConfigSupported)(host, options.projectRoot)) { editEslintConfigFiles(host, options.projectRoot); const addExtendsTask = (0, eslint_file_1.addExtendsToLintConfig)(host, options.projectRoot, ['@nuxt/eslint-config'], true); tasks.push(addExtendsTask); if ((0, flat_config_1.useFlatConfig)(host)) { (0, eslint_file_1.addOverrideToLintConfig)(host, options.projectRoot, { files: ['**/*.vue'], languageOptions: { parserOptions: { parser: '@typescript-eslint/parser' }, }, } // languageOptions is not in eslintrc format but for flat config ); devDependencies['@typescript-eslint/parser'] = versions_1.typescriptESLintVersion; } (0, eslint_file_1.addIgnoresToLintConfig)(host, options.projectRoot, [ '.nuxt/**', '.output/**', 'node_modules', ]); } const installTask = (0, devkit_1.addDependenciesToPackageJson)(host, {}, devDependencies); tasks.push(installTask); } return (0, devkit_1.runTasksInSerial)(...tasks); } function editEslintConfigFiles(tree, projectRoot) { const hasVueFiles = (o) => o.files && (Array.isArray(o.files) ? o.files.some((f) => f.endsWith('*.vue')) : o.files.endsWith('*.vue')); const addVueFiles = (o) => { if (!o.files) { o.files = ['*.vue']; } else if (Array.isArray(o.files)) { o.files.push('*.vue'); } else { o.files = [o.files, '*.vue']; } }; if ((0, eslint_file_1.lintConfigHasOverride)(tree, projectRoot, (o) => o.parserOptions && !hasVueFiles(o), true)) { (0, eslint_file_1.updateOverrideInLintConfig)(tree, projectRoot, (o) => !!o.parserOptions, (o) => { addVueFiles(o); return o; }); } else { (0, eslint_file_1.replaceOverridesInLintConfig)(tree, projectRoot, [ { files: ['*.ts', '*.tsx', '*.js', '*.jsx', '*.vue'], rules: {}, }, ]); } if ((0, eslint_file_1.lintConfigHasOverride)(tree, '', (o) => o.rules?.['@nx/enforce-module-boundaries'] && !hasVueFiles(o), true)) { (0, eslint_file_1.updateOverrideInLintConfig)(tree, '', (o) => !!o.rules?.['@nx/enforce-module-boundaries'], (o) => { addVueFiles(o); return o; }); } }